Otázka: Keď je počítač dlhší čas spustený alebo sa prebúdza z režimu spánku, písmo sa stratí v ponuke Štart
Keď je počítač dlhší čas spustený alebo sa prebúdzate z režimu spánku, ponuka Štart vyzerá takto.
Ako to opravím? Pomôž mi prosím..
Odpoveď: už preinštalovaný operačný systém a aktualizovaný (
Otázka: Ako uvediem počítač do režimu spánku S1 („pohotovostný režim“)?
Ani na stacionárnom počítači, ani na prenosnom počítači nemôžem prísť na to, ako prepnúť počítač do režimu spánku S1.
Výsledok spustenia „powercfg / a“
V tomto systéme sú k dispozícii nasledujúce stavy hibernácie:
Pohotovostný režim (S3)
V tomto systéme nie sú k dispozícii nasledujúce stavy hibernácie:
Pohotovostný režim (S1)
Pohotovostný režim (S2)
Firmvér systému nepodporuje pohotovostný režim.
Hibernácia
Hibernácia nie je povolená.
Pohotovostný režim (pripojený)
Firmvér systému nepodporuje pohotovostný režim.
Hybridný režim spánku
Rýchly štart
Hibernácia nie je k dispozícii.
Odpoveď: Nechajte počítač niekoľko minút nečinný, potom ho presuňte do režimu spánku a prebudte ho.
V denníku udalostí:
Action => vytvoriť vlastné zobrazenie
V položke dátumu nastavte napríklad dvojminútový interval a sledujte, čo sa stalo.
Nemám už žiadne nápady.
Skontrolujte ovládače a zariadenia pripojené k počítaču
Otázka: Vstáva o 4:00
Takmer každú noc sa prebúdza počítač a prebúdza ma.
v správcovi zariadení, sieťové adaptéry, zrušil začiarkavacie políčko „Zobuď sa s kúzelnými paketmi“.
deaktivoval časovače prebudenia v nastaveniach napájania.
na príkazovom riadku to ukazuje príkaz powercfg / waketimers.
c: \> powercfg / waketimers
Časovač nastavený starším volajúcim jadra platí 1. septembra 2016 do 4:14:46.
Príčina:
Pomoc. Kto je na vine a čo robiť?
Odpoveď: nakoniec vyliečil túto chorobu:
Ovládací panel -> Zabezpečenie a údržba -> Údržba -> Automatická údržba -> Zmeniť nastavenia údržby -> zrušte začiarknutie políčka „Povoliť úlohe údržby prebudiť počítač ...“
Otázka: Počítač sa v noci spontánne zapne
Naposledy (asi 1 ... 2 mesiace), asi 30 ... 60 minút po prepnutí počítača do režimu spánku (aby ste mohli pokračovať v práci ráno od momentu, kedy bol prerušený), sa spontánne zapne . Prácu končím asi o 12 v noci, t.j. k zapnutiu dôjde o 0:30 ... 1:00 hod. Monitor však zostáva tmavý. Vstanem z postele, pohnem myšou - monitor sa zapne, vstúpim do profilu v normálnom režime, vrátim ho späť do režimu spánku - dnes v noci sa už viac nezapne.
Na počítači Win7 je rezidentný antivírus MS Cecurity Esentials. Aktuálne (čerstvo stiahnuté) vytvrdzovacie nástroje mbar a DrWeb Cureit som spustil niekoľkokrát - narazili na niekoľko byakov, ale stále zostala spontánna aktivácia. Vyzerá to ako vírus, ktorý spája môj počítač s útokmi DDOS. Navyše, z času na čas Google zablokuje prístup kvôli podozrivému prenosu pochádzajúcemu z mojej IP. Deje sa to už dlho (viac ako rok), ale spontánny štart počítača som zaznamenal len nedávno.
Otázka skutočne znie: ak je problém známy a je relatívne ľahké ho odstrániť, stiahnem si odporúčaný softvér, naskenujem ho a zverejním. Ak je problém komplikovanejší, potom neoklamem seba ani miestneho guru a hlúpo prestavím systém.
Odpoveď: Sokoliar Niečomu som celkom nerozumel ...
Správa od Sokoliar
po prepnutí počítača do režimu spánku ... sa spontánne zapne
Spánok a hibernácia v 7 sú úplne odlišné veci. Ak chcete prepnúť do režimu spánku, stačí stlačiť tlačidlo Spánok na klávesnici. Ak kliknete na tlačidlo Štart a umiestnite kurzor myši na šípku vedľa položky Vypnúť, zobrazí sa ponuka, v ktorej je aj režim dlhodobého spánku. a hibernácia. Počas hibernácie je počítač odpojený od zdroja napájania rovnakým spôsobom ako pri vypnutí, ale keď počítač zapnete, môžete začať pracovať rovnako ako po režime spánku.
Ale pýtaš sa na niečo iné. Skontrolovali ste Plánovač úloh?
Otázka: Počítač sa v noci prebúdza zo spánku
Dobrý deň všetkým. Tento problém ma už dostal. Samotný počítač v noci prejde z režimu spánku, je to Windows 10, predtým bolo 7, nebol taký problém, takže som si vybral túto konkrétnu časť.
Čo sa už stalo pred 2 dňami:
1. V prehliadači udalostí som našiel dôvod: Časovač - Spustí sa naplánovaná úloha „NT TASK \ Microsoft \ Windows \ UpdateOrchestrator \ Reboot“, ktorá požiada počítač, aby sa prebral z režimu spánku.
Išiel som do Plánovača úloh, našiel som túto úlohu a zrušil začiarkavacie políčko z položky: Podmienky - Na dokončenie úlohy zobudte počítač.
2. Išiel som na powercfg.cpl - Nastavenia schémy napájania - Zmeniť pokročilé nastavenia napájania - Spánok - Povoliť časovače prebudenia - VYPNÚŤ.
Dnes v noci sa situácia opakovala, ale pri sledovaní udalostí som našiel iba:
Systém ukončil režim hibernácie.
Čas spánku: 2016-10-29T21: 38: 38,657073700Z
Čas prebudenia: 2016-10-29T21: 58: 34,625754700Z
Výstupný zdroj: Žiadne údaje
3. V správcovi zariadení som zrušil začiarkavacie políčko „umožniť tomuto zariadeniu prebudiť počítač z pohotovostného režimu“ z myši, klávesnice, sieťovej karty a kdekoľvek, kde som to našiel ...
Pomôcť vyriešiť tento problém Už neviem, kde mám kopať ...
Odpoveď:
Správa od GoLeMjkeee
Náklady denne od 2 do 00
Zmeniť na denné.
Správa od GoLeMjkeee
ale kliešť .... nestojí to za to.
Je taká, má charakter.
Otázka: Ako odstrániť obrazovku pomocou tlačidla „Prihlásiť sa“ pri ukončení režimu spánku?
Windows 10 Pro 1607.
Keď ukončíte režim spánku, systém Windows vás požiada o stlačenie klávesu „Enter“. Po prebudení sa objaví modrá obrazovka s nápisom používateľského mena a pod ním tlačidlo „Prihlásiť sa“. Heslo nie je nastavené, používateľ je jediný v systéme, ktorý má práva správcu. Pri načítaní je všetko v poriadku, žiadne obrazovky ani kliknutia na tlačidlá, iba pracovná plocha.
V Možnosti-Účty Záznamy- parametre neexistuje žiadny záznam „Vstup je potrebný“.
V okne Účty používateľov, na karte Používatelia nie je začiarknuté políčko „Vyžadovať používateľské meno a heslo“.
V nastaveniach plánu napájania nie je žiadna položka „Vyžadovať heslo pri prebudení“.
Ako môžem odstrániť tlačidlo „Enter“ pri ukončení režimu spánku, aby počítač automaticky spustil pracovnú plochu bez tohto okna?
Odpoveď: odstrániť hibernáciu
Otázka: Windows 8.1 sa v režime spánku vypne
Ahoj.
Mám problém s hibernáciou. Počítač sa počas spánku úplne vypne. Títo. sila úplne zmizne. Predtým žiarovka na systémovej jednotke blikala v pražci, teraz myš tiež úplne „vybledne“ s usb, klávesnica zhasne a dá sa zapnúť iba tlačidlom napájania a všetky infa sa samozrejme neuložia.
Čítal som veľa tém na internete, ale ani jeden problém nie je podobný tomu môjmu.
Hneď napíšem charakteristiku PC: základná doska ASUS p8h67, video Radeon HD7850 (asus), intel i5 2550k, 8gb RAM, SSD Silicon Power s55 120gb, HDD WD 500gb.
Nainštalovaný Windows 8.1 stojí už veľmi dlho a hibernácia fungovala tak, ako by mala. Akonáhle prestal fungovať, už ani presne neviem, prečo a po akej (nejakej akcii) prestal fungovať. Nič také som nenainštaloval, nezdalo sa, že by som aktualizoval ovládač.
Často zo zvyku, namiesto aby som ho vypol, stlačil som spánok a raz to fungovalo a fungovalo niekoľko dní, ale časom to prestalo fungovať.
Skúsil som aktualizovať alebo odinštalovať ovládače. Pokúsil som sa odpojiť nepotrebné zariadenia od počítača (no, nikdy neviete). Pred spaním som vypol rôzne programy. Nič nepomáhalo.
Na internete som našiel jediné informácie, ktoré sú úplne rovnaké ako moje (bod 8):
Samozrejme, nemohol som nainštalovať ovládače, rôzne platformy. To isté som pre seba nenašiel.
Nechcem preinštalovať OS. všetko (okrem toho spiaceho) funguje dobre.
Nejaké nápady, čo by mohlo byť zle?
Pridané po 17 minútach
Zabudli ste napísať, čo sa BIOS resetuje a aktualizuje.
Odpoveď: potom skontroluj buď BP alebo matku. Programovo sme zapli režim spánku a hibernácie powercfg / h.
Ďalšou možnosťou je skontrolovať (nahradiť). hiberfil.sys - je zodpovedný za hibernáciu.
Otázka: Hibernujte v systéme Windows 8
po opustení spánku režim Windows 8 sa začne reštartovať a po načítaní okien zlyhá nasledujúca správa
povedz mi, ako sa s tým vysporiadať?
Odpoveď:
Správa od azat145
po ukončení režimu dlhodobého spánku sa Windows 8 reštartuje
Najprv.
Neskôr.
Otázka: Hybridný spánok alebo hibernácia? Čo je vhodnejšie na pracovnej ploche?
Otázka je vo všeobecnosti v názve. Ako som pochopil z vyhľadávača, respektíve z rovnakého článku skopírovaného na všetky stránky, výhoda hybridného režimu spánku je iba v rýchlosti zapnutia, prebúdzania, dalo by sa povedať. A ak chcem na svojom počítači so systémom Windows 7 x64 používať režim hibernácie, existujú úskalia? Potrebujem len vypnúť napájanie a je lepšie to nerobiť v režime hybridného spánku. Ďakujem všetkým, ktorí odpovedajú
Odpoveď: Dnes som to čítal. Dobre, podľa môjho názoru neexistuje iná odpoveď na moju otázku ako krátky briefing od spoločnosti Microsoft. Potom sa podelím o svoje zistenia (pre tých, ktorí na podobnú otázku spadajú do tejto témy).
Takže:
klady Režim hybridného spánku: 1. Rýchle spustenie, nie je potrebné úplne vypnúť počítač;
Mínusy: 1. Načíta pevný disk (podľa jedného moderátora zo sekcie Windows 7 na našom fóre); 2. Nevypína sa úplne, pokračuje v spotrebe prúdu, aj keď trochu (aj keď pre niektorých je táto položka plus)
Hibernácia je skrátka potrebná, ak sa chcete neustále vypínať zo siete, ale nechcete dlhodobo načítať / vypínať OS.
Režim hybridného spánku - pre tých, ktorí sú spokojní s počítačom, ktorý je neustále v sieti.
Otázka: Notebook sa predtým vypínal pri štarte, teraz je v režime spánku
Môj prenosný počítač DELL INSPIRON 3521 s Windows 8.1 sa pri štarte vypínal (zobrazilo sa logo DELL - vypnutie - znova zapnúť a normálna práca). Aktualizoval som systém na 10k, nepomohlo to. Nosil som ho v stredisku horských služieb, známom v meste a ospevovanom - tam notebook bezpečne odpočíval 2 týždne pred ľudskou pozornosťou. Keď som to vzal, vyriešil som problém vypnutím rýchleho spustenia a na oslavu som sa vrátil k 8.1.
Uplynul mesiac a teraz, keď zatvorím veko prenosného počítača, prejde do režimu spánku (ako v nastaveniach), ale po 20 minútach alebo o niečo viac sa úplne vypne (predtým to tak nebolo nastavenia napájania sa nezmenili). Pri zapnutí situácia, ktorú som popísal vyššie: zapnutie - logo - vypnutie. Normálna prevádzka po reštarte. Všetky ovládače sú aktuálne. V čom môže byť problém a ako ho opraviť? Škoda toho chudobného - celkovo rok a pol, ale mám diplom a štátne osvedčenia - teraz to nemôžem nosiť okolo majstrov ...
Odpoveď: Ako chceš aby to fungovalo Osobne používam hibernáciu, nie hibernáciu, prechod do hibernácie je povolený aj v nečinnosti, nastavenia v prílohe
Prenos nastavení napájania
V mojom hlavnom prenosnom počítači sa často vyskytujú rôzne problémy s napájaním, čo sa dá vysvetliť prácou v zasvätených zostavách. Avšak aj pri stabilnom vydaní 1803 som si všimol, že môj systém prestal spať. V takom prípade sa monitor po určenom čase vypol, čo naznačovalo správne určenie stavu nečinnosti systémom.
Nastavil som malé obdobie prechodu do režimu spánku, 1-2 minúty, a začal som diagnostikovať.
Kontrola požiadaviek na subsystém napájania z aplikácií a ovládačov
Prvým krokom je pozrieť sa dovnútra powercfg, ktorý bráni operačnému systému zaspať. Procesy a ovládače pristupujúce k subsystému napájania je možné vidieť v príkazovom riadku ako správca:
Powercfg -žiadosti
Ihneď vidíte, že požiadavka na SYSTÉM pochádza z DRIVER - v tomto prípade Realtek používa audio stream.
Zoznam môže obsahovať aj WebRTC z prehliadača Chrome a bezprostredne po reštarte systému môžete vidieť žiadosti o optimalizáciu sťahovania, index vyhľadávania, ktoré však rýchlo zmiznú. Do zoznamu vylúčení môžete pridať proces alebo ovládač a nebude vám to brániť v spánku.
Powercfg -požaduje nahradenie OVLÁDAČA „Realtek High Definícia zvuku(HDAUDIO \ FUNC_01 & VEN_10EC & DEV_0269 & SUBSYS_17AA2204 & REV_1002 \ 4 & d00657 & 0 & 0001) "SYSTÉM
Príkaz znie ako „ignorovať požiadavku DRIVER [úplné meno ovládača] na SYSTÉM“.
Zoznam vylúčení je uložený v kľúči databázy Registry
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ PowerRequestOverride
a je vydaný príkazom
Powercfg -požaduje prepísanie
Pre istotu som reštartoval, ale systém odmietol spať. Po skontrolovaní výnimiek a zoznamu žiadostí som zistil, že ovládač Realtek naďalej používal zvukový stream, aj keď bol uvrhnutý do výnimiek.
Trochu som tancoval s tamburínou okolo výnimiek, ale neuspel som. Rýchle googlovanie potvrdilo, že v niektorých prípadoch nefungovali. To je typické pre staršie otázky, ale toto bol iný prípad a nie som prvý, komu sa to stalo.
Nakoniec som odstránil Realtek zo zoznamu. Položky môžete odstrániť v editore databázy Registry alebo konzole. Príkaz je takmer rovnaký ako pri pridávaní, len neindikuje, kam požiadavka smeruje, t.j. v tomto prípade nie je na konci príkazu SYSTÉM:
Powercfg -požaduje overenie ovládača „Realtek High Definition Audio (HDAUDIO \ FUNC_01 & VEN_10EC & DEV_0269 & SUBSYS_17AA2204 & REV_1002 \ 4 & d00657 & 0 & 0001)“
Pôjdeme inou cestou
Výpočet procesu pomocou zvukového subsystému
Je známe, že ovládač Realtek sa zaoberá špinavými skutkami. Je zrejmé, že je načítaný pri spustení systému, takže názov súboru je ľahké zistiť pomocou Autoruns.
Tri položky sa týkajú dvoch súborov, z ktorých jeden je, ako naznačuje názov, ovládacím panelom. Preto objektom záujmu bolo ravbg64.exe.
Microsoft v operačnom systéme Windows 10 platí veľká pozornosť bezpečnosť. Jednou z dôležitých prvkov systému je „ Ochranca systému Windows”, Ale nedokáže sa vyrovnať so všetkými hrozbami. V poslednej dobe získavajú na obľube predovšetkým vírusy Ransomware, medzi ktoré najznámejšie reinkarnácie patria malware Peťa a. Spoločnosť Microsoft implementovala v systéme Windows 10 funkcie izolácie jadra a integrity pamäte na boj proti vírusom Ransomware. Štandardne sú vypnuté.
Obsah:Čo je izolácia jadra a integrita pamäte
Izolácia jadra je proces dodatočnej ochrany, ktorý je poskytovaný metódou ochrany počítačových procesov pred operačný systém a zariadeniami. Vďaka týmto akciám je možné vyhnúť sa narušeniu prevádzky operačného systému, keď sa do počítača dostanú vírusy.
Integrita pamäte je ochranná funkcia, ktorá sprevádza izoláciu jadra a ktorá je zameraná na obmedzenie prístupu neznámych potenciálne nebezpečných programov k procesom s vysokou úrovňou zabezpečenia.
Dôležité: Funkcia izolácie jadra môže fungovať iba vtedy, ak sú na to hardvér počítača dostatočné podmienky. V nastaveniach systému BIOS musí byť aktívna virtualizačná technológia, vďaka ktorej môže počítač so systémom Windows 10 spúšťať rôzne aplikácie vo virtuálnom kontajneri, čím sa obmedzí ich prístup z kľúčových systémových komponentov.
Ako povoliť izoláciu jadra a integritu pamäte
Nastavenia operačného systému Windows 10 vám umožňujú prevziať plnú kontrolu nad funkciami zabezpečenia vo vašom počítači. Naprieč Nastavenia systému Windows 10, môžete povoliť izoláciu jadra a integritu pamäte nasledovne:
Ako je uvedené vyššie, ak hardvér počítača nepodporuje virtualizáciu, túto funkciu nebudem pracovať. Keď je táto možnosť povolená, používateľovi sa zobrazí správa „Nedá sa zaistiť integrita pamäte. Možná nekompatibilita. " Ak sa zobrazí táto správa, odporúča sa prejsť do systému BIOS a zistiť, či je táto funkcia povolená. Bezpečné spustenie(Boot Mode).
Ako vypnúť izoláciu jadra a integritu pamäte
Nové funkcie v operačnom systéme, ktoré vážne ovplyvňujú jeho činnosť, vždy predstavujú riziko, že spôsobia problémy s počítačom. Funkcia izolácie jadra nie je výnimkou. Používatelia, ktorí to už vyskúšali, si na fórach spoločnosti Microsoft všimnú, že pri spustení niekoľkých hier a programov sa stretávajú s problémami. Jediným spôsobom, ako vyriešiť tento problém, je zakázať izoláciu jadra a integritu pamäte. Možno v budúcich aktualizáciách túto nekompatibilitu vyriešia vývojári aplikácií alebo spoločnosť Microsoft.
Existujú tri spôsoby, ako zakázať izoláciu jadra a integritu pamäte:
Odoslanie dobrej práce do znalostnej základne je jednoduché. Použite nižšie uvedený formulár
Študenti, postgraduálni študenti, mladí vedci, ktorí pri štúdiu a práci využívajú vedomostnú základňu, vám budú veľmi vďační.
Publikované na http://www.allbest.ru/
1. Teoretické informácie
1.1 Vývoj ovládačov jadra systému Windows
Stručné teoretické informácie
Vývoj ovládača jadra
Ovládač je počítačový program, prostredníctvom ktorého iný program (zvyčajne operačný systém) pristupuje k hardvéru štandardným spôsobom.
Útržkovitý príklad, ako fungujú rôzne typy ovládačov:
Je vhodné rozdeliť na 2 typy:
- Ovládače jadra (pracujú na úrovni oprávnení 0, ale nijako nekomunikujú ani s užívateľským programom, ani so zariadením. Práve s nimi začneme (sú jednoduchšie a môžu byť aj užitočné).
Ovládače zariadenia sú potrebné na interakciu medzi užívateľským programom a zariadením, a to na prenos údajov medzi nimi a na ovládanie zariadenia. Zariadenia môžu byť navyše skutočné aj virtuálne). Vodič nemusí ovládať žiadne fyzické zariadenie. Niektoré operačné systémy tiež umožňujú vytvárať ovládače virtuálnych zariadení - objekty, ktoré sa správajú ako I / O zariadenia, ale nekorešpondujú so žiadnym fyzickým zariadením.
Komponenty jadra bežia v režime privilegovaného procesora (nazýva sa režim jadra), môžu robiť všetko, a to:
- môžu vykonávať privilegované príkazy procesora (ako lgdt),
- môže mať prístup k systémovým údajom a kódu,
- mať priamy prístup k zariadeniu, napríklad prostredníctvom portov
- mať prístup k pamäťovým bunkám; ovládač nemôže manipulovať priamo s fyzickou pamäťou, ale môže získať virtuálnu adresu pre akúkoľvek fyzickú pamäť a manipulovať s ňou.
Ak potrebujete napísať akúkoľvek serióznu aplikáciu, ktorá vyžaduje prístup k vnútorným funkciám alebo dátovým štruktúram systému, môžete naraziť na mnohé obmedzenia, ktoré je možné prekonať iba umiestnením kódu do priestoru adries systému. Jediným zdokumentovaným spôsobom, ako to urobiť, je nainštalovať ovládač. Táto metóda je pomerne jednoduchá, spoľahlivá a hlavne je plne podporovaná samotným operačným systémom.
Kód jadra (v skutočnosti je to samotný systém) sa považuje za úplne dôveryhodný. Po načítaní do priestoru adries systému sa ovládač stane súčasťou systému a nevzťahujú sa naň žiadne obmedzenia. V systéme Windows je to prakticky jediný spôsob, ako môžu vývojári mimo OS písať systémové komponenty na úrovni jadra.
Na písanie a štúdium spôsobov vývoja ovládačov používajú DDK (Device Development Kit) - systém na vývoj ovládačov.
Okrem dokumentácie obsahuje DDK aj sadu súborov na zahrnutie (* .inc) a súborov knižnice (* .lib).
Windows teda podporuje rôzne typy ovládačov zariadení, ale okrem toho existujú aj ovládače, ktoré nie sú ovládačmi zariadení, ale jednoducho vám umožňujú vytvárať programy, ktoré pobežia v režime jadra Windows, t.j. na úrovni oprávnení 0. Pritom majú plný prístup k operačnému systému a hardvéru.
Pozrime sa na najjednoduchší ovládač režimu jadra.
#zahrnúť
int DriverEntry (
V PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pusRegistryPath) (
}
Vstupným bodom je DriverEntry, ktorý je štruktúrovaný ako postup, ktorý má dva parametre:
pDriverObject je ukazovateľ na novovytvorený objekt ovládača. Pri načítaní ovládača systém vytvorí objekt ovládača, ktorý v pamäti predstavuje jeho obrázok. Systém prostredníctvom tohto objektu ovláda vodiča. Objekt ovládača je bežná dátová štruktúra typu DRIVER_OBJECT.
pusRegistryPath Ukazovateľ na kľúč databázy Registry obsahujúci parametre inicializácie ovládača.
Tento náš prvý ovládač sa načíta iba do systému a ihneď sa uvoľní.
Teraz sa pozrime na program šablón, ktorý bude potrebné použiť na vývoj programu v prvom kroku práce na kurze (ovládač režimu jadra beeper.sys).
Úlohou tohto ovládača je zahrať jednu notu až do prvej oktávy o dynamike systému. Na to ovládač používa pokyny pre vstup a výstup procesora podľa príslušných vstupno -výstupných portov. Je všeobecne známe, že prístup k I / O portom je systémový zdroj, ktorý systém Windows posvätne stráži. Pokus o prístup k ľubovoľnému z nich, vstupnému aj výstupnému, z používateľského režimu nevyhnutne vedie k výnimke.
V našom prípade bude reproduktor fungovať (na tento účel sa používa najmä port 61h, 0 a 1 bit, port 43h a 42h).
Na začiatku ovládača je definovaných všetkých 12 poznámok.
Bude potrebné nielen zapnúť reproduktor, ale nastaviť aj frekvenciu zvuku. Na tento účel sa používa subsystém časovača, ktorý pracuje nezávisle od procesora a má 3 kanály. Výstup z kanála 2 je pripojený k reproduktoru, ktorý slúži na generovanie zvuku rôznych frekvencií. Počuteľný rozsah zvuku je 30 Hz-6 000 Hz.
Ak chcete nastaviť frekvenciu zvuku, riadiace slovo 0Bh sa odošle na port 43h (register príkazov časovača):
mov al, 0Bh
mimo 43h, al
Táto hodnota určuje číslo kanála, ktorý budeme ovládať, typ operácie, režim prevádzky kanála a formát počítadla.
Potom sa prepočítaná zvuková frekvencia (1193167 / frekvencia (Hz)) odošle na port 42h v dvoch častiach (najskôr dolná časť, potom vysoká).
Chceme napríklad získať zvukovú frekvenciu 100 Hz. Prepočítame frekvenciu,
1193167/100 = 11931
Potom:
pohyblivá sekera, 11931
mimo 42h, al
mov al, ah
mimo 42h, al
V prvom kroku práce na kurze je potrebné zmeniť program tak, aby produkoval ďalšie hudobné zvuky (každý má variant).
Úlohy často musia mať rôzne trvanie. Na tento účel je vhodné použiť procedúru DO_DELAY tak, že do nej zadáte nepriamo definovaný parameter „čas zvuku“.
Na uľahčenie ladenia ovládača existujú rôzne nástroje. Najjednoduchšie je zobraziť potrebné informácie v špeciálnom okne obslužného programu Debug View. Tento program je predbežne spustený a nakonfigurovaný tak, aby zachytával správy z úrovne jadra. Pre výstup program volá funkciu DbgPrint, ktorá má jeden parameter - výstupný reťazec. Po spustení ovládača sa všetok výstup zobrazí v okne Debug View.
Existuje niekoľko spôsobov, ako nainštalovať ovládač do jadra. Pretože náš ovládač systém v skutočnosti nepotrebuje (neriadi žiadne zariadenie), dočasne pripojíme ovládač k systému a potom ho odstránime.
Na to musíte vytvoriť aplikáciu, ktorá spustí ovládač. Ako? Ovládač je služba na úrovni jadra. Aplikácia preto bude používať SCM - Service Control Manager, ktorý je súčasťou systému Windows a beží na užívateľskej úrovni.
Preto musíte vytvoriť riešenie z dvoch projektov: konzolová aplikácia a ovládač.
Na vývoj ovládačov v jazyku C musíte najskôr:
- nainštalovať DDK,
- nastavte premennú prostredia WNETBASE (hodnota je cesta k DDK, napríklad e: \ winddk \ 3790.1830).
Projekt ovládača musí byť typu MakeFile.
Vykonajte nastavenia projektu pomocou Nastavenia aplikácie a napíšte riadok do poľa Zostaviť príkazový riadok
ddkbuild -WNETXP chk. -ceZ
čo znamená volanie špeciálneho skriptu na prepojenie VC s DDK
Súbory musia byť prítomné v aktuálnom priečinku projektu:
sources, makefile, ddkbuild.cmd (skript), zdrojový súbor ovládača.c
Po vybudovaní projektu musí mať vodič rozšírenie sys.
Aplikácia spustí ovládač beeper.sys, t.j. zaregistruje ho do registra a spustí ho. Potom, keď je hotový, vymaže ho z registra.
Aby aplikácia spustila ovládač, po vytvorení riešenia, ktoré pozostáva z dvoch projektov - aplikácie a ovládača, musíte umiestniť spustiteľný súbor aplikácie a ovládač do rovnakého priečinka a potom aplikáciu spustiť.
Ovládače je veľmi ťažké odladiť. V prípade chýb v prevádzke OS najčastejšie visí a je potrebné reštartovať počítač. A pre náš ovládač musíte po reštarte tiež odstrániť službu beeper06 z registra pomocou regedit (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \) a potom znova reštartovať.
1.2 Ovládače virtuálnych zariadení Windows
Doteraz sme vyvíjali ovládač v režime jadra, ktorý dokáže veci, ktoré nie je možné vykonať na používateľskej úrovni, najmä prácu s I / O portami. Takýto ovládač sa nazýva ovládač jadra, ale nie ovládač zariadenia, pretože medzi užívateľským programom a zariadením sa neprenášajú žiadne údaje (koniec koncov, prečo je ovládač zvyčajne potrebný? Organizovať výmenu údajov medzi užívateľskou aplikáciou a zariadenie).
Teraz budeme vyvíjať ovládače zariadení, ktoré prenášajú údaje medzi užívateľskou aplikáciou a zariadením tam a späť.
Keď aplikácia vyžaduje operáciu I / O, zavolá sa ovládač. Na tento účel môže aplikácia vydať požiadavku na čítanie údajov zo zariadenia alebo na zápis údajov do zariadenia. A ak je potrebná nejaká iná akcia, napríklad hlasovanie alebo ovládanie zariadenia, alebo niečo iné, tak tzv. Rozhranie IOCTL (ovládanie vstupu a výstupu zariadenia).
Budeme zvažovať práve taký prípad pre virtuálne zariadenia, pretože prečo častejšie potrebujeme virtuálne zariadenie v ovládači? Aby ste doň mohli prenášať údaje, ktoré môže vodič nejakým spôsobom spracovať (čo je v aplikácii nemožné) a vrátiť výsledok do aplikácie. Pripomeňme si, že obvyklý ovládač jadra, o ktorom sme hovorili vyššie, z aplikácie nič nevzal a nič tam nevrátil, ale jednoducho vykonal akcie, ktoré aplikácia nemala k dispozícii.
Keď aplikácia vyžaduje operáciu I / O, zavolá sa ovládač. Na to slúžia tzv. Rozhranie IOCTL (ovládanie vstupu a výstupu zariadenia).
Volajúca aplikácia robí nasledujúce:
1) Otvorenie súboru a získanie jeho deskriptora:
GENERIC_READ + GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL
Výsledkom je, že ak sa všetko stalo úspešne, dostaneme deskriptor zariadenia.
2) Odoslanie akčného kódu vodičovi (čo robiť, vodič môže implementovať mnoho rôznych akcií):
vyvolať DeviceIoControl, deskriptor, akčný kód, adresa vstupnej vyrovnávacej pamäte, veľkosť vstupných údajov, adresa výstupnej vyrovnávacej pamäte, veľkosť výstupných údajov, adresa vyrovnávacej pamäte pre skutočný počet bajtov
3) Zatvorte súbor a podľa toho uvoľnite deskriptor.
vyvolajte rukoväť zariadenia CloseHandle
Na prenos údajov sa moduly (aplikácia a ovládač) musia dohodnúť na protokole interakcie (akčné kódy, štruktúra vyrovnávacích pamätí - vstup a výstup).
Rovnaký akčný kód sa používa v aplikácii aj v ovládači.
Kód akcie v aplikácii a v ovládači môže byť zapísaný v hexadecimálnej forme alebo môžete použiť makro CTL_CODE, ako sa to robí v ukážkovom laboratóriu. pracovať v súbore common.inc.
Pozrime sa na príklad akčného kódu z ovládača virtuálneho zariadenia, ktorý sa používa v tomto laboratóriu. Názov je IOCTL_GET.
V prípade virtuálneho zariadenia je príznak súboru 0.
Typ zariadenia - FILE_DEVICE_UNKNOWN = 22 hodín
Prístupové práva - FILE_READ_ACCESS + FILE_WRITE_ACCESS = 1 + 2 = 3 = 11b
Kód funkcie je v rozsahu 800 h až FFFh. Máme 800 hodín.
Spôsob ukladania do vyrovnávacej pamäte - spôsob prenosu údajov medzi aplikáciou a ovládačom (sú možné tri):
Pre malé množstvo údajov sa zvyčajne používa METHOD_BUFFERED (00b) - v nestránkovej pamäti je alokovaná ďalšia vyrovnávacia pamäť, ktorá postačuje na umiestnenie vstupných a výstupných vyrovnávacích pamätí. Adresa tejto vyrovnávacej pamäte je umiestnená v IRP v poli AssociatedIrp.SystemBuffer. I / O dispečer preberá prácu pri prepisovaní údajov medzi užívateľskou vyrovnávacou pamäťou a pomocnou vyrovnávacou pamäťou.
Priamy prístup k údajom (bez vyrovnávacej pamäte) - METHOD_OUT_DIRECT (2) - pre výstup alebo METOD_IN_DIRECT (1) - pre vstup; pole z IRP - MdlAddress. Toto je priame volanie-I / O manager zaväzuje do pamäte fyzické stránky obsahujúce vyrovnávaciu pamäť v užívateľskom režime. Súčasne vytvára pomocnú štruktúru MDL (Memory Descriptor List) na popis pevných stránok. A vývojár ovládača pracuje s MDL.
Prístup prostredníctvom vyrovnávacej pamäte na úrovni používateľa - METHOD_NEITHER (3); pole z IRP - SystemBuffer. Manažér I / O odovzdá ovládaču adresy virtuálneho užívateľského režimu. A v ovládači s nimi musíte pracovať veľmi opatrne, pretože ovládač by v tomto prípade mal fungovať iba v kontexte volajúceho vlákna.
Keď aplikácia odošle ovládaču kód akcie, spustí sa I / O manager. Je zodpovedný za generovanie paketu požiadaviek I / O (IRP) a jeho odoslanie ovládaču na ďalšie spracovanie.
Zvážime 3 typy žiadostí:
IRP_MJ_CREATE - bude postúpené na CreateFile,
IRP_MJ_DEVICE_CONTROL - bude prenášať DeviceIoControl
IPR_MJ_CLOSE - na CloseHandle
IRP pozostáva zo zásobníkov alokácií hlavičiek a I / O. Manažér I / O vytvorí počet buniek zásobníka I / O rovný počtu vrstiev ovládača zapojených do spracovania požiadavky. Každý ovládač má povolený prístup do svojho vlastného umiestnenia zásobníka. Keď vodič odovzdá IRP ovládaču nižšej úrovne, ukazovateľ zásobníka sa presunie na miesto, ktoré ovládač potrebuje. Naopak, po spracovaní požiadavky sa ukazovateľ presunie do bunky ovládača najvyššej úrovne. Získanie ukazovateľa pomocou funkcie - IoGetCurrentStackLocation ().
Každý alokačný zásobník obsahuje ukazovateľ na DeviceObject a FileObject, pre ktoré bola žiadosť iniciovaná. IRP sú vždy uložené v nestránkovanej pamäti.
Aby ovládač fungoval, vytvoria sa a použijú sa tieto objekty:
Objekt vodiča;
Objekty zariadenia;
Fázy vodiča.
1) Vytvorenie objektu ovládača. Vytvorené pri načítaní ovládača vo fáze jeho spustenia. V tejto chvíli sa spustí funkcia DriverEntry a vyplní sa pole MajorFunction, ako aj ukazovateľ na a z objektu zariadenia.
Objekt zariadenia obsahuje:
Typ zariadenia.
2) Vytvorte symbolický odkaz na zariadenie. Aby bol objekt "zariadenie" dostupný pre kód užívateľského režimu, musí ovládač vytvoriť v adresári "\ ??", ku ktorému je prístupný (kód užívateľského režimu). ďalším predmetom je symbolický odkaz. Ovládač shablon.sys vytvorí symbolický odkaz „slshablon“ na svoje zariadenie „devshablon“ v adresári „\ ??“, ktorého hodnota je reťazec „\ Device \ devshablon“.
Už pri načítaní ovládača (v našom prípade vo fáze načítania OS) teda máme v pamäti tri objekty: ovládač „\ Driver \ shablon“, zariadenie „\ Device \ shablon“ a symbolický odkaz na zariadenie „\ ?? \ slshablon“.
3) Otvorenie. Potom, keď sa aplikácia spustí, sa zavolá CreateFile. K dispozícii je odkaz na zariadenie. Štruktúra objektu zariadenia DEVICE_OBJECT získava informácie o obsluhujúcom ovládači. I / O manager vygeneruje paket IRP I / O požiadaviek typu IRP_MJ_CREATE a odošle ho ovládaču. Takto vodič vie, že sa kód používateľského režimu pokúša získať prístup k jeho zariadeniu. Ak to vodičovi nevadí, vráti kód úspechu. Náš vodič má špeciálny postup odoslania, ktorý reaguje na túto IRP - DispatchCreateClose (existuje kombinovaný postup na otvorenie a zatvorenie zariadenia). Obsahuje STATUS_SUCCESS v poli Io.Status.Status a 0 v Io.Status.Information, pretože v tomto prípade nie je potrebné nič prenášať. Táto odpoveď od ovládača je signálom pre správcu objektov, aby vytvoril virtuálny súbor. To vytvorí nový prvok v tabuľke popisovača procesov s ukazovateľom na objekt „súbor“ a vráti nový popisovač do kódu užívateľského režimu.
Ak je všetko v poriadku, uložíme deskriptor súborov vrátený CreateFile do premennej hDevice.
4) Operácie vstup / výstup. Teraz sme schopní vykonávať operácie na ovládanie tohto zariadenia volaním funkcií DeviceIoControl. Pretože ovládač zariadenia môže v zásade vykonávať mnoho rôznych úloh, je potrebné požiadavky nejako diferencovať. Na to slúži druhý parameter dwIoControlCode, nazývaný riadiaci kód I / O, ktorý je zostavený podľa určitých pravidiel.
Pomocou deskriptora zariadenia I / O manažér získa informácie o obsluhujúcom ovládači, vygeneruje paket požiadaviek na I / O typu IRP_MJ_DEVICE_CONTROL a odošle ho ovládaču. Ovládač zavolá zodpovedajúcu procedúru DispatchControl, ktorej sa ako parameter odovzdá kód akcie a informácie o adresách a veľkostiach vstupnej a výstupnej vyrovnávacej pamäte. Toto všetko je oznámené prostredníctvom IRP. Pri postupe sa z IRP získajú potrebné informácie: akčný kód, adresa vyrovnávacej pamäte na prenos údajov.
Procedúra DispatchControl vykoná potrebné akcie, v našom prípade adresu paketu IRP z registra ESI Potom odovzdá výsledok cez výstupnú vyrovnávaciu pamäť do aplikácie.
Podobne ako v predchádzajúcom postupe, prejdeme cez IRP stav dokončenia a počet bajtov prenesených z ovládača.
V aplikácii sú tieto údaje naformátované a zobrazené.
5) Zatváranie. Ako by sa malo vykonať s už nepotrebnými rukoväťami, zavolaním funkcie CloseHandle zavrieme rukoväť zariadenia.
6) Vyloženie vodiča. Odstráňte symbolický odkaz a odstráňte objekt zariadenia.
Komplex (2) pozostáva z dvoch programov:
Aplikácia, ktorá požiada ovládač o adresu IRP a potom túto adresu zobrazí v štandardnom okne systému Windows.
Shablon.sys - vodič.
Šablonový ovládač robí niečo, čo sa nedá vykonať na užívateľskej úrovni, v tomto prípade určuje obsah registra esi, keď je ovládač spustený.
Aplikácia vo výstupnej vyrovnávacej pamäti prijíma obsah esi, prevádza ho na hexadecimálny výstup a odosiela ho do štandardného okna systému Windows.
Ak potrebujete získať informácie z pamäte CMOS v ovládači, potrebujete:
Poslať posunutie záujmu CMOS na port 70h;
Malé oneskorenie;
Získajte informácie z portu 71h do al.
Potom napíšte tieto informácie do výstupnej vyrovnávacej pamäte.
A v aplikácii musíte vziať informácie z výstupnej vyrovnávacej pamäte, v prípade potreby ich transformovať a zobraziť, alebo ich analyzovať a v závislosti od výsledku zobraziť potrebný text v štandardnom okne.
Toto laboratórium predpokladá, že ovládač je v systéme Windows nainštalovaný natrvalo pomocou súboru .inf pomocou ovládacieho panela - Inštalácia hardvéru: Pridajte nové zariadenie, nainštalujte ručne, zobrazte všetky zariadenia, máte disk, vyhľadajte súbor .inf (ovládač musí byť v rovnakom priečinku).
Ak chcete skontrolovať, či je nainštalovaný ovládač, vyberte na ovládacom paneli Systém, Hardvér, Správca zariadení.
1.3 Prístup k existujúcim ovládačom z aplikácií v užívateľskom režime
Algoritmus aplikácie pracujúcej s ovládačom
Na prácu s ovládačom potrebuje aplikácia v používateľskom režime ovládača (manipulátor). Tento manipulátor je možné získať pomocou funkcie CreateFile alebo CreateFileA API, ktorá pracuje so znakmi ASCII. Ďalej sa používa funkcia API DeviceIoControl, ktorej je ako jeden z parametrov odovzdaný kód IOCTL. Kód IOCTL je riadiaci kód, pomocou ktorého sa vodič dozvie o operácii, ktorú aplikácia požaduje vykonať, o spôsobe odovzdávania parametrov a prístupových právach, ktoré aplikácia potrebuje na vykonanie tejto operácie. Po zavolaní aplikácie
IRP_MJ_DEVICE_CONTROL je odoslaný do ovládača DeviceIoControl. Po spracovaní požiadaviek sa riadenie vráti do aplikácie a zostane na aplikácii, aby analyzovala odpoveď vodiča a zatvorila otvorené úchyty.
Príklad
V nižšie uvedenom príklade aplikácia používateľského režimu odošle požiadavku IOCTL_DISK_GET_PARTITION_INFO_EX ovládaču systém súborov, analyzuje prijaté informácie a zobrazí formát oblasti pevného disku.
#zahrnúť
#zahrnúť
int _tmain (int argc, _TCHAR * argv)
DWORD dwBytesReturned = 0;
char cPartitionStyle = (0);
PARTITION_INFORMATION_EX piPartitionInfo;
HANDLE hDevice = CreateFileA (
/*1*/"\\\\.\\c: ",
/ * 2 * / GENERIC_READ | GENERIC_WRITE,
/ * 3 * / FILE_SHARE_READ | FILE_SHARE_WRITE,
/ * 5 * / OPEN_EXISTING,
ak (hDevice == INVALID_HANDLE_VALUE)
MessageBoxA (NULL, „Chyba CreateFileA!“, „Chyba“, 0);
ak (DeviceIoControl (
/ * 1 * / (HANDLE) hZariadenie,
/ * 5 * / & piPartitionInfo,
/ * 6 * / sizeof (piPartitionInfo),
/ * 7 * / & dwBytesVrátené,
if (piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)
MessageBoxA (NULL, „PARTITION_STYLE_MBR“, „Caption“, 0);
else if (piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)
MessageBoxA (NULL, "PARTITION_STYLE_GPT", "Caption", 0);
MessageBoxA (NULL, „PARTITION_STYLE_RAW“, „Caption“, 0);
MessageBoxA (NULL, "Chyba DeviceIoControl", "Chyba", 0);
CloseHandle (hDevice);
Analýza príkladu
Deklarované sú premenné potrebné na to, aby aplikácia fungovala. PARTITION_INFORMATION_EX je štruktúra, ktorá popisuje informácie o oblasti pevného disku.
typedef struct (
) PARTITION_INFORMATION_EX;
V tejto časti programu sa volá funkcia CreateFileA, aby sa získal popisovač, ktorý je zapísaný do premennej hDevice.
Funkcia DeviceIoControl sa nazýva synchrónne. Prenáša sa na ňu:
deskriptor zariadenia;
Kód IOCTL IOCTL_DISK_GET_PARTITION_INFO_EX;
ukazovateľ na vstupnú vyrovnávaciu pamäť, v našom prípade NULL;
veľkosť vstupného buffera;
ukazovateľ na výstupnú vyrovnávaciu pamäť;
veľkosť výstupnej vyrovnávacej pamäte;
ukazovateľ na premenná typu DWORD, ktorý uloží počet bajtov, ktoré sa majú vrátiť;
ukazovateľ na PREPLATENÚ štruktúru, na ktorú sa používa asynchrónny hovor funkcie.
Po návrate ovládania sa v prípade úspešného dokončenia funkcie informácie o oddiele uložia do štruktúry PARTITION_INFORMATION_EX.
Vykonáva sa analýza a výstup informácií. Pred vrátením ovládania do operačného systému môžete zatvoriť otvorené úchyty. Umožňuje vám to funkcia CloseHandle (__ v HANDLE). Ak deskriptory nie sú zatvorené, operačný systém to urobí za vás.
2. Implementácia semestrálnej práce
2.1 Krok 1
Cvičenie: 1. Vytvorte ovládač jadra s prístupom k portom, vykonávajte akcie podľa voľby a odosielajte informácie do okna Debug View (podľa možnosti), ako aj aplikáciu, ktorá ovládač spustí.
Zoznam Kurs_test.cpp
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
SC_HANDLE hSCManager;
SC_HANDLE hService;
char acDriverPath;
if (hSCManager! = 0) (
// zaregistrujte hráča v tabuľke SCManager
if (hService! = 0) (
// Vymažte položku ovládača
DeleteService (hService);
CloseServiceHandle (hService);
návrat 0;
}
Výpis Beeper.sys
#zahrnúť
#define TIMER_FREQUENCY 1193167 // 1 193 167 Hz
#define PITCH_C 523 // 523,25 Hz
#define PITCH_Cs 554 // 554,37 Hz
#define PITCH_D 587 // 587,33 Hz
#define PITCH_Ds 622 // 622,25 Hz
#define PITCH_E 659 // 659,25 Hz
#define PITCH_F 698 // 698,46 Hz
#define PITCH_Fs 740 // 739,99 Hz
#define PITCH_G 784 // 783,99 Hz
#define PITCH_Gs 831 // 830,61 Hz
#define PITCH_A 880 // 880,00 Hz
#define PITCH_As 988 // 987,77 Hz
neplatné DO_DELAY (int time) (
dlho i, j;
pre (i = 0; i<=time*0xfffff; i++) {}
}
neplatné DO_BIG_DELAY (medzičas) (
DO_DELAY (2 * čas);
}
prázdny xylofón (int nPitch) (
int nTone = TIMER_FREQUENCY / nPitch
_asm (
mov al, 10110110b; // napíšte kontrolné slovo o 43 hod
out 43h, al; // Kanál ovládania zvuku - logika s použitím časovacích tónov a softvérovo riadených bitov portov systému
mov eax, nTone; // napíšte prepočítanú frekvenciu na 42
out 42h, al; // horná časť
mov al, ah; // dolná časť
mimo 42h, al
in al, 61h; // zmena únikovej sekvencie - konvertujte posledné bity na jedničky
; // bit 0 - povolenie používať reproduktor
; // bit 1 - povolenie na pripojenie časovača -2 k reproduktoru
alebo al, 00000011b; reproduktor ZAPNUTÝ
von 61h, al
}
DO_DELAY (0x7f);
_asm (
v al, 61h
a kol., 11111100b; reproduktor VYPNUTÝ
von 61h, al
}
}
Xylofón (PITCH_C);
Xylofón (PITCH_С);
Xylofón (PITCH_С);
Xylofón (PITCH_С);
Xylofón (PITCH_С);
Xylofón (PITCH_С);
Xylofón (PITCH_С);
vrátiť STATUS_DEVICE_CONFIGURATION_ERROR;
}
2.2 Krok 2
Vytvorte ovládač virtuálneho zariadenia, ktorý vám umožní vykonávať akcie, ktoré sú k dispozícii iba na úrovni nulových oprávnení (v súlade s touto možnosťou), a potom preniesť výsledky do aplikácie na tretej úrovni oprávnení na ich zobrazenie na obrazovke.
V aplikácii výstup vynesieme do štandardného okna Windows.
Zoznam shablon.c
#zahrnúť // rôzne definície NT
#zahrnúť
UNICODE_STRING g_usDeviceName;
UNICODE_STRING g_usSymbolicLinkName;
zrušiť DriverUnload (IN PDRIVER_OBJECT pDriverObject) (
IoDeleteSymbolicLink (& g_usSymbolicLinkName);
IoDeleteDevice (pDriverObject-> DeviceObject);
}
NTSTATUS DispatchCreateClose (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// spracovanie MJ_CREATE MJ_CLOSE
pIrp-> IoStatus.Status = STATUS_SUCCESS;
pIrp-> IoStatus.Information = 0;
IoCompleteRequest (pIrp, IO_NO_INCREMENT);
návrat STATUS_SUCCESS;
}
NTSTATUS DispatchControl (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// spracovanie IRP_MJ_DEVICECONTROL
Stav NTSTATUS;
int regEsi;
// vezmite ukazovateľ na IO_STACK_LOCATION, v ňom na IoControlCode
if (pIrp-> Tail.Overlay.CurrentStackLocation-> Parameters.DeviceIoControl.IoControlCode == IOCTL_GET) (
// Porovnajte kód akcie a ak je to náš klient, potom:
_asm (
mov eax, 0
mov al, 10h
mimo 70h, al
v al, 71h
cbw
cwde
mov regEsi, eax
}
// toto je naša funkcia - preberáme obsah registra esi
// napíšte to do systémovej vyrovnávacej pamäte
* ((int *) pIrp-> AssociatedIrp.SystemBuffer) = regEsi;
pIrp-> IoStatus.Information = 4; // a nastavte veľkosť výsledku
status = STATUS_SUCCESS;
) else status = STATUS_INVALID_DEVICE_REQUEST;
pIrp-> IoStatus.Status = stav;
IoCompleteRequest (pIrp, IO_NO_INCREMENT);
návrat (stav);
}
int DriverEntry (IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pusRegistryPath) (
Stav NTSTATUS;
PDEVICE_OBJECT pDeviceObject;
// inicializácia reťazcov Unicode
RtlInitUnicodeString (& g_usDeviceName, L "\\ Device \\ DevGet");
RtlInitUnicodeString (& g_usSymbolicLinkName, L "\\ ?? \\ sldevGet");
// vyplňte objekt ovládača - jasne vysvetlite vodičovi, aká funkcia čo spracováva
pDriverObject-> DriverUnload =
pDriverObject-> MajorFunction =
pDriverObject-> MajorFunction =
pDriverObject-> MajorFunction =
// vytvorenie logického objektu virtuálneho zariadenia
Status = IoCreateDevice (pDriverObject, 0, & g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, & pDeviceObject);
if (! NT_SUCCESS (stav)) (vrátiť stav;)
// vytvorte symbolický odkaz na zariadenie
Status = IoCreateSymbolicLink (& g_usSymbolicLinkName, & g_usDeviceName);
if (! NT_SUCCESS (stav)) (
IoDeleteDevice (pDeviceObject);
vrátiť stav;
}
vrátiť stav;
}
Zoznam course2.cpp
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
#define IOCTL_GET CTL_CODE (FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)
int _tmain (int argc, _TCHAR * argv) (
HANDLE hZariadenie;
BOOL DevControl;
DWORD dwBytesReturned;
char stroka;
/*
Možnosti:
lpFileName Adresa reťazca ukončeného nulou, ktorý určuje názov objektu, ktorý sa má vytvoriť alebo otvoriť.
dwDesiredAccess Typ prístupu k objektu. Tento parameter môže mať akúkoľvek kombináciu nasledujúcich hodnôt:
Hodnota: Popis:
0 Definuje dotaz na dostupnosť objektu na uvedenom zariadení. Aplikácia môže požadovať atribúty zariadenia bez toho, aby k nej mala prístup.
GENERIC_READ Špecifikuje prístup na čítanie z objektu. Údaje je možné čítať zo súboru a ukazovateľ súboru je možné presúvať. Skombinujte s GENERIC_WRITE na prístup na čítanie a zápis.
GENERIC_WRITE Špecifikuje prístup na zápis do objektu. Dáta je možné zapísať do súboru a ukazovateľ súboru je možné presunúť. Skombinujte s GENERIC_READ a získajte prístup na čítanie a zápis.
dwShareMode Režim zdieľaného prístupu k objektom. Ak je hodnota nula, objekt nemožno zdieľať s viacerými programami. Všetky nasledujúce operácie na otvorenie objektu zlyhajú, kým sa nezatvorí popisovač objektu. Na zdieľanie objektu použite kombináciu nasledujúcich hodnôt:
Hodnota: Popis:
FILE_SHARE_DELETE Umožňuje sekvencii otvorenia objektu požiadať o prístup na odstránenie.
FILE_SHARE_READ Umožňuje sekvencii otvoreného objektu požiadať o prístup na čítanie.
FILE_SHARE_WRITE Umožňuje sekvencii otvoreného objektu požiadať o prístup na zápis
lpSecurityAttributes Adresa štruktúry SECURITY_ATTRIBUTES, ktorá určuje, či popisovač vrátený funkciou môže byť zdedený podradeným procesom.
Ak je lpSecurityAttributes NULL, deskriptor nemožno zdediť.
dwCreationDisposition
Hodnota: Popis:
CREATE_ALWAYS Vytvorí vždy nový súbor.
Ak súbor existuje, funkcia ho prepíše.
CREATE_NEW Vytvorí nový súbor. Ak súbor existuje, funkcia zlyhá.
OPEN_ALWAYS Otvorený súbor, vždy. Ak súbor neexistuje, funkcia ho vytvorí rovnakým spôsobom, ak dwCreationDisposition boli CREATE_NEW.
OPEN_EXISTING Otvorí súbor. Ak súbor neexistuje, funkcia zlyhá.
TRUNCATE_EXISTING Otvorí súbor a skráti ho na veľkosť nula. Ak súbor neexistuje, funkcia zlyhá.
dwFlagsAndAttributes Príznaky a atribúty súboru.
Keď je otvorený existujúci súbor, CreateFile ignoruje súbor šablóny.
Vrátené hodnoty:
Ak je funkcia úspešná, vráti sa otvorený popisovač zadaného súboru. Ak zadaný súbor existuje pred volaním funkcie a dwCreationDisposition je CREATE_ALWAYS alebo OPEN_ALWAYS, funkcia GetLastError vráti ERROR_ALREADY_EXISTS, aj keď bude funkcia úspešná. Ak súbor pred volaním neexistuje, funkcia GetLastError vráti hodnotu 0 (nula).
V prípade chyby funkcia vráti INVALID_HANDLE_VALUE. Ak chcete získať ďalšie informácie o chybe, zavolajte na server GetLastError.
*/
if (hDevice! = 0) (
/*
hDevice je popisovač vrátený súborom CreateFile.
dwIocontrolCode je hodnota, ktorá označuje operáciu, ktorú je potrebné vykonať.
lpInBuffer je adresa vyrovnávacej pamäte, ktorá obsahuje údaje potrebné na vykonanie operácie uvedenej v dwIoControlCode. Ak operácia nevyžaduje údaje, môžete zadať hodnotu NULL.
nInBufferSize je veľkosť v bajtoch údajov vo vyrovnávacej pamäti, na ktorú odkazuje lpInBuffer.
lpOutBuffer je adresa vyrovnávacej pamäte, ktorá bude naplnená výstupom, keď je operácia úspešná. Ak operácia neposkytuje výstup, MUSÍ byť toto pole NULL.
nOutBufferSiz je veľkosť v bajtoch vyrovnávacej pamäte, na ktorú odkazuje lpOutbuffer.
lpBytesReturned - adresa premennej dword, ktorá dostane veľkosť údajov zadaných v lpOutBuffer.
lpOverlapped je adresa štruktúry OVERLAPPED, ak chcete, aby bola operácia asynchrónna. Ak chcete počkať na dokončenie operácie, zadajte do tohto poľa NULL.
*/
wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // napíšte riadok do vyrovnávacej pamäte (adwOutBuffer -> stroka)
CloseHandle (hDevice);
návrat 0;
}
počítačový program jadro ovládača
2.3 Krok 3
Zoznam course.cpp
#zahrnúť
#zahrnúť
#zahrnúť
{
Nevyžiadaná pošta DWORD;
0, // atribúty súboru
návrat (NEPRAVDA);
}
0, // veľkosť vstupného buffera
CloseHandle (hDevice);
návrat (bVýsledok);
}
int main (int argc, char * argv)
{
/*
typedef struct (
PARTITION_STYLE PartitionStyle; // formát sekcie
LARGE_INTEGER StartingOffset; // posunutie začiatku sekcie
LARGE_INTEGER PartitionLength; // veľkosť oddielu
Číslo oddielu DWORD; // číslo sekcie
BOOLEAN RewritePartition; // ak je sekcia prepisovatelna tak TRUE
zväz (
PARTITION_INFORMATION_MBR Mbr; // dodatočné informácie o sekcii MBR Style
PARTITION_INFORMATION_GPT Gpt; // dodatočné informácie o sekcii Štýl GPT
};
) PARTITION_INFORMATION_EX;
*/
BOOL bVýsledok;
systém („PAUZA“);
return ((int) bVýsledok);
}
2.4 Krok 4
1) Skombinujte všetky funkcie vyvinuté v krokoch 1-3 do jednej sady programov.
Konečný komplex by mal vyzerať takto:
- Náš ovládač je zabudovaný do systému a načítaný v štádiu zavádzania systému Windows.
- Aplikácia požiada vodiča o potrebné informácie (uvedené v 2. etape), vodič tieto informácie odovzdá, pričom je na chvíľu zapnutý aj reproduktor a zaznie melódia (špecifikovaná v 1. etape). Potom aplikácia odošle požiadavku vodičovi existujúcemu v systéme (v súlade s možnosťou fázy 3).
2) Vydajte vysvetľujúcu poznámku, ktorá by mala popísať všetky 4 etapy, ako aj teoretické informácie o každej fáze.
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
#define IOCTL_GET CTL_CODE (FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)
BOOL GetPartitionNumber (PARTITION_INFORMATION_EX * pex)
{
HANDLE hZariadenie; // deskriptor kontrolovaného zariadenia
BOOL bVýsledok; // príznak výsledku
Nevyžiadaná pošta DWORD;
hDevice = CreateFile (TEXT ("\\\\. \\ c:"), // zariadenie na otvorenie
GENERIC_READ | GENERIC_WRITE, // prístup k zariadeniu
FILE_SHARE_READ | FILE_SHARE_WRITE, // režim zdieľaného použitia
NULL, // predvolené atribúty zabezpečenia
OPEN_EXISTING, // umiestnenie
0, // atribúty súboru
NULOVÝ); // nekopírujte atribúty súborov
if (hDevice == INVALID_HANDLE_VALUE) (// zariadenie sa nedá otvoriť
printf ("CreateFile () zlyhal! \ n");
návrat (NEPRAVDA);
}
bResult = DeviceIoControl (hDevice, // požadované zariadenie
IOCTL_DISK_GET_PARTITION_INFO_EX, // operácia, ktorá sa má vykonať
NULL, // ukazovateľ na vstupnú vyrovnávaciu pamäť
0, // veľkosť vstupného buffera
pex, sizeof (* pex), // výstupná vyrovnávacia pamäť
& junk, // počet bajtov, ktoré sa majú vrátiť
(LPOVERLAPPED) NULL); // synchronizácia vstupu / výstupu (I / O)
CloseHandle (hDevice);
návrat (bVýsledok);
}
int _tmain (int argc, _TCHAR * argv) (
SC_HANDLE hSCManager;
SC_HANDLE hService;
char acDriverPath;
HANDLE hZariadenie;
BOOL DevControl;
DWORD dwBytesReturned;
LPVOID adwInBuffer, adwOutBuffer;
char stroka;
PARTITION_INFORMATION_EX pex; // štruktúra zariadenia
BOOL bVýsledok;
hDevice = CreateFile ("\\\\. \\ sldevGet", GENERIC_READ + GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice! = 0) (
DevControl = DeviceIoControl (hDevice, IOCTL_GET, & adwInBuffer, sizeof (adwInBuffer), & adwOutBuffer, sizeof (adwOutBuffer), & dwBytesReturned, NULL);
if ((DevControl! = 0) && (dwBytesReturned! = 0)) (
wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // napíšte riadok do vyrovnávacej pamäte (adwOutBuffer -> stroka)
if (stroka == "00000100") MessageBox (NULL, "Nájdené 1,44 Mb", "Yermakov FDD scaner", MB_OK);
else MessageBox (NULL, "Nenašiel sa", "Yermakov FDD scaner", MB_OK);
hSCManager = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE);
if (hSCManager! = 0) (
GetFullPathName ("beeper.sys", veľkosť acDriverPath, acDriverPath, NULL);
// Zaregistrujte hudobníka v tabuľkách SCM
hService = CreateService (hSCManager, "beeper11", "Nice Melody Beeper11",
SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE, acDriverPath, NULL, NULL, NULL, NULL, NULL);
if (hService! = 0) (
StartService (hService, 0, NULL);
DeleteService (hService);
CloseServiceHandle (hService);
) else MessageBox (NULL, "Nemôžem zaregistrovať ovládač", NULL, MB_ICONSTOP);
CloseServiceHandle (hSCManager);
) else MessageBox (NULL, „Nedá sa pripojiť k SCManager“, NULL, MB_ICONSTOP);
) else MessageBox (NULL, "Can" t send send control code ", NULL, MB_OK);
CloseHandle (hDevice);
) else MessageBox (NULL, "Dev is not present", NULL, MB_ICONSTOP);
bResult = GetPartitionNumber (& pex);
if (bResult) (printf ("PartitionNumber =% d \ n", pex.PartitionNumber);
) else (printf ("GetPartitionNumber () zlyhalo. Chyba% d. \ n", GetLastError ());)
systém („PAUZA“);
return ((int) bVýsledok);
}
3. Prevádzka aplikácie
Obrázok 3.1. Ovládač z kroku 2
Obrázok 3.2. Ovládač z kroku 3
Publikované na Allbest.ru
Podobné dokumenty
Mechanizmy interakcie medzi ovládačom režimu jadra a užívateľskou aplikáciou: viacvrstvová architektúra ovládača, algoritmus skrývania údajov, interakcia ovládača a aplikácie, užívateľské rozhranie programu na filtrovanie prístupu k súborom.
semestrálny príspevok, pridané 23. júna 2009
Architektúra I / O systému Windows NT. Vnútorná organizácia zbernice USB. Základná charakteristika modelu ovládača WDM. Vstupné body vyvíjaného ovládača, umiestnenie kódu do pamäte, inštalácia ovládača do systému. Implementácia kódu vodiča v C.
semestrálny príspevok pridaný 27. 9. 2014
Štruktúra užívateľského režimu, ktorá umožňuje užívateľovi interagovať so systémom. Popis režimu jadra, ktorý zaisťuje bezpečné spustenie používateľských aplikácií (programov). Vrstva abstrakcie hardvéru Windows NT.
prezentácia pridaná 23.10.2013
Jadro Windows 98. Úloha 16-bitových modulov jadra. Problémy s výkonom. Kooperatívny a preventívny multitasking. Vylepšené využitie zdrojov v systéme Windows 98. Použitie WordArt. MS Outlook Express: vytváranie a odosielanie správ.
test, pridané 14. 4. 2005
Spoločné fungovanie všetkých počítačových zariadení a prístup k jeho zdrojom. Koncept a funkcie grafického operačného systému Windows. Pozadie služba windows... Správa súborového systému. Technológia Plug and Play. Grafické rozhranie Windows.
test, pridané 22. 1. 2011
Charakteristika operačného systému. História vývoja systému Windows. Porovnávacie charakteristiky verzií Windows. Prvky a Nástroje systému Windows XP. Aplikačné programy v systéme Windows XP. Pracovné stolové počítače a notebooky so systémom Windows.
správa pridaná 16/10/2011
Použitie ovládača a ovládacej aplikácie v režime jadra na vytváranie systémových vlákien. Simulácia spracovania údajov a organizácia oneskorení. Vývoj ovládačov v C ++. Konfigurácia testovacej stolice. Presnosť zmien oneskorení a prevádzky časovača.
semestrálny príspevok, pridané 24. 6. 2009
Prípravné práce na vnútornej štruktúre operačného systému Windows. Architektúra NT a štruktúra jadra. Metódy na potlačenie funkcií v režime jadra a režime koristuvach. Pochopenie vodiča. I / O pakety. Hodnotenie stability a zabezpečenia systémov Windows.
semestrálny príspevok, pridané 1. 2. 2014
Pojem, typy a činnosť brány firewall. Vstavaný firewall systému Windows. Windows XP SP2, prístup k nastaveniam brány firewall Windows XP Service Pack 2. Windows Vista, povolený prenos. Windows 7, aktívne nastavenia profilu. Osobný firewall, testovacie úrovne.
abstrakt, pridané 19/11/2010
Zoznámenie s technické vlastnosti osobný počítač... Inštalácia operačného systému a Ovládače systému Windows 7. Metódy čistenia Windows XP Professional SP3. Metódy obnovy operačného systému. Inštaluje sa Microsoft Office 2010.