Správa napájania v systéme Windows. Správa napájania v staršom volajúcom jadre Windows Powercfg

Centrum zabezpečenia programu Windows Defender vrátane nová sekcia Device Security, ktorá ponúka správu pokročilých bezpečnostných nástrojov, ako je napríklad izolácia jadra.

Core Isolation je bezpečnostná technológia založená na virtualizácii, ktorá poskytuje dodatočná úroveň ochrana pred inteligentnými útokmi. Integrita pamäte je jedným zo stavebných kameňov technológie izolácie jadra – funkcie navrhnutej na zabránenie vkladania škodlivý kód do procesov s vysokou bezpečnosťou. Ochrana je zabezpečená zabezpečením toho, že stránka virtuálnej pamäte jadra sa spustí až po úspešnom absolvovaní kontroly konzistencie.

Poďme sa pozrieť na to, ako povoliť integritu pamäte v aktualizácii Windows 10 z apríla 2018, aby bol váš počítač bezpečnejší.

Povolenie integrity pamäte

  • Otvorte Centrum zabezpečenia programu Windows Defender.
  • Vyberte časť „Zabezpečenie zariadenia“.
  • V časti „Izolácia jadra“ kliknite na odkaz „Informácie o izolácii jadra“.
  • Umiestnite prepínač integrity pamäte do aktívnej polohy.

Po dokončení týchto krokov musíte reštartovať počítač, aby sa zmeny prejavili.

Poznámka: Aby táto funkcia fungovala, váš procesor musí podporovať virtualizačné technológie. Okrem toho musí byť povolená virtualizácia v systéme BIOS alebo UEFI. V opačnom prípade bude funkcia nedostupná.

Oprava problémov s izoláciou jadra

V niektorých prípadoch sa môžete stretnúť s problémami s kompatibilitou v niektorých aplikáciách, ak je povolená izolácia jadra. Ak chcete problém vyriešiť, budete musieť funkciu vypnúť.

Ak sa pokúšate zakázať integritu pamäte v Centre zabezpečenia programu Windows Defender, ale možnosť sa stala sivou a zobrazí sa správa „Toto nastavenie riadi váš správca“, môžete túto funkciu zakázať pomocou systémového registra.

Poznámka: Nesprávna zmena registra môže spôsobiť vážne problémy. Odporúča sa vytvoriť zálohovanie register systému Windows pred pokračovaním v týchto krokoch. Ak chcete zálohu uložiť, v ponuke Editor databázy Registry vyberte položky Súbor> Exportovať.

  • Stlačte kombináciu Klávesy Windows+ R na zobrazenie okna Spustiť.
  • Zadajte príkaz regedit a kliknutím na tlačidlo OK spustite Editor databázy Registry.
  • Prejdite na nasledujúcu cestu:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ DeviceGuard \ Scenarios \ HypervisorEnforcedCodeIntegrity
  • Dvakrát kliknite na záznam Povolené.
  • Zmeňte hodnotu z 1 na 0.
  • Kliknite na tlačidlo OK.

Ak chcete zakázať, môžete použiť aj hotové

Otázka: Kedy dlhá práca počítač alebo prebudenie z režimu spánku sa písmo stratí v ponuke štart


Keď je počítač spustený dlhší čas alebo keď sa prepne z režimu spánku, ponuka Štart bude vyzerať takto.

Ako to napravím? Pomôž mi prosím..

odpoveď: už preinštalovaný a aktualizovaný OS (

Otázka: Ako uvediem počítač do režimu spánku S1 ("Pohotovostný režim")?


Nie zapnuté stolný počítač, ani na notebooku neviem prísť na to ako dať počítač do hibernácie typu S1.

Výsledok spustenia "powercfg / a"

V tomto systéme sú dostupné nasledujúce stavy hibernácie:
Pohotovostný režim (S3)

Nasledujúce stavy hibernácie nie sú v tomto systéme dostupné:
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 dostupná.

odpoveď: Nechajte počítač niekoľko minút nečinný, potom ho uložte do režimu spánku a prebuďte ho.

V denníku udalostí:
Akcia => vytvoriť vlastný pohľad
V položke dátum nastavte napríklad dvojminútový interval a uvidíte, čo sa stalo.

Viac nápadov nemám.

Skontrolujte ovládače a zariadenia pripojené k počítaču

Otázka: Vstáva o 4:00


Takmer každú noc sa počítač zobudí a zobudí ma.
v správcovi zariadení, sieťové adaptéry, zrušil začiarknutie políčka „prebudiť sa magickými paketmi“.
deaktivovali časovače budenia v nastaveniach napájania.
v príkazový riadok ukazuje to príkaz powercfg / waketimers.

c: \> powercfg / budíky
Časovač nastavený funkciou Legacy Kernel Caller je platný do 4:14:46 dňa 01.09.2016.
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ť úlohu ú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 ráno pokračovať v práci od okamihu jeho prerušenia), sa samovoľne zapne. V práci končím cca o 12 v noci, t.j. k zapnutiu dôjde o 0:30 ... 1:00 ráno. Monitor však zostáva tmavý. Vstanem z postele, pohnem myšou - monitor sa zapne, vstúpim do profilu v normálnom režime, dám ho späť do režimu spánku - dnes večer sa už nezapne.

Na počítači s Win7 sa nachádza rezidentný antivírus MS Cecurity Esentials. Niekoľkokrát som spustil lokálne (čerstvo stiahnuté) nástroje na vytvrdzovanie mbar a DrWeb Cureit - narazili na niekoľko byak, ale spontánna aktivácia zostala. Vyzerá to ako vírus, ktorý spája môj počítač s DDOS útokmi. Navyše Google z času na čas zablokuje prístup kvôli podozrivej návštevnosti prichádzajúcej z mojej IP adresy. Deje sa to už dlhšie (viac ako rok), no spontánny štart počítača som zaznamenal len nedávno.

V skutočnosti otázka znie: ak je problém známy a je relatívne ľahké ho liečiť, potom si stiahnem odporúčaný softvér, naskenujem ho a uverejním. Ak je problém zložitejší, tak nebudem oblbovať seba ani miestneho guru a hlúpo prestavovať systém.

odpoveď: Sokoliar niečomu som celkom nerozumel...

Správa od Sokoliar

po prepnutí počítača do režimu spánku ... sa samovoľne zapne

Spánok a hibernácia v 7 sú úplne iné veci. Ak ho chcete prepnúť do režimu spánku, stačí stlačiť tlačidlo spánku na klávesnici. Ak kliknete na Š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 napájania rovnakým spôsobom ako pri vypnutí, ale po zapnutí počítača môžete začať pracovať rovnakým spôsobom ako po režime spánku.
Ale ty si sa pýtal na niečo iné. Skontrolovali ste Plánovač úloh?

Otázka: Počítač sa v noci prebúdza z režimu spánku


Pekný deň všetkým. Tento problém ma už dostal. PC samo od seba v noci vypadne z režimu spánku, je to Windows 10, predtým tam bol 7, taký problém nebol, tak som si vybral práve túto sekciu.
Čo sa už urobilo 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" a požiada počítač o prebudenie z režimu spánku.
Išiel som do Plánovača úloh, našiel som túto úlohu a odstránil som zaškrtávacie políčko z položky: Podmienky - Zobuďte počítač, aby ste dokončili úlohu.
2. Prešiel som na powercfg.cpl – Nastavenia schémy napájania – Zmeniť Extra možnosti Napájanie - Spánok - Povoliť časovače budenia - VYPNÚŤ.

Dnes večer sa situácia zopakovala, ale pri prezeraní udalostí som našiel iba:

Systém ukončil režim hibernácie.

Čas spánku: 2016-10-29T21: 38: 38,657073700Z
Čas budenia: 2016-10-29T21: 58: 34,625754700Z

Výstupný zdroj: Žiadne údaje

3. V správcovi zariadení som odstránil zaškrtávacie políčko „povoliť tomuto zariadeniu prebudiť počítač z pohotovostného režimu“ z myši, klávesnice, sieťovej karty a všade tam, kde som to našiel ...

Pomôžte vyriešiť tento problém, už neviem kde mám kopať...

odpoveď:

Správa od GoLeMjkeee

Náklady denne od 2:00

Zmeňte na denné.

Správa od GoLeMjkeee

ale kliešť .... nestojí za to.

Je taká, s charakterom.

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, aby ste stlačili "Enter". Po prebudení sa objaví modrá obrazovka s nápisom užívateľského mena a pod ním tlačidlom „Prihlásiť sa“. Heslo nie je nastavené, používateľ má ako jediný v systéme práva správcu. Pri načítavaní je všetko v poriadku, žiadne obrazovky a klikanie na tlačidlá, len pracovná plocha.

V Možnosti- účty- Možnosti prihlásenia neexistuje žiadna položka "Vyžaduje sa prihlásenie".
V okne Používateľské kontá 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 „Prihlásiť sa“ pri ukončení režimu spánku, aby počítač automaticky spustil pracovnú plochu a obišiel toto okno?

odpoveď: odstrániť hibernáciu

Otázka: Windows 8.1 sa vypne v režime spánku


Ahoj.
Mám problém s hibernáciou. Počas spánku sa počítač úplne vypne. Tie. sila úplne zmizne. Predtym mi v spanku blikala ziarovka na systemovej jednotke, teraz je mys tiez uplne "vyblednuta" s usb, klavesnica zhasne a da sa zapnout len ​​vypinacim tlacidlom a samozrejme vsetky infa sa neulozia.
Prečí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 Silikónová sila s55 120gb, HDD WD 500gb.
Nainštalovaný Windows 8.1, stojí už veľmi dlho a hibernácia fungovala ako mala. Raz to prestalo fungovať, ani neviem presne prečo a po čom (nejakej akcii) to prestalo fungovať. Nič také som neinštaloval, nezdalo sa mi, že by som aktualizoval ovládač.
Často zo zvyku namiesto vypnutia stlačím tlačidlo spánku a raz to fungovalo a fungovalo niekoľko dní, ale časom to prestalo fungovať.
Pokúsil sa aktualizovať alebo odinštalovať ovládače. Pokúsil som sa odpojiť od počítača prídavné zariadenia(no, nikdy nevieš). Pred spaním som vypol rôzne programy. Nič nepomáhalo.
Na internete som našiel jedinú informáciu, ktorá je úplne rovnaká ako tá moja (bod 8):

Samozrejme, nemohol som nainštalovať ovládače, rôzne platformy. Nemohol som nájsť to isté pre seba.

Nechcem preinštalovať OS. vsetko (okrem spacieho) funguje dobre.
Nejaké nápady, čo by mohlo byť zlé?

Pridané po 17 minútach
Zabudol som napísať, čo resetoval a aktualizoval BIOS.

odpoveď: skontroluj potom bud TK alebo matku. Programovo sme nakonfigurovali spánok a hibernáciu powercfg / h zapnuté.

Ďalšou možnosťou je skontrolovať (nahradiť). hiberfil.sys - je zodpovedný za hibernáciu.

Otázka: Hibernácia v systéme Windows 8


po odchode zo spánku režim Windows 8 sa začne reštartovať a potom spustenie systému Windows spustí sa nasledujúca správa
povedz mi, ako sa s tým vysporiadať?

odpoveď:

Správa od azat145

po ukončení režimu hibernácie sa systém Windows 8 začne reštartovať

Najprv.
Neskôr.

Otázka: Hybridný spánok alebo hibernácia? Čo je lepšie na pracovnej ploche?


Vo všeobecnosti je otázka v názve. Ako som z vyhľadávača, respektíve z toho istého článku skopírovaného na všetky stránky pochopil, výhoda Hybridného režimu spánku je len v rýchlosti zapnutia, zobudenia, dalo by sa povedať. A ak chcem použiť režim dlhodobého spánku na pracovnej ploche Windows 7 x64, existuje podvodné skaly? Potrebujem len vypnúť napájanie a je lepšie to nerobiť v režime hybridného spánku. Ďakujem každému kto odpovie

odpoveď: Dnes som to prečítal. Dobre, podľa mňa neexistuje iná odpoveď na moju otázku ako krátky briefing od Microsoftu. Potom sa podelím o svoje zistenia (pre tých, ktorí spadajú do tejto témy v podobnej otázke).
Takže:

klady Hybridný režim spánku: 1. Rýchly štart, nie je potrebné úplne vypnúť počítač;
Mínusy: 1. Zaťaženie HDD(podľa jedného moderátora zo sekcie Windows 7 na našom fóre); 2. Nevypne sa úplne, naďalej spotrebúva prúd, aj keď trochu (hoci 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 zaťažovať/vypínať OS.
Hybridný režim spánku - pre tých, ktorí sa uspokoja s počítačom, ktorý je neustále v sieti.

Otázka: Predtým sa prenosný počítač vypínal pri spustení, teraz je v režime spánku


môj notebook DELL INSPIRON 3521 s Windows 8.1 býval vypnutý pri štarte (objavilo sa logo DELL - deaktivovať - ​​znova povoliť a normálne fungovať). Aktualizoval som systém za 10k, nepomohlo. Nosil som ho do strediska horských služieb, známeho v meste a vychvaľovaného - tam notebook bezpečne odpočíval 2 týždne od ľudskej pozornosti. Keď som to vzal, problém som vyriešil odpojením rýchle načítanie a na oslavu sa vrátil k 8.1.
Prešiel mesiac a teraz, keď zatvorím kryt notebooku, prejde do režimu spánku (ako v nastaveniach), ale po 20 minútach alebo trochu viac sa úplne vypne (predtým to tak nebolo a nastavenia napájania sa nezmenili). Pri zapnutí nastáva situácia, ktorú som opísal vyššie: zapnutie - logo - vypnutie. Normálna prevádzka po reštarte. Všetky ovládače sú aktuálne. Aký by mohol byť problém a ako ho vyriešiť? Je to škoda pre chudáka - spolu rok a pol, ale mám diplom a štátne vysvedčenia - teraz to nemôžem nosiť okolo majstrov ...

odpoveď: Ako chcete, aby to fungovalo? Osobne používam hibernáciu nie hibernáciu, prechod do hibernácie je povolený aj pri nečinnosti, nastavenia v prílohe

Prenos nastavení napájania

Odoslanie dobrej práce do databázy znalostí 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í.

Uverejnené 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čov jadra

Ovládač je počítačový program, prostredníctvom ktorého iný program (spravidla operačný systém) pristupuje k hardvéru štandardným spôsobom.

Skica ukazuje, ako fungujú rôzne typy ovládačov:

Je vhodné rozdeliť na 2 typy:

- Ovládače jadra (fungujú na úrovni privilégií 0, ale nijako neinteragujú ani s užívateľským programom, ani so zariadením. Práve nimi začneme (sú jednoduchšie a môžu byť aj užitočné).

Ovládače zariadení sú potrebné na interakciu medzi používateľským programom a zariadením, konkrétne na prenos údajov medzi nimi, na ovládanie zariadenia. Okrem toho môžu byť zariadenia 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 pre virtuálne zariadenia – objekty, ktoré sa správajú ako I/O zariadenia, ale nezodpovedajú žiadnemu fyzickému zariadeniu.

Komponenty jadra bežia v režime privilegovaného procesora (nazývanom režim jadra), môžu robiť všetko, konkrétne:

- môžu vykonávať príkazy privilegovaného procesora (ako lgdt),

- môže mať prístup k systémovým údajom a kódu,

- mať priamy prístup k zariadeniam, napríklad cez porty

- mať prístup k pamäťovým bunkám; ovládač nemôže priamo manipulovať s fyzickou pamäťou, môže však 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 čeliť mnohým obmedzeniam, ktoré je možné prekonať iba umiestnením kódu do adresného priestoru systému. Jediný zdokumentovaný spôsob, ako to urobiť, je nainštalovať ovládač. Táto metóda je pomerne jednoduchá, spoľahlivá a čo je najdôležitejšie, plne podporovaná samotným operačným systémom.

Kód jadra (v skutočnosti ide o samotný systém) sa považuje za úplne dôveryhodný. Po načítaní do adresného priestoru systému sa preto ovládač stáva súčasťou systému a nepodlieha žiadnym obmedzeniam. V systéme Windows je to prakticky jediný spôsob, ako môžu vývojári, ktorí nemajú operačný systém, písať systémové komponenty na úrovni jadra.

Na písanie a štúdium spôsobov vývoja ovládačov využívajú DDK (Device Development Kit) – systém na vývoj ovládačov.

Okrem dokumentácie obsahuje DDK súbor súborov typu include (* .inc) a súborov knižníc (* .lib).

Windows teda podporuje rôzne typy ovládačov zariadení, no okrem toho existujú ovládače, ktoré nie sú ovládačmi zariadení, ale umožňujú jednoducho vytvárať programy, ktoré sa budú spúšťať v režime jadra Windowsu, t.j. na úrovni oprávnení 0. Pritom majú plný prístup k OS a hardvéru.

Poďme sa pozrieť na najjednoduchší ovládač v režime jadra.

#include

int DriverEntry (

V PDRIVER_OBJECT pDriverObject,

V PUNICODE_STRING pusRegistryPath) (

}

Vstupným bodom je DriverEntry, ktorý je štruktúrovaný ako postup, ktorý má dva parametre:

pDriverObject Ukazovateľ na novovytvorený objekt ovládača. Pri načítavaní ovládača systém vytvorí objekt ovládača, ktorý predstavuje obraz ovládača v pamäti. Systém ovláda vodiča cez tento objekt. Objekt ovládača je obyčajná 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 práve načíta do systému a okamžite sa vyloží.

Teraz sa pozrime na šablónový program, ktorý bude potrebné použiť na vývoj programu v prvom kroku práce v kurze (ovládač režimu jadra beeper.sys).

Úlohou tohto ovládača je zahrať jeden tón až do prvej oktávy na dynamike systému. Na tento účel ovládač používa vstupné a výstupné inštrukcie procesora s odkazom na príslušné I/O porty. Je všeobecne známe, že prístup k I/O portom je posvätne strážený. systém Windows zdroj. Pokus o prístup k niektorej z nich, na vstupe aj výstupe, z používateľského režimu nevyhnutne vedie k výnimke.

V našom príklade 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 aj nastaviť frekvenciu zvuku. Na tento účel sa používa podsystém časovača, ktorý pracuje nezávisle od procesora a má 3 kanály. Výstup kanálu 2 je pripojený k reproduktoru, ktorý sa používa na generovanie zvuku rôznych frekvencií. Počuteľný rozsah zvuku je 30Hz-6000Hz.

Ak chcete nastaviť frekvenciu zvuku, riadiace slovo 0Bh sa odošle na port 43h (register príkazov časovača):

mov al, 0Bh

von 43h, al

Táto hodnota určuje číslo kanálu, ktorý budeme ovládať, typ operácie, režim kanálu a formát počítadla.

Potom sa prepočítaná frekvencia zvuku (1193167 / frekvencia (Hz)) odošle na port 42h v dvoch častiach (najprv časť nižšej úrovne, potom časť vyššej úrovne).

Napríklad chceme získať zvukovú frekvenciu 100 Hz. Prepočítame frekvenciu,

1193167/100 = 11931

potom:

mov 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 iné hudobné zvuky (každý má variant).

Úlohy si často vyžadujú rôzne trvanie. Na tento účel je vhodné použiť procedúru DO_DELAY tak, že do nej odošlete nepriamo definovaný parameter „čas ozvučenia“.

Na uľahčenie ladenia ovládača existujú rôzne nástroje. Najjednoduchšie je zobraziť potrebné informácie v špeciálnom okne pomôcky Debug View. Tento program je predbežne spustený a nakonfigurovaný na zachytávanie správ 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.

Existujú rôzne spôsoby, ako nainštalovať ovládač do jadra. Keďže náš ovládač v skutočnosti systém nepotrebuje (neovláda žiadne zariadenie), ovládač dočasne pripojíme k systému a potom ho vymažeme.

Ak to chcete urobiť, musíte vytvoriť aplikáciu, ktorá spustí ovládač. ako? Ovládač je služba na úrovni jadra. Preto bude aplikácia využívať SCM - Service Control Manager, ktorý je súčasťou Windows a beží na užívateľskej úrovni.

Preto potrebujete vytvoriť riešenie z dvoch projektov: konzolová aplikácia a ovládač.

Ak chcete vyvinúť ovládače v jazyku C, musíte najprv:

- nainštalovať DDK,

- nastavte premennú prostredia WNETBASE (hodnota je cesta k DDK, napr. 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 Vytvoriť príkazový riadok

ddkbuild -WNETXP chk. -ceZ

čo znamená volanie špeciálneho skriptu na prepojenie VC s DDK

Súbory sa musia nachádzať v aktuálnom priečinku projektu:

zdroje, makefile, ddkbuild.cmd (skript), zdrojový súbor ovládača.c

Po zostavení projektu musí mať ovládač rozšírenie sys.

Aplikácia spustí ovládač beeper.sys, t.j. zaregistruje ho v registri a spustí ho. Po dokončení ho vymaže z registra.

Aby aplikácia spúšťala 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 spustiť aplikáciu.

Ovládače sa ladia veľmi ťažko. V prípade chýb v prevádzke OS často zamrzne a vyžaduje reštart. A pre náš ovládač musíte po reštarte vymazať 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 robiť veci, ktoré sa nedajú robiť na uží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 dáta sa neprenášajú medzi užívateľským programom a zariadením (napokon, prečo je ovládač zvyčajne potrebný? Na organizovanie výmeny dát medzi užívateľskou aplikáciou a zariadenie).

Teraz vyvinieme ovládače zariadení, ktoré prenášajú údaje tam a späť medzi používateľskou aplikáciou a zariadením.

Keď aplikácia vyžaduje vstupno-výstupnú operáciu, zavolá sa ovládač. Na tento účel môže aplikácia požiadať o čítanie údajov zo zariadenia alebo o zápis údajov do zariadenia. A ak je potrebná nejaká iná akcia, napríklad dopytovanie alebo ovládanie zariadenia, alebo niečo iné, tak tzv. IOCTL rozhranie (Device In-Out Control).

Budeme zvažovať práve takýto prípad pre virtuálne zariadenia, pretože častejšie ako nie, prečo potrebujeme virtuálne zariadenie v ovládači? Aby ste do nej mohli prenášať dáta, ktoré vodič vie nejako spracovať (akože v aplikácii nemožné) a výsledok vrátiť do aplikácie. Pripomeňme, že zvyčajný ovládač jadra, o ktorom sme hovorili vyššie, z aplikácie nič nezobral a nič tam nevrátil, ale jednoducho vykonal akcie, ktoré aplikácia nemala k dispozícii.

Keď aplikácia vyžaduje vstupno-výstupnú operáciu, zavolá sa ovládač. Na to slúži tzv. IOCTL rozhranie (Device In-Out Control).

Aplikácia na volanie robí nasledovné:

1) Otvorenie súboru a získanie jeho deskriptora:

GENERIC_READ + GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL

Výsledkom je, že ak všetko prebehlo úspešne, dostaneme deskriptor zariadenia.

2) Odoslanie akčného kódu vodičovi (čo robiť, vodič môže vykonať mnoho rôznych akcií):

vyvolanie DeviceIoControl, deskriptor, kód akcie, 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) Zatvorenie súboru a podľa toho uvoľnenie deskriptora.

vyvolajte rukoväť zariadenia CloseHandle

Na prenos dát sa moduly (aplikácia a ovládač) musia dohodnúť na interakčnom protokole (kódy akcií, štruktúra vyrovnávacích pamätí – vstup a výstup).

V aplikácii aj v ovládači sa používa rovnaký kód akcie.

Kód akcie v aplikácii a v ovládači môže byť napísaný v hexadecimálnom tvare alebo môžete použiť makro CTL_CODE, ako sa to robí vo vzorovom laboratóriu. pracovať v súbore common.inc.

Pozrime sa na príklad kódu akcie 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 h

Prístupové práva – FILE_READ_ACCESS + FILE_WRITE_ACCESS = 1 + 2 = 3 = 11b

Rozsah kódu funkcie je od 800h do FFFh. Máme 800 hod.

Metóda vyrovnávacej pamäte - spôsob prenosu údajov medzi aplikáciou a ovládačom (možné sú tri):

Pre malé množstvo údajov sa zvyčajne používa METHOD_BUFFERED (00b) - dodatočná vyrovnávacia pamäť je pridelená v nestránkovej pamäti, dostatočná 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á úlohu prepisovania údajov medzi použí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 manažér uloží do pamäte fyzické stránky obsahujúce vyrovnávaciu pamäť používateľského režimu. Zároveň vytvára pomocnú štruktúru MDL (Memory Descriptor List) na popis pevných stránok. A vývojár ovládačov pracuje s MDL.

Prístup cez vyrovnávaciu pamäť na úrovni používateľa - METHOD_NEITHER (3); pole z IRP - SystemBuffer. I/O manažér odovzdá virtuálne adresy užívateľského režimu ovládaču. A v ovládači s nimi musíte pracovať veľmi opatrne, pretože ovládač by mal v tomto prípade fungovať iba v kontexte volajúceho vlákna.

Keď aplikácia odošle kód akcie ovládaču, spustí sa I/O manažér. Zodpovedá za vygenerovanie paketu požiadavky I/O (IRP) a jeho odoslanie ovládaču na ďalšie spracovanie.

Budeme brať do úvahy 3 typy žiadostí:

IRP_MJ_CREATE – bude odovzdaný CreateFile,

IRP_MJ_DEVICE_CONTROL – bude prenášaný zariadením DeviceIoControl

IPR_MJ_CLOSE – na CloseHandle

IRP pozostáva z hlavičky a alokačných zásobníkov. I/O manažér vytvorí počet buniek I/O zásobníka, ktorý sa rovná počtu vrstiev ovládača zapojených do spracovania požiadavky. Každý ovládač má povolený prístup k vlastnému umiestneniu zásobníka. Keď ovládač 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 nahor do bunky vodiča najvyššej úrovne. Získanie ukazovateľa pomocou funkcie - IoGetCurrentStackLocation ().

Každý zásobník pridelenia obsahuje ukazovateľ na DeviceObject a FileObject, pre ktorý bola požiadavka iniciovaná. IRP sú vždy uložené v nestránkovanej pamäti.

Aby ovládač fungoval, sú vytvorené a použité nasledujúce objekty:

Objekt vodiča;

Predmety zariadenia;

Fázy vodiča.

1) Vytvorenie objektu ovládača. Vytvorené pri načítaní ovládača vo fáze jeho spustenia. V tomto bode sa spustí funkcia DriverEntry a vyplní sa pole MajorFunction, ako aj ukazovateľ na objekt zariadenia a z neho.

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 "\ ?", ktorý má prístupný (kód užívateľského režimu). ďalší predmet je symbolickým odkazom. Ovládač shablon.sys vytvorí v adresári "\ ?" symbolický odkaz "slshablon" na svoje zariadenie "devshablon", ktorého hodnota je reťazec "\ Device \ devshablon".

Teda už pri načítavaní ovládača (v našom prípade vo fáze načítania OS) máme v pamäti tri objekty: ovládač "\ Driver \ shablon", zariadenie "\ Device \ shablon" a symbolický odkaz na zariadenie "\ ?? \ slshablon".

3) Otvorenie. Ďalej, keď sa aplikácia spustí, zavolá sa CreateFile. Je tam odkaz na zariadenie. Objektová štruktúra zariadenia DEVICE_OBJECT získava informácie o svojom obsluhujúcom ovládači. I/O manažér vygeneruje IRP I/O request paket typu IRP_MJ_CREATE a odošle ho ovládaču. Takto vodič vie, že kód užívateľského režimu sa pokúša získať prístup k jeho zariadeniu. Ak to ovládaču nevadí, vráti kód úspechu. Náš vodič má špeciálny postup odoslania, ktorý reaguje na toto IRP - DispatchCreateClose (existuje kombinovaný postup na otvorenie a zatvorenie zariadenia). Obsahuje STATUS_SUCCESS v poli Io.Status.Status a 0 v poli 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 na vytvorenie virtuálny súbor... Toto vytvorí nový prvok v tabuľke rukoväte procesu s ukazovateľom na objekt "súbor" a vráti novú rukoväť do kódu užívateľského režimu.

Ak je všetko v poriadku, tak deskriptor súboru vrátený CreateFile uložíme do premennej hDevice.

4) Operácie dovnútra / von. Teraz sme schopní vykonávať operácie na ovládanie tohto zariadenia volaním funkcií DeviceIoControl. Keďže ovládač zariadenia môže v princípe vykonávať mnoho rôznych úloh, je potrebné požiadavky nejako odlíšiť. Na to slúži druhý parameter dwIoControlCode, nazývaný I/O riadiaci kód, 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žiadavky I/O typu IRP_MJ_DEVICE_CONTROL a odošle ho ovládaču. Ovládač zavolá zodpovedajúcu procedúru DispatchControl, ktorej sa odovzdá kód akcie a informácie o adresách a veľkostiach vstupných a výstupných vyrovnávacích pamätí ako parametre. Toto všetko sa oznamuje prostredníctvom IRP. V postupe sa z IRP prevezmú potrebné informácie: kód akcie, adresa vyrovnávacej pamäte na prenos údajov.

Procedúra DispatchControl vykoná potrebné úkony, v našom prípade adresu IRP paketu z registra ESI Potom prenesie výsledok cez výstupný buffer 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 to malo robiť s rukoväťami, ktoré už nie sú potrebné, volaním funkcie CloseHandle zatvoríme 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žaduje od ovládača adresu IRP a potom túto adresu odošle štandardné okno Windows.

Shablon.sys - ovládač.

Ovládač shablon robí niečo, čo sa nedá urobiť na úrovni používateľa v tomto prípade definuje obsah registra esi, keď je ovládač spustený.

Aplikácia vo výstupnej vyrovnávacej pamäti prijme obsah esi, skonvertuje ho na hexadecimálny výstup a odošle ho do štandardného okna Windows.

Ak potrebujete získať informácie z CMOS v ovládači, potrebujete:

Pošlite požadovaný offset CMOS na port 70h;

Malé oneskorenie;

Získajte informácie z portu 71h na al.

Potom zapíšte tieto informácie do výstupnej vyrovnávacej pamäte.

A v aplikácii je potrebné prevziať informácie z výstupnej vyrovnávacej pamäte, v prípade potreby ich transformovať a zobraziť, prípadne analyzovať a v závislosti od výsledku zobraziť potrebný text v štandardnom okne.

Toto laboratórium predpokladá, že ovládač je natrvalo nainštalovaný v systéme Windows pomocou súboru .inf pomocou ovládacieho panela - Inštalácia hardvéru: Pridať nové zariadenie, Inštalovať manuálne, Zobraziť všetky zariadenia, Z diskety, prechádzať a vybrať súbor .inf (ovládač musí byť v rovnakom priečinku).

Ak chcete skontrolovať, či je ovládač nainštalovaný, na ovládacom paneli vyberte položku Systém, Hardvér, Správca zariadení.

1.3 Prístup k existujúcim ovládačom z aplikácií v používateľskom režime

Algoritmus aplikácie pracujúci s ovládačom

Na prácu s ovládačom potrebuje aplikácia v užívateľskom režime získať manipulátor (rukoväť) ovládača. Tento manipulátor je možné získať pomocou funkcie CreateFile alebo CreateFileA API, ktorá pracuje so znakmi ASCII. Ďalej sa využíva API funkcia DeviceIoControl, ktorej sa ako jeden z parametrov odovzdáva IOCTL kód. IOCTL kód je riadiaci kód, pomocou ktorého sa ovládač dozvie o operácii, ktorú aplikácia požaduje vykonať, o spôsobe odovzdávania parametrov a o prístupových právach, ktoré aplikácia potrebuje na vykonanie tejto operácie. Po zavolaní aplikácie

IRP_MJ_DEVICE_CONTROL sa odošle do ovládača DeviceIoControl. Po spracovaní požiadaviek sa riadenie vráti aplikácii a zostáva na aplikácii, aby analyzovala odpoveď ovládača a zatvorila otvorené rukoväte.

Príklad

V nižšie uvedenom príklade aplikácia v užívateľskom režime odošle požiadavku IOCTL_DISK_GET_PARTITION_INFO_EX ovládaču súborového systému, analyzuje prijaté informácie a vypíše formát oblasti pevného disku.

#include

#include

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,

if (hDevice == INVALID_HANDLE_VALUE)

MessageBoxA (NULL, "Chyba CreateFileA!", "Chyba", 0);

if (DeviceIoControl (

/ * 1 * / (Rukoväť) hDevice,

/ * 5 * / & piPartitionInfo,

/ * 6 * / sizeof (piPartitionInfo),

/ * 7 * / & dwBytesVrátené,

if (piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)

MessageBoxA (NULL, "PARTITION_STYLE_MBR", "Titulok", 0);

else if (piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)

MessageBoxA (NULL, "PARTITION_STYLE_GPT", "Titulok", 0);

MessageBoxA (NULL, "PARTITION_STYLE_RAW", "Titulok", 0);

MessageBoxA (NULL, "Chyba DeviceIoControl", "Chyba", 0);

CloseHandle (hDevice);

Analýza príkladu

Deklarujú sa premenné potrebné na fungovanie aplikácie. PARTITION_INFORMATION_EX je štruktúra, ktorá popisuje informácie o úsek tvrdý disk.

typedef struct (

) PARTITION_INFORMATION_EX;

V tejto časti programu sa volá funkcia CreateFileA na získanie handle, ktorý sa zapíše do premennej hDevice.

Funkcia DeviceIoControl sa volá synchrónne. Prenáša sa na ňu:

deskriptor zariadenia;

IOCTL kód IOCTL_DISK_GET_PARTITION_INFO_EX;

ukazovateľ na vstupnú vyrovnávaciu pamäť, v našom prípade NULL;

veľkosť vstupnej vyrovnávacej pamäte;

ukazovateľ na výstupnú vyrovnávaciu pamäť;

veľkosť výstupnej vyrovnávacej pamäte;

ukazovateľ na premenlivé ako DWORD, ktorý bude uchovávať počet bajtov, ktoré sa majú vrátiť;

ukazovateľ na štruktúru OVERLAPPED, ktorá sa používa asynchrónne volanie funkcie.

Po návrate riadenia sa v prípade úspešného dokončenia funkcie uložia informácie o oddiele do štruktúry PARTITION_INFORMATION_EX.

Vykonáva sa analýza a výstup informácií. Pred vrátením kontroly operačný systém otvorené rukoväte je možné zavrieť. Umožňuje vám to funkcia CloseHandle (__ v HANDLE). Ak deskriptory nie sú zatvorené, operačný systém to urobí za vás.

2. Realizácia semestrálnej práce

2.1 Krok 1

Cvičenie: 1. Vytvorte ovládač jadra s prístupom k portom, vykonávaním akcií podľa voľby a výstupom informácií do okna Debug View (podľa voľby), ako aj aplikáciu, ktorá spúšťa ovládač.

Výpis 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) (

// Odstrániť položku ovládača

DeleteService (hService);

CloseServiceHandle (hService);

návrat 0;

}

Výpis Beeper.sys

#include

#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

void DO_DELAY (int time) (

dlhé i, j;

pre (i = 0; i<=time*0xfffff; i++) {}

}

void DO_BIG_DELAY (int time) (

DO_DELAY (2 * čas);

}

void xylofón (int nPitch) (

int nTone = TIMER_FREQUENCY / nPitch

_asm (

mov al, 10110110b; // zapíšte riadiace slovo po 43 hodinách

out 43h, al; // Kanál ovládania zvuku – logika využívajúca tón časovača a softvérovo riadené bity systémových portov

mov eax, nTone; // zapíšte prepočítanú frekvenciu na 42

von 42h, al; // horná časť

mov al, ah; // nízka časť

mimo 42h, al

v al, 61h; // zmena escape sekvencie - premena posledných bitov na jednotky

; // bit 0 - povolenie na používanie reproduktora

; // bit 1 - povolenie na pripojenie časovača-2 k reproduktoru

alebo al, 00000011b; reproduktor zapnutý

von 61h, al

}

DO_DELAY (0x7f);

_asm (

v spol, 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

Vyviňte ovládač virtuálneho zariadenia, ktorý vám umožní vykonávať akcie, ktoré sú dostupné len na nulovej úrovni oprávnení (v súlade s voľbou), a potom preneste výsledky do aplikácie na tretej úrovni oprávnení na ich zobrazenie.

V aplikácii vypíšeme výsledok do štandardného okna Windows.

Zoznam shablon.c

#include // rôzne definície NT

#include

UNICODE_STRING g_usDeviceName;

UNICODE_STRING g_usSymbolicLinkName;

void 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);

vrátiť STATUS_SUCCESS;

}

NTSTATUS DispatchControl (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// spracovanie IRP_MJ_DEVICECONTROL

stav NTSTATUS;

int regEsi;

// presunieme 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 toto náš klient, potom:

_asm (

ťah eax, 0

mov al, 10h

mimo 70h, al

v spol, 71h

cbw

cwde

mov regEsi, eax

}

// toto je naša funkcionalita - berieme obsah registra esi

// zapíšte to do systémovej vyrovnávacej pamäte

* ((int *) pIrp-> AssociatedIrp.SystemBuffer) = regEsi;

pIrp-> IoStatus.Information = 4; // a nastavte veľkosť výsledku

stav = STATUS_SUCCESS;

) else status = STATUS_INVALID_DEVICE_REQUEST;

pIrp-> IoStatus.Status = stav;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

vrátiť (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 ovládaču, ktorá funkcia čo spracováva

pDriverObject-> DriverUnload =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

// vytvorí logický objekt virtuálneho zariadenia

Stav = IoCreateDevice (pDriverObject, 0, & g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, & pDeviceObject);

if (! NT_SUCCESS (Stav)) (návrat stavu;)

// vytvorte symbolický odkaz na zariadenie

Stav = IoCreateSymbolicLink (& g_usSymbolicLinkName, & g_usDeviceName);

ak (! NT_SUCCESS (Stav)) (

IoDeleteDevice (pDeviceObject);

návratový stav;

}

návratový stav;

}

Výpis kurzu2.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) (

RUKOJEŤ hDevice;

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 nadobúdať ľubovoľnú kombináciu nasledujúcich hodnôt:

Hodnota: Popis:

0 Určuje dotaz na dostupnosť objektu na zadanom zariadení. Aplikácia môže požadovať atribúty zariadenia bez toho, aby k nemu pristupovala.

GENERIC_READ Určuje prístup na čítanie z objektu. Dáta je možné čítať zo súboru a presúvať ukazovateľ súboru. Skombinujte s GENERIC_WRITE pre prístup na čítanie a zápis.

GENERIC_WRITE Určuje prístup na zápis do objektu. Dáta je možné zapísať do súboru a presunúť ukazovateľ súboru. Skombinujte s GENERIC_READ pre prístup na čítanie a zápis.

dwShareMode Režim zdieľaného prístupu k objektu. Ak je hodnota nula, objekt nemôže byť zdieľaný viacerými programami. Všetky následné operácie na otvorenie objektu zlyhajú, kým sa rukoväť objektu nezatvorí. Ak chcete zdieľať objekt, použite kombináciu nasledujúcich hodnôt:

Hodnota: Popis:

FILE_SHARE_DELETE Umožňuje sekvencii otvorenia objektu požiadať o prístup k vymazaniu.

FILE_SHARE_READ Umožňuje otvorenej sekvencii objektu požiadať o prístup na čítanie.

FILE_SHARE_WRITE Umožňuje otvorenej sekvencii objektu požadovať prístup na zápis

lpSecurityAttributes Adresa štruktúry SECURITY_ATTRIBUTES, ktorá určuje, či handle vrátený funkciou môže alebo nemôže zdediť podradený proces.

Ak má lpSecurityAttributes hodnotu NULL, deskriptor nemožno zdediť.

dwCreationDisposition

Hodnota: Popis:

CREATE_ALWAYS Vždy vytvorí nový súbor.

Ak súbor existuje, funkcia súbor prepíše.

CREATE_NEW Vytvorí nový súbor. Ak súbor existuje, funkcia zlyhá.

OPEN_ALWAYS Otvoriť súbor, vždy. Ak súbor neexistuje, funkcia ho vytvorí rovnakým spôsobom, ak by 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ď sa otvorí existujúci súbor, CreateFile ignoruje súbor šablóny.

Návratové hodnoty:

Ak funkcia uspeje, vráti sa otvorený popisovač zadaného súboru. Ak zadaný súbor existuje pred volaním funkcie a parameter dwCreationDisposition je CREATE_ALWAYS alebo OPEN_ALWAYS, volanie GetLastError vráti ERROR_ALREADY_EXISTS, aj keď je funkcia úspešná. Ak súbor pred volaním neexistuje, GetLastError vráti 0 (nulu).

V prípade chyby funkcia vráti INVALID_HANDLE_VALUE. Ak chcete získať ďalšie informácie o chybe, zavolajte na GetLastError.

*/

if (hDevice! = 0) (

/*

hDevice je rukoväť vrátená CreateFile.

dwIocontrolCode je hodnota, ktorá označuje operáciu, ktorá sa má vykonať.

lpInBuffer je adresa vyrovnávacej pamäte, ktorá obsahuje údaje potrebné na vykonanie operácie špecifikovanej 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ú poukazuje lpInBuffer.

lpOutBuffer je adresa vyrovnávacej pamäte, ktorá sa naplní výstupom, keď je operácia úspešná. Ak operácia neposkytuje výstup, toto pole MUSÍ mať hodnotu NULL.

nOutBufferSiz je veľkosť vyrovnávacej pamäte v bajtoch, na ktorú poukazuje lpOutbuffer.

lpBytesReturned je adresa premennej dword, ktorá dostane veľkosť údajov zadaných v lpOutBuffer.

lpOverlapped je adresa štruktúry OVERLAPPED, ak chcete, aby operácia bola asynchrónna. Ak chcete počkať na dokončenie operácie, zadajte do tohto poľa hodnotu NULL.

*/

wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // zápis riadku do vyrovnávacej pamäte (adwOutBuffer -> stroka)

CloseHandle (hDevice);

návrat 0;

}

počítačový program jadra ovládača

2.3 Krok 3

Výpis kurzu.cpp

#include

#include

#include

{

DWORD nevyžiadaná pošta;

0, // atribúty súboru

návrat (NEPRAVDA);

}

0, // veľkosť vstupnej vyrovnávacej pamäte

CloseHandle (hDevice);

návrat (bVýsledok);

}

int main (int argc, char * argv)

{

/*

typedef struct (

PARTITION_STYLE PartitionStyle; // formát sekcie

LARGE_INTEGER Počiatočný posun; // posun začiatku sekcie

LARGE_INTEGER PartitionLength; // veľkosť oddielu

DWORD PartitionNumber; // číslo sekcie

BOOLEAN RewritePartition; // ak je sekcia prepisovateľná, potom TRUE

únia (

PARTITION_INFORMATION_MBR Mbr; // ďalšie informácie o sekcii Štýl MBR

PARTITION_INFORMATION_GPT Gpt; // ďalšie informácie o sekcii GPT Style

};

) PARTITION_INFORMATION_EX;

*/

BOOL bVýsledok;

systém ("PAUSE");

návrat ((int) bVýsledok);

}

2.4 Krok 4

1) Skombinujte všetky funkcie vyvinuté v krokoch 1-3 do jednej sady programov.

Výsledný komplex by mal vyzerať takto:

- Náš ovládač je zabudovaný do systému a načítava sa počas fázy zavádzania systému Windows.

- Aplikácia si vyžiada od vodiča potrebné informácie (špecifikované v 2. stupni), vodič tieto informácie odovzdá, pričom sa na chvíľu zapne aj reproduktor a prehrá sa melódia (špecifikovaná v 1. stupni). 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) Vypracujte vysvetľujúcu poznámku, v ktorej by mali byť opísané všetky 4 etapy, ako aj teoretické informácie pre každú etapu.

#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)

{

RUKOJEŤ hDevice; // deskriptor kontrolovaného zariadenia

BOOL bVýsledok; // príznak výsledku

DWORD nevyžiadaná pošta;

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žívania

NULL, // predvolené bezpečnostné atribúty

OPEN_EXISTING, // umiestnenie

0, // atribúty súboru

NULOVÝ); // nekopírujte atribúty súboru

if (hDevice == INVALID_HANDLE_VALUE) (// nemožno otvoriť zariadenie

printf ("CreateFile () zlyhalo! \ n");

návrat (NEPRAVDA);

}

bResult = DeviceIoControl (hDevice, // požadované zariadenie

IOCTL_DISK_GET_PARTITION_INFO_EX, // vykonávaná operácia

NULL, // ukazovateľ na vstupnú vyrovnávaciu pamäť

0, // veľkosť vstupnej vyrovnávacej pamäte

pex, sizeof (* pex), // výstupná vyrovnávacia pamäť

& junk, // počet bajtov, ktoré sa majú vrátiť

(LPOVELAPE) 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;

RUKOJEŤ hDevice;

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); // zápis riadku do vyrovnávacej pamäte (adwOutBuffer -> stroka)

if (stroka == "00000100") MessageBox (NULL, "Nájdené 1,44 Mb", "Skener Yermakov FDD", MB_OK);

else MessageBox (NULL, "Nenájdené", "Skener Yermakov FDD", MB_OK);

hSCManager = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE);

if (hSCManager! = 0) (

GetFullPathName ("beeper.sys", veľkosť acDriverPath, acDriverPath, NULL);

// Zaregistrujte hudobníka do tabuliek 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, "Nedá sa odoslať riadiaci kód ", NULL, MB_OK);

CloseHandle (hDevice);

) else MessageBox (NULL, "Vývoj nie je prítomný", NULL, MB_ICONSTOP);

bResult = GetPartitionNumber (& pex);

if (bVýsledok) (printf ("Číslo Oddielu =% d \ n", pex.Číslo Oddielu);

) else (printf ("GetPartitionNumber () zlyhal. Chyba% d. \ n", GetLastError ());)

systém ("PAUSE");

návrat ((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

Uverejnené na Allbest.ru

Podobné dokumenty

    Mechanizmy interakcie medzi ovládačom režimu jadra a používateľskou aplikáciou: viacvrstvová architektúra ovládača, algoritmus skrývania údajov, interakcia ovládač-aplikácia, používateľské rozhranie programy na filtrovanie prístupu k súborom.

    ročníková práca, pridaná 23.06.2009

    I/O architektúra Windows NT. Vnútorná organizácia USB zbernica... 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 ovládača v C.

    semestrálna práca, pridaná 27.09.2014

    Štruktúra užívateľského režimu, ktorý užívateľovi umožňuje interakciu so systémom. Popis režimu jadra, ktorý zaisťuje bezpečné vykonávanie používateľských aplikácií (programov). Vrstva abstrakcie hardvéru Windows NT.

    prezentácia pridaná dňa 23.10.2013

    Jadro Windows 98. Úloha modulov 16-bitového jadra. Problémy s výkonom. Kooperatívny a preemptívny multitasking. Vylepšené využitie prostriedkov v systéme Windows 98. Používanie WordArt. MS Outlook Express: vytváranie a odosielanie správ.

    test, pridaný 14.04.2005

    Spoločné fungovanie všetkých zariadení počítača a prístup k jeho zdrojom. Koncepcia a funkcie grafickej operačnej sály systémy Windows... Pozadie servis okien... Kontrola systém súborov... Technológia Plug and Play. Grafické rozhranie Windows.

    test, pridané 22.01.2011

    Charakteristika operačného systému. História vývoja systému Windows. Porovnávacie charakteristiky Verzie systému Windows... Prvky a Nástroje systému Windows XP. Aplikačné programy v systéme Windows XP. Desktop a prenosné počítače so systémom Windows.

    správa doplnená dňa 16.10.2011

    Použitie ovládača režimu jadra a riadiacej aplikácie na vytvorenie systémových vlákien. Simulácia spracovania údajov a organizovanie oneskorení. Vývoj ovládačov v C++. Konfigurácia skúšobnej stolice. Presnosť zmien oneskorenia a prevádzky časovača.

    semestrálna práca, pridaná 24.06.2009

    Prípravné práce na vnútornej štruktúre operačného systému Windows. NT architektúra a jadrová štruktúra. Metódy pre prepisovanie funkcií v režime jadra a režime koristuvach. Pochopenie vodiča. I/O pakety. Hodnotenie stability a bezpečnosti systémov Windows.

    semestrálna práca, pridaná 01.02.2014

    Koncepcia, typy a činnosť firewallu. Vstavaný firewall systému Windows. Windows XP SP2, prístup k nastaveniam brány firewall Windows XP Service Pack 2. Windows Vista, povolená prevádzka. Windows 7, aktívne nastavenia profilu. Osobný firewall, testovacie úrovne.

    abstrakt, pridaný 19.11.2010

    Zoznámenie sa s technické vlastnosti osobný počítač... Inštalácia operačného systému a Windows ovládače 7. Metódy čistenie okien XP Professional SP3. Metódy obnovy operačného systému. Výkon inštalácie spoločnosti Microsoft Office 2010.

Microsoft v operačnom systéme Windows 10 venuje veľkú pozornosť bezpečnosti. Jedným z dôležitých prvkov systému je „ Ochranca systému Windows“ Ale nedokáže sa vyrovnať so všetkými hrozbami. Najmä v poslednej dobe získavajú na popularite vírusy Ransomware, z ktorých najznámejšie sú reinkarnácie malvér Peťa a. Spoločnosť Microsoft implementovala funkcie izolácie jadra a integrity pamäte v systéme Windows 10 na boj proti vírusom Ransomware. V predvolenom nastavení sú zakázané.

Obsah:

Čo je izolácia jadra a integrita pamäte

Izolácia jadra je proces dodatočnej ochrany, ktorý je zabezpečený metódou tienenia počítačových procesov od operačného systému a zariadenia. Vďaka týmto akciám je možné vyhnúť sa narušeniu prevádzky operačného systému, keď sa vírusy dostanú do počítača.

Integrita pamäte je ochranná funkcia, ktorá sprevádza izoláciu jadra, ktorá je zameraná na obmedzenie prístupu neznámych potenciálne nebezpečných programov k procesom s vysoký stupeň bezpečnosť.

Dôležité: Funkcia izolácie jadra môže fungovať iba vtedy, ak sú na to dostatočné podmienky na strane hardvéru počítača. V nastavenia 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 a obmedzovať 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 bezpečnostnými funkciami v počítači. Prostredníctvom nastavení systému Windows 10 môžete povoliť izoláciu jadra a integritu pamäte takto:


Ako je uvedené vyššie, ak hardvér vášho 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 zabezpečiť integrita pamäte. Možná nekompatibilita." Ak sa zobrazí toto hlásenie, odporúča sa prejsť do systému BIOS a zistiť, či je funkcia povolená. Bezpečné spustenie(Režim zavádzania).

Ako zakázať izoláciu jadra a integritu pamäte

Nové funkcie v operačnom systéme, ktoré vážne ovplyvňujú jeho fungovanie, vždy predstavujú riziko spôsobenia problémov s počítačom. Funkcia izolácie jadra nie je výnimkou. Používatelia, ktorí to už vyskúšali, poznamenávajú na fórach spoločnosti Microsoft, že sa stretávajú s problémami pri spúšťaní množstva hier a programov. Jediný spôsob, ako vyriešiť tento problém, je vypnúť izoláciu jadra a integritu pamäte. Možno v budúcich aktualizáciách vývojári aplikácií alebo Microsoft túto nekompatibilitu opravia.

Existujú 3 spôsoby, ako zakázať izoláciu jadra a integritu pamäte: