Upravljanje napajanjem u sustavu Windows. Kontrola snage u tečaju performansi sustava Windows

Upravljački programi kernela: Dio 1: Osnovni pojmovi - Wasm.ru Arhiva

Pregled arhitekture

Unutarnji svijet sustava Windows 2000 podijeljen je na dva dijela s jasno određenim granicama, kako u smislu adresnog prostora, tako iu pogledu prava i dužnosti Kodeksa u ovom adresnom prostoru izvršne vlasti.

Uz razdvajanje adresnog prostora, sve je iznenađujuće jednostavno. Sva četiri dostupna u 32-bitnoj arhitekturi, gigabajti su podijeljeni u dva jednaka dijela (4GT RAM ugađanje i fizičko proširenje i fizičkoj adresi i snizim kao ZcZotic). Donja polovica se daje procesima korisničkih načina rada, na vrhu pripada kernelu.

Uz razdvajanje prava i odgovornosti malo teže.

Sljedeći procesi uključuju korisnika:

  • Procesi podrške sustava (procesi podrške sustava) - na primjer, proces unošenja Winlogon sustava (implementiran u sustavu sustava% \\ tInlogon.exe);
  • Procesi usluga (procesi usluga) - na primjer, kalem za ispis;
  • Prilagođene aplikacije (korisničke aplikacije) - Postoji pet vrsta: Win32, Windows 3.1, MS-DOS, Posix i OS / 2;
  • Okoliš podsustavi (okruženja podsustavi) - Podržani su tri podsustava za okoliš: Win32 (implementiran u% Systemroot% System32 CSRSS.EXE), POSIX (implementiran u% Systemroot% System32 PSXS.EXE), OS / 2 ( Provedeno u sustavu sustava %32 OS2S.Exe).

Kerfer se sastoji od sljedećih komponenti:

    Izvršni sustav (izvršni) - upravljanje memorijom, procesi i niti, itd.;
  • Kernel - planiranje protoka, otpremanje prekida i iznimke, itd. (Implementirano u% Systemroot% System32 ntoskrnl.exe);
  • Vozač upravljačkih programa - hardverski upravljački programi, mrežni upravljački programi, upravljački programi datotečnih sustava;
  • Hardver apstraktni sloj, HAL - izolira tri komponente gornje komponente iz razlika između hardverskih arhitektura (implementiranih u sustavu% Systemroot% System32 Hal.dll);
  • Withong i grafički sustav (grafičko korisničko sučelje, GUI) (implementirano u% Systemroot% System32 Win32K.SYS).

Sl. 1-1. Pojednostavljena shema arhitekture sustava Windows 2000

Korisnički način i način rada kernela

Iako Intel X86 obiteljski procesori podržavaju četiri razine povlastica (nazvane zaštitne prstenove), samo se dvije koriste u sustavu Windows: 0 OH za način rada kernela i 3. za korisnički način rada. To je zbog potpore drugih procesora (Alpha, MIPS), u kojima se provode samo dvije razine povlastica. Prethodna izdanja sustava Windows NT podržava ove arhitekture, ali samo X86 podrška ostala je u sustavu Windows 2000.

Komponente korisničkog načina imaju vlastite zaštićene adresne prostore, te procese struje se izvode u ne-povlaštenom načinu procesora (nazvan korisnika), ne mogu izvršiti privilegirane naredbe procesora, imaju ograničen i posredovani pristup podacima sustava, te na adresni prostor, učinite ne izravno pristup opreme. Istina, u procesu njegovog rada, tokovi tih procesa, usluge pozivanja sustava, idite na način rada kernela, ali u ovom slučaju potpuno gube kontrolu nad njegovom izvršenjem prije povratka na korisnički način.

Procesi korisničkog režima smatraju se potencijalno opasnim u smislu stabilnosti sustava. Njihova prava su ograničena. I sve vrste pokušaja da se nadilaze ovih ograničenja teško su zaustaviti.

Komponente kernela dijele jedinstveni adresni prostor, izvedeni u privilegiranom načinu procesora (nazvan mod kernela), može izvršiti sve, uključujući i povlaštene, procesorne naredbe, imaju neograničen i izravan pristup podacima sustava i kod, imaju izravan ili putem Hal, pristup opremi.

Smatra se da jezgreni kod (zapravo je sustav) u potpunosti pouzdan. Stoga se učitava u prostor za adresu sustava, vozač postaje dio sustava i sva ograničenja se ne postavljaju na njemu.

Dakle, korisničke aplikacije su odvojene od samog operativnog sustava. Ako navedite cilj pisanja za neke ozbiljne aplikacije, za rad s unutarnjim funkcijama ili strukturama sustava sustava, naići ćete na više ograničenja, prevladati koji možete posjedovati samo vaš kod u prostoru adrese sustava. Od dokumentacije postoji samo jedan način za to - instalirajte upravljački program uređaja. Ova metoda je relativno jednostavna, pouzdana i najvažnije, potpuno opremljena podrškom same operacijskog sustava.

Windows 2000 vozača

Windows 2000 podržava više vrsta upravljačkih programa uređaja.

Postoje dva osnovna koja imaju svoje predstavnike:

  • Korisnički način upravljački programi: Korisnički način rada:
    • Virtualni upravljački programi uređaja, VDDS se koriste za podršku MS-DOS programima (ne smije se miješati s VXD upravljačkim programima u sustavu Windows 95/98 - to su potpuno različite stvari, iako imaju jedno ime);
    • Vozači pisača.
  • Upravljački programi kernela (upravljački programi kernela):
    • Vozači datotečnih sustava (upravljački programi datotečnog sustava) - implementirajte ulaz i izlaz na lokalne i mrežne pogone;
    • Legacy Vozači - napisan za prethodne verzije sustava Windows NT;
    • Vozači upravljačkih programa - implementiraju grafičke operacije;
    • Streaming Vozač - Streaming Vozač - implementirati video i zvuk I / O
    • WDM upravljačke programe (Windows Driver Model, WDM) - Podrška polet i reprodukcija tehnologije i upravljanja energijom. Njihova prepoznatljiva značajka je kompatibilnost na razini izvornog koda između sustava Windows 98, Windows Me i Windows 2000.

U različitim izvorima možete upoznati klasifikaciju nešto drugačije od gore navedenog, nije važno. Važno je da vozači koje ćemo pisati ne padaju pod bilo koje stavke ove klasifikacije. To nisu niti upravljački programi datotečnog sustava niti naslijeđeni upravljački programi, niti pokretači videodasti ili audio kartica, niti WDM upravljačke programe, jer Nemojte podržavati polet "n" reprodukciju i kontrolu snage. To nisu vozači korisničkih režima (uopće nije zanimljivo). Zapravo, samo zna što je to, jer Sam sustav omogućuje jednostavno i jednostavno dodavanje kod samo po sebi nije jasno za koji uređaj i radi s njom bilo što! Tako ste noću imali potpuno nepoznato čovjeka na vratima, a ne biste ga rekli da ga u noći pustim u noć, i još uvijek bih stavio u svoj krevet! Međutim, to nije neka vrsta bugova ili rupe u sigurnosnom sustavu. Samo sustav radi kao što radi. Inače, to ne može, jer Interakcija s okolinom, sustav je prisiljen osigurati pristup. A ako to nije tako, to bi bilo potpuno zatvoreno, a time i beskorisni sustav.

Kako slijedi s samog imena, upravljački program uređaja je program dizajniran za kontrolu nekih uređaja, a uređaj ne mora biti fizički. Može biti logično ili, kao u našem slučaju, virtualni.

Po svojoj strukturi, upravljački program uređaja je sve drugo kao PE format (prijenosna izvršna datoteka, PE). Isto kao i obični exe i dll. Samo učitava i radi na drugim pravilima. Vozači se mogu smatrati DLL načina rada kernela dizajniran za obavljanje zadataka koji nisu riješeni iz korisničkog načina rada. Glavna razlika ovdje (ne računajući razinu povlastica) je da nećemo izravno pristupiti vozaču, niti na njegov kod, niti na njegove podatke i koristit će poseban mehanizam koji daje I / O Dispečer (ulaz / izlazni upravitelj ). I / O dispečer pruža okruženje za rad upravljačkih programa, a također osigurava mehanizme za preuzimanje, istovar i upravljanje njima.

Početak rada razvojem vozača režima kernela, osjetit ćete savršen pridošlica, jer Cijelo prethodno iskustvo korištenja API-ja neće pomoći ovdje - kernel pruža potpuno drugačiji skup funkcija. Također ćete morati koristiti slabo dokumentirane (definirane samo u zaglavljem datotekama) ili na svim dokumentima nedokumente i strukture podataka.

Pojedinačni i višestruki upravljački programi

Većina upravljačkih programa za fizičke uređaje su višestruki (slojeviti upravljački programi). I / o obrada zahtjeva je podijeljena između višestrukih upravljačkih programa. Svaka obavlja svoj dio rada. Na primjer, čitač datoteka se prenosi na upravljački program datotečnog sustava, koji je, nakon što je dovršio neke operacije (na primjer, cijepanje upita u nekoliko dijelova), prenosi ga "ispod" pogonskog pogona, a onaj, zauzvrat, šalje a zahtjev vozaču autobusa. Osim toga, između tih upravljačkih programa može se dodati bilo koji broj vozača filtra (na primjer, šifriranje podataka). Traženjem upravljačkog programa podređenosti (vozač niže razine) prenosi svoje rezultate "gore" na viši (vozač više razine). Ali, na sreću, svi ćemo biti mnogo lakši. Naši vozači uvijek će biti na jednoj razini (monolitne upravljačke programe), što će uvelike pojednostaviti cijeli proces pisanja i ispravljajući ih.

Kontekst poplava

Budući da u većini slučajeva imamo samo jedan procesor, a aplikacije koje trebaju obavljati mnogo su, prirodno je da stvoriti iluziju istodobnog izvršenja, potrebno je dosljedno povezati te aplikacije na procesor i vrlo brzo , Ovaj se postupak naziva kontekst konteksta konteksta konteksta. Ako sustav prebacuje kontekst tokova koji pripadaju istom procesu, onda je potrebno spremiti vrijednost procesora registara procesorskog toka, i učitati, unaprijed pohranjene vrijednosti registara procesora plug-in , I ažurirajte neke strukture podataka. Ako dodatak pripada drugom procesu, onda je potrebno preuzeti pokazivač na imenik stranice u CR3 registar procesora (direktorij stranice) procesa. Budući da je svaki korisnički proces opremljen zatvorenim adresnim prostorom, postoje različiti procesi adresarskih prostora, što znači različite stranice direktorije i skupova stranica za koje procesor prevodi virtualne adrese u fizički. Sve to nije izravno povezano s programiranjem upravljačkih programa. Ali podsjećam na to u vezi s kojom. Budući da operacija konteksta nije najbrže, onda vozači, iz razloga boljih performansi, u pravilu ne stvaraju svoje struje. Ali kod vozača i dalje treba obaviti. Stoga, da biste uštedjeli vrijeme za uključivanje konteksta, upravljački programi se izvode u načinu rada kernela u jednom od tri konteksta:

  • u kontekstu korisničkog protoka iniciranja i / o zahtjeva;
  • u kontekstu sustava sustava kernela (ovi tokovi pripadaju procesu sustava);
  • kao rezultat prekida (i stoga, ne u kontekstu procesa ili protoka, koji je bio struja u vrijeme prekida).

Ne razumijem kako možete nešto izvesti "ne u kontekstu bilo kojeg procesa ili toka", već s obzirom na autoritet ljudi koje su napisali (D. Salomon i M. Russinovich), kao i ono što nam ne trebamo , jer. Nećemo se nositi s bilo kojim softverom, ne više, hardver prekida, o trećem slučaju možete odmah zaboraviti. Ostaju prve dvije opcije. Ako se inicira I / O upit, onda smo u kontekstu protoka ovog zahtjeva i pokrenuli, a to znači da možemo izravno pristupiti adresnom prostoru kojih ovaj potok pripada. Ako smo u kontekstu toka sustava, onda se može izravno povezati s bilo kojim korisničkim procesom, a mi uvijek možemo kontaktirati sustav. Ako trebate od vozača da vidite kakav je proces u takvom procesu, morat ćete ili prebaciti kontekst, ili za emitiranje adresa na tablice stranica.

Prekid razine upita

Prekid je sastavni dio svakog operativnog sustava. Prekid zahtijeva obradu, tako da se izvršenje trenutnog koda zaustavlja i kontrola se prenosi na rukovatelj prekida. Postoje i hardver i softverske prekide. Prekida se servisiraju u skladu s njihovim prioritetom. Windows 2000 koristi prekide sheme određivanja određivanja prioriteta poznat kao prekid razine upita (razine prekida, iRQL). Ukupno, postoji 32 razine, od 0 (pasivna) koja ima najmanji prioritet, 31 (visok), koji ima najvišu kvalitetu, odnosno. Štoviše, prekida s irql \u003d 0 (pasivno) putem irql \u003d 2 (DPC otpremni) su softver i prekida s iRQL \u003d 3 (uređaj 1) putem irql \u003d 31 (visoka) je hardver. Ne zbunjuju razinu prioriteta prekida s razinama prioriteta toka su potpuno različite stvari. Prekid s razinom irql \u003d 0, strogo govoreći, nije prekid, jer Ne može prekinuti rad bilo kojeg koda (jer za to se ovaj kod treba izvesti na još nižijoj razini prekida, ali ne postoji takva razina). Na ovom IRQL-u se izvode struje korisničkog režima. A kodeks naših vozača također će se izvoditi na ovom IRQL. To ne znači da se kod bilo kojeg vozača uvijek izvodi na "pasivnoj" razini. Mi ćemo jednostavno ne nositi bilo koji softver, niti više hardverskih prekida. I odavde, najmanje dva vrlo važna izlaza.

Prvo: rad naših vozača može se prekinuti u bilo koje vrijeme, da obrađuje prekide s višim prioritetom (na primjer, od tajmera, kada će planer uzeti u obzir da naš potok i tako dugo ima procesor za dugo vremena, i to je vrijeme za odmor). Stoga, u tom smislu, kod naših vozača je prekinut i raseljen (procesor se daje drugom potoku), baš kao i kod bilo kojeg korisnika. Postoje nukleus funkcije koje vam omogućuju da saznate trenutnu razinu prekida, kao i povećanje ili niže.

Druga važna točka: na razini pasivnog prekida, možete nazvati bilo kakve funkcije kernela (u DDK-u u opisu svake funkcije, potrebno je odrediti na kojem se razinu prekida može nazvati), a također pristupiti stranicama memorije pao u Paging datoteka. Na višim razinama prekida (DPC / Disport i više), pokušaj privlačeći stranicu koja nedostaje u fizičkoj memoriji vodi do kolapsa sustava, jer Memory Manager (memorijski upravitelj) ne može se nositi s pogreškom stranicama.

"Zaslon plave smrti"

Mislim da je sve, barem jednom, vidio uzbudljivu sliku nazvan "plavi smrt zaslon" (plavi zaslon smrti, BSOD). Vjerojatno nema potrebe objasniti što je to i zašto se to dogodi. Ovdje je važno da razvijanjem upravljačkih programa kernela, pripremite se za činjenicu da se BSOD često pojavljuje na zaslonu vašeg monitora.

U trećem prstenu, sve je bilo jednostavno: skicirao primjer uzorni kod, stavio Int3 gdje je bilo potrebno, pokrenut sam i ... u debuggeru, već rastavljate što. Ako nešto nije u redu - prikovan, ispravljen pogreške, recompild ... i tako dalje, dok kôd ne zaradi. Kada programiranje vozača o ovoj tehnici možete zaboraviti. Ovdje se "SAPPER" pogriješi jednom. Jedan netočan pokret ... i možete se oslanjati na stražnju stranu stolice i opustiti se za minutu.

Da biste vidjeli BSOD koliko god je to moguće, trebali biste se držati jednog vrlo jednostavno pravilo: "sedam puta će umrijeti - jedan rez" ... u smislu "sedam puta ček - jedan trčanje". Sigurno samo kaže, ali je mnogo teže učiniti. No, u pravilu, s obzirom na činjenicu da je struktura vozača koje ćete napisati (nakon čitanja ovih članaka) relativno je jednostavna, možete se nositi s pogreškama prije pojave BSOD-a. Ako se uporno pojavi pred vašim očima, a ne možete razumjeti razlog, moguće je razjasniti situaciju je analiza spinjala za hitne slučajeve (crash deponi). Činjenica da je kako to učiniti i analizirati može se čitati u članku Mark Russinovich "Analiza hitne memorije odlagališta" http://www.ospi.ru/win2000/2001/03/025.htm. To je (analiza) vrlo je teško, ali mislim da ga neću doći do njega.

Teoretičar mene je sramežljiv, tako da se sve gore navedeno može promatrati kao vrlo osnovne informacije o tim načelima koji su apsolutno potrebni za razumijevanje. Nemoguće je početi razvijati upravljačke programe kernela bez koncepta da takav tok kontekst, prekida razine i prioritete potoka, kernel / korisnički način, itd. itd Nemoj se osjećati nesigurno - popis referenci je ispod.

Sada osvijetli neke praktične stvari (oni će postati vrlo praktične u sljedećim člancima), naime, ono što trebamo pretvoriti u praksu sve te teorije.

Komplet za razvoj vozača.

Prvi je, naravno, skup kompleta za razvoj upravljačkog programa (Windows 2000 Driver Development Kit, 2KDDK), koji se može slobodno skinuti s Microsofta (u svakom slučaju, spojio sam ga potpuno besplatno: http://www.microsoft. com / ddk /). Ovaj paket uključuje dokumentaciju koja je bogat izvor informacija o unutarnjim strukturama podataka i intrastustemskim funkcijama koje koriste upravljački programi uređaja.

Osim dokumentacije u DDK-u, skup knjižnica (* .lib), koji će biti apsolutno neophodan kada je izgled. DDK sadrži dva skupa tih datoteka: za konačnu verziju sustava Windows (nazvana besplatno graditi); I za ispravljanje pogrešaka (nazvano čekanje (provjereno graditi)). Ove datoteke su u katalozima% DDK% LICFRE I386 i% DDK% \\ tI386, odnosno. Verzija za ispravljanje pogrešaka karakterizira stroga provjera pogrešaka. Morate koristiti datoteke koje odgovaraju vašoj verziji sustava tako da ih stavite u katalog MASM32.

Datoteke uključuju

Također ćemo trebati omogućiti (* .cc) datoteke s definicijama prototipa funkcija. Također ćemo ih morati učiniti (točnije meni). Pokušao sam puno različitih komunalnih usluga pretvaranje * .lib -\u003e Uključeno u MASM32 by Hutch paket, i spojio se sa mnom u različito vrijeme s beskrajnim internetom. Od svega što imam na lageru, samo protozem.exe po f0dder kopirao sam s mojim zadatkom, a ja praktički nije morao ništa s mojim rukama. Ova prekrasna Tulza će ležati u alatima protoze imenika. Autorska web stranica: http://f0dder.didjitatiyphrozen.com/. Samo ga nećeš naći tamo. F0DDER je poslao ovaj uslužni program nekoliko puta na konferenciji http://board.win32ammunity.net/. Uključuje će biti u okviru katameđa. Oni bi trebali biti smješteni u mam32. * .Lib je korišten za pretvorbu za slobodno izdanje sustava Windows 2000, jer imam upravo ovu opciju (i vjerojatno, previše).

Sljedeći problem je ozbiljniji. Gotovo je potpuna odsutnost datoteka uključenih s definicijama potrebnih struktura, simboličkih konstanti i makronaredbi. Teško da možete pronaći nešto čisto na internetu - jedva možete biti previše egzotični ovaj lekcija - pišite upravljačke programe kernela na asembler. Nešto se može naći na Elicz http://www.antracking.sk/Elicz/. Nešto u y0da http://mitlied.lycos.de/yoda2k/index.htm (djelomično napravio sam, djelomično uzet iz istog Elicza). Ali to je učinjeno iz ruke loše, (sa svim mojim dubokim poštovanjem naših slovačkih i njemačkih kolega): imena članova mnogih struktura se razlikuju od onih definiranih u originalnim zaglavljama iz DDK-a; Ugniježđene strukture i blokada nema imena; Iako se u izvorniku zove. I općenito, sve je u nekom poremećaju, a kada gledate uzrokuje depresivni dojam. Nije loše samo ntstatus.inc. Djelomično je to objašnjeno činjenicom da je Elicz počeo stvarati njegove include još uvijek u odsutnosti DDK-a (kao što on sam kaže). U svakom slučaju, ne savjetujem vam da ih koristite, barem bez pažljive provjere. Nešto, u jednom trenutku, bljesnulo je na konferenciji http://board.win32Asmmunity.net/, ali kvaliteta također nije jako impresivna. Ukratko, jedino ispravno rješenje u ovoj situaciji je učiniti sve sami, i ručno, jer bilo koji alat koji vam omogućuju automatiziranje ovog procesa, ne znam. Ako vi, odjednom, naiđite na nešto vrijedno, nemojte misliti na posao - javite mi.

Vozači za ispravljanje pogrešaka

Također trebamo ispravljanje pogrešaka i, jer će kodeks temeljnog načina moda morati ispraviti, onda je to debugger treba odgovarajući. Najbolji izbor će biti softvera. Ili možete koristiti Kerrnel debugger dio DDK-a. Ovaj debugger zahtijeva dva računala - vodstvo i vođenje, što ne može svatko priuštiti. Mark Russinovich (Mark Russinovich, http://www.sysinternals.com/) napisao je uslužni program Livekd koji vam omogućuje korištenje kernela debuggera bez povezivanja drugog računala. Ne znam je li na stranici (nije provjeren), ali na disku na knjigu "Unutarnji uređaj Microsoft Windows 2000" je dostupan. Također, ovaj debugger je izuzetno koristan za proučavanje unutarnjeg sustava sustava, pod uvjetom da ste odabrali znakove koje možete (ili je moguće) slobodno preuzeti s Microsofta.

  • David Salomon, Mark Russinovich, "Interijer Microsoft Windows 2000", ed. "Peter", 2001.

    Iako u ovoj knjizi ne postoji jedinstvena linija izvornog koda, to je prvenstveno za programere.

  • Sven Shreiber, "nedokumentirane značajke sustava Windows 2000", ed. "Peter", 2002.

    Čisto praktična knjiga u kojoj se objavi mnogo tajni sustava Windows 2000.

  • Walter Oney, "programiranje modela Microsoft Driver", Microsoft Pritisnite, 1999

    U ovoj knjizi, zaustavljanje se vrši na pling "n" igra vozača, ali to uopće ne molim svoje prednosti, jer Osnovna načela razvoja vozača su univerzalna.

  • Jeffrey Richter, "Windows za profesionalce: stvaranje učinkovitih Win32 aplikacija, uzimajući u obzir specifičnosti 64-bitne verzije sustava Windows", ed. "Peter", 2000.

    Ova knjiga nema izravan stav prema programiranju vozača, ali i vrlo zanimljiv ;-)

    Ovaj popis ni na koji način ne zahtijeva potpunost. Mnogo, osobito na engleskom, može se naći na internetu (osim Shreibera, sve knjige su u elektroničkoj verziji). U odnosu na knjige želim ponovno reći da su svi iz kategorije "moraju imati". Vidi - Kupi bez gledanja. Sve osim Waltera "i Oney je prevedeno u naš" veliki i moćni ".

    I zadnji. Ja nisam veliki stručnjak u razvoju vozača, tako da su pogreške ili netočnosti, kako u ovom iu svim sljedećim člancima, vrlo vjerojatno. Naći ćete - hrabro gurnuti nos. Reći ću vam hvala.

  • Windows Defender Security Centar, uključujući novi odjeljak sigurnosti uređaja, koji nudi poboljšane sigurnosne alate, kao što je Izolacija kernela.

    Izolacija kernela je sigurnosna tehnologija koja se temelji na virtualizaciji, koja osigurava dodatnu razinu zaštite od inteligentnih napada. Integritet memorije je jedna od komponenti tehnologije izolacije kernela - funkcija je namijenjena da spriječi umetanje zlonamjernog koda u visoke sigurnosne procese. Zaštita je osigurana zbog činjenice da je na stranici virtualne memorije kernela započinje tek nakon uspješnog prolaska provjere integriteta.

    Razmislite o tome kako omogućiti funkciju "Integritet memorije" u sustavu Windows 10. travnja 2018. ažuriranje za poboljšanje računalne sigurnosti.

    Omogućiti integritet memorije

    • Otvori Windows Defender Security Center.
    • Odaberite odjeljak "Sigurnost uređaja".
    • U odjeljku "Kernel Insulation Odjeljak" kliknite vezu "Informacije o jezgrama izolacije".
    • Premjestite prekidač integriteta memorije na aktivni položaj.

    Nakon završetka tih radnji morate ponovno pokrenuti računalo tako da promjene stupaju na snagu.

    Bilješka: Da biste radili ovu značajku, vaš procesor mora podržavati tehnologije virtualizacije. Osim toga, virtualizacija mora biti omogućena u BIOS-u ili UEFI. U suprotnom, funkcija će biti nedostupna.

    Korekcija problema s izolacijom kernela

    U nekim slučajevima možete naići na probleme s kompatibilnošću u nekim aplikacijama, ako je izolacija kernela uključena. Da biste riješili probleme morat će isključiti funkciju.

    Ako pokušavate onemogućiti integritet memorije u sigurnosnom centru za Windows Defender, ali je opcija postala neaktivna i prikazana je poruka. "Ovaj parametar pokreće vaš administrator", a zatim još uvijek možete deaktivirati funkciju pomoću registra sustava.

    Bilješka: Neispravna promjena registra može dovesti do ozbiljnih problema. Preporuča se izraditi sigurnosnu kopiju registra sustava Windows prije izvođenja ovih koraka. U izborniku Registry Editory odaberite Datoteka\u003e Izvoz u spremanje sigurnosne kopije.

    • Pritisnite kombinaciju tipki sustava Windows + R da biste prikazali prozor "Run".
    • Unesite Regedit i kliknite U redu da biste pokrenuli uređivač registra.
    • Idite na sljedeći način:
    HKEY_LOCAL_MACHINE SYSTEM CurrentCONTROLLSET Upravljanje uređajem DIPECHUARD SCENARIONS Hypervisorenforcedcovjeti
    • Dvostruki klik Omogućeno..
    • Promijenite vrijednost od 1 do 0.
    • Kliknite U redu.

    Da biste onemogućili, možete koristiti i spremni

    Pošaljite dobro djelo u bazu znanja je jednostavna. Koristite obrazac ispod

    Učenici, diplomirani studenti, mladi znanstvenici koji koriste bazu znanja u studijima i radu bit će vam vrlo zahvalni.

    Objavljeno na http://www.llbest.ru/

    1. Teorijske informacije

    1.1 Razvoj upravljačkih programa Windows kernela

    Kratak teorijske informacije

    Razvoj upravljačkih programa kernela

    Vozač (s engleskog upravljačkog programa) je računalni program s kojim drugi program (obično operativni sustav) dobiva pristup hardverskom standardu.

    Shematski, pokazati kako različite vrste vozača rade:

    Prikladno podijeljeno na 2 vrste:

    - Upravljači kernela (rade na razini povlastica, ali nemojte komunicirati s bilo kojim korisničkim programom, niti s uređajem. To je od njih ćemo početi (također ih također mogu koristiti).

    Upravljački programi su potrebni za interakciju između korisničkog programa i uređaja, naime, prijenos podataka između njih, kontrole uređaja. Štoviše, uređaji mogu biti i stvarni i virtualni). Vozač ne mora upravljati bilo kojim fizičkim uređajem. Neki OS omogućuje stvaranje i vozača virtualnih uređaja - objekata koji se ponašaju slično / out uređajima, ali ne reagiraju na bilo koji fizički uređaj.

    Komponente kernela izvodi se u privilegiranom načinu procesora (nazvan mod kernela), može izvesti sve, naime:

    - mogu izvršiti privilegirane naredbe procesora (na primjer, LGDT),

    - može imati pristup podacima sustava i kod,

    - imati izravan pristup opremi, kao što su portovi

    - imati pristup memorijskim stanicama; Vozač ne može izravno manipulirati fizičkom memorijom, ali može dobiti virtualnu adresu za bilo kakve fizičke i manipulirati njima.

    Ako trebate pisati nekoj ozbiljnoj aplikaciji, raditi s pristupom unutarnjim funkcijama ili strukturama sustava podataka, možete naići na mnoštvo ograničenja, prevladati koji samo emisije vaš kod u prostoru adresa sustava. Od dokumentacije postoji samo jedan način da to učinite - instalirajte upravljački program. Ova metoda je relativno jednostavna, pouzdana i najvažnije, potpuno opremljena podrškom same operacijskog sustava.

    Smatra se da jezgreni kod (zapravo je sustav) u potpunosti pouzdan. Stoga se učitava u prostor za adresu sustava, vozač postaje dio sustava i sva ograničenja se ne postavljaju na njemu. U sustavu Windows, gotovo je jedini način za pisanje OS programera za pisanje komponenti sustava kernela.

    DDK (komplet za razvoj uređaja) koristi se za pisanje i istraživanje metoda razvoja vozača - sustav za razvoj vozača.

    Osim dokumentacije u DDK-u, skup uključenih datoteka uključen je (* .cc) i knjižnične datoteke (* .lib).

    Dakle, Windows podržava različite vrste uređaja upravljačkih programa, ali, osim toga, postoje upravljački programi koji nisu upravljački programi uređaja, ali jednostavno vam omogućuju stvaranje programa koji će raditi u sustavu Windows u načinu rada kernela, tj. Na razini povlastica. U isto vrijeme, oni u potpunosti pristupaju OS i opremi.

    Razmotrite najjednostavniji upravljački program kernela.

    #Include.

    int concentry (

    U pdriver_object pdriverobject,

    U pusregisticstrypath) (

    }

    Ulazna točka je upravljački program, koji je uređen u obliku postupka koji hostira dva parametra:

    pdreverobject - pokazivač na objekt samo stvorio upravljački program. Preuzimanjem upravljačkog programa, sustav stvara objekt vozača (objekt vozača), što predstavlja sliku vozača u memoriji. Kroz ovaj objekt sustav kontrolira vozača. Vozač je uobičajena struktura podataka sustava vozača_object.

    pusregistrypath - pokazivač na ključ registra koji sadrži opcije inicijalizacije vozača.

    Ovaj naš prvi vozač je samo učitan u sustav i odmah iskrcao.

    Sada razmislite o programu predloška koji će se morati koristiti za razvoj programa u prvom koraku rada na tečaju (vozač beers.sys kernel mod).

    Zadatak ovog vozača je izvršiti jednu bilješku o sustavu dinamički do prve oktave. Da biste to učinili, vozač koristi upute u i izvan procesora, pozivajući se na odgovarajuće I / O portove. Poznato je da je pristup I / O portovima sveti zaštićeni resurs Windows sustava. Pokušaj privlačenja bilo koje od njih, kako unos i izlaz, iz korisničkog načina, neizbježno dovodi do iznimke.

    U našem primjeru, govornik će raditi (za to se koristi, posebno, port 61h, 0 i 1 bita, port 43h i 42h).

    Na početku vozača definiran svih 12 bilješki.

    Bit će potrebno jednostavno uključiti zvučnik, već da biste postavili frekvenciju zvuka. To koristi podsustav timera koji radi neovisno o procesoru i ima 3 kanala. Izlaz kanala 2 povezan je s zvučnikom, koji se koristi za generiranje zvuka različite frekvencije. Raspon zvuka sluha - 30Hz-6000Hz.

    Za podešavanje frekvencije zvuka u port 43h (Timer Register) 0BH je poslana riječ:

    movi al, 0bh

    43h, Al

    Ova vrijednost određuje broj kanala koji ćemo upravljati, tip rada, način kanala i formatu brojila.

    Zatim se rekalkulirana frekvencija zvuka (1193167 / frekvencija (Hz)) šalje u priključak 42H (1193167 / frekvencija (Hz) (mlađi dio je prvi, zatim najstariji).

    Na primjer, želimo dobiti zvučnu frekvenciju 100 Hz. Ponovno izračunati frekvenciju

    1193167/100 = 11931

    Zatim:

    mOV AX, 11931

    42h, al

    movi al, ah

    42h, al

    U prvom koraku rada, morate promijeniti program tako da daje druge glazbene zvukove (svaki po opciji).

    Često, u zadacima koje trebate postaviti različite trajanja. Da biste to učinili, prikladno je koristiti postupak do_delay, prolazeći ga posredno određenim parametrom "zvučnog vremena".

    Da bi bilo prikladno za ispravljanje upravljačkog programa, postoje različita sredstva. Najjednostavnije je konačno s potrebnim informacijama u posebnom prozoru Uslužni program za ispravljanje pogrešaka. Prije toga, ovaj program je pokrenut, konfiguriran za presretanje poruka iz kernela. Za prikaz programa se naziva funkcija DBGPrinta, koja ima jedan parametar - izlaz niza. Nakon pokretanja upravljačkog programa u prozoru za prikaz pogrešaka, prikazuje se cijeli izlaz.

    Postoje različiti načini za instalaciju vozača u kernel. Budući da naš vozač zapravo nije potreban, sustav nije potreban (ne vodi nikakav uređaj), a zatim ćemo privremeno povezati upravljački program na sustav, a zatim ga izbrisati.

    Da biste to učinili, morate stvoriti aplikaciju koja će pokrenuti upravljački program. Kako? Vozač je usluga razine kernela. Stoga će aplikacija koristiti SCM - upravitelj kontrole usluge (upravitelj kontrole usluga), koji je uključen u Windows i radi na korisničkoj razini.

    Dakle, potrebno je izgraditi rješenje iz dva projekta: primjena konzole i vozača.

    Razviti upravljačke programe s vama potrebno je unaprijed:

    - instrument DDK,

    - Instalirajte varijablu okruženja Wtnetbase (vrijednost - put do DDK, na primjer, E: Winddk 3790.1830).

    Projekt s vozačem mora biti tip makefile.

    Napravite postavke projekta pomoću aplikacijskih postavki i u polje za izradu naredbenog retka za snimanje niza

    ddkbuild -wnetxp chk. -CEZ.

    Što izazov posebne skripte za komunikaciju vc s DDK

    Trenutna mapa projekta mora sadržavati datoteke:

    izvori, makefile, ddkbuild.cmd (skripta), izvor datoteka vozač.c

    Nakon izgradnje projekta vozač mora imati produžetak. Sys.

    Aplikacija pokreće vozač Beer.sys, tj. propisuje ga u registru i pokreće se na posao. Zatim, nakon završetka uklanja iz registra.

    Za aplikaciju za pokretanje upravljačkog programa, nakon izgradnje rješenja koje se sastoji od dva projekta - aplikacije i upravljačke programe, morate postaviti datoteku izvršne aplikacije i upravljački program na jednu mapu, a zatim pokrenuti program.

    Vozači su vrlo teško ispraviti. U slučaju pogrešaka u operaciji, operacija je najčešće zamrzavanje, a potrebna je ponovno pokretanje. A za naš vozač, nakon ponovnog pokretanja, također trebate izbrisati uslugu beapera06 iz registra pomoću Regedit (HKEY_LOCAL_Machine System CurrentOdovovodi Usluge), a zatim ponovno pokrenite sustav.

    1.2 Windows Virtualni uređaji

    Do sada smo razvili upravljački program kernela koji može učiniti ono što ne može biti na korisničkoj razini, posebno, za rad s / izlaznim portovima. Takav upravljački program naziva se upravljački program kernela, ali ne i upravljački program uređaja, jer se podaci između korisničkog programa i uređaja ne prenose (nakon svega, vozač je obično potreban? Za organiziranje razmjene podataka između aplikacije korisnika i uređaja).

    Sada ćemo razviti upravljačke programe uređaja koji prenose podatke i natrag između korisničke aplikacije i uređaja.

    Kada aplikacija zahtijeva operaciju / out, poziva vozač. Da biste to učinili, aplikacija može dati zahtjev za čitanje podataka s uređaja ili snimanja podataka na uređaj. A ako je potrebna neka druga radnja, na primjer, za to se koristi anketa ili kontrola uređaja ili nešto drugo, tzv. IOCTL sučelje (kontrola uređaja).

    Smatrat ćemo ovaj slučaj za virtualne uređaje, jer najčešće, zašto vam je potreban virtualni uređaj u vozaču? Da biste ga mogli prenijeti podatke da vozač može nekako proces (kao što je nemoguće u aplikaciji) i vratiti rezultat na zahtjev. Sjetite se da je uobičajeni vozač kernela, ranije raspravljao, nije ništa poduzeo od prijave i nije ništa vratio tamo, ali jednostavno je učinio postupcima nedostupnim primjeni.

    Kada aplikacija zahtijeva operaciju / out, poziva vozač. To se može koristiti takozvanim. IOCTL sučelje (kontrola uređaja).

    Primjena poziva obavlja sljedeće radnje:

    1) Otvaranje datoteke i primanje deskriptora:

    Generic_read + generic_write, 0, , otvoreni_existing, 0, null

    Kao rezultat toga, ako se sve dogodilo uspješno, dobivamo deskriptor uređaja.

    2) Slanje pogonskog pogona valjanosti (što učiniti, vozač može provesti mnogo različitih radnji):

    poziv DeviceOCocontrol, Deskriptor, Akcijski kod, ulazni međuspremnik adresa, ulaznu veličinu podataka, izlazni međuspremnik adresa, veličina izlaza, međuspremnik adresu za pravi broj bajtova

    3) Zatvaranje datoteke i, prema tome, oslobađanje deskriptora.

    prizivati \u200b\u200bopravdani deskriptor uređaja

    Za prijenos podataka, moduli (aplikacija i upravljački program) trebali bi se dogovoriti o interakcijskom protokolu (akcijski kodovi, struktura pufera - ulaz i izlaz).

    Isti akcijski kod se također koristi u aplikaciji, au vozaču.

    Akcijski kod u aplikaciji i upravljački program može se snimiti u 16-strukom obrascu, a možete koristiti CTL_CODE makro, kao što je učinjeno u primjeru laboratorija. Radi u kabini common.inc.

    Razmotrite primjer akcijskog koda s vozača virtualnog uređaja koji se koristi u laboratorijskom radu. Ime - ioctl_get.

    U slučaju virtualnog uređaja, zastava datoteke je 0.

    Vrsta uređaja - File_device_unknown \u003d 22h

    Prava pristupa - File_read_access + file_write_access \u003d 1 + 2 \u003d 3 \u003d 11b

    Funkcionalni kod - u rasponu od 800h do FFFH. Imamo 800h.

    Metoda bipreciranja - Metoda prijenosa podataka između aplikacije i upravljačkog programa (tri):

    Za malu količinu podataka obično se koristi metod_bufered (00b) - dodatni međuspremnik je označen u dovoljnoj memoriji, dovoljan za postavljanje ulaznog i izlaznog pufera. Adresa ovog međuspremnika nalazi se u IRP u polju Activerirp.systembuffer. Sam dispečer i / o preuzima rad prepisivanja podataka između korisnika i dodatnog međuspremnika.

    Izravni pristup podacima (bez međuspremnika) - metod_out_direct (2) - za izlaz ili Metod_in_direct (1) - za unos; Polje od IRP - MDLaddress. Ovo je izravni poziv - / izlazni upravitelj ispravlja fizičke stranice koje sadrže korisnički međuspremnik. U isto vrijeme, stvara pomoćnu strukturu MDL (popis deskriptora memorije) za opisivanje fiksnih stranica. I vozač developer radi s MDL-om.

    Pristup putem međuspremnika na razini korisnika - metoda_ne (3); Polje iz IRP - sistembuffer. I / OFF dispečer šalje virtualnu adresu korisničkog načina na vozača. A u vozaču morate raditi vrlo pažljivo, jer vozač u ovom slučaju trebao bi raditi samo u kontekstu pozivatelja.

    Kada aplikacija šalje upravljački program za radnju, pokreće I / O Dispečer. Odgovoran je za generiranje paketa I / O upita (i / o zahtjev paketa, IRP) i šaljem ga vozaču za daljnju obradu.

    Razmotrit ćemo 3 vrste zahtjeva:

    Irp_mj_create - bit će prenesena s kreatirom,

    IRP_MJ_DEVICE_CONTROL - bit će prenesen s DeviceOCocOntrol

    IPr_mj_close - s blizu

    IRP paket se sastoji od zaglavlja i / out mjesta za plasman. / Izlazni upravitelj stvara broj zračenja stanice koje su jednake broju upravljačkih programa uključenih u obradu zahtjeva. Svaki vozač dopušten je pristup vlastitoj staničnoj ćeliji. Kada vozač prenese IRP paket upravljačkog programa niže razine, pokazivač na stanicu se premješta u ćeliju potrebnu za ovaj upravljački program. I, naprotiv, nakon obrade upita, pokazivač se povećava na najvišoj razini pogonske stanice. Dobivanje pokazivača pomoću funkcije iogetcurrentstaclocation ().

    U svakom smjerljivom stog postoji pokazivač na objekt DeviceObject i na filobject objekt za koji se pokreće upit. IRP paketi uvijek su pohranjeni u nepodnošljivoj memoriji.

    Sljedeći objekti kreiraju se za rad vozača i primjenjuju se:

    Objekt vozača;

    Objekti uređaja;

    Faze operacije vozača.

    1) Stvaranje objekta vozača. Stvorene prilikom učitavanja vozača u početnoj fazi. U ovom trenutku, pokreće se Driverentry funkcija, a poljubac je popunjen, kao i pokazivač na objekt uređaja i leđa.

    Uređaj uključuje:

    Vrsta uređaja.

    2) Stvaranje simboličke veze s uređajem. Da bi objekt "uređaja" bio dostupan korisničkom kodu, vozač mora stvoriti u korisničkom načinu dostupnog (korisnički način) imenik "?" Drugi objekt je simbolička veza (simbolička veza). Shablon.sys Driver stvara SLSHABLON simboličnu vezu na svom uređaju "Devshablon" u "??" direktoriju, čiji je vrijednost "uređaj Devshon".

    Dakle, već pri umetanju vozača (u našem slučaju, na stupnju preuzimanja OS), imamo tri objekta u memoriji: vozač "vozač shablon", uređaj "uređaj" i simbolička veza s uređajem " * Slshablon ".

    3) otvaranje. Nadalje, kada se započne prijava, zove se kreativni. Postoji link na uređaj. Iz strukture uređaja Device_Object, informacije se vraćaju informacije o servisnom pogonu. I / O Dispečer formira IRP I / O upit tipa IRP_MJ_Create i usmjerava ga za vožnju. Dakle, vozač uči da kod korisnika načina rada pokušava pristupiti svom uređaju. Ako vozač nema ništa protiv, onda vraća kod uspjeha. Naš vozač ima poseban postupak otpreme koji odgovara na ovu IRP - DispatchCreateclose (postoji kombinirani postupak za otvaranje i zatvaranje uređaja). U Io.Status.Status polje se prenosi statusom_success, te u io.status.information - 0, jer U ovom slučaju, ništa ne treba prenositi. Takav odgovor vozača je signal dispečera objekta za stvaranje virtualne datoteke. U isto vrijeme, novi predmet s pokazivačem na "datoteku" objekt je stvoren u tablici deskriptora (obračun tablicu), a novi deskriptor se vraća u korisnički način.

    Ako je sve u redu, tada spasimo deskriptor datoteke, vratio CreateEFile, u varijabli HDEVICE.

    4) operacije CAP-a. Sada imamo priliku upravljati rad ovog uređaja pozivanjem deviceocontrol funkcija. Budući da vozač uređaja može, u načelu, obaviti mnogo različitih zadataka, potrebno je nekako razlikovati zahtjeve. U tu svrhu, drugi parametar Dwiocontrolcode je namijenjen, nazvan I / O kontrolni kod kontrolnog koda (I / O kontrolni kod), koji je izgrađen prema određenim pravilima.

    Korištenje deskriptora uređaja, I / O otpremnica će dobiti informacije o upravljačkom programu za servisiranje, formirat će se paket I / O upit tipa IRP_MJ_DEVICE_CONTROL i usmjerava ga za vožnju. Vozač će biti uzrokovan odgovarajućim postupkom dispečercontrola, koji se akcijski kod i informacije o adresama i veličini ulaznog i izlaznog pufera prenose kao parametri. Sve se to prenosi putem IRP-a. IRP postupak poduzima potrebne informacije: Akcijski kod, adresa međuspremnika podataka.

    Postupak dispečercontrola obavlja potrebne radnje, u našem slučaju adresa IRP-a iz ESI registra zatim prenosi rezultat putem izlaznog pufera u aplikaciju.

    Slično prethodnom postupku, proći kroz status raskida IRP-a i broj bajtova koji se prenose s vozača.

    U aplikaciji su ti podaci formatirani i izlaz.

    5) zatvaranje. Kao što bi se trebalo liječiti deskriptorima, koji više nisu potrebni, pozivaju funkciju bliske ruke, zatvarajući deskriptor uređaja.

    6) Upravljanje vozača. Izbrišite simboličku vezu i izbrišite objekt uređaja.

    Kompleks (2) sastoji se od dva programa:

    Aplikacija koja se odnosi na vozača iza IRP adrese, a tada se ova adresa prikazuje Windows na standardni prozor.

    Shablon.sys - Vozač.

    Vozač shablona ne radi na korisničkoj razini, u ovom slučaju definira sadržaj ESI registra tijekom vozača.

    Aplikacija u izlaznom puferu dobiva sadržaj ESI-a, pretvara ga na izlaz u heksadecimalni i prikazuje prozore u standardni prozor.

    Ako trebate primati informacije od CMOS-a u upravljačkom programu, onda je potrebno:

    Pošaljite u port 70h offset u CMOS-u koji nas zanima;

    Nisko kašnjenje;

    Uzmite iz informacija o 71h u Al.

    Zatim napišite ove informacije u izlazni spremnik.

    A u aplikaciji morate uzeti informacije iz izlaznog međuspremnika, ako je potrebno, pretvoriti ga i prikazati ili analizirati i, ovisno o rezultatu, prikazati potreban tekst u standardni prozor.

    U ovom laboratoriju se pretpostavlja da je vozač stalno instaliran u sustavu Windows pomoću .inf datoteke pomoću stavke za instalaciju opreme s upravljačke ploče: Dodavanje novog uređaja, ručno instaliranje, prikazati sve uređaje, instalirati s diska, odaberite datoteka.inf (vozač mora biti u istoj mapi).

    Da biste provjerili je li upravljački program postavljen, odaberite sustav, opremu, Upravitelj uređaja na upravljačkoj ploči.

    1.3 Pristup postojećim upravljačkim programima iz aplikacija korisničkih režima

    Algoritam primjene vozača koji radi s vozačem

    Da biste radili s vozačevim vozačem, morate dobiti manipulator (ručka) upravljački program. Ovaj manipulator se može dobiti pomoću funkcije CreateEfile ili CreateFilea API koji radi s ASCII znakovima. Nadalje koristi funkciju directiocontrol API, koji se, kao jedan od parametara, IOCTL kôd se prenosi. IOCTL kôd je upravljački kôd s kojim će vozač naučiti o operaciji, čiji izvršenje traži zahtjev, način prijenosa parametara i prava pristupa koja je potrebna za obavljanje ove operacije. Nakon prouzročene primjene

    DeviceIoControl Drive se šalje IRP_MJ_DEVICE_CONTROL. Nakon završetka obrade, zahtjev za prijavom vraća upravljanje i primjena ostaje analizirati odgovor vozača i zatvoriti otvorene deskriptore.

    Primjer

    U primjeru u nastavku, aplikacija za korisnički način šalje ioctl_disk_get_Partion_info_ex Query_Ex datotečni sustav upravljački program, analizira primljene informacije i prikazuje format particije tvrdog diska.

    #Include.

    #Include.

    int _tmain (int argc, _tchar * Argv)

    DWORD DWBYTESRETRED \u003d 0;

    char CpartionStyle \u003d (0);

    Particija_information_ex pilarticioninfo;

    Rukovati HDEVICE \u003d CreateFilea (

    /**/// "\\ t

    / * 2 * / generic_read | Generic_write

    / * 3 * / file_share_read | File_share_write,

    / * 5 * / Open_existing,

    ako (HdEvice \u003d\u003d Invalid_handle_Value)

    Messageboxa (, "CreateFilea Error!", Pogreška ", 0);

    ako (DeviceOcontrol (

    / * 1 * / (ručka) HDEVICE,

    / * 5 * / & & PIPARTITINFO,

    / * 6 * / sise (PICARTITINFO),

    / * 7 * / & DWbyteSreurand,

    ako (pproarticioninfo.partionsyle \u003d\u003d particioniranje_style_mbr)

    MessageBoxa (, "particija_style_mbr", "Opis", 0);

    inače ako (PIPARTICINFO.PARTITIONTYLE \u003d\u003d particioniranje_style_GPT)

    Messageboxa (, "Partition_style_GPT", "Opis", 0);

    Messageboxa (, "particija_style_Raw", "Opis", 0);

    Messageboxa (, "DeviceOControl Error", "Pogreška", 0);

    Blizu (HdEvice);

    Stavite primjer

    Najavljene su varijable potrebne za prijavu. Particija_information_ex je struktura koja opisuje informacije o odjeljku tvrdog diska.

    pITSEF struktura (

    ) Particioniranje_information_ex;

    U ovom dijelu programa, funkcija CreateFilea je pozvana na primanje manipulatora, koji je napisan na varijable HDEVICE.

    DeviceOconlol funkcija se sinkrono naziva. Prenosi se:

    deskriptor uređaj;

    Ioctl kod ioctl_disk_get_partion_info_ex;

    pokazivač na ulazni pufer, ništavan u našem slučaju;

    veličina ulaznog pufera;

    indeks na izlaznom puferu;

    veličina izlazne pufere;

    pokazivač na varijablu DWORD-a u kojoj će se pohraniti broj vraćenih bajtova;

    pokazivač na preklapanoj strukturi, koja se koristi za asinkroni poziv.

    Nakon vraćanja kontrole, u slučaju uspješnog završetka funkcije, u strukturi particija_information_ex, odjeljak je pohranjen.

    Izrađuje se analiza i izlaz. Prije vraćanja upravljanja operativnim sustavom možete zatvoriti otvorene deskriptore. To vam omogućuje da napravite značajku bliska (__ u ručku). Ako deskriptori ne zatvaraju, to će učiniti operativni sustav za vas.

    2. Izvođenje tečajeva

    2.1 Korak 1.

    Zadatak: 1. Razviti upravljački program kernela s pristupom portovima, obavljanje radnji u skladu s opcijom i izlaznim informacijama u prozor za prikaz pogrešaka (opcija), kao i aplikaciju koja pokreće vozača.

    Popis Kurs_test.cpp.

    #Include "stdafx.h"

    #Include "Windows.h"

    #include "stdlib.h"

    Sc_handle hsscmanager;

    Sc_handle hservice;

    char acdriverpath;

    ako (hscmanager! \u003d 0) (

    // Registracija igrača u ScManagerovom stolu dispečera

    ako (hservice! \u003d 0) (

    // Brisanje zapisa vozača

    Deleteservice (hservice);

    Objavljeno: hservice);

    povratak 0;

    }

    Popis Beeper.sys

    #Include.

    #Define timera_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 vrijeme) (

    long i, J;

    za (i \u003d 0;<=time*0xfffff; i++) {}

    }

    void do_big_delay (int vrijeme) (

    Do_delay (2 * vrijeme);

    }

    praznini ksilofon (int npitch) (

    int ntone \u003d timer_frequeny / npitch

    _Az (

    mov al, 10110110b; // snimanje kontrolne riječi u 43h

    oUT 43H, AL; // Zvučni upravljački kanal - LOGIC dijagram pomoću tonskog timera i softverskih kontroliranih portova sustava

    mOV EAX, Ntone; // ponovno izračunati frekvencijsko snimanje u 42

    42h, Al; // Senior

    movi al, ah; // junior

    42h, al

    u al, 61h; // mijenja kontrolnu sekvencu - transformacija posljednjih bitova po jedinici

    // bit 0 - dozvola za uporabu zvučnika

    ; // bit 1 - Vremenski raspored veze - 2 do zvučnika

    ili al, 00000011B; Zvučnika.

    out 61h, al

    }

    Do_delay (0x7f);

    _Az (

    u al, 61h

    i al, 11111100b; Zvučnik isključen.

    out 61h, al

    }

    }

    Ksilofon (pitch_c);

    Ksilofon (pitch_s);

    Ksilofon (pitch_s);

    Ksilofon (pitch_s);

    Ksilofon (pitch_s);

    Ksilofon (pitch_s);

    Ksilofon (pitch_s);

    vraćanje status_device_configuration_error;

    }

    2.2 Korak 2.

    Razviti virtualni upravljački program koji vam omogućuje obavljanje radnji dostupnih samo na nultoj razini povlastica (u skladu s opcijom), a zatim prijenos rezultata na aplikaciju na 3 razine povlastile za prikaz na zaslonu.

    Aplikacija prikazuje rezultat u standardnom prozoru sustava Windows.

    Popis shablon.c.

    #Include. // razne NT definicije

    #Include.

    Unicode_string g_usdevicename;

    Unicode_string g_ussimbolikLinkNime;

    void mativenload (u pdriver_object pdrinverobject) (

    Iodeletesymboliclink (& g_ussimboliclinkLame);

    Iodeletedevice (pdreverobject-\u003e Dealobject);

    }

    NTSTATUS DispatchCreateclose (pdevice_object PdevićeBjeb, PIRP PIRP) (// MJ_create obradu mJ_Close

    pirp-\u003e iostatus.status \u003d status_success;

    pirp-\u003e iostatus.information \u003d 0;

    Iocopletequest (PIRP, io_no_increment);

    vraćanje status_success;

    }

    NTSTATUS dispečercontrol (pdevice_object pdevićeb, PIRP PIRP) (// Obrada IRP_MJ_DEVICONTROL

    Status NTSTATUS;

    int regesi;

    // uzeti pokazivač na io_stack_location, u njemu na iokontrolcode

    ako (PIRP-\u003e rep.Overlay.currentStaclocation-\u003e parametri.devićeiocontrol.iocontrolcode \u003d\u003d iOctl_get) (

    // usporedite kod akcije i ako je naš klijent, onda:

    _Az (

    movi eax, 0

    movi al, 10h

    70h, al

    u al, 71h

    cBW.

    cwde.

    mov Regesi, Eax

    }

    // ovo je naša funkcionalnost - preuzimamo sadržaj ESI registra

    // napišite ga u međuspremnik sustava

    * ((int *) pirp-\u003e Actentiterp.systemBuffer) \u003d Regesi;

    pirp-\u003e iostatus.information \u003d 4; // i postavite veličinu rezultata

    status \u003d status_success;

    ) Ostali status \u003d status_invalid_device_request;

    pirp-\u003e iostatus.status \u003d status;

    Iocopletequest (PIRP, io_no_increment);

    povratak (status);

    }

    iNT Drivery (u pdriver_object pdreverobject, u rusricode_string pusregistrypath) (

    Status NTSTATUS;

    Pdevice_object pdevićebjekt;

    // inicijalizirati Unicode retke

    RTLINITUNICODENTING (& G_USDEVICENAME, l "Uređaj \\ t

    Rtnilicitodestring (& g_ussimboliklinkme, l "\\ tl?

    // popunite objekt vozača - razumljivo objasniti vozača koji značajku koje procese

    pdriverobject-\u003e matizernload \u003d

    pdreverobject-\u003e majorfunkcija \u003d

    pdreverobject-\u003e majorfunkcija \u003d

    pdreverobject-\u003e majorfunkcija \u003d

    // stvoriti logičan objekt virtualnog uređaja

    Status \u003d icrobjedevevice (pdreverobject, 0, & g_usdevicename, file_device_unknown, 0, lažni i pdevićebsc);

    ako (! Nt_success (status)) (status povrata;)

    // stvoriti simboličku vezu s uređajem

    Status \u003d icreatesymbolicLink (& g_ussimboliclinkLame, & g_usdevicename);

    ako (! Nt_success (status)) (

    Iodeletedevice (pdevicebject);

    status povratka;

    }

    status povratka;

    }

    Popis tečaj2.cpp

    #Include "stdafx.h"

    #Include "Windows.h"

    #include "stdlib.h"

    #Define ioctl_get ctl_code (file_devica_unknown, 0x800, metod_bufered, file_read_access + file_write_access)

    int _tmain (int argc, _tchar * arguv) (

    Rukovati HDEVICE;

    Bool devcontrol;

    DWORD DWBEDETURNER;

    char troka;

    /*

    Parametri:

    lPFilename Adresa niza null-score koji definira ime objekta da biste ga stvorili ili otvorili.

    dwdesired takva robe za objekt. Ovaj parametar može uzeti bilo koju kombinaciju sljedećih vrijednosti:

    Značenje: Opis:

    0 definira zahtjev za dostupnost objekta na navedenom uređaju. Aplikacija može zatražiti atribute uređaja, bez pristupa.

    Generic_read definira pristup čitanju s objekta. Podaci se mogu čitati iz datoteke i pokazivač datoteka može se premjestiti. Kombinirajte s Generic_Write za pristup čitanju.

    Generic_Write definira pristup objektu. Podaci se mogu zabilježiti u datoteci i pokazivač datoteka može se premjestiti. Kombinirajte s Generic_read za pristup čitanju.

    dwsharemode način zajedničkog pristupa objektu. Uz nulte vrijednosti, objekt se ne može koristiti s nekoliko programa. Sve naknadne operativne operacije objekta neće uspjeti dok se ne zatvori opis objekta. Za dijeljenje objekta koristite kombinaciju sljedećih vrijednosti:

    Značenje: Opis:

    File_Share_delete omogućuje redoslijed otvorenih operacija objekta kako biste zatražili pristup za uklanjanje.

    File_Share_read omogućuje redoslijed operacija otvaranja kako bi zatražio pristup za čitanje.

    File_share_write omogućuje redoslijed operacija otvaranja kako bi zatražio unos

    lPSECATTRTTRIBTRIBUTIRAJU ADRESU strukture sigurnosti_attributa, koji određuje je li deskriptor vraćen funkcijom da se nasljeđuje od strane dječjeg procesa.

    Ako je LPSecurittibutes jednak nulu, deskriptor se ne može naslijediti.

    dwcreationDission

    Značenje: Opis:

    Stvoriti_Allways stvara novu datoteku, uvijek.

    Ako datoteka postoji, funkcija prepisuje datoteku.

    Stvori_New stvara novu datoteku. Funkcija će biti dovršena s pogreškom ako datoteka postoji.

    Open_Allways Otvori datoteku, uvijek. Ako datoteka ne postoji, funkcija je stvara na isti način, ako bi dwcreationDission bio stvoriti_new.

    Open_existing otvara datoteku. Funkcija će biti dovršena pogreškom ako datoteka ne postoji.

    Truncate_existing otvara datoteku i reže na nultu veličinu. Funkcija će biti dovršena pogreškom ako datoteka ne postoji.

    dWFlagsanDattributes zastavice i atributi datoteka.

    Kada se otvara postojeća datoteka, CreateFile ignorira datoteku predloška.

    Vrijednosti povrata:

    Ako je funkcija uspješna, vraća se otvorena ručka navedene datoteke. Ako navedena datoteka postoji prije pozivanja funkcije i parametar DWcreationDission je jednak stvoriti_Always ili Open_Allways, GetLasterRor poziv će vratiti Error_already_exists, čak i ako je funkcija uspješna. Ako datoteka ne postoji prije poziva, GetLastterror će se vratiti 0 (nula).

    U slučaju pogreške, funkcija će se vratiti invalid_handle_value. Za više informacija o pogrešci, nazovite getlasttorror.

    */

    ako (HdEvice! \u003d 0) (

    /*

    hDEVICE je ručka, izgrađena CreateEfile "Ohm.

    dwiocontrolcode je vrijednost koja određuje neproziran koji se mora izvršiti.

    lPINBUFFER je ljepljivi bouffer, koji se daje podacima potrebnim za obavljanje operacije navedene u Dwiocontrolcodeu. Ako oparacija ne nadmašuje podatke, možete premjestiti null.

    ninbuferize je PAZMP u bajtovima podataka u buketu, koji LPINBuffer navodi na kojem.

    lpoutbuffer je ljepljivac bouffer, koji će biti oslobođen proizvodnje kada je zapanjen uspješno unaprijed. Ako opration ne navedite izlaz, ovo polje treba biti null "y.

    nOUTBUFERSIZ je PAZPP u kantajskoj bajtovima, što je lpoutbuffer ukazuje na to.

    lpbyteSreturned - ADPE tipa pedigree DWORD, koji će dobiti podatke o podacima uključenim u Lpoutbuffer.

    lpoverapped je preklapanja stripp, ako želite da operacija bude asinchon. Ako želite pričekati dok se OP izvršava, stavite Null u ovom polju.

    */

    wsprintf ((lpstr) stroka, "% x", adwoutbuffer); // zapisani niz u puferu (AdWoutbuffer -\u003e Stroka)

    Blizu (HdEvice);

    povratak 0;

    }

    računalni program vozača

    2.3 Korak 3.

    Unosan tečaj.cpp

    #Include.

    #Include.

    #Include.

    {

    DWORD bezvrijedan;

    0, // Atributi datoteka

    povratak (false);

    }

    0, // Veličina ulaznog pufera

    Blizu (HdEvice);

    povratak (brusulti);

    }

    int main (int argc, char * argum)

    {

    /*

    pITSEF struktura (

    Particioniranje_style particioniste; // format odjeljka

    Uspostava velikih_integera; // premještanje početnog dijela

    Duljina particija velike_integera; // odjeljak veličine

    DWORD particionizam; // Broj odjeljka

    Boolean rewritepartion; // Ako se dio prepisuje istinit

    unija (

    Particija_information_mrb MBR; // Dodatne informacije MBR stilu

    Particioniranje_information_gpt GPT; // Dodatne informacije GPT stil particije

    };

    ) Particioniranje_information_ex;

    */

    Bool Bresult;

    sustav ("pause");

    povratak ((int) bresulti);

    }

    2.4 Korak 4.

    1) Kombinirajte sva funkcionalnost dizajnirana u koracima od 1-3, u jednom programu kompleks.

    Konačni kompleks bi trebao izgledati ovako:

    - Naš upravljački program ugrađen je u sustav i učitava se na stupanj pokretanja sustava Windows.

    - Aplikacija zatraži upravljački program za upravljački program (naveden u koraku 2), upravljački program prenosi te informacije, a zvučnik se također nastavlja na neko vrijeme i reproducira se melodija (navedeno u koraku 1). Zatim zahtjev zahtijeva vozača postojeći u sustavu (u skladu s mogućnošću 3. koraka).

    2) Napravite obavijesti o objašnjenju u kojem se moraju opisati sva 4 faza, kao i teorijske informacije za svaku fazu.

    #Include "stdafx.h"

    #Include "Windows.h"

    #include "stdlib.h"

    #Define ioctl_get ctl_code (file_devica_unknown, 0x800, metod_bufered, file_read_access + file_write_access)

    Bool GetpartionNumber (particija_information_Ex * PEX)

    {

    Rukovati HDEVICE; // deskriptor uređaja koji se provjerava

    Bool Bresult; // potvrdni okvir

    DWORD bezvrijedan;

    hDEVICE \u003d Createfile (tekst ("\\\\\\\\. C:"), // Otvoreni uređaj

    Generic_read | Generic_Write, // Pristup uređaju

    File_share_read | file_share_write, // mod dijeljenja

    Null, // sigurnosne atribute prema zadanim postavkama

    Open_existing, // Mjesto

    0, // Atributi datoteka

    Null); // ne kopirajte atribute datoteka

    ako (HDEVICE \u003d\u003d Invalid_Handle_Value) (// Nije moguće otvoriti uređaj

    printf ("CreateEfile () nije uspio!");

    povratak (false);

    }

    bRESULT \u003d DeviceIOCONTROL (HDEVICE, // Traženi uređaj

    Ioctl_disk_get_partion_info_ex, // operacija

    Null, // pokazivač na ulazni spremnik

    0, // Veličina ulaznog pufera

    pex, sisef (* PEX), // izlazni pufer

    & Junk, // Broj vraćenih bajtova

    (Lpoverlapped) null); // I / O sinkronizacija (I / O)

    Blizu (HdEvice);

    povratak (brusulti);

    }

    int _tmain (int argc, _tchar * arguv) (

    Sc_handle hsscmanager;

    Sc_handle hservice;

    char acdriverpath;

    Rukovati HDEVICE;

    Bool devcontrol;

    DWORD DWBEDETURNER;

    Lpvoid adwinbuffer, adwoutbuffer;

    char troka;

    Particioniranje_information_ex; // struktura uređaja

    Bool Bresult;

    hDEVICE \u003d CreateFile ("\\ tl SlDevget", generic_read + generic_write, 0, , open_existing, 0, null);

    ako (HdEvice! \u003d 0) (

    Devcontrol \u003d develoiocontrol (HDEVICE, IOCTL_GET, & Adwinbuffer, Veličina (Adwinbuffer), & AdWoutbuffer, Veličina (adwoutbuffer), & DWBYTeSreured, null);

    ako ((devcontrol! \u003d 0) && (dwbyteSrenut! \u003d 0)) (

    wsprintf ((lpstr) stroka, "% x", adwoutbuffer); // zapisani niz u puferu (AdWoutbuffer -\u003e Stroka)

    ako (stroka \u003d\u003d "00000100") poruka (NULL, "pronađeno 1,44 MB", "Yermakov FDD SHENER", MB_OK);

    i drugo poručni okvir (, "nije pronađen", "SHENER" YERMAKOV FDD ", MB_OK);

    hscmanager \u003d openscmanager (, , sc_manager_create_service);

    ako (hscmanager! \u003d 0) (

    GetfullPathName ("Beeper.sys", veličinu acdriverpath, acdriverpath, null);

    // Registracija glazbenika u SCM tablicama

    hSRVICE \u003d CreaService (HSCManager, "Beerpe11", "Lijepa melodija Beer11",

    Usluga_start + brisanje, servis_kernel_driver, servis_demand_start,

    Usluga_error_ignore, acdriverpath, , , , , null);

    ako (hservice! \u003d 0) (

    StartService (hservice, 0, null);

    Deleteservice (hservice);

    Objavljeno: hservice);

    ) Ostalo poruka (, "može" T vozač ", , mb_iconstop);

    BLADIŠĆENJE (HSCManager);

    ) Ostalo poruka (, "može se" može povezati s ScManager ", , mb_iconstop);

    ) Ostalo poruka (, "može" t poslati kontrolni kod ", , mb_ok);

    Blizu (HdEvice);

    ) Ostalo poruka (, "dev nije prisutan", , mb_iconstop);

    bRESULT \u003d GetpartionNumber (& Pex);

    ako (BRESULT) (Printf ("particioninbumber \u003d% d", Pex.PartionNUNMumber);

    ) Drugo (Printf ("GetpartionNumber () nije uspio. Pogreška% d.", GetLasterRor ());)

    sustav ("pause");

    povratak ((int) bresulti);

    }

    3. Prijava za posao

    Slika 3.1. Vozač od koraka 2

    Slika 3.2. Korak 3 Vozač

    Objavljeno na Allbest.ru.

    Slične dokumente

      Mehanizmi za interakciju načina rada kernela i korisničke aplikacije: arhitektura višeslojnog pogona, algoritam koji skriva podatke, interakciju upravljačkog programa i aplikacije, korisničko sučelje za pristup datotekama datotekama.

      rad na tečaju, dodano 06/23/2009

      Windows NT i / o arhitektura. Interna organizacija USB autobusa. Bitne karakteristike modela DDM pogona. Bodovi za prijavu razvijenog vozača, postavljanje koda u memoriju, ugradnja vozača u sustav. Provedba upravljačkog koda u C.

      tečaj, dodano 09/27/2014

      Struktura korisničkog načina pruža mogućnost korištenja korisnika za interakciju s sustavom. Opis načina rada kernela, koji osigurava sigurnu izvršenje aplikacija (programa) korisnika. Windows NT hardverski apstrakcija.

      prezentacija, dodano 23.10.2013

      Windows 98 kernel. Uloga 16-bitnih kernelskih modula. Problemi s performansama. Zadruga i zamjena višezadaćnosti. Poboljšana uporaba resursa u sustavu Windows 98. Korištenje WordART-a. MS Outlook Express: Stvaranje i slanje poruka.

      ispit, dodano 14.04.2005

      Zajedničko funkcioniranje svih računalnih uređaja i pristup svojim resursima. Koncept i funkcija operativnog sustava Windows Graphics. Windows pomoć za pomoć. Upravljanje datotečnim sustavom. Tehnologija "utikač i igra". Windows grafičko sučelje.

      ispitni rad, dodano 01/22/2011

      Karakteristike operativnog sustava. Povijest razvoja sustava Windows. Usporedna verzija verzija sustava Windows. Elementi i alati za Windows XP. Programi aplikacija u sustavu Windows XP. Radna površina i prijenosna računala radi sustava Windows.

      izvješće, dodano 10/16/2011

      Korištenje upravljačkog programa upravljačkog programa kernela i kontrole za izradu niti sustava. Imitacija obrade podataka i organizaciju kašnjenja. Razviti upravljački program u c ++. Konfiguracija testne klupe. Točnost promjene kašnjenja i tajmera.

      naravno, dodao je 24.06.2009

      Domilízhenna unutarnja Windows struktura sustava Windows. Arhitektura NT struktura. Metode obnove funkija na režimu kernela režima Korištenje. Podcjenjivati \u200b\u200bupravljački program. Ulazni villod paketa. Otca STAB_LNOSTI TU AUBES Windows sustavi.

      tečaj, dodano 02.01.2014

      Koncept, vrste i rad vatrozida. Ugrađeni Windows vatrozid. Windows XP SP2, pristup postavkama vatrozida za Windows XP. 2. Windows Vista, dopušten promet. Windows 7, postavke za aktivne profile. Osobni vatrozid, razine testa.

      sažetak, dodano 11/19/2010

      Poznavanje s tehničkim karakteristikama osobnog računala. Instaliranje operacijskog sustava i upravljačkih programa Windows 7. Windows XP Professional SP3 Metode čišćenja. Metode za vraćanje operativnog sustava. Izrada Microsoft Office 2010.

    Microsoft u operacijskom sustavu Windows 10 posvećuje veliku pozornost sigurnosti. Jedan od važnih elemenata sustava je "Windows Defender", ali je u stanju nositi se s svim prijetnjama. Konkretno, nedavno dobiva posebnu prevalenciju ransomware virusa, od kojih su najpoznatije reinkarnacije petya zlonamjerni programi i. Microsoft je implementiran u sustavu Windows 10 Izolaciju i integritet memorije i integritet memorije koji su usmjereni na borbu protiv ranzozne viruse. Prema zadanim postavkama onemogućene su.

    Sadržaj:

    Što je jezgra izolacija i integritet memorije

    Izolaciju jezgre - To je dodatni proces zaštite, koji se daje metodom mačevanja računalnih procesa iz operativnog sustava i uređaja. Zbog tih postupaka moguće je izbjegavati potkopavanje operacijskog sustava kada virusi na računalu pogodi.

    Integritet memorije - To je istodobna izolacija jezgre zaštitne funkcije, koja je usmjerena na ograničavanje pristupa nepoznatih potencijalno opasnih programa na proizvode na visokoj razini.

    Važno: Funkcija izolacije kernela može raditi samo ako postoje dovoljni uvjeti za to na dijelu računalnog hardvera. U postavkama BIOS-a, tehnologija virtualizacije trebala bi biti aktivna, na štetu od kojih Windows 10 računalo može pokrenuti razne aplikacije u virtualnom spremniku, ograničavajući pristup s ključnim komponentama sustava.

    Kako omogućiti izolaciju kernela i integritet memorije

    Parametri operacijskih sustava Windows 10 omogućuju vam upravljanje sigurnosnim značajkama na računalu u potpunosti. Kroz postavke sustava Windows 10 možete omogućiti izolaciju kernela i integritet memorije na sljedeći način:


    Kao što je gore navedeno, ako hardverska komponenta računala ne podržava mogućnost virtualizacije, ova funkcija neće raditi. Kada uključite korisnika će vidjeti poruku u donjem desnom kutu. "Nije moguće osigurati integritet memorije. Moguća nekompatibilnost. " Ako se pojavi ova poruka, preporuča se ići na BIOS i vidjeti je li značajka sigurnog pokretanja omogućena (način rada podizanja).

    Kako onemogućiti izolaciju kernela i integritet memorije

    Nove značajke u operativnom sustavu koji ozbiljno utječu na njegov rad, uvijek riskiraju da postane uzrok problema pri radu. Nema iznimke i funkcije izolacije kernela. Korisnici koji su već pokušali, slaviti na Microsoftovim forumima, koji su suočeni s problemima kada pokreću brojne igre i programe. Jedini način rješavanja ovog problema je onemogućiti funkciju izolacije kernela i integritet memorije. Možda u budućim ažuriranjima, programeri aplikacija ili Microsoft će ispraviti ovu nekompatibilnost.

    Postoje 3 načina za isključivanje izolacije kernela i integritet memorije:


    Power Manager Dispečer (Power Manager) Oko se ne spušta od korištenja električne energije u cijelom sustavu. Povijesno gledano, upravljanje potrošnjom energije sastojalo se od isključivanja monitora i zaustavljanja rotacije pogona. No, ovaj problem brzo postaje sve teže - zbog uvjeta za povećanje u trajanju prijenosnih računala iz baterija, kao i razmatranja uštede energije na stolnim računalima (koji su dopušteni trajno uključeni) i visokim troškovima električnom energijom koja se konzumira poslužitelj farme.

    Novi alati za upravljanje energijom uključuju smanjenje potrošnje energije po komponentama kada se sustav ne koristi, za to se pojedinačni uređaji prebacuju na stanje backup ili čak potpuno isključeni (koristeći prekidač napajanja). Višeprocesorski sustavi Onemogućite pojedinačne procesore kada nisu potrebni, pa čak i može smanjiti frekvenciju procesora (za smanjenje potrošnje energije). Kada je procesor neaktivan, potrošnja energije se također smanjuje, jer ne treba ništa učiniti osim očekivanja pojave prekida.

    Windows podržava poseban način isključivanja koji se zove hibernacija (hibernacija), u kojoj se cijela fizička memorija kopira na disk, a zatim se potrošnja energije svede na minimum (u sustavu hibernacije prijenosna računala mogu raditi tjednima), dok je baterija naplaćuje se minimalno. Budući da je cijeli status memorije snimljen na disku, možete čak zamijeniti laptop bateriju (dok je u stanju hibernacije). Kada sustav nastavlja svoj rad, ostavljajući hibernaciju, vraća spremljeno stanje memorije (i ponovno inicijalizira uređaje). To donosi računalo u istu državu u kojoj je bio ispred hibernacije (bez potrebe za registracijom i pokretanjem svih aplikacija i usluga koje su izvršene. Windows pokušava optimizirati ovaj proces, ignoriranje nemodificiranih stranica (koji imaju zalidnošću diska) i komprimira stranice za mirovinu kako bi se smanjio potreban I / O algoritam. Algoritam hibernacije osigurava automatsku propusnost i / o and procesorskog sustava. Dakle, s višim propusnim pojasom procesora, smanjite potrebu za I / O sustav propusnosti, koristi se više resursa-intenzivan, ali učinkovitije koristi. kompresija podataka. Dovoljna propusnost I / O sustava omogućuje izbjegavanje kompresije pri prebacivanju na stanje hibernacije. Kada koristite posljednje generacije višeprocessori, ulaz u stanje hibernacije i izlaz iz njega može biti samo nekoliko sekundi, čak i ako operativni može biti Sustavi imaju veliki volumen.

    Hibernacija alternativa - stanje pripravnosti, u kojem upravitelj snage prevodi cijeli sustav na najniže stanje potrošnje energije (točno se toliko energije koristi po potrebi za regeneriranje dinamičkog statusa memorije). Budući da memorija ne mora biti kopirana na disk, tada se prijelaz na to stanje na nekim sustavima provodi brže od hibernacije.

    Unatoč dostupnosti hibernacije i očekivanja, mnogi se korisnici nisu dobili osloboditi navike okretanja svog osobnog računala na kraju posla.

    Hibernacija se koristi u sustavu Windows za provedbu pseudo-drhtava početka, nazvanog Hiberboot, koji se provodi mnogo brže od uobičajenog isključivanja i lansiranja. Kada korisnik daje sustav za isključivanje, Hiberboot prikazuje korisnika iz sustava, a zatim ga prevede u stanje hibernacije u toj točki s kojom će se moći ponovno prijaviti. Kasnije, kada se korisnik ponovno uključi sustav, Hiberboot će nastaviti rad sustava s ulazne točke korisnika. Za korisnika sve to izgleda kao vrlo brzo gašenje, budući da se većina koraka inicijalizacije sustava preskoči. Naravno, ponekad sustav mora biti isključen uistinu kako bi se uklonili problemi ili postavili ažuriranje kernela. Ako sustav primi naredbu za ponovno pokretanje, a ne na isključivanju, ona prenosi ovaj gašenje i obavlja uobičajeno opterećenje.

    Očekuje se da će računalni uređaji na telefonima i tabletama, kao i na novim generacijama prijenosnih računala, uvijek konzumirati malu količinu električne energije. Kako bi se osigurao takav način rada, u suvremenim prozorima implementirao je posebnu verziju upravljanja napajanjem, koja se zove CS (priključen pripravno stanje - čekanje na način povezivanja). CS je moguć na sustavima s posebnom opremom za povezivanje mreže sposoban za praćenje prometa u malom skupu veza, koristeći mnogo manje energije nego kada je središnji procesor operativan. Ispostavilo se da je CS sustav uvijek omogućen, izlaz iz CS se provodi odmah čim se korisnik uključi na zaslon. Čekanje u načinu rada se razlikuje od uobičajenog stanja čekanja, jer će CS sustav također izaći iz očekivanja kada prima paket od nadzirane veze. Nakon što baterija počinje sjesti, CS sustav ulazi u stanje hibernacije kako bi se izbjeglo punjenje baterije i mogući gubitak korisničkih podataka.

    Postizanje rada baterije zahtijeva ne samo tako često s procesora. Također je važno što je duže moguće zadržati procesor u stanju izvan nje. CS sustav mreže opreme omogućuje procesorima da ostanu isključeni prije primitka podataka, ali zapošljavanje procesora može biti uzrokovano drugim događajima. NT-temeljeni Windows uređaji upravljačke programe, sustavne usluge i same aplikacije često se pokreću bez posebnog razloga, samo za provjeru statusa slučajeva. Takva aktivnost istraživanja obično se temelji na postavkama timera za povremeni početni kod u sustavu ili aplikaciji. Anketa na temelju timera signala može napraviti zadatak u događajima, uključujući procesor. Kako biste to izbjegli u suvremenim prozorima od takvih vremena, morate odrediti parametar pogreške koji omogućuje operacijskom sustavu da kombinira događaje timera i smanji broj pojedinačnih baza za uključivanje procesora. Windows je također sastavljen uvjeti pod kojima aplikacija koja nije u fazi aktivnog izvršenja može izvesti kod u pozadini. Operacije kao što su provjera ažuriranja ili osvježavajućeg sadržaja ne mogu se izvesti samo na početku isteka timera. Zahtjev mora slušati operativni sustav u pitanjima takve osnovne aktivnosti. Na primjer, provjera ažuriranja trebaju se pojaviti samo jednom dnevno ili sljedeći put kada će se baterija pojaviti na uređaju. Skup sustava posrednika pruža različite uvjete koji se mogu koristiti za ograničavanje pozadinske aktivnosti. Ako pozadinsko zadatak zahtijeva pristup jeftinoj mreži ili prilagođenim ovlastima, posrednici neće izvršiti zadatak dok se ne pojave potrebni uvjeti.

    Danas se mnoge primjene provode i s lokalnim kodom i uslugama u oblaku. Windows pruža uslugu obavijesti sustava Windows (usluga obavijesti sustava Windows (WNS), omogućujući usluge treće strane da push obavijesti na Windows uređaju u CS-u bez potrebe za CS mrežnom opremom posebno slušaju pakete od poslužitelja trećih strana. WNS obavijesti mogu obavijestiti vremenski kritične događaje, kao što je tekstualna poruka ili VoIP poziv. Kada je primljeni WNS paket, procesor će se morati uključiti za obradu, ali CS mrežna oprema ima sposobnost razlikovanja između prometa različitih veza, što znači da procesor ne bi trebao biti uključen kao odgovor na svaki proizvoljni paket dolaze s mrežnog sučelja.