Energiagazdálkodás a Windows rendszerben. Energiagazdálkodás a Windows Powercfg-ben elavult kernelhívó

Windows Defender Biztonsági Központ, beleértve új szakasz„Eszközbiztonság”, amely olyan fejlett biztonsági eszközök kezelését kínálja, mint például a „Kernel Isolation”.

A Core Isolation egy virtualizáció alapú biztonsági technológia, amely biztosítja további szint védelem az intellektuális támadások ellen. A memória integritása a magleválasztási technológia egyik összetevője – ez a funkció a beillesztés megakadályozására szolgál rosszindulatú kód magas biztonsági folyamatokban. A védelmet az adja, hogy a kernel virtuális memórialapja csak a sikeres integritásellenőrzés után indul el.

Nézzük meg, hogyan engedélyezheti a Memóriaintegritás funkciót a Windows 10 2018. áprilisi frissítésében számítógépe biztonságának javítása érdekében.

A memória integritásának engedélyezése

  • Nyissa meg a Windows Defender Biztonsági központot.
  • Válassza az "Eszközbiztonság" részt.
  • A Kernel Isolation részben kattintson a Kernel Isolation Details hivatkozásra.
  • Állítsa a Memória integritás kapcsolót aktív helyzetbe.

A lépések végrehajtása után újra kell indítania a számítógépet, hogy a változtatások érvénybe lépjenek.

jegyzet Megjegyzés: A funkció működéséhez a processzornak támogatnia kell a virtualizációs technológiákat. Ezenkívül a virtualizációt engedélyezni kell a BIOS-ban vagy az UEFI-ben. Ellenkező esetben a funkció nem lesz elérhető.

Kernel izolálási problémák megoldása

Egyes esetekben kompatibilitási problémák léphetnek fel egyes alkalmazásokban, ha a magleválasztás engedélyezve van. A probléma megoldásához le kell tiltania a funkciót.

Ha megpróbálja letiltani a Memória integritását a Windows Defender Biztonsági Központban, de az opció kiszürkült, és megjelenik a „Ezt a beállítást a rendszergazda kezeli” üzenet, akkor is letilthatja a funkciót a rendszerleíró adatbázis használatával.

jegyzet: A beállításjegyzék helytelen módosítása komoly problémákat okozhat. Létrehozása javasolt biztonsági mentés Windows rendszerleíró adatbázis mielőtt végrehajtaná ezeket a lépéseket. A Rendszerleíróadatbázis-szerkesztő menüben válassza a Fájl > Exportálás parancsot a biztonsági másolat mentéséhez.

  • Nyomja meg a kombinációt Windows billentyűk+ R a Futtatás ablak megjelenítéséhez.
  • Írja be a regedit parancsot, és kattintson az OK gombra a Rendszerleíróadatbázis-szerkesztő elindításához.
  • Menjen a következő útvonalra:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity
  • Kattintson duplán a bejegyzésre Engedélyezve.
  • Módosítsa az értéket 1-ről 0-ra.
  • Kattintson az OK gombra.

A letiltáshoz használhatja a készenlétet is

Kérdés: Mikor hosszú munka számítógépen vagy kilép az alvó módból, a start menüben lévő betűtípus elveszik


Ha a számítógép hosszabb ideig működik, vagy felébred alvó állapotból, a Start menü ilyen lesz.

Hogyan lehet javítani? Segíts kérlek..

Válasz: már újratelepített operációs rendszert és frissítve (

Kérdés: Hogyan tudom a számítógépemet S1 típusú alvó üzemmódba kapcsolni ("Készenlét")?


Egyik sem bekapcsolva asztali számítógép, és laptopon sem tudom kitalálni, hogyan lehet alvó módba kapcsolni a számítógépet, például az S1-et.

A "powercfg /a" végrehajtásának eredménye

A következő alvó állapotok érhetők el ezen a rendszeren:
Készenléti (S3)

A következő alvó állapotok nem érhetők el ezen a rendszeren:
Készenléti állapot (S1)

Készenléti (S2)
A rendszer firmware nem támogatja a készenléti állapotot.

hibernálás
A hibernált mód nincs engedélyezve.

Készenléti (csatlakozva)
A rendszer firmware nem támogatja a készenléti állapotot.

Hibrid alvás

Gyors indítás
A hibernált mód nem elérhető.

Válasz: Hagyja a számítógépet tétlenül néhány percig, majd tegye alvó állapotba, és ébressze fel.

Az eseménynaplóban:
Művelet => egyéni nézet létrehozása
A dátum elemben állítson be például egy kétperces intervallumot, és nézze meg, mi történt.

nincs több ötletem.

Nos, ellenőrizze a számítógéphez csatlakoztatott illesztőprogramokat és eszközöket

K: Ébredés alvásból hajnali 4-kor


Szinte minden este felébred a számítógép és felébreszt engem.
az eszközkezelőben, hálózati adapterek, nincs bejelölve a "wake with magic packages".
kapcsolja ki az ébresztési időzítőket az energiaellátási beállításoknál.
ban ben parancs sor A powercfg /waketimers parancs ezt mutatja.

c:\>powercfg /waketimers
A Legacy kernel hívó által beállított időzítő 2016. 01. 09. 4:14:46-ig érvényes.
Ok:

Segítség. Ki a hibás és mit kell tenni?

Válasz: végre meggyógyult ez a betegség:

Vezérlőpult -> Biztonság és karbantartás -> Karbantartás -> Automatikus karbantartás -> Karbantartási beállítások módosítása -> Törölje a "Karbantartási feladat felébresztésének engedélyezése a számítógépem..." jelölőnégyzetet.

Téma: A számítógépem véletlenszerűen bekapcsol éjszaka


Nemrég (kb. 1 ... 2 hónapja), körülbelül 30 ... 60 perccel azután, hogy a számítógépet alvó üzemmódba helyezték (hogy a megszakítástól kezdve reggel folytathassa a munkát), spontán bekapcsol. Éjjel 12 körül végzem a munkát, i.e. a bekapcsolás éjjel 0:30...1:00 órakor történik. Ebben az esetben a monitor sötét marad. Kikelek az ágyból, mozgatom az egeret - bekapcsol a monitor, normál módban belépek a profilba, visszateszem alvó módba - ezen az éjszakán már nem kapcsol be.

A Win7 számítógépes rendszeren van egy rezidens MS Security Esentials víruskereső. Többször lefuttattam a jelenlegi (frissen letöltött) gyógyító segédprogramokat, az mbar-t és a DrWeb Cureit-et - találtam néhány byakot, de a spontán aktiválás így is megmaradt. Úgy néz ki, mint egy vírus, amely összeköti a számítógépemet a DDOS támadásokkal. Ráadásul a Google időnként blokkolja a hozzáférést az IP-mről érkező gyanús forgalom miatt. Ez már elég régóta (több mint egy éve) így van, de a számítógép spontán bekapcsolását csak nemrég vettem észre.

Igazából a kérdés: ha ismert a baj és viszonylag könnyen kezelhető, akkor letöltöm az ajánlott szoftvert, beszkennelem és felteszem. Ha bonyolultabb a probléma, akkor nem fogom becsapni sem magamat, sem a helyi gurukat, és nem fogom hülyén átrendezni a rendszert.

Válasz: Falconist valamit nem egészen értettem...

üzenet valakitől Falconist

a számítógép alvó üzemmódba helyezése után ... spontán bekapcsol

Az alvó üzemmód és a hibernált mód 7-ben teljesen különböző dolgok. Az alvó módba való váltáshoz csak nyomja meg a Sleep gombot a billentyűzeten. Ha a Start gombra kattint, és az egeret a Leállítás melletti nyíl fölé viszi, megjelenik egy menü, amelyben az alvó üzemmód is található. és hibernálás. Hibernált állapotban a számítógép ugyanúgy lekapcsolódik az áramellátásról, mint a leállításkor, de a számítógép bekapcsolásakor ugyanúgy elkezdheti a munkát, mint alvó üzemmód után.
De te másról kérdeztél. Megnézted a feladatütemezőt?

Kérdés: A számítógép éjszaka felébred


Jó napot mindenkinek. Már megvan ez a probléma. Önmagában éjjel felébred a PC, Windows 10-be kerül, előtte 7 volt, nem volt ilyen probléma, ezért választottam ezt a részt.
Ami már megtörtént 2 napja:
1. Az eseménynézőben megtaláltam az okot: Időzítő - Az "NT TASK\Microsoft\Windows\UpdateOrchestrator\Reboot" ütemezett feladat végrehajtásra kerül, amely a számítógép felébresztését kérte alvó módból.
Elmentem a Feladatütemezőbe, megtaláltam ezt a feladatot, és töröltem a jelölést a következő elemből: Feltételek – Ébressze fel a számítógépet a feladat végrehajtásához.
2. Elmentem a powercfg.cpl oldalra – Energiagazdálkodási terv beállítása – Módosítás Extra lehetőségek Tápellátás - Alvó állapot - Ébresztési időzítő engedélyezése - LETILTÁS.

Ma este a helyzet megismétlődött, de az eseménynézőben csak ezt találtam:

A rendszer kilépett az alacsony fogyasztású állapotból.

Alvásidő: 2016-10-29T21:38:38.657073700Z
Ébredési idő: 2016-10-29T21:58:34.625754700Z

Kimeneti forrás: nincs adat

3. Az eszközkezelőben törölje a pipát az "engedélyezze, hogy ez az eszköz felébressze a számítógépet készenléti módból" jelölőnégyzetből az egérről, a billentyűzetről, a hálózati kártyáról és bárhonnan, ahol találtam...

Segíts megoldani ez a probléma Már nem tudom hova ásni...

Válasz:

üzenet valakitől GoLeMjkeee

Minden nap 2-00-ig érdemes

Váltás nappalira.

üzenet valakitől GoLeMjkeee

de pipa .... nem éri meg.

10-ka ő, karakteres.

Kérdés: Hogyan lehet elrejteni a képernyőt a "Bejelentkezés" gombbal, amikor felébred az alvó módból?


Windows 10 Pro 1607.
Amikor kilép az alvó módból, a Windows arra kéri, hogy nyomja meg a "Bejelentkezés" gombot. Ébredéskor jelenik meg kék képernyő a felhasználónév feliratával és alatta a „Bejelentkezés” gombbal. A jelszó nincs beállítva, csak a felhasználó rendelkezik adminisztrátori jogokkal a rendszerben. Betöltéskor minden rendben van, nincs képernyő és gombnyomás, csak az asztal.

A lehetőségek között - Fiókok- A bejelentkezési lehetőségeknél nincs "Bejelentkezés szükséges" elem.
A Felhasználói fiókok ablakban a Felhasználók lapon a „Felhasználónév és jelszó szükséges” jelölőnégyzet nincs bejelölve.
Az energiagazdálkodási séma beállításai között nincs „Jelszó kérése ébresztéskor” lehetőség.

Hogyan lehet eltávolítani a "Bejelentkezés" gombot az alvó módból való kilépéskor, hogy a számítógép automatikusan elindítsa az asztalt az ablak megkerülésével?

Válasz: távolítsa el az alvó üzemmódot

Kérdés: A Windows 8.1 alvó módban kikapcsol


Helló.
Problémám van az alvó üzemmóddal. A számítógép teljesen leáll alvó állapotban. Azok. az étel teljesen elveszett. Korábban a rendszeregységen villogott a villanykörte az alvóban, most teljesen "optuhat" és az egér is usb-s, kialszik a billentyűzet és csak a bekapcsoló gombbal lehet bekapcsolni és természetesen nem minden információ mentett.
Rengeteg témát olvasok a neten, de egyetlen probléma sem hasonlít az enyémhez.
Azonnal leírom a PC jellemzőit: ASUS p8h67 alaplap, Radeon videó HD7850 (asus), intel i5 2550k, 8gb RAM, SSD Szilícium teljesítmény s55 120gb, HDD WD 500gb.
Feltelepítettem a Windows 8.1-et, nagyon sokáig állt, és az alvó mód úgy működött, ahogy kell. Miután abbahagyta a munkát, nem is tudom pontosan, miért és mi (bármilyen művelet) után hagyta abba a munkát. Úgy tűnik, hogy nem állítottam be ilyesmit, nem frissítettem az illesztőprogramot.
Megszokásból gyakran megnyomom az alvás gombot ahelyett, hogy kikapcsolnám, és egyszer működött és működött néhány napig, de végül leállt.
Megpróbálta frissíteni az illesztőprogramokat vagy eltávolítani. Megpróbálta leválasztani a számítógépről extra eszközök(hát, sosem lehet tudni). Lefekvés előtt kikapcsoltam a különféle programokat. Semmi sem segített.
Az interneten az egyetlen információt találtam, amely pontosan megegyezik az enyémmel (8. pont):

Természetesen nem tudtam telepíteni az illesztőprogramot, különböző platformokat. Nem találtam magamnak.

Nem akarom újratelepíteni az OS-t. minden jól működik (kivéve az alvást).
Van ötletetek mi lehet a hiba?

17 perc után hozzáadva
Elfelejtettem írni, hogy a BIOS-t visszaállították és frissítették.

Válasz: ellenőrizze a vérnyomást vagy az anyát. Programozottan az alvó és hibernált állapotot a powercfg /h bekapcsolásával konfiguráltuk.

Egy másik lehetőség az ellenőrzés (csere). hiberfil.sys – a hibernálásért felelős.

Kérdés: Alvó mód a Windows 8 rendszerben


miután felébredt az alvásból windows mód 8 elkezd újraindulni és utána Windows letöltése a következő üzenet jelenik meg
mondd meg hogyan kezeljem?

Válasz:

üzenet valakitől Azat145

A Windows 8 újraindul a hibernált állapotból való felébredés után

Először.
Azután.

K: Hibrid alvás vagy hibernált állapot? Melyik a jobb asztali gépen?


Alapvetően a kérdés a címben van. Ahogy a keresőből, pontosabban az összes oldalra bemásolt cikkből megértettem, a Hibrid alvó mód előnye csak a bekapcsolás, az ébredés, mondhatni gyorsaságában rejlik. És ha hibernált módot akarok használni az asztali Windows 7 x64 rendszeren, akkor van víz alatti sziklák? Csupán arról van szó, hogy ki kell kapcsolnom az áramot, és a hibrid alvásnál jobb, ha ezt nem teszem meg. Köszönöm mindenkinek aki válaszol

Válasz: Olvassa el még ma. Rendben, azt hiszem, nincs más válasz a kérdésemre, mint egy rövid eligazítás a Microsofttól. Majd megosztom a megállapításaimat (azoknak, akik hasonló kérdésben beleesnek ebbe a témába).
Így:

profik Hibrid alvó mód: 1. Gyors bekapcsolás, nincs szükség a számítógép teljes leállítására;
Mínuszok: 1. Terhelések HDD(a fórumunk Windows 7 szekciójának egyik moderátora szerint); 2. Nem kapcsol ki teljesen, továbbra is eszik az áramot, bár egy kicsit (bár egyesek számára ez a tétel plusz)

Egyszóval hibernálásra akkor van szükség, ha folyamatosan le akarjuk szakítani a hálózatról, de nem akarjuk hosszú időre betölteni/leállítani az operációs rendszert.
Hibrid alvó mód – azoknak, akik elégedettek a folyamatosan online számítógéppel.

Kérdés: Korábban a laptop indításkor kikapcsolt, most alvó módban van


Az én laptop DELL Az INSPIRON 3521 Windows 8.1 rendszerrel indításkor ki szokott kapcsolni (megjelent a DELL logó - leállítás - újraengedélyezés és normál működés). Frissítettem a rendszert 10k-ra, nem segített. Egy hegyi szervizben hordtam, a városban ismert és dicsekvést - ott a laptop 2 hétig biztonságosan pihent az emberi figyelmesség elől. Elvettem a problémát úgy oldottam meg, hogy kikapcsoltam gyors betöltésés boldogan visszatért a 8.1-hez.
Eltelt egy hónap, és most, amikor lecsukom a laptop fedelét, alvó módba megy (tehát a beállításokban), de 20 perc múlva vagy egy kicsivel teljesen kikapcsol (ez még nem fordult elő és a tápfeszültség A beállítások nem változtak). Amikor bekapcsolja a fent leírt helyzetet: be - logó - ki. Újraindítás után normál működés. Minden illesztőprogram naprakész. Mi lehet a probléma és hogyan lehet orvosolni? Kár a szegény emberért - összesen másfél év, de van diplomám és állami okmányaim -, most nem tudom a mesterekhez húzni ...

Válasz: Hogyan akarod, hogy működjön? Én személy szerint hibernálást használok, nem alvó módot, a hibernálásra való áttérés alapjáraton is engedélyezve van, a beállítások a mellékletben vannak

Az energiabeállítások áttelepítése

Küldje el a jó munkát a tudásbázis egyszerű. Használja az alábbi űrlapot

Azok a hallgatók, végzős hallgatók, fiatal tudósok, akik tanulmányaikban és munkájuk során használják fel a tudásbázist, nagyon hálásak lesznek Önnek.

Házigazda: http://www.allbest.ru/

1. Elméleti információk

1.1 Windows Kernel illesztőprogramok fejlesztése

Rövid elméleti információk

Kernel meghajtók fejlesztése

Az illesztőprogram olyan számítógépes program, amely lehetővé teszi egy másik programnak (általában egy operációs rendszernek), hogy szabványos módon hozzáférjen a hardverhez.

Sematikusan a különböző típusú illesztőprogramok működésének bemutatásához:

Kényelmes 2 típusra osztani:

- Kernel illesztőprogramok (0. jogosultsági szinten működnek, de semmilyen módon nem lépnek interakcióba sem a felhasználói programmal, sem az eszközzel. Ezekkel kezdjük (egyszerűbbek és hasznosak is lehetnek).

Eszközillesztőprogramok - szükségesek a felhasználói program és az eszköz közötti interakció végrehajtásához, nevezetesen a köztük lévő adatok átviteléhez, az eszköz vezérléséhez. Ráadásul az eszközök lehetnek valósak és virtuálisak is). A sofőrnek egyiket sem kell irányítania fizikai eszköz. Egyes operációs rendszerek virtuális eszköz-illesztőprogramok létrehozását is lehetővé teszik – olyan objektumok, amelyek az I/O-eszközökhöz hasonlóan viselkednek, de nem felelnek meg egyetlen fizikai eszköznek sem.

A processzor privilegizált üzemmódjában (úgynevezett kernel módban) futó kernelkomponensek mindent megtehetnek, nevezetesen:

- privilegizált processzorparancsokat hajthatnak végre (például lgdt),

- hozzáférhet a rendszeradatokhoz és kódokhoz,

- közvetlen hozzáférést kell biztosítani a berendezéshez, például kikötőkön keresztül

- hozzáférni a memóriasejtekhez; az illesztőprogram nem tudja közvetlenül manipulálni a fizikai memóriát, de virtuális címet kaphat bármely fizikai memóriához, és manipulálhatja azt.

Ha bármilyen komoly alkalmazást szeretne írni, amihez hozzá kell férni a rendszer belső funkcióihoz vagy adatstruktúráihoz, akkor számos korláttal találkozhat, amelyeket csak a rendszer címterébe helyezve lehet áthidalni. A dokumentált közül csak egy módja van ennek - az illesztőprogram telepítése. Ez a módszer viszonylag egyszerű, megbízható, és ami a legfontosabb, maga az operációs rendszer teljes mértékben támogatja.

A kernelkód (valójában ez maga a rendszer) teljes mértékben megbízhatónak tekinthető. Ezért a rendszer címterébe betöltve az illesztőprogram a rendszer részévé válik, és semmilyen korlátozás nem vonatkozik rá. Windowson gyakorlatilag ez az egyetlen módja annak, hogy a nem operációs rendszert használó fejlesztők kernel szintű rendszerkomponenseket írjanak.

Az illesztőprogramok fejlesztésének írásához és megtanulásához használja a DDK-t (Device Development Kit) - egy illesztőprogram-fejlesztési rendszert.

A dokumentáción kívül a DDK tartalmazza az include fájlokat (*.inc) és a könyvtárfájlokat (*.lib).

Így a Windows különféle típusú eszközillesztőket támogat, de ezen kívül vannak olyan illesztőprogramok, amelyek nem eszközmeghajtók, hanem egyszerűen lehetővé teszik olyan programok létrehozását, amelyek a Windowsban kernel módban fognak futni, pl. 0-s jogosultsági szinten. Ugyanakkor teljes hozzáféréssel rendelkeznek az operációs rendszerhez és a hardverhez.

Tekintsük a legegyszerűbb kernel módú illesztőprogramot.

#beleértve

int DriverEntry(

IN PDRIVER_OBJECT pDriverObject,

IN PUNICODE_STRING pusRegistryPath) (

}

A belépési pont a DriverEntry, amely két paramétert igénylő eljárásként van formázva:

A pDriverObject egy mutató az újonnan létrehozott illesztőprogram-objektumra. Amikor a rendszer betölt egy illesztőprogramot, a rendszer létrehoz egy illesztőprogram-objektumot, amely az illesztőprogram memóriaképét képviseli. Ezen az objektumon keresztül a rendszer vezérli az illesztőprogramot. A "driver" objektum egy szokásos DRIVER_OBJECT típusú adatstruktúra.

pusRegistryPath – mutató az illesztőprogram inicializálási paramétereit tartalmazó beállításkulcsra.

Ez az első meghajtónk csak betöltődik a rendszerbe és azonnal le is töltődik.

Most fontolja meg a sablonprogramot, amelyet a program fejlesztéséhez kell használni a kurzusmunka első lépésében (kernel módú illesztőprogram beeper.sys).

Ennek a meghajtónak az a feladata, hogy egy hangot lejátsszon az első oktávig a rendszer dinamikáján. Ehhez az illesztőprogram a processzor be- és kilépési utasításait használja a megfelelő I/O portokhoz való hozzáféréshez. Köztudott, hogy az I / O portokhoz való hozzáférés szent őrzött Windows rendszer forrás. Bármelyik elérésére tett kísérlet felhasználói módból, mind bemeneti, mind kimeneti szempontból, elkerülhetetlenül kivételt eredményez.

Példánkban egy hangszóró fog működni (ehhez különösen a 61h port, a 0 és 1 bit, a 43h és a 42h port használják).

A meghajtó indításakor mind a 12 hang definiálva van.

Nemcsak a hangszórót kell bekapcsolni, hanem a hangfrekvenciát is be kell állítani. Ehhez egy időzítő alrendszert használnak, amely a processzortól függetlenül működik, és 3 csatornás. A 2-es csatorna kimenete egy hangszóróhoz csatlakozik, amely különböző frekvenciájú hangok generálására szolgál. A hallható hangtartomány 30Hz-6000Hz.

A hang frekvenciájának beállításához a 0Bh vezérlőszó elküldésre kerül a 43h portra (időzítő parancsregiszter):

mov al,0Bh

ki 43h, al

Ez az érték határozza meg a kezelni kívánt csatorna számát, a művelet típusát, a csatorna működési módját és a számláló formátumát.

Ezután az újraszámított hangfrekvencia (1193167/frekvencia (Hz)) két részletben kerül a 42h portra (először a mély, majd a magas rész).

Például 100 Hz hangfrekvenciát szeretnénk elérni. Számolja újra a frekvenciát

1193167/100 = 11931

Azután:

movax, 11931

ki 42h, al

mov al, ah

ki 42h, al

A kurzusmunka első lépésében módosítani kell a programot úgy, hogy az más zenei hangokat produkáljon (mindegyiknek saját verziója van).

A feladatokat gyakran eltérő időtartamra kell beállítani. Ehhez célszerű a DO_DELAY eljárást használni, átadva neki az indirekt módon meghatározott "sounding time" paramétert.

Az illesztőprogramok hibakeresésének kényelmesebbé tétele érdekében különféle eszközök állnak rendelkezésre. A legegyszerűbb dolog a szükséges információk megjelenítése a Debug View segédprogram speciális ablakában. Ez a program először elindul és úgy van beállítva, hogy elfogja a rendszermag szintjéről érkező üzeneteket. A kimenethez a program meghívja a DbgPrint függvényt, amelynek egy paramétere van - a kimeneti karakterlánc. Az illesztőprogram elindítása után a Debug View ablakban megjelenik az összes kimenet.

Az illesztőprogramok kernelbe történő telepítésének többféle módja van. Mivel a meghajtónkra valójában nincs szüksége a rendszernek (nem vezérel semmilyen eszközt), ezért ideiglenesen csatlakoztatjuk a meghajtót a rendszerhez, majd eltávolítjuk.

Ehhez létre kell hoznia egy alkalmazást, amely futtatja az illesztőprogramot. Hogyan? Az illesztőprogram egy kernel szintű szolgáltatás. Ezért az alkalmazás az SCM - Service Control Managert fogja használni, amely a Windows része, és felhasználói szinten fut.

Így két projektből kell megoldást felépíteni: egy konzolalkalmazásból és egy illesztőprogramból.

Illesztőprogramok fejlesztéséhez C nyelven először a következőket kell tennie:

- DDK telepítése,

- állítsa be a WNETBASE környezeti változót (érték - DDK elérési útja, például e:\winddk\3790.1830).

Az illesztőprogram-projektnek MakeFile típusúnak kell lennie.

Adja meg a projektbeállításokat az Alkalmazásbeállítások segítségével, és írja be a sort a Parancssor felépítése mezőbe

ddkbuild -WNETXP chk . -ceZ

mit jelent egy speciális szkript meghívása a VC és a DDK közötti kommunikációhoz

A következő fájloknak jelen kell lenniük az aktuális projekt mappában:

források, makefile, ddkbuild.cmd (script), illesztőprogram forrásfájlja.c

A projekt felépítése után az illesztőprogramnak rendelkeznie kell a .sys kiterjesztéssel.

Az alkalmazás elindítja a beeper.sys illesztőprogramot, azaz. előírja a nyilvántartásban, és üzembe helyezi. Majd ha kész, eltávolítjuk a rendszerleíró adatbázisból.

Ahhoz, hogy egy alkalmazás futtathasson illesztőprogramot, két projektből, egy alkalmazásból és egy illesztőprogramból álló megoldás létrehozása után el kell helyeznie az alkalmazás végrehajtható fájlját és az illesztőprogramot ugyanabba a mappába, majd futtassa az alkalmazást.

Az illesztőprogramokat nagyon nehéz hibakeresni. Az operációs rendszer működésében fellépő hibák esetén leggyakrabban lefagy, és újraindításra van szükség. Illesztőprogramunknál pedig az újraindítás után a beeper06 szolgáltatást is el kell távolítani a regedit segítségével (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\), majd újra kell indítani.

1.2 Windows virtuális eszköz illesztőprogramok

Eddig kifejlesztettünk egy kernel módú illesztőprogramot, ami olyan dolgokat is meg tud csinálni, amiket felhasználói szinten nem lehet, például az I/O portokkal foglalkozni. Az ilyen illesztőprogramot kernel meghajtónak hívjuk, de nem eszközillesztőnek, mert a felhasználói program és az eszköz között nem történik adatátvitel (Végül is miért van általában szükség illesztőprogramra? A felhasználói alkalmazás és az eszköz közötti adatcsere megszervezésére) .

Most olyan eszközillesztőket fejlesztünk, amelyek oda-vissza továbbítják az adatokat a felhasználói alkalmazás és az eszköz között.

Ha egy alkalmazásnak I/O-műveletre van szüksége, a rendszer meghívja az illesztőprogramot. Ennek érdekében az alkalmazás kérést adhat ki az eszközről történő adatok olvasására vagy adatok írására az eszközre. Ha pedig valamilyen egyéb intézkedésre van szükség, például lekérdezés vagy eszközvezérlés, vagy valami más, akkor az ún. IOCTL interfész (Device In-Out Control).

A virtuális eszközök esetében csak egy ilyen esetet fogunk figyelembe venni, mert gyakran miért van szükségünk virtuális eszközre egy illesztőprogramban? Azért, hogy adatokat tudjon átvinni rá, amit a sofőr valahogy feldolgozzon (mivel az alkalmazásban nem lehetséges), és az eredményt visszaküldheti az alkalmazásnak. Emlékezzünk vissza, hogy a korábban tárgyalt szokásos kernel-illesztőprogram nem vett el semmit az alkalmazásból, és nem adott vissza semmit, hanem egyszerűen olyan műveleteket végzett, amelyeket az alkalmazás nem tudott.

Ha egy alkalmazásnak I/O-műveletre van szüksége, a rendszer meghívja az illesztőprogramot. Ehhez az ún. IOCTL interfész (Device In-Out Control).

A hívó alkalmazás a következőket teszi:

1) Fájl megnyitása és kezelésének lekérése:

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

Ennek eredményeként, ha minden jól ment, megkapjuk a készülék fogantyúját.

2) Műveleti kód küldése az illesztőprogramnak (mi a teendő, az illesztőprogram számos különböző műveletet hajthat végre):

DeviceIoControl meghívása, kezelő, műveleti kód, bemeneti puffer cím, bemeneti méret, kimeneti puffer cím, kimeneti méret, puffercím a tényleges bájtok számára

3) A fájl bezárása és ennek megfelelően a leíró felszabadítása.

meghívja a CloseHandle eszközleírót

Az adatok átviteléhez a moduloknak (alkalmazás és illesztőprogram) meg kell állapodniuk egy interakciós protokollban (műveletkódok, pufferstruktúra - bemenet és kimenet).

Ugyanazt a műveleti kódot használja az alkalmazás és az illesztőprogram is.

A műveleti kód az alkalmazásban és az illesztőprogramban írható hexadecimális formában, vagy használhatja a CTL_CODE makrót, amint az a laborpéldában történik. dolgozzon a common.inc fájlban.

Nézzük meg a mintaműveletkódot a laborban használt virtuális eszközillesztőből. A név IOCTL_GET.

Virtuális eszköz esetén a fájljelző 0.

Eszköz típusa - FILE_DEVICE_UNKNOWN = 22 óra

Engedélyek - FILE_READ_ACCESS+FILE_WRITE_ACCESS = 1+2=3=11b

A funkciókód 800h és FFFh tartományba esik. 800 óra van nálunk.

Pufferelési módszer - az adatok átvitelének módja az alkalmazás és az illesztőprogram között (három lehetséges):

Kis mennyiségű adat esetén általában a METHOD_BUFFERED (00b) használatos – egy további puffer van lefoglalva a nem lapos memóriában, amely elegendő a bemeneti és kimeneti puffer elhelyezéséhez. Ennek a puffernek a címe az IRP-ben az AssociatedIrp.SystemBuffer mezőben található. Az I/O menedzser gondoskodik az adatok átírásáról a felhasználói puffer és a kiegészítő puffer között.

Közvetlen adathozzáférés (puffer nélkül) - METHOD_OUT_DIRECT (2) - kimenethez vagy METOD_IN_DIRECT (1) - bemenethez; mező az IRP-től - MdlAddress. Ez egy közvetlen hívás – az I/O menedzser véglegesíti a felhasználói módú puffert tartalmazó fizikai oldalakat a memóriába. Létrehoz egy MDL (Memory Descriptor List) segédstruktúrát a véglegesített oldalak leírására. Az illesztőprogram-fejlesztő pedig az MDL-lel dolgozik.

Hozzáférés felhasználói szintű pufferen keresztül - METHOD_NEITHER(3); mező az IRP-től - SystemBuffer. Az I/O menedzser felhasználói módú virtuális címeket ad át az illesztőprogramnak. És a meghajtóban nagyon óvatosnak kell lenni velük, mert ebben az esetben a meghajtónak csak a hívó szál kontextusában kell működnie.

Amikor egy alkalmazás műveleti kódot küld az illesztőprogramnak, az I/O menedzser futni kezd. Feladata egy I/O kéréscsomag (IRP) generálása és az illesztőprogramnak történő elküldése további feldolgozásra.

3 típusú kérelmet fogunk figyelembe venni:

IRP_MJ_CREATE - a CreateFile-n lesz átadva,

IRP_MJ_DEVICE_CONTROL – a DeviceIoControl továbbítja

IPR_MJ_CLOSE – a CloseHandle-n

Az IRP-csomagok fejlécből és I/O-elhelyezési veremekből állnak. Az I/O-menedzser a kérés feldolgozásában részt vevő illesztőprogram-rétegek számával megegyező számú I/O-veremcellát hoz létre. Minden vezető hozzáférhet a saját veremhelyéhez. Amikor egy illesztőprogram IRP-t küld egy alacsonyabb szintű illesztőprogramnak, a verem helymutatója az adott illesztőprogram által igényelt helyre kerül. Ezzel szemben a kérés feldolgozása után a mutató a legfelső szintű illesztőprogram-cellába kerül. Mutató beszerzése a - IoGetCurrentStackLocation() függvény segítségével.

Minden kiosztási verem tartalmaz egy mutatót a DeviceObject-re és arra a FileObject-re, amelyre a kérést benyújtották. Az IRP-k mindig nem lapozható memóriában tárolódnak.

A következő objektumok jönnek létre és használatosak az illesztőprogram működéséhez:

Driver objektum;

Készülék objektumok;

A vezető szakaszai.

1) Illesztőprogram objektum létrehozása. Akkor jön létre, amikor az illesztőprogramot az indítási szakaszban betöltik. Ebben a pillanatban elindul a DriverEntry funkció, és kitöltődik a MajorFunction tömb, valamint egy mutató az eszköz objektumra és fordítva.

Az eszköz objektum a következőket tartalmazza:

Eszköztípus.

2) Hozzon létre egy szimbolikus hivatkozást az eszközhöz. Ahhoz, hogy az "eszköz" objektum elérhetővé váljon a felhasználói mód kódja számára, az illesztőprogramnak létre kell hoznia "\???" még egy tárgy - egy szimbolikus link (szimbolikus link). A shablon.sys illesztőprogram szimbolikus "slshablon" hivatkozást hoz létre a "\???" könyvtárban található "devshablon" eszközéhez, amelynek értéke a "\Device\devshablon" karakterlánc.

Így már az illesztőprogram betöltésekor (esetünkben az operációs rendszer betöltésének szakaszában) három objektum van a memóriában: az illesztőprogram "\Driver\shablon", az eszköz "\Device\shablon" és egy szimbolikus hivatkozás a "\??\slshablon" eszközt.

3) Nyitás. Ezután, amikor az alkalmazás elindul, a CreateFile meghívódik. Van egy link a készülékhez. A DEVICE_OBJECT eszközobjektum-struktúrából a rendszer lekéri az azt kiszolgáló illesztőprogramra vonatkozó információkat. Az I/O menedzser létrehoz egy IRP_MJ_CREATE típusú I/O kérést, és elküldi az illesztőprogramnak. Ez jelzi az illesztőprogramnak, hogy a felhasználói mód kódja megpróbál hozzáférni az eszközéhez. Ha az illesztőprogramnak nincs ellenvetése, akkor sikerkódot ad vissza. Illesztőprogramunk speciális diszpécser eljárással reagál erre az IRP-re - DispatchCreateClose (van egy kombinált eljárás az eszköz nyitására és zárására). Ebben az Io.Status.Status mezőben STATUS_SUCCESS, az Io.Status.Information mezőben pedig 0, mert ebben az esetben semmit sem kell átvinni. Az illesztőprogram ilyen válasza jelzés az objektumkezelőnek, hogy hozzon létre virtuális fájl. Ez egy új bejegyzést hoz létre a folyamat leírótáblájában a fájlobjektumra mutató mutatóval, és egy új leírót ad vissza a felhasználói mód kódjához.

Ha minden rendben van, akkor a CreateFile által visszaadott fájlleírót a hDevice változóban tároljuk.

4) I/O műveletek. Mostantól a DeviceIoControl függvények meghívásával vezérlési műveleteket hajthatunk végre ezen az eszközön. Mivel egy eszközillesztő elvileg sokféle feladatot képes ellátni, valahogyan meg kell különböztetni a kéréseket. Erre szolgál a dwIoControlCode második paraméter, az úgynevezett I / O vezérlőkód, amely bizonyos szabályok szerint épül fel.

Az eszközleíró segítségével az I/O-menedzser lekéri az őt kiszolgáló illesztőprogramra vonatkozó információkat, létrehoz egy IRP_MJ_DEVICE_CONTROL típusú I/O-kéréscsomagot, és elküldi az illesztőprogramnak. A megfelelő DispatchControl eljárás meghívásra kerül az illesztőprogramban, paraméterként átadva a műveleti kódot, valamint a bemeneti és kimeneti puffer címére és méretére vonatkozó információkat. Mindezt az IRP-n keresztül továbbítják. Az eljárás során az IRP-től veszik a szükséges információkat: a műveleti kódot, az adatátvitelhez szükséges puffer címét.

A DispatchControl eljárás elvégzi a szükséges műveleteket, esetünkben az IRP csomag címét az ESI regiszterből, majd az eredményt a kimeneti pufferen keresztül továbbítja az alkalmazásnak.

Az előző eljáráshoz hasonlóan IRP-n keresztül küldjük el a kész állapotot és az illesztőprogramtól átvitt bájtok számát.

Az alkalmazásban ezek az adatok formázva vannak, és megjelennek.

5) Bezárás. Ahogy azt a már nem szükséges fogantyúkkal meg kell tenni, a CloseHandle funkció meghívásával lezárjuk az eszköz fogantyúját.

6) A sofőr kirakása. Törölje a szimbolikus hivatkozást és törölje az eszközobjektumot.

A Complex (2) két programból áll:

Egy alkalmazás, amely kér az illesztőprogramtól egy IRP-címet, majd kiadja ezt a címet szabványos ablak Ablakok.

A Shablon.sys a meghajtó.

A shablon illesztőprogram olyan dolgokat hajt végre, amelyeket felhasználói szinten nem lehet megtenni ez az eset meghatározza az esi regiszter tartalmát, amikor az illesztőprogram fut.

Az alkalmazás megkapja az esi tartalmat a kimeneti pufferben, hexadecimális kimenetté alakítja, és egy szabványos Windows ablakba adja ki.

Ha információkat kell szereznie a CMOS-ból az illesztőprogramban, akkor a következőkre van szüksége:

Küldje el a 70h portra a minket érdeklő CMOS-eltolást;

Kis késés;

Vegye ki az információkat a 71h kikötőből al.

Ezután írja be ezt az információt a kimeneti pufferbe.

Az alkalmazásban pedig információt kell venni a kimeneti pufferből, szükség esetén konvertálni és megjeleníteni, vagy elemezni, és az eredménytől függően a szükséges szöveget megjeleníteni a szabványos ablakban.

Ez a labor feltételezi, hogy az illesztőprogram véglegesen telepítve van Windows rendszeren egy .inf fájl használatával a Vezérlőpult segítségével – Hardvertelepítés: Új eszköz hozzáadása, Kézi telepítés, Összes eszköz megjelenítése, Telepítés lemezről, Tallózással válassza ki az .inf fájlt (az illesztőprogramnak ugyanabban a mappában).

Az illesztőprogram telepítésének ellenőrzéséhez válassza a Rendszer, Hardver, Eszközkezelő lehetőséget a vezérlőpulton.

1.3 Meglévő illesztőprogramok elérése a felhasználói módú alkalmazásokból

Az illesztőprogrammal együttműködő alkalmazás algoritmusa

Az illesztőprogram használatához a felhasználói módú alkalmazásnak meg kell kapnia az illesztőprogram fogantyúját. Ez a manipulátor a CreateFile vagy CreateFileA API függvény segítségével szerezhető be, amely ASCII karakterekkel működik. Ezután a DeviceIoControl API függvény kerül felhasználásra, amely az egyik paraméterként az IOCTL kódot kapja meg. Az IOCTL kód egy vezérlőkód, amellyel az illesztőprogram megismeri az alkalmazás által kért műveletet, a paraméterek átadásának módját és az alkalmazásnak a művelet végrehajtásához szükséges hozzáférési jogokat. A pályázat felhívása után

A DeviceIoControl-t az IRP_MJ_DEVICE_CONTROL küldi el az illesztőprogramnak. A kérelmek feldolgozása után a vezérlés visszakerül az alkalmazáshoz, és az alkalmazásnak kell elemeznie az illesztőprogram válaszát, és bezárnia a nyitott fogantyúkat.

Példa

A következő példában a felhasználói módú alkalmazás egy IOCTL_DISK_GET_PARTITION_INFO_EX kérést küld a fájlrendszer-illesztőprogramnak, elemzi a kapott információkat, és kiadja a merevlemez-partíció formátumát.

#beleértve

#beleértve

int _tmain(int argc, _TCHAR* argv)

DWORD dwBytesReturned = 0;

char cPartitionStyle = (0);

PARTITION_INFORMATION_EX piPartitionInfo;

HANDLE hDevice = CreateFileA(

/*1*/"\\\\.\\c:",

/*2*/GENERIC_READ | GENERIC_WRITE,

/*3*/FILE_SHARE_READ | FILE_SHARE_WRITE,

/*5*/OPEN_EXISTING,

if (hDevice == INVALID_HANDLE_VALUE)

MessageBoxA(NULL, "Fájl létrehozása hiba!", "Hiba", 0);

if (DeviceIoControl(

/*1*/(HANDLE) hDevice,

/*5*/&piPartitionInfo,

/*6*/sizeof(piPartitionInfo),

/*7*/&dwBytesReturned,

if(piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)

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

else if(piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)

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

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

MessageBoxA(NULL, "DeviceIoControl hiba", "Hiba", 0);

CloseHandle(hDevice);

A példa elemzése

Az alkalmazás működéséhez szükséges változókat deklarálják. A PARTITION_INFORMATION_EX egy olyan struktúra, amely leírja a következőkkel kapcsolatos információkat szakasza a kemény korong.

typedef struct (

) PARTÍCIÓ_INFORMÁCIÓ_EX;

A program ezen részében a CreateFileA függvényt hívják meg a kezelő lekéréséhez, amely a hDevice változóba van írva.

A DeviceIoControl függvényt szinkron módon hívják meg. Megadják neki:

eszközleíró;

IOCTL kód IOCTL_DISK_GET_PARTITION_INFO_EX;

mutató a bemeneti pufferre, esetünkben NULL;

bemeneti puffer mérete;

mutató a kimeneti pufferre;

kimeneti puffer mérete;

mutat rá típusú változó DWORD, amely tárolja a visszaadott bájtok számát;

mutató egy OVERLAPPED struktúrára, amelyhez szokott aszinkron hívás funkciókat.

A vezérlés visszatérése után a funkció sikeres befejezése esetén a partícióra vonatkozó információk a PARTITION_INFORMATION_EX struktúrában tárolódnak.

Az információk elemzése és kiadása történik. Az irányítás visszaadása előtt operációs rendszer nyitott fogantyúk zárhatók. Ez lehetővé teszi a CloseHandle(__in HANDLE) függvény végrehajtását. Ha a leírók nincsenek bezárva, akkor az operációs rendszer megteszi helyetted.

2. A tanfolyam elvégzése

2.1 1. lépés

Gyakorlat: 1. Fejlesszen ki egy olyan rendszermag-illesztőprogramot, amely hozzáféréssel rendelkezik a portokhoz, és amely a változatnak megfelelő műveleteket hajt végre, és információkat ad ki a Debug View ablakba (változattól függően), valamint egy alkalmazást, amely elindítja az illesztőprogramot.

Listing Kurs_test.cpp

#include "stdafx.h"

#include "windows.h"

#include "stdlib.h"

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

if (hSCManager!=0)(

// a játékos regisztrációja az SCManager táblában

if (hService!=0)(

// Az illesztőprogram bejegyzésének törlése

DeleteService(hService);

CloseServiceHandle(hService);

visszatérés 0;

}

Beeper.sys listája

#beleértve

#define TIMER_FREQUENCY 1193167 // 1 193 167 Hz

#define PITCH_C 523 // 523,25 Hz

#define PITCH_Cs 554 // 554,37 Hz

#define PITCH_D 587 // 587,33 Hz

#define PITCH_Ds 622 // 622,25 Hz

#define PITCH_E 659 // 659,25 Hz

#define PITCH_F 698 // 698,46 Hz

#define PITCH_Fs 740 // 739,99 Hz

#define PITCH_G 784 // 783,99 Hz

#define PITCH_Gs 831 // 830,61 Hz

#define PITCH_A 880 // 880,00 Hz

#define PITCH_As 988 // 987,77 Hz

érvénytelen DO_DELAY(int time)(

hosszú i,j;

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

}

érvénytelen DO_BIG_DELAY(int time)(

DO_DELAY(2*idő);

}

üres xilofon(int nPitch)(

int nTone = TIMER_FREQUENCY/nPitch

_asm(

mov al, 10110110b;//vezérlőszó írása 43 órakor

ki 43h, al;//Audiovezérlő csatorna - időzítő hangot és szoftver által vezérelt rendszerport biteket használó logikai áramkör

mov eax, nTone;//írja az újraszámított frekvenciát 42-re

ki 42h, al;//magasabb rész

mov al, ah;//alsó rész

ki 42h, al

in al, 61h;//vezérlési sorrend megváltoztatása - az utolsó bitek konvertálása egyesekre

;// bit 0 - engedély a hangszóró használatára

;// 1. bit - engedély a 2. időzítő csatlakoztatására a hangszóróhoz

vagy al, 00000011b; hangszóró BE

ki 61h, al

}

DO_DELAY(0x7f);

_asm(

in al, 61h

és társai, 11111100b; hangszóró KI

ki 61h, al

}

}

Xilofon(PITCH_C);

Xilofon(PITCH_C);

Xilofon(PITCH_C);

Xilofon(PITCH_C);

Xilofon(PITCH_C);

Xilofon(PITCH_C);

Xilofon(PITCH_C);

visszaküldi: STATUS_DEVICE_CONFIGURATION_ERROR;

}

2.2 2. lépés

Készítsen egy virtuális eszközillesztőt, amely lehetővé teszi, hogy olyan műveleteket hajtson végre, amelyek csak a jogosultságok nulla szintjén érhetők el (az opciótól függően), majd az eredményeket vigye át az alkalmazásba a 3. jogosultsági szinten, hogy megjelenítse azokat a képernyőn.

Az alkalmazásban az eredményt egy szabványos Windows ablakban jelenítjük meg.

Listázás shablon.c

#beleértve // különféle NT definíciók

#beleértve

UNICODE_STRING g_usDeviceName;

UNICODE_STRING g_usSymbolicLinkName;

void DriverUnload(IN PDRIVER_OBJECT pDriverObject)(

IoDeleteSymbolicLink(&g_usSymbolicLinkName);

IoDeleteDevice(pDriverObject->DeviceObject);

}

NTSTATUS DispatchCreateClose(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)(//folyamat MJ_CREATE MJ_CLOSE

pIrp->IoStatus.Status = ÁLLAPOT_SIKERES;

pIrp->IoStatus.Információ = 0;

IoCompleteRequest(pIrp,IO_NO_INCREMENT);

return STATUS_SUCCESS;

}

NTSTATUS DispatchControl(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)(//kezelés IRP_MJ_DEVICECONTROL

NTSTATUS állapot;

int regEsi;

// vigyen egy mutatót az IO_STACK_LOCATION helyre, benne az IoControlCode-ra

if (pIrp->Tail.Overlay.CurrentStackLocation->Parameters.DeviceIoControl.IoControlCode ==IOCTL_GET)(

//Hasonlítsa össze a műveleti kódot, és ha ez a mi ügyfelünk, akkor:

_asm(

mov eax,0

mov al,10h

ki 70h, al

in al,71h

cbw

cwde

mov regEsi,eax

}

// ez a mi funkciónk - az esi regiszter tartalmát vesszük

// írja be a rendszerpufferbe

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

pIrp->IoStatus.Information = 4; // és állítsa be az eredmény méretét

állapot = STATUS_SIKER;

) else status = STATUS_INVALID_DEVICE_REQUEST;

pIrp->IoStatus.Status = állapot;

IoCompleteRequest(pIrp, IO_NO_INCREMENT);

return(státusz);

}

int DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pusRegistryPath)(

NTSTATUS állapot;

PDEVICE_OBJECT pDeviceObject;

// Unicode karakterláncok inicializálása

RtlInitUnicodeString(&g_usDeviceName, L"\\Device\\DevGet");

RtlInitUnicodeString(&g_usSymbolicLinkName, L"\\??\\sldevGet");

// töltse ki a driver objektumot – világosan magyarázza el az illesztőprogramnak, hogy melyik funkció mit kezel

pDriverObject->DriverUnload =

pDriverObject->MajorFunction =

pDriverObject->MajorFunction =

pDriverObject->MajorFunction =

// hozzon létre egy logikai virtuális eszköz objektumot

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

if(!NT_SUCCESS(Status))(return Status;)

// szimbolikus hivatkozás létrehozása az eszközhöz

Állapot = IoCreateSymbolicLink(&g_usSymbolicLinkName, &g_usDeviceName);

if(!NT_SIKERES(Állapot))(

IoDeleteDevice(pDeviceObject);

visszatérési állapot;

}

visszatérési állapot;

}

Tanfolyam2.cpp

#include "stdafx.h"

#include "windows.h"

#include "stdlib.h"

#define IOCTL_GET CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)

int _tmain(int argc, _TCHAR* argv)(

HANDLE hDevice;

BOOL DevControl;

DWORD dwBytesReturned;

karakterlánc;

/*

Lehetőségek:

lpFileName Egy null-végződésű karakterlánc címe, amely megadja a létrehozandó vagy megnyitandó objektum nevét.

dwDesiredAccess Az objektumhoz való hozzáférés típusa. Ez a paraméter a következő értékek tetszőleges kombinációját veheti fel:

Érték: Leírás:

0 Lekérdezést ad meg az objektum elérhetőségéről a megadott eszközön. Egy alkalmazás lekérdezheti egy eszköz attribútumait anélkül, hogy hozzáférne.

GENERIC_READ Meghatározza az olvasási hozzáférést egy objektumtól. A fájlból adatok olvashatók, és a fájlmutató mozgatható. Kombinálja a GENERIC_WRITE-tel az olvasási-írási hozzáféréshez.

GENERIC_WRITE Írási hozzáférést ad meg egy objektumhoz. Az adatok fájlba írhatók, és a fájlmutató mozgatható. Kombinálja a GENERIC_READ-vel az olvasási-írási hozzáféréshez.

dwShareMode Az objektum megosztott hozzáférésének módja. Ha nullára van állítva, az objektum nem osztható meg több program között. Minden további objektummegnyitási művelet sikertelen lesz, amíg az objektumleírót be nem zárják. Egy objektum megosztásához használja a következő értékek kombinációját:

Érték: Leírás:

FILE_SHARE_DELETE Lehetővé teszi a műveletek sorozatának megnyitását egy objektum törléséhez.

FILE_SHARE_READ Lehetővé teszi a műveletek sorozatának megnyitását egy objektum olvasási hozzáférésének kérésére.

FILE_SHARE_WRITE Lehetővé teszi a műveletek sorozatának megnyitását egy objektum írási jogosultságának kérésére

lpSecurityAttributes Egy SECURITY_ATTRIBUTES struktúra címe, amely meghatározza, hogy a függvény által visszaadott leíró örökölhető-e egy utódfolyamat által.

Ha az lpSecurityAttributes értéke NULL, akkor a leíró nem örökölhető.

dwCreationDisposition

Érték: Leírás:

CREATE_ALWAYS Mindig új fájlt hoz létre.

Ha a fájl létezik, a függvény felülírja a fájlt.

CREATE_NEW Új fájlt hoz létre. A funkció meghiúsul, ha a fájl létezik.

OPEN_ALWAYS Fájl megnyitása, mindig. Ha a fájl nem létezik, akkor a függvény ugyanúgy hozza létre, ahogy a dwCreationDisposition a CREATE_NEW lett volna.

OPEN_EXISTING Megnyit egy fájlt. A funkció meghiúsul, ha a fájl nem létezik.

TRUNCATE_EXISTING Megnyit egy fájlt, és nulla méretre csonkolja. A funkció meghiúsul, ha a fájl nem létezik.

dwFlagsAndAttributes Fájljelzők és attribútumok.

Egy meglévő fájl megnyitásakor a CreateFile figyelmen kívül hagyja a sablonfájlt.

Visszatérési értékek:

Ha a funkció sikeres, a megadott fájl nyitott leírója kerül visszaadásra. Ha a megadott fájl a függvényhívás előtt létezik, és a dwCreationDisposition értéke CREATE_ALWAYS vagy OPEN_ALWAYS, a GetLastError hívás az ERROR_ALREADY_EXISTS értéket adja vissza, még akkor is, ha a függvény sikeres. Ha a fájl nem létezik a hívás előtt, a GetLastError 0-t (nullát) ad vissza.

Hiba esetén a függvény INVALID_HANDLE_VALUE értéket ad vissza. A hibával kapcsolatos további információkért hívja a GetLastError-t.

*/

if (hDevice != 0)(

/*

A hDevice a CreateFile által visszaadott fogantyú.

A dwIocontrolCode egy olyan érték, amely a végrehajtandó műveletet határozza meg.

Az lpInBuffer annak a puffernek a címe, amely a dwIoControlCode-ban meghatározott művelet végrehajtásához szükséges adatokat tartalmazza. Ha a művelet nem igényel adatot, megadhatja a NULL értéket.

Az nInBufferSize az lpInBuffer által mutatott pufferben lévő adatok mérete bájtokban.

Az lpOutBuffer annak a puffernek a címe, amely megtelik kimeneti adatokkal, ha a művelet sikeres. Ha a műveletnek nincs kimenete, akkor ennek a mezőnek NULL-nak kell lennie.

Az nOutBufferSiz az lpOutbuffer által mutatott puffer mérete bájtokban.

lpBytesReturned - egy dword típusú változó címe, amely az lpOutBufferben megadott adatok méretét fogja megkapni.

Az lpOverlapped egy OVERLAPPED struktúra címe, ha azt szeretné, hogy a művelet aszinkron legyen. Ha meg akarja várni a művelet befejezését, írja be a NULL értéket ebbe a mezőbe.

*/

wsprintf((LPSTR) stroka, "%X", adwOutBuffer);//karakterlánc írása a pufferbe (adwOutBuffer --> stroka)

CloseHandle(hDevice);

visszatérés 0;

}

illesztőprogram központi számítógépes programja

2.3 3. lépés

Kurzusmunka.cpp

#beleértve

#beleértve

#beleértve

{

DWORD szemét;

0, // fájl attribútumok

return(FALSE);

}

0, // bemeneti puffer mérete

CloseHandle(hDevice);

return(bresult);

}

int main(int argc, char *argv)

{

/*

typedef struct (

PARTITION_STYLE PartitionStyle; // partíció formátuma

LARGE_INTEGER StartingOffset; // szakasz kezdeti eltolása

LARGE_INTEGER partícióhossz; // partíció mérete

DWORD partíciószám; // szakaszszám

BOOLEAN RewritePartition; // ha a partíció írható, akkor TRUE

szakszervezet (

PARTITION_INFORMATION_MBR Mbr; // további információk MBR Style szakasz

PARTITION_INFORMATION_GPT Gpt; // további információk GPT Style szakasz

};

) PARTÍCIÓ_INFORMÁCIÓ_EX;

*/

BOOL bEredmény;

system("SZÜNET");

return((int)bResult);

}

2.4 4. lépés

1) Az 1-3. lépésben kifejlesztett összes funkciót egyesítse egyetlen programcsomagban.

A végső komplexumnak így kell kinéznie:

- Az illesztőprogramunk be van építve a rendszerbe, és a Windows rendszerindítási fázisában töltődik be.

- Az alkalmazás bekéri a sofőrtől a szükséges (2. lépésben beállított) információkat, a vezető továbbítja ezeket az információkat, miközben a hangszóró is bekapcsol egy időre és megszólal a dallam (1. lépésben beállított). Az alkalmazás ezután kérést küld a rendszerben lévő meghajtóhoz (a 3. lépésben megadott opciónak megfelelően).

2) Készítsen egy magyarázó megjegyzést, amelyben le kell írnia mind a 4 szakaszt, valamint elméleti információkat minden szakaszhoz.

#include "stdafx.h"

#include "windows.h"

#include "stdlib.h"

#define IOCTL_GET CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)

BOOL GetPartitionNumber(PARTITION_INFORMATION_EX *pex)

{

HANDLE hDevice; // az ellenőrzött eszköz leírója

BOOL bEredmény; // eredményjelző

DWORD szemét;

hDevice = CreateFile(TEXT("\\\\.\\c:"), // megnyitandó eszköz

GENERIC_READ | GENERIC_WRITE, // eszköz hozzáférés

FILE_SHARE_READ |FILE_SHARE_WRITE, // megosztási mód

NULL, // alapértelmezett biztonsági attribútumok

OPEN_EXISTING, // hely

0, // fájl attribútumok

NULLA); // ne másoljon fájlattribútumokat

if (hDevice == INVALID_HANDLE_VALUE)( // nem lehet megnyitni az eszközt

printf("CreateFile() nem sikerült!\n");

return(FALSE);

}

bResult = DeviceIoControl(hDevice, // kért eszköz

IOCTL_DISK_GET_PARTITION_INFO_EX, // végrehajtandó művelet

NULL, // mutató a bemeneti pufferre

0, // bemeneti puffer mérete

pex, sizeof(*pex), // kimeneti puffer

&junk, // a visszaadott bájtok száma

(LPOVERLAPPED) NULL); // bemenet/kimenet szinkronizálása (I/O)

CloseHandle(hDevice);

return(bresult);

}

int _tmain(int argc, _TCHAR* argv)(

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

HANDLE hDevice;

BOOL DevControl;

DWORD dwBytesReturned;

LPVOID adwInBuffer, adwOutBuffer;

karakterlánc;

PARTITION_INFORMATION_EX pex; // eszköz szerkezete

BOOL bEredmény;

hDevice = CreateFile("\\\\.\\sldevGet",GENERIC_READ+GENERIC_WRITE,0, NULL,OPEN_EXISTING, 0, NULL);

if (hDevice != 0)(

DevControl = DeviceIoControl(hDevice,IOCTL_GET,&adwInBuffer, sizeof(adwInBuffer),&adwOutBuffer,sizeof(adwOutBuffer), &dwBytesReturned,NULL);

if ((DevControl != 0)&&(dwBytesReturned != 0))(

wsprintf((LPSTR) stroka, "%X", adwOutBuffer);//karakterlánc írása a pufferbe (adwOutBuffer --> stroka)

if (stroka =="00000100") MessageBox(NULL,"Talált 1,44 Mb","Jermakov FDD-szkenner",MB_OK);

else MessageBox(NULL,"Nem található","Yermakov FDD szkenner",MB_OK);

hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);

if (hSCManager!=0)(

GetFullPathName("beeper.sys",sizeof acDriverPath,acDriverPath,NULL);

// Regisztrálja a zenészt az SCM táblákban

hService=Szolgáltatás létrehozása(hSCManager,"beeper11","Szép dallamcsipogó11",

SERVICE_START+DELETE,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,

SERVICE_ERROR_IGNORE,acDriverPath,NULL,NULL,NULL,NULL,NULL);

if (hService!=0)(

StartService(hService, 0, NULL);

DeleteService(hService);

CloseServiceHandle(hService);

)else MessageBox(NULL,"Nem lehet regisztrálni az illesztőprogramot",NULL,MB_ICONSTOP);

CloseServiceHandle(hSCManager);

)else MessageBox(NULL,"Nem lehet csatlakozni a SCManagerhez",NULL, MB_ICONSTOP);

)else MessageBox(NULL,"Nem lehet vezérlőkódot küldeni",NULL,MB_OK);

CloseHandle(hDevice);

)else MessageBox(NULL, "A fejlesztő nincs jelen", NULL, MB_ICONSTOP);

bResult = GetPartitionNumber(&pex);

if (bEredmény)( printf("Partíciószám = %d\n", pex.Partíciószám);

)else( printf ("GetPartitionNumber() nem sikerült. Hiba %d.\n", GetLastError());)

system("SZÜNET");

return((int)bResult);

}

3. Az alkalmazás működése

3.1. ábra. Illesztőprogram a 2. lépéstől

3.2. ábra. Illesztőprogram a 3. lépéstől

Az Allbest.ru oldalon található

Hasonló dokumentumok

    A kernel módú illesztőprogram és a felhasználói alkalmazás közötti interakció mechanizmusai: többrétegű illesztőprogram-architektúra, adatrejtő algoritmus, illesztőprogram-alkalmazás interakció, felhasználói felület fájlhozzáférést szűrő programok.

    szakdolgozat, hozzáadva 2009.06.23

    Windows NT I/O architektúra. Belső szervezet USB busz. A WDM illesztőprogram modell alapvető jellemzője. A kifejlesztett illesztőprogram belépési pontjai, kód elhelyezése a memóriában, illesztőprogram telepítése a rendszerbe. Illesztőprogram kód implementációja C nyelven.

    szakdolgozat, hozzáadva 2014.09.27

    Felhasználói módú struktúra, amely lehetővé teszi a felhasználó számára, hogy interakcióba lépjen a rendszerrel. A kernel mód leírása, amely biztosítja a felhasználói alkalmazások (programok) biztonságos futtatását. Windows NT hardveres absztrakciós réteg.

    bemutató, hozzáadva 2013.10.23

    Windows 98 kernel A 16 bites kernel modulok szerepe. Sebesség problémák. Kooperatív és megelőző multitasking. Továbbfejlesztett erőforrás-használat a Windows 98 rendszerben. WordArt használata. MS Outlook Express: üzenetek létrehozása és küldése.

    ellenőrzési munka, hozzáadva 2005.04.14

    Az összes számítógépes eszköz közös működtetése és az erőforrásokhoz való hozzáférés. A grafikus műtő koncepciója, funkciói Windows rendszerek. Referencia windows szerviz. Ellenőrzés fájlrendszer. Plug and play technológia. GUI Ablakok.

    teszt, hozzáadva: 2011.01.22

    Az operációs rendszer jellemzői. A Windows fejlődésének története. Összehasonlító jellemzők Windows verziók. Elemek és windows eszközök xp. Alkalmazási programok Windows XP rendszerben. Asztali és laptop számítógépek Windows rendszert futtatva.

    jelentés, hozzáadva: 2011.10.16

    A kernel módú illesztőprogram és vezérlőalkalmazás használata rendszerszálak létrehozásához. Adatfeldolgozás utánzása, késések szervezése. Illesztőprogram fejlesztés C++ nyelven. Tesztállvány konfiguráció. A változó késleltetések és az időzítő működésének pontossága.

    szakdolgozat, hozzáadva 2009.06.24

    A Windows operációs rendszer belső szerkezetének tanulmányozása. NT architektúra és alapstruktúra. Funkcióváltási módszerek kernel módban és mag módban. A sofőr megértette. I/O csomagok. A Windows rendszer stabilitásának és biztonságának felmérése.

    szakdolgozat, hozzáadva 2014.02.01

    A tűzfal fogalma, típusai és működése. Windows tűzfalba ágyazva. Windows XP SP2, hozzáférés a tűzfalbeállításokhoz Windows XP Service Pack 2. Windows Vista, forgalom engedélyezett. Windows 7, aktív profilbeállítások. Személyi tűzfal, tesztszintek.

    absztrakt, hozzáadva: 2010.11.19

    Ismerkedés vele Műszaki adatok személyi számítógép. Operációs rendszer telepítése és Windows illesztőprogramok 7. Módszerek Ablakok tisztítása XP Professional SP3. Az operációs rendszer helyreállítási módszerei. Teljesítmény Microsoft telepítések iroda 2010.

Microsoft A Windows 10 operációs rendszer nagy hangsúlyt fektet a biztonságra. A rendszer egyik fontos eleme „ Windows Defender”, de nem tud megbirkózni minden fenyegetéssel. Az utóbbi időben különösen a Ransomware vírusok váltak népszerűvé, amelyek leghíresebb reinkarnációi rosszindulatú Petya és . A Microsoft bevezette az alapvető elkülönítési és memóriaintegritási funkciókat a Windows 10 rendszerben a zsarolóvírusok elleni küzdelem érdekében. Alapértelmezés szerint le vannak tiltva.

Tartalomjegyzék:

Mi a kernel elkülönítése és a memória integritása?

Magszigetelés- Ez egy további védelmi folyamat, amelyet a számítógépes folyamatok operációs rendszerrel és eszközzel szembeni védelmének módszere biztosít. Ezeknek a műveleteknek köszönhetően elkerülhető az operációs rendszer működésének aláásása, amikor vírusok lépnek be a számítógépbe.

Memória integritása a kernel elkülönítését kísérő védelmi funkció, amelynek célja, hogy korlátozza az ismeretlen, potenciálisan veszélyes programok hozzáférését a magas szint Biztonság.

Fontos: A kernel elkülönítési szolgáltatás csak akkor tud működni, ha ehhez a számítógép hardverei részéről megfelelő feltételek vannak. NÁL NÉL BIOS beállítások A virtualizációs technológiának aktívnak kell lennie, ami miatt a Windows 10 operációs rendszert futtató számítógép virtuális konténerben futtathat különféle alkalmazásokat, korlátozva a hozzáférést a kulcsfontosságú rendszerelemektől.

Hogyan lehet engedélyezni a kernel elkülönítését és a memória integritását

A Windows 10 operációs rendszer beállításai lehetővé teszik a számítógép biztonsági funkcióinak teljes körű kezelését. A Windows 10 beállításain keresztül az alábbiak szerint engedélyezheti a kernel elkülönítését és a memória integritását:


Ahogy fentebb megjegyeztük, ha a számítógép hardverkomponense nem támogatja a virtualizációt, adott funkciót nem fog működni. Ha be van kapcsolva, a felhasználó a jobb alsó sarokban a „Nem lehet biztosítani a memória integritását” üzenetet fogja látni. Lehetséges összeférhetetlenség." Ha ez az üzenet megjelenik, javasoljuk, hogy lépjen be a BIOS-ba, és ellenőrizze, hogy a funkció engedélyezve van-e. biztonságos rendszerindítás(boot mód).

Hogyan lehet letiltani a kernel elkülönítését és a memória integritását

Az operációs rendszer azon új funkciói, amelyek komolyan befolyásolják annak működését, mindig fennáll annak a veszélye, hogy a számítógép működése közben problémákat okoznak. A kernel elkülönítési szolgáltatása sem kivétel. Azok a felhasználók, akik már kipróbálták, megjegyzik a Microsoft fórumain, hogy számos játék és program indításakor problémákba ütköznek. A probléma megoldásának egyetlen módja a kernel elkülönítési szolgáltatás és a memória integritásának letiltása. Talán a jövőbeni frissítések során az alkalmazásfejlesztők vagy a Microsoft kijavítják ezt az inkompatibilitást.

Háromféleképpen lehet letiltani a kernel elkülönítését és a memória integritását: