Energijos valdymas sistemoje Windows. „Windows Power Management“ Jei failas yra, funkcija perrašo failą

„Windows Defender“ saugos centras, įskaitant naują įrenginio saugos skyrių, kuriame siūlomi pažangių saugos įrankių, pvz., branduolio izoliavimo, valdymas.

Branduolio izoliavimas yra virtualizacija pagrįsta saugos technologija, kuri suteikia papildomą apsaugos nuo išmaniųjų atakų sluoksnį. Atminties vientisumas yra branduolio izoliavimo technologijos dalis – funkcija, skirta apsaugoti nuo kenkėjiško kodo įterpimo į itin saugius procesus. Apsaugą užtikrina tai, kad branduolio virtualios atminties puslapis pradedamas vykdyti tik sėkmingai išlaikius vientisumo patikrinimą.

Pažiūrėkime, kaip įgalinti atminties vientisumo funkciją „Windows 10“ 2018 m. balandžio mėn. naujinime, kad sustiprintumėte kompiuterio saugą.

Atminties vientisumo įjungimas

  • Atidarykite „Windows Defender“ saugos centrą.
  • Pasirinkite skyrių „Įrenginio sauga“.
  • Skiltyje „Branduolio išskyrimas“ spustelėkite nuorodą „Branduolinio izoliavimo informacija“.
  • Perkelkite jungiklį „Atminties vientisumas“ į aktyvią padėtį.

Atlikę šiuos veiksmus, turite iš naujo paleisti kompiuterį, kad pakeitimai įsigaliotų.

Pastaba: Kad ši funkcija veiktų, jūsų procesorius turi palaikyti virtualizacijos technologijas. Be to, virtualizavimas turi būti įjungtas BIOS arba UEFI. Priešingu atveju funkcija nebus pasiekiama.

Branduolio izoliacijos problemų sprendimas

Kai kuriais atvejais kai kuriose programose gali kilti suderinamumo problemų, jei įjungtas branduolio izoliavimas. Norėdami išspręsti problemą, turėsite išjungti funkciją.

Jei bandote išjungti atminties vientisumą „Windows Defender“ saugos centre, bet parinktis tampa pilka ir matote pranešimą „Šį nustatymą valdo jūsų administratorius“, vis tiek galite išjungti funkciją naudodami registrą.

Pastaba: Neteisingai pakeitus registrą gali kilti rimtų problemų. Prieš atliekant šiuos veiksmus rekomenduojama sukurti atsarginę „Windows“ registro kopiją. Registro rengyklės meniu pasirinkite Failas > Eksportuoti, kad išsaugotumėte atsarginę kopiją.

  • Paspauskite Windows klavišų kombinaciją + R, kad atidarytumėte langą Vykdyti.
  • Įveskite regedit ir spustelėkite Gerai, kad paleistumėte registro rengyklę.
  • Eikite šiuo keliu:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity
  • Dukart spustelėkite įrašą Įjungtas.
  • Pakeiskite reikšmę nuo 1 iki 0.
  • Spustelėkite Gerai.

Norėdami išjungti, taip pat galite naudoti paruoštą

Energijos tvarkyklė stebi energijos suvartojimą visoje sistemoje. Istoriškai energijos valdymas apėmė monitoriaus išjungimą ir diskų įrenginių sukimosi sustabdymą. Tačiau ši problema greitai tampa sudėtingesnė – dėl poreikio ilgesniam nešiojamųjų kompiuterių baterijos veikimo laikui, taip pat dėl ​​energijos taupymo stalinių kompiuterių (kurie yra nuolat įjungti) ir dėl didelių serverių fermų suvartojamos energijos sąnaudų.

Naujos energijos valdymo funkcijos apima komponentų energijos suvartojimo sumažinimą, kai sistema nenaudojama, perjungiant atskirus įrenginius į perteklinę būseną arba net visiškai juos išjungiant (naudojant maitinimo jungiklį). Daugiaprocesorinės sistemos išjungia atskirus procesorius, kai jų nereikia, ir netgi gali sumažinti procesorių taktinį dažnį (siekiant sumažinti energijos suvartojimą). Kai procesorius neveikia, jo energijos suvartojimas taip pat sumažėja, nes jam nereikia nieko daryti, tik laukti, kol įvyks pertraukimas.

„Windows“ palaiko specialų išjungimo režimą, vadinamą užmigdymo režimu, kuris nukopijuoja visą fizinę atmintį į diską ir sumažina energijos suvartojimą iki minimumo (nešiojamieji kompiuteriai gali veikti kelias savaites užmigdymo režimu) su minimaliu akumuliatoriaus išeikvojimu. Kadangi visa atminties būsena įrašoma į diską, netgi galite pakeisti nešiojamojo kompiuterio bateriją (kai jis veikia užmigdymo režimu). Kai sistema atnaujinama iš užmigdymo režimo, ji atkuria išsaugotą atminties būseną (ir iš naujo inicijuoja įrenginius). Taip kompiuteris įjungiamas į tą pačią būseną, kuri buvo prieš užmigdymo režimą (nereikia iš naujo registruotis ir paleisti visų veikiančių programų ir paslaugų. „Windows“ bando optimizuoti šį procesą, nepaisydama nepakeistų puslapių (tų, kurių atsarginės kopijos sukurtos diske) ir suglaudina likusius atminties puslapius, kad sumažintų reikiamą įvesties/išvesties apimtį. Užmigdymo algoritmas automatiškai subalansuoja sistemos I/O ir procesoriaus pralaidumą, kad sumažintų sistemos įvesties/išvesties pralaidumą, bet tuo pačiu ir efektyviau Įvesties/išvesties dažnių juostos plotis leidžia išvengti suspaudimo įjungiant užmigdymo režimą Naudojant naujausios kartos kelių procesorių įėjimas ir išėjimas iš užmigdymo gali užtrukti vos kelias sekundes, net jei sistemoje yra daug RAM.

Alternatyva užmigdymo režimui yra budėjimo režimas, kai maitinimo tvarkyklė perjungia visą sistemą į mažesnio energijos suvartojimo būseną (naudojant tik tiek energijos, kad atkurtų dinaminės atminties būseną). Kadangi atminties nereikia kopijuoti į diską, kai kuriose sistemose į šią būseną įjungiama greičiau nei užmigdymo režimu.

Nepaisant užmigdymo ir budėjimo būsenų, daugelis vartotojų neatsikratė įpročio baigę darbą išjungti asmeninį kompiuterį.

Hibernacija sistemoje Windows naudojama pseudo paleisties išjungimui, vadinamam HiberBoot, atlikti, kuris yra daug greitesnis nei įprastas išjungimas ir paleidimas. Kai vartotojas liepia sistemai išjungti, „HiberBoot“ išregistruoja vartotoją iš sistemos ir įjungia sistemą į užmigdymo režimą taške, kuriame sistema gali būti vėl prisijungusi įprastai. Vėliau, kai vartotojas vėl įjungs sistemą, „HiberBoot“ atnaujins sistemą iš vartotojo prisijungimo taško. Vartotojui visa tai atrodo kaip labai greitas išjungimas, nes dauguma sistemos inicijavimo veiksmų yra praleisti. Žinoma, kartais sistemą reikia išjungti, kad būtų išspręstos problemos arba įdiegtas branduolio naujinimas. Jei sistemai liepiama paleisti iš naujo, o ne išjungti, ji ištveria tikrą išjungimą ir atlieka įprastą paleidimą.

Tikimasi, kad telefonuose ir planšetiniuose kompiuteriuose esantys skaičiavimo įrenginiai, taip pat naujos kartos nešiojamieji kompiuteriai visada sunaudos nedaug energijos. Siekdama užtikrinti šį režimą, šiuolaikinė „Windows“ įdiegia specialią maitinimo valdymo versiją, vadinamą CS (prijungtas budėjimo režimas). CS galima sistemose su tam skirta tinklo ryšio aparatūra, kuri gali stebėti srautą per nedidelį jungčių rinkinį, naudodama daug mažiau energijos nei naudojant centrinį procesorių. Pasirodo, CS sistema visada įjungta, CS iš karto išeina, kai tik vartotojas įjungia ekraną. Prijungto režimo miego režimas skiriasi nuo įprasto miego režimo, nes CS sistema taip pat pabus, kai gaus paketą iš stebimo ryšio. Kai baterija pradeda senka, CS sistema pereina į užmigdymo būseną, kad būtų išvengta visiško akumuliatoriaus išsikrovimo ir galimo vartotojo duomenų praradimo.

Norint pasiekti ilgą baterijos veikimo laiką, reikia ne tik kuo dažniau išjungti procesorių. Taip pat svarbu kuo ilgiau išlaikyti procesorių išjungtą. CS sistemos tinklo aparatinė įranga leidžia procesoriams išjungti, kol gaunami duomenys, tačiau dėl kitų įvykių procesorius gali vėl įsijungti. NT pagrindu veikiančios „Windows“ įrenginių tvarkyklės, sistemos paslaugos ir pačios programos dažnai paleidžiamos be jokios ypatingos priežasties, tiesiog norint patikrinti dalykų būseną. Ši apklausos veikla paprastai grindžiama laikmačių nustatymu, kad jie periodiškai paleistų kodą sistemoje arba programoje. Apklausa, pagrįsta laikmačio signalais, gali supainioti su procesoriumi susijusius įvykius. Kad to išvengtų, šiuolaikinė Windows reikalauja, kad tokie laikmačiai nurodytų paklaidos ribą, leidžiančią operacinei sistemai agreguoti laikmačio įvykius ir sumažinti atskirų procesoriaus paleidimo kartų skaičių. „Windows“ taip pat apibrėžia sąlygas, kuriomis aktyviai neveikianti programa gali vykdyti kodą fone. Tokios operacijos, kaip naujinimų tikrinimas arba turinio atnaujinimas, negali būti atliekamos tik tada, kai būsite paraginti paleisti pasibaigus laikmačio galiojimo laikui. Dėl tokios foninės veiklos programa turi būti taikoma operacinei sistemai. Pavyzdžiui, naujinimų tikrinimas turėtų vykti tik kartą per dieną arba kitą kartą, kai įrenginys įkrauna akumuliatorių. Sistemos tarpinių serverių rinkinys suteikia įvairių sąlygų, kurias galima naudoti norint apriboti foninę veiklą. Jei foninei užduočiai atlikti reikalinga nebrangi prieiga prie tinklo arba vartotojo leidimai, tarpiniai serveriai nevykdys užduoties, kol nebus sudarytos būtinos sąlygos.

Šiandien daugelis programų yra įdiegtos naudojant vietinį kodą ir paslaugas, esančias debesyje. „Windows“ teikia „Windows“ pranešimų paslaugą (WNS), kuri leidžia trečiųjų šalių paslaugoms siųsti pranešimus į „Windows“ įrenginį CS, nereikalaujant, kad CS tinklo aparatinė įranga specialiai klausytų paketų iš trečiųjų šalių serverių. WNS pranešimai gali įspėti apie laikui svarbius įvykius, pvz., gautą tekstinį pranešimą arba VoIP skambutį. Kai gaunamas WNS paketas, procesorius turės įsijungti, kad jį apdorotų, tačiau CS tinklo aparatinė įranga turi galimybę atskirti srautą iš skirtingų jungčių, o tai reiškia, kad procesorius neturi įsijungti reaguojant į kiekvieną atsitiktinį paketą. ateina iš tinklo sąsajos.

Branduolio režimo tvarkyklės: 1 dalis: pagrindinės sąvokos – archyvas WASM.RU

Architektūros apžvalga

Vidinis „Windows 2000“ pasaulis yra padalintas į dvi dalis su aiškiai apibrėžtomis ribomis – tiek adresų erdvės, tiek toje adresų erdvėje veikiančio kodo teisių ir pareigų požiūriu.

Su adresų erdvės padalijimu viskas stebėtinai paprasta. Visi keturi 32 bitų architektūros gigabaitai yra padalyti į dvi lygias dalis (nepamiršau 4GT RAM derinimo ir fizinio adreso plėtinio kaip egzotikos). Apatinė pusė skirta vartotojo režimo procesams, viršutinė dalis priklauso branduoliui.

Teisių ir pareigų pasiskirstymas yra šiek tiek sudėtingesnis.

Vartotojo procesais laikomi šie procesai:

  • Sistemos palaikymo procesai – pavyzdžiui, prisijungimo prie „Winlogon“ procesas (įdiegtas \%SystemRoot%\System32\Winlogon.exe);
  • Aptarnavimo procesai – pavyzdžiui, spausdinimo rinkinys;
  • Vartotojo programos – yra penkių tipų: Win32, Windows 3.1, MS-DOS, POSIX ir OS/2;
  • Aplinkos posistemiai – palaikomi trys aplinkos posistemiai: Win32 (įdiegta \%SystemRoot%\System32\Csrss.exe), POSIX (įdiegta \%SystemRoot%\System32\Psxss.exe), OS/2 (įdiegta \%SystemRoot %\System32\os2ss.exe).

Šerdį sudaro šie komponentai:

    Vykdomoji sistema – atminties valdymas, procesai ir gijos ir kt.;
  • Branduolys – gijų planavimas, pertraukimų ir išimčių siuntimas ir pan. (įdiegta \%SystemRoot%\System32\Ntoskrnl.exe);
  • Įrenginių tvarkyklės – aparatinės įrangos įrenginių tvarkyklės, tinklo tvarkyklės, failų sistemos tvarkyklės;
  • Hardware Abstraction Layer (HAL) – išskiria aukščiau nurodytus tris komponentus nuo skirtumų tarp aparatinės įrangos architektūrų (įdiegta \%SystemRoot%\System32\Hal.dll);
  • Langų ir grafikos sistema – grafinės vartotojo sąsajos (GUI) funkcijos (įdiegtos \%SystemRoot%\System32\Win32k.sys).

Ryžiai. 1-1. Supaprastinta „Windows 2000“ architektūros schema

Vartotojo režimas ir branduolio režimas

Nors „Intel x86“ procesorių šeima palaiko keturis privilegijų lygius (vadinamus apsaugos žiedais), „Windows“ naudoja tik du: 0 branduolio režimui ir 3 vartotojo režimui. Taip yra dėl kitų procesorių (alfa, mips) palaikymo, kuriuose įdiegtos tik dviejų lygių privilegijos. Ankstesnės „Windows NT“ laidos palaikė šias architektūras, tačiau „Windows 2000“ liko tik x86.

Vartotojo režimo komponentai turi savo apsaugotas adresų erdves, šių procesų gijos veikia neprivilegijuoto procesoriaus režimu (vadinamu vartotojo režimu), negali vykdyti privilegijuotų procesoriaus komandų, turi ribotą ir netiesioginę prieigą prie sistemos duomenų ir sistemos adresų erdvės ir neturi tiesioginės; prieiga prie aparatūros. Tiesa, jų darbo metu šių procesų gijos, skambindamos sistemos tarnyboms, persijungia į branduolio režimą, tačiau tokiu atveju visiškai praranda savo vykdymo kontrolę, kol grįžta į vartotojo režimą.

Vartotojo režimo procesai laikomi potencialiai pavojingais sistemos stabilumo požiūriu. Jų teisės yra ribotos. Ir bet kokie bandymai peržengti šiuos apribojimus yra griežtai slopinami.

Branduolio komponentai turi vieną adresų erdvę, vykdomi privilegijuoto procesoriaus režimu (vadinamu branduolio režimu), gali vykdyti visas procesoriaus komandas, įskaitant privilegijuotąsias, turėti neribotą ir tiesioginę prieigą prie sistemos duomenų ir kodo bei turėti tiesioginę arba per HAL prieigą prie įranga.

Branduolio kodas (iš tikrųjų tai yra pati sistema) laikomas visiškai patikimu. Todėl įkėlus į sistemos adresų erdvę, vairuotojas tampa sistemos dalimi ir jam netaikomi jokie apribojimai.

Taigi vartotojo programos yra atskirtos nuo pačios operacinės sistemos. Jei ketinate parašyti kokią nors rimtą programą, kuriai reikia prieigos prie vidinių sistemos funkcijų ar duomenų struktūrų, susidursite su daugybe apribojimų, kuriuos galite įveikti tik įdėję kodą į sistemos adresų erdvę. Yra tik vienas dokumentuotas būdas tai padaryti - įdiegti įrenginio tvarkyklę. Šis metodas yra gana paprastas, patikimas ir, svarbiausia, visiškai palaikomas pačios operacinės sistemos.

Windows 2000 tvarkyklės

„Windows 2000“ palaiko daugelio tipų įrenginių tvarkykles.

Yra du pagrindiniai, turintys savo atstovus:

  • Vartotojo režimo tvarkyklės:
    • Virtualios įrenginių tvarkyklės (VDD) – naudojamos MS-DOS programoms palaikyti (nepainioti su VxD tvarkyklėmis Windows 95/98 – tai visiškai skirtingi dalykai, nors ir turi tą patį pavadinimą);
    • Spausdintuvo tvarkyklės.
  • Branduolio režimo tvarkyklės:
    • Failų sistemos tvarkyklės – įvesti/išvesti vietinius ir tinklo diskus;
    • Pasenusios tvarkyklės – skirtos ankstesnėms „Windows NT“ versijoms;
    • Vaizdo adapterio tvarkyklės (Video Drivers) - įgyvendina grafines operacijas;
    • Srautinio perdavimo tvarkyklės – įgyvendina vaizdo ir garso įvestį/išvestį;
    • WDM tvarkyklės („Windows Driver Model“, WDM) – palaiko „Plug and Play“ technologiją ir maitinimo valdymą. Jų išskirtinis bruožas yra „Windows 98“, „Windows ME“ ir „Windows 2000“ suderinamumas šaltinio kodo lygiu.

Skirtinguose šaltiniuose galite rasti klasifikaciją, kuri šiek tiek skiriasi nuo pirmiau pateiktos, tai nėra svarbu. Svarbu tai, kad vairuotojai, kuriuos parašysime, nepatenka į jokį šios klasifikacijos tašką. Tai nėra nei failų sistemos tvarkyklės, nei senos tvarkyklės, nei vaizdo adapterio ar garso plokštės tvarkyklės, nei WDM tvarkyklės, nes nepalaiko Plag"n"Play ir maitinimo valdymo. Tai nėra vartotojo režimo tvarkyklės (tai visai neįdomu). Tiesą sakant, tai tik velnias žino, kas tai yra, nes... pati sistema leidžia lengvai ir paprastai pridėti kodą prie savęs nežinomam įrenginiui ir daryti su juo ką tik nori! Atrodo, kad naktį į tavo duris pasibeldė visiškai nepažįstamas žmogus ir nė žodžio netaręs įleidai jį nakčiai ir net paguldei į savo lovą! Tačiau tai nėra kažkokia klaida ar saugumo spraga. Sistema tiesiog veikia taip, kaip veikia. Kitaip ir būti negali, nes... sąveikaudama su aplinka, sistema yra priversta suteikti prieigą prie savęs. Ir jei taip nebūtų, tai būtų visiškai uždara, todėl nenaudinga sistema.

Kaip rodo pats pavadinimas, įrenginio tvarkyklė yra programa, skirta valdyti tam tikrą įrenginį, ir šis įrenginys nebūtinai turi būti fizinis. Jis gali būti logiškas arba, kaip mūsų atveju, virtualus.

Pagal savo struktūrą įrenginio tvarkyklė yra ne kas kita, kaip PE formato failas (Portable Executable, PE). Tas pats kaip įprastas exe ir dll. Jis tiesiog kraunasi ir veikia pagal skirtingas taisykles. Tvarkyklės gali būti laikomos branduolio režimo DLL, skirtomis atlikti užduotis, kurių negalima atlikti vartotojo režimu. Esminis skirtumas čia (neskaičiuojant privilegijų lygio) yra tas, kad mes negalėsime tiesiogiai pasiekti tvarkyklės, nei jos kodo, nei jo duomenų, o naudosime specialų mechanizmą, kurį suteikia Input/Output Manager. Įvesties / išvesties tvarkyklė suteikia tvarkyklių veikimo aplinką, taip pat suteikia jų įkėlimo, iškrovimo ir valdymo mechanizmus.

Kai pradėsite kurti branduolio režimo tvarkykles, jausitės kaip visiškai pradedantysis, nes... visa ankstesnė API naudojimo patirtis čia nepadės – branduolys suteikia visiškai kitokį funkcijų rinkinį. Taip pat turėsite naudoti prastai dokumentuotas (apibrėžtas tik antraštės failuose) arba visiškai nedokumentuotas funkcijas ir duomenų struktūras.

Vieno ir kelių lygių tvarkyklės

Dauguma tvarkyklių, valdančių fizinius įrenginius, yra daugiasluoksnės tvarkyklės. Įvesties / išvesties užklausa apdorojama kelioms tvarkyklėms. Kiekvienas atlieka savo darbo dalį. Pavyzdžiui, užklausa nuskaityti failą siunčiama į failų sistemos tvarkyklę, kuri, atlikusi kai kurias operacijas (pavyzdžiui, suskaidžiusi užklausą į kelias dalis), perduoda ją „pasroviui“ disko tvarkyklei, kuri, savo ruožtu, išsiunčia prašymą autobuso vairuotojui. Be to, tarp šių tvarkyklių galite pridėti bet kokį skaičių filtrų tvarkyklių (pavyzdžiui, duomenų šifravimo). Įvykdęs užklausą, žemesnio lygio vairuotojas perduoda savo rezultatus „aukštesnio lygio tvarkyklei“. Bet, laimei, mums viskas bus daug paprasčiau. Mūsų tvarkyklės visada bus monolitinės tvarkyklės, o tai labai supaprastins visą jų rašymo ir derinimo procesą.

Temos kontekstas

Kadangi dažniausiai turime tik vieną procesorių, o programų, kurias reikia vykdyti, yra daug, natūralu, kad norint sukurti iliuziją, kad jos vykdomos vienu metu, šios programos turi būti nuosekliai prijungtos prie procesoriaus ir labai greitai. Ši procedūra vadinama gijos konteksto perjungimu. Jei sistema perjungia tam pačiam procesui priklausančių gijų kontekstą, tuomet reikia išsaugoti atjungtos gijos procesoriaus registrų reikšmę ir įkelti anksčiau išsaugotas prijungtos gijos procesoriaus registrų reikšmes. Ir atnaujinti kai kurias duomenų struktūras. Jei prijungta gija priklauso kitam procesui, tuomet reikia įkelti žymeklį į proceso puslapių katalogą į procesoriaus CR3 registrą. Kadangi kiekvienam vartotojo procesui suteikiama uždara adresų erdvė, skirtingi procesai turi skirtingas adresų erdvių projekcijas, taigi ir skirtingus puslapių katalogus bei puslapių lentelių rinkinius, per kuriuos procesorius verčia virtualius adresus į fizinius. Visa tai nėra tiesiogiai susiję su tvarkyklės programavimu. Bet aš jums tai primenu šiuo klausimu. Kadangi konteksto perjungimas nėra greičiausias veiksmas, tvarkyklės, siekdamos geresnio našumo, paprastai nekuria savo gijų. Tačiau vairuotojo kodas vis tiek turi būti vykdomas. Todėl norėdami sutaupyti laiko perjungiant kontekstą, tvarkyklės veikia branduolio režimu viename iš trijų kontekstų:

  • vartotojo gijos, kuri inicijavo I/O užklausą, kontekste;
  • branduolio režimo sistemos gijos kontekste (šios gijos priklauso sistemos procesui);
  • dėl pertrūkio (taigi ne jokio proceso ar gijos, kuri buvo vykdoma pertraukimo metu, kontekste).

Nelabai suprantu, kaip galima ką nors padaryti „ne kokio nors proceso ar gijos kontekste“, bet turint omenyje žmonių, kurie tai parašė (D. Solomonas ir M. Russinovičius), autoritetą ir tai, kad mes to nereikia, nes. Mes neapdorosime nei programinės įrangos, nei ypač aparatinės įrangos trikdžių, apie trečiąjį atvejį galite iš karto pamiršti. Lieka pirmieji du variantai. Jei inicijuojama įvesties / išvesties užklausa, mes esame gijos, kuri inicijavo šią užklausą, kontekste, todėl galime tiesiogiai pasiekti proceso, kuriam priklauso ši gija, adresų erdvę. Jei esame sistemos gijos kontekste, negalime tiesiogiai pasiekti jokio vartotojo proceso, bet visada galime pasiekti sisteminį. Jei jums reikia iš tvarkyklės pamatyti, ką koks nors procesas turi tokiu ir tokiu adresu, turėsite arba patys perjungti kontekstą, arba išversti adresus naudodami puslapių lenteles.

Pertraukti užklausų lygius

Pertraukimas yra neatsiejama bet kurios operacinės sistemos dalis. Pertraukimas reikalauja apdorojimo, todėl dabartinio kodo vykdymas sustabdomas ir valdymas perduodamas pertraukimų tvarkyklei. Yra tiek aparatinės, tiek programinės įrangos trikdžių. Pertraukimai aptarnaujami pagal jų prioritetą. „Windows 2000“ naudoja pertraukimo prioriteto schemą, vadinamą pertraukimo užklausos lygiais (IRQL). Iš viso yra 32 lygiai: nuo 0 (pasyvus), kurio prioritetas yra žemiausias, iki 31 (aukštas), kurio prioritetas yra didžiausias. Be to, pertraukimai nuo IRQL=0 (pasyvus) iki IRQL=2 (DPC\dispatch) yra programinė įranga, o pertraukimai nuo IRQL=3 (1 įrenginys) iki IRQL=31 (aukštas) yra aparatinė įranga. Nepainiokite pertraukimo prioriteto lygių su gijos prioriteto lygiais – tai visiškai skirtingi dalykai. Pertraukimas, kurio lygis IRQL=0, griežtai kalbant, nėra pertraukimas, nes jis negali nutraukti jokio kodo veikimo (juk kad tai padarytume, šis kodas turi būti vykdomas dar žemesniu pertraukimo lygiu, bet tokio lygio nėra). Šiame IRQL veikia vartotojo režimo gijos. Ir mūsų vairuotojo kodas taip pat veiks šiame IRQL. Tai nereiškia, kad bet koks tvarkyklės kodas visada vykdomas „pasyviuoju“ lygiu. Tiesiog mes neapdorosime nei programinės įrangos, nei, ypač, aparatinės įrangos trikdžių. Ir iš to darytina bent dvi labai svarbios išvados.

Pirma: mūsų tvarkyklių darbas gali būti nutrauktas bet kuriuo metu, kad būtų galima apdoroti pertraukimą su aukštesniu prioritetu (pavyzdžiui, iš laikmačio, kai planuotojas mano, kad mūsų gijoje procesorius jau pakankamai ilgai ir laikas jam poilsis). Todėl šia prasme mūsų tvarkyklių kodas yra pertraukiamas ir neaplenkiamas (procesorius atiduodamas kitai gijai), kaip ir bet kurios vartotojo gijos kodas. Yra branduolio funkcijų, kurios leidžia sužinoti esamą pertraukimo lygį, taip pat jį pakelti arba sumažinti.

Antras svarbus momentas: pasyviojo pertraukimo lygyje galite iškviesti bet kokias branduolio funkcijas (DDK kiekvienos funkcijos aprašyme turi būti nurodyta, kokiu pertraukimo lygiu ji gali būti iškviesta), taip pat pasiekti atminties puslapius, išplitusius į apsikeitimo failą. Esant aukštesniems pertraukimų lygiams (DPC/dispath ir aukštesniems) bandymas pasiekti puslapį, kurio nėra fizinėje atmintyje, sukelia sistemos gedimą, nes Atminties tvarkyklė negali susidoroti su puslapio klaida.

„Mėlynasis mirties ekranas“

Manau, kad kiekvienas bent kartą yra matęs jaudinančią nuotrauką, pavadintą „Mėlynasis mirties ekranas“ (BSOD). Tikriausiai nereikia aiškinti, kas tai yra ir kodėl tai atsiranda. Čia svarbu tai, kad pradėdami kurti branduolio režimo tvarkykles pasiruoškite tam, kad BSOD jūsų monitoriaus ekrane pasirodys gana dažnai.

Trečiame žiede viskas buvo paprasta: nubraižiau apytikslį kodą, įdėjau kur reikia int3, paleidau ir... debugeryje jau supranti, kas yra kas. Jei kažkas negerai, tai ištaisiau, ištaisiau klaidas, perkompiliavau... ir taip toliau, kol kodas veikia kaip priklauso. Programuodami tvarkykles galite pamiršti apie šią techniką. Čia „saperis“ kartą suklysta. Vienas neteisingas judesys... ir tu gali minutei atsisėsti ir atsipalaiduoti.

Norėdami pamatyti BSOD kuo rečiau, turėtumėte laikytis vienos labai paprastos taisyklės: „Septyni kartus išmatuokite – vieną kartą nupjaukite“... ta prasme „Patikrinkite septynis kartus - paleiskite vieną kartą“. Tai, žinoma, lengva pasakyti, bet daug sunkiau padaryti. Tačiau, kaip taisyklė, atsižvelgiant į tai, kad tvarkyklių, kurias rašysite (perskaičius šiuos straipsnius), struktūra yra gana paprasta, galite susidoroti su klaidomis prieš pasirodant BSOD. Jei jis nuolat pasirodo prieš akis ir negalite suprasti priežasties, galimas būdas išsiaiškinti situaciją yra išanalizuoti avarijos sąvartyną. Apie tai, kas tai yra, kaip jį pasigaminti ir išanalizuoti, galite perskaityti Marko Russinovičiaus straipsnyje „Avarijų atminties sąvartynų analizė“ http://www.osp.ru/win2000/2001/03/025.htm. Šis reikalas (analizė) yra labai sunkus, bet manau, kad iki to nebus.

Esu baisus teoretikas, todėl visa tai, kas išdėstyta pirmiau, galite laikyti labai pagrindine informacija apie principus, kuriuos būtina suprasti. Negalite pradėti kurti branduolio režimo tvarkyklių, nesuvokdami, kas yra gijos kontekstas, pertraukimo lygių ir gijų prioritetų, branduolio / vartotojo režimo ir kt. ir taip toliau. Jei nesate tikri dėl kokios nors problemos – nuorodų sąrašas pateikiamas žemiau.

Dabar pakalbėkime apie praktiškesnius dalykus (jie taps labai praktiški tolesniuose straipsniuose), o būtent tai, ko mums reikia, kad visa ši teorija virstų praktika.

Vairuotojo tobulinimo rinkinys

Pirmasis, žinoma, yra įrenginių tvarkyklių kūrimo rinkinys (Windows 2000 tvarkyklės kūrimo rinkinys, 2KDDK), kurį galima laisvai atsisiųsti iš Microsoft svetainės (bet kokiu atveju visiškai nemokamai atsisiunčiau iš čia: http:// www.microsoft.com/ddk/). Į šį paketą įtraukta dokumentacija, kuri yra gausus informacijos apie vidines duomenų struktūras ir visos sistemos funkcijas, naudojamas įrenginių tvarkyklių, šaltinis.

Be dokumentacijos, DDK apima bibliotekos failų rinkinį (*.lib), kuris bus būtinas susiejant. DDK apima du šių failų rinkinius: galutinei Windows versijai (vadinama nemokama versija); ir plėtrai (vadinama checked build). Šie failai yra atitinkamai %ddk%\libfre\i386 ir %ddk%\libchk\i386 kataloguose. Derinimo versijoje yra griežtesnis klaidų tikrinimas. Turite naudoti failus, atitinkančius jūsų sistemos versiją, įdėdami juos į \masm32\lib\w2k katalogą.

Įtraukti failai

Taip pat turėsime įtraukti (*.inc) failus su funkcijų prototipo apibrėžimais. Mes (tiksliau, aš) taip pat turėsime juos atlikti patys. Išbandžiau daug įvairių paslaugų, kurios konvertuoja *.lib -> *.inc, tiek įtrauktas į masm32 by hutch paketą, tiek tas, kurias nutekėjau skirtingu metu iš plačių interneto platybių. Iš visų turimų tik protoize.exe by f0dder susidorojo su savo užduotimi ir man praktiškai nereikėjo nieko redaguoti ranka. Šis nuostabus įrankis bus \tools\protoize kataloge. Autoriaus svetainė: http://f0dder.didjitalyphrozen.com/. Bet ten jo nerasite. f0dder kelis kartus paskelbė šią priemonę http://board.win32asmcommunity.net/ konferencijoje. Includes bus \include\w2k kataloge. Jie turėtų būti dedami į \masm32\include\w2k katalogą. Konvertavimui naudojome *.lib nemokamam „Windows 2000“ leidimui, nes tokią versiją turiu aš (tikriausiai ir jūs).

Kita problema rimtesnė. Tai yra beveik visiškas įtraukimo failų su būtinų struktūrų, simbolinių konstantų ir makrokomandų apibrėžimais nebuvimas. Vargu ar pavyks rasti ką nors naudingo internete – tai per daug egzotiška veikla – branduolio režimo tvarkyklių rašymas assembleryje. Kai kuriuos galima rasti EliCZ http://www.anticracking.sk/EliCZ/. Kažkas iš Y0da http://mitglied.lycos.de/yoda2k/index.htm (iš dalies pagamintas jo, iš dalies paimtas iš to paties EliCZ). Tačiau tai buvo padaryta labai prastai (su visa mano gilia pagarba kolegoms slovakams ir vokiečiams): daugelio struktūrų narių vardai skiriasi nuo tų, kurie apibrėžti pirminiuose DDK antraštės failuose; įdėtos struktūros ir sąjungos neturi pavadinimų; nors originale jie pavadinti. Ir apskritai viskas kažkokia netvarka, o pažiūrėjus susidaro slegiantis įspūdis. Tik ntstatus.inc yra gerai padaryta. Taip yra iš dalies dėl to, kad EliCZ pradėjo kurti savo inkliuzus net be DDK (kaip jis pats sako). Bet kokiu atveju nepatariu jų naudoti, bent jau be kruopštaus testavimo. Kažkas vienu metu mirgėjo http://board.win32asmcommunity.net/ konferencijoje, tačiau kokybė taip pat nėra ypač įspūdinga. Trumpai tariant, vienintelis teisingas sprendimas šioje situacijoje yra viską daryti patiems ir rankiniu būdu, nes aš nežinau jokių įrankių, leidžiančių automatizuoti šį procesą. Jei staiga aptikote ką nors vertingo ir nemanote, kad tai per daug vargo, praneškite man.

Tvarkyklių derinimas

Mums taip pat reikia derinimo priemonės, o kadangi turėsime derinti branduolio režimo kodą, mums reikia atitinkamo derintuvo. Geriausias pasirinkimas būtų SoftICE. Arba galite naudoti branduolio derinimo priemonę, įtrauktą į DDK. Šiam derintuvui reikalingi du kompiuteriai – pagrindinis ir vergas, kuriuos gali sau leisti ne kiekvienas. Markas Russinovičius (http://www.sysinternals.com/) parašė programą, pavadintą LiveKd, kuri leidžia naudoti branduolio derinimo programą neprijungus antrojo kompiuterio. Nežinau, ar jis yra svetainėje (netikrinau), bet jis yra knygos „Microsoft Windows 2000 vidiniai įrenginiai“ diske. Šis derinimo įrankis taip pat labai naudingas nagrinėjant sistemos vidines dalis, jei turite įdiegtus derinimo simbolius, kuriuos galima (arba galima) laisvai atsisiųsti iš „Microsoft“ svetainės.

  • Davidas Solomonas, Markas Russinovičius, „Microsoft Windows 2000 vidinės dalys“, red. „Petras“, 2001 m.

    Nors šioje knygoje nėra nė vienos šaltinio kodo eilutės, ji pirmiausia skirta programuotojams.

  • Sven Schreiber, "Nedokumentuotos Windows 2000 savybės", red. „Petras“, 2002 m.

    Grynai praktiška knyga, atskleidžianti daugelį „Windows 2000“ paslapčių.

  • Walteris Oney, „Microsoft tvarkyklės modelio programavimas“, „Microsoft Press“, 1999 m

    Šioje knygoje akcentuojamos Plag"n"Play tvarkyklės, tačiau tai jokiu būdu nesumenkina jos privalumų, nes Pagrindiniai vairuotojų tobulinimo principai yra universalūs.

  • Jeffrey Richter, „Windows profesionalams: galingų Win32 programų kūrimas su 64 bitų Windows specifika“, red. „Petras“, 2000 m.

    Ši knyga neturi nieko bendro su tvarkyklių programavimu, tačiau ji taip pat labai įdomi ;-)

    Šis sąrašas jokiu būdu nėra išsamus. Daug, ypač anglų kalba, galima rasti internete (išskyrus Schreiberį, visos knygos yra elektronine forma). Kalbant apie knygas, taip pat norėčiau pasakyti, kad jos visos yra „privalomos turėti“. Matai – pirk nežiūrėdamas. Visi, išskyrus Walter Oney, yra išversti į mūsų „didysis ir galingasis“.

    Ir paskutinis dalykas. Nesu didelis ekspertas tvarkyklių kūrimo srityje, todėl klaidų ar netikslumų tiek šiame, tiek visuose tolesniuose straipsniuose labai tikėtina. Jei radote, drąsiai kiškite nosį. Pasakysiu ačiū.

  • „Microsoft“ didelį dėmesį skiria saugumui „Windows 10“ operacinėje sistemoje. Vienas iš svarbių sistemos elementų yra „Windows Defender“, tačiau ji negali susidoroti su visomis grėsmėmis. Visų pirma, pastaruoju metu ypač išplito Ransomware virusai, kurių garsiausios reinkarnacijos yra Petya ir . „Microsoft“ įdiegė branduolio izoliavimo ir atminties vientisumo funkcijas „Windows 10“, kurios yra skirtos kovai su „Ransomware“ virusais. Pagal numatytuosius nustatymus jie yra išjungti.

    Turinys:

    Kas yra branduolio izoliacija ir atminties vientisumas

    Branduolio izoliacija yra papildomas apsaugos procesas, kurį užtikrina kompiuterio procesų atskyrimo nuo operacinės sistemos ir įrenginio metodas. Dėl šių veiksmų galima išvengti operacinės sistemos veikimo sutrikdymo, kai virusai patenka į kompiuterį.

    Atminties vientisumas- Tai yra branduolio išskyrimą lydinti apsauginė funkcija, kuria siekiama apriboti nežinomų potencialiai pavojingų programų prieigą prie aukšto saugumo lygio procesų.

    Svarbu: branduolio izoliavimo funkcija gali veikti tik tuo atveju, jei tam yra pakankamai sąlygų iš kompiuterio aparatinės įrangos. BIOS nustatymuose turi būti aktyvi virtualizacijos technologija, dėl kurios Windows 10 veikiantis kompiuteris virtualiame konteineryje gali paleisti įvairias programas, ribodamas jų prieigą iš pagrindinių sistemos komponentų.

    Kaip įjungti branduolio izoliaciją ir atminties vientisumą

    „Windows 10“ operacinės sistemos nustatymai leidžia visiškai valdyti kompiuterio saugos funkcijas. Naudodami „Windows 10“ nustatymus galite įjungti branduolio izoliaciją ir atminties vientisumą, kaip nurodyta toliau.


    Kaip minėta aukščiau, jei kompiuterio aparatinė įranga nepalaiko virtualizacijos, ši funkcija neveiks. Įjungus, vartotojas apatiniame dešiniajame kampe matys pranešimą „Neįmanoma užtikrinti atminties vientisumo. Galimas nesuderinamumas“. Jei pasirodo šis pranešimas, rekomenduojama eiti į BIOS ir pažiūrėti, ar įjungta saugaus įkrovimo (įkrovos režimo) funkcija.

    Kaip išjungti branduolio izoliaciją ir atminties vientisumą

    Naujos operacinės sistemos funkcijos, kurios labai paveikia jos veikimą, visada gali sukelti kompiuterio veikimo problemų. Branduolio izoliavimo funkcija nėra išimtis. Vartotojai, kurie tai jau išbandė, „Microsoft“ forumuose pažymi, kad paleidžiant daugybę žaidimų ir programų susiduria su problemomis. Vienintelis būdas išspręsti šią problemą yra išjungti branduolio izoliaciją ir atminties vientisumą. Galbūt programų kūrėjai arba „Microsoft“ ištaisys šį nesuderinamumą būsimuose atnaujinimuose.

    Yra 3 būdai, kaip išjungti branduolio izoliaciją ir atminties vientisumą:


    Mano pagrindiniame nešiojamajame kompiuteryje dažnai iškyla įvairių maitinimo problemų, kurias galima paaiškinti darbu su vidine versija. Tačiau net ir stabilioje 1803 versijoje pastebėjau, kad mano sistema nustojo miegoti. Tokiu atveju monitorius išsijungė po nurodyto laiko, o tai leido suprasti, kad sistema teisingai nustatė neveiklumo būseną.

    Nustačiau trumpą perėjimo į miegą laikotarpį, 1-2 minutes, ir pradėjau diagnostiką.

    Tikrinamos užklausos maitinimo posistemiui iš programų ir tvarkyklių

    Pirmas dalykas, kurį reikia padaryti, yra pažvelgti powercfg, kuri neleidžia OS užmigti. Procesus ir tvarkykles, pasiekiančius maitinimo posistemį, galite matyti komandų eilutėje kaip administratorius:

    Powercfg-užklausos

    Iš karto aišku, kad užklausa SISTEMAI ateina iš DRIVER – šiuo atveju Realtek naudoja garso srautą.

    Sąraše taip pat gali būti WebRTC iš Chrome, o iškart po sistemos paleidimo iš naujo galite matyti atsisiuntimo optimizavimo užklausas ir paieškos indeksą, tačiau jie greitai išnyksta. Galite įtraukti procesą arba tvarkyklę į išimčių sąrašą ir tai netrukdys jam užmigti.

    Powercfg -requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)" SISTEMA

    Komanda skamba „ignoruoti užklausą iš DRIVER [visas tvarkyklės pavadinimas] į SISTEMĄ“.

    Išimčių sąrašas saugomas registro rakte

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverride

    ir išvedamas komanda

    Powercfg -requestsoverride

    Kad įsitikinčiau, paleidau iš naujo, bet sistema atsisakė užmigti. Patikrinęs išimtis ir užklausų sąrašą, radau, kad „Realtek“ tvarkyklė ir toliau naudojo garso srautą, nors jis buvo įtrauktas į išimtis.

    Šiek tiek šokau aplink išimtis, bet nepasisekė. Greita „Google“ patvirtino, kad kai kuriais atvejais jie neveikia. Tai būdinga senoms užklausoms, tačiau buvo ir kitas atvejis, ir aš ne pirmas su tuo susidūriau.

    Iš sąrašo pašalinau Realtek. Galite ištrinti įrašus registro rengyklėje arba konsolėje. Komanda beveik tokia pati kaip ir pridedant, tik nenurodo kur eina užklausa, t.y. šiuo atveju komandos pabaigoje nėra SISTEMOS:

    Powercfg -requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)"

    Eisime kitu keliu

    Apskaičiuokite procesą, kuris naudoja garso posistemį

    Yra žinoma, kad „Realtek“ vairuotojas atlieka nešvarų darbą. Akivaizdu, kad jis įkeliamas paleidžiant sistemą, todėl failo pavadinimą lengva sužinoti naudojant Autoruns.

    Trys įrašai nurodo du failus, iš kurių vienas yra valdymo skydelis, sprendžiant pagal pavadinimą. Todėl susidomėjimo objektu tapo ravbg64.exe.