Enerģijas pārvaldība sistēmā Windows. Enerģijas pārvaldība Windows Powercfg mantotā kodola zvanītājā

Windows Defender drošības centrs, tostarp jauna sadaļa Device Security, kas piedāvā uzlabotu drošības rīku, piemēram, kodola izolēšanas, pārvaldību.

Core Isolation ir uz virtualizāciju balstīta drošības tehnoloģija, kas nodrošina papildu līmenis aizsardzība pret inteliģentiem uzbrukumiem. Atmiņas integritāte ir viens no kodola izolācijas tehnoloģijas pamatelementiem - funkcija, kas paredzēta ievietošanas novēršanai ļaunprātīgs kods procesos ar augstu drošību. Aizsardzība tiek nodrošināta, nodrošinot, ka kodola virtuālās atmiņas lapa sāk izpildīt tikai pēc sekmīgas konsekvences pārbaudes.

Apskatīsim, kā Windows 10 2018. gada aprīļa atjauninājumā iespējot atmiņas integritāti, lai padarītu datoru drošāku.

Atmiņas integritātes iespējošana

  • Atveriet Windows Defender drošības centru.
  • Atlasiet sadaļu "Ierīces drošība".
  • Sadaļā “Kodola izolācija” noklikšķiniet uz saites “Kodola izolācijas informācija”.
  • Novietojiet atmiņas integritātes slēdzi aktīvajā pozīcijā.

Pēc šo darbību veikšanas jums ir jārestartē dators, lai izmaiņas stātos spēkā.

Piezīme: jūsu procesoram ir jāatbalsta virtualizācijas tehnoloģijas, lai šī funkcija darbotos. Turklāt BIOS vai UEFI ir jāiespējo virtualizācija. Pretējā gadījumā funkcija nebūs pieejama.

Kodola izolācijas problēmu novēršana

Dažos gadījumos dažās lietojumprogrammās var rasties saderības problēmas, ja ir iespējota kodola izolācija. Lai atrisinātu problēmu, šī funkcija būs jāatspējo.

Ja mēģināt atspējot Windows Defender drošības centra atmiņas integritāti, bet opcija ir kļuvusi pelēka un tiek parādīts ziņojums "Šo iestatījumu kontrolē jūsu administrators", jūs joprojām varat atspējot šo līdzekli, izmantojot sistēmas reģistru.

Piezīme: nepareiza reģistra maiņa var radīt nopietnas problēmas. Ieteicams izveidot dublējums Windows reģistrs pirms turpināt šīs darbības. Izvēlnē Reģistra redaktors atlasiet Fails> Eksportēt, lai saglabātu dublējumu.

  • Nospiediet kombinācija Windows taustiņi+ R, lai atvērtu palaišanas logu.
  • Ierakstiet regedit un noklikšķiniet uz Labi, lai palaistu reģistra redaktoru.
  • Dodieties uz šādu ceļu:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ DeviceGuard \ Scenarios \ HypervisorEnforcedCodeIntegrity
  • Veiciet dubultklikšķi uz ieraksta Iespējots.
  • Mainiet vērtību no 1 uz 0.
  • Noklikšķiniet uz Labi.

Lai atspējotu, varat izmantot arī gatavu

Jautājums: Kad ilgs darbs datorā vai pamostoties no miega režīma fonts pazūd sākuma izvēlnē


Kad dators darbojas ilgu laiku vai kad tas iziet no miega režīma, izvēlne Sākt kļūst šāda.

Kā to labot? Lūdzu palīdzi man..

Atbilde: jau pārinstalēta un atjaunināta OS (

Jautājums: Kā pārslēgt datoru miega režīmā S1 ("Gaidīšanas režīms")?


Nav ieslēgts galddators, ne arī klēpjdatorā nevaru saprast, kā datoru pārslēgt S1 tipa hibernācijas režīmā.

"powercfg / a" izpildes rezultāts

Šajā sistēmā ir pieejami šādi hibernācijas stāvokļi:
Gaidīšanas režīms (S3)

Šajā sistēmā nav pieejami šādi hibernācijas stāvokļi:
Gaidīšanas režīms (S1)

Gaidīšanas režīms (S2)
Sistēmas programmaparatūra neatbalsta gaidstāves režīmu.

Hibernācija
Hibernācija nav iespējota.

Gaidīšanas režīms (savienots)
Sistēmas programmaparatūra neatbalsta gaidstāves režīmu.

Hibrīda miega režīms

Ātrs sākums
Hibernācija nav pieejama.

Atbilde:Ļaujiet datoram pāris minūtes nostāvēties dīkstāvē, pēc tam lieciet to miega režīmā un pamodiniet.

Pasākumu žurnālā:
Darbība => izveidot pielāgotu skatu
Datuma vienībā iestatiet, piemēram, divu minūšu intervālu un skatiet, kas noticis.

Man vairs nav ideju.

Nu, pārbaudiet datoram pievienotos draiverus un ierīces

Jautājums: mostas 4:00


Gandrīz katru nakti pamostas dators un pamodina mani.
ierīču pārvaldniekā, tīkla adapteri, noņemiet atzīmi no izvēles rūtiņas "pamosties ar burvju paketēm".
jaudas iestatījumos atspējoja modināšanas taimerus.
v komandrinda komanda powercfg / waketimers to parāda.

c: \> powercfg / waketimers
Mantotā kodola zvanītāja iestatītais taimeris ir derīgs līdz 01.09.2016. plkst. 4:14:46.
Iemesls:

Palīdzība. Kurš vainīgs un ko darīt?

Atbilde: beigās viņš izārstēja šo kaiti:

Vadības panelis -> Drošība un apkope -> Apkope -> Automātiskā apkope -> Mainīt apkopes iestatījumus -> noņemiet atzīmi no izvēles rūtiņas "Atļaut apkopes uzdevumam pamodināt datoru..."

Jautājums: Dators spontāni ieslēdzas naktī


Iepriekšējā reizē (apmēram 1 ... 2 mēneši), apmēram 30 ... 60 minūtes pēc datora ieslēgšanas miega režīmā (lai no rīta varētu turpināt darbu no tā pārtraukšanas brīža), tas spontāni ieslēdzas. Darbu beidzu ap 12 naktī, t.i. ieslēgšana notiek 0:30 ... 1:00 no rīta. Tomēr monitors paliek tumšs. Izkāpju no gultas, pakustinu peli - monitors ieslēdzas, ieeju profilā normālā režīmā, ielieku atpakaļ miega režīmā - šonakt vairs neieslēdzas.

Win7 datorā ir pastāvīga pretvīrusu programma MS Cercurity Esentials. Vairākas reizes palaistīju aktuālos (svaigi lejupielādētos) curing utilities mbar un DrWeb Cureit - tie saskārās ar dažiem byak, bet tomēr spontāna aktivizēšana palika. Tas izskatās pēc vīrusa, kas savieno manu datoru ar DDOS uzbrukumiem. Turklāt Google laiku pa laikam bloķē piekļuvi aizdomīgas trafika dēļ, kas nāk no mana IP. Tā tas notiek jau ilgāku laiku (vairāk kā gadu), bet spontānu datora iedarbināšanu pamanīju pavisam nesen.

Patiesībā jautājums ir šāds: ja problēma ir zināma un to ir salīdzinoši viegli novērst, tad es lejupielādēju ieteicamo programmatūru, skenēju un ievietoju. Ja problēma ir sarežģītāka, tad nemānīšu ne sevi, ne vietējo guru un stulbi nepārkārtošu sistēmu.

Atbilde: Falkonists, kaut ko es īsti nesapratu...

Ziņa no Falkonists

pēc datora ieslēgšanas miega režīmā ... tas spontāni ieslēdzas

Miegs un hibernācija pulksten 7 ir pilnīgi atšķirīgas lietas. Lai to ieslēgtu miega režīmā, vienkārši nospiediet tastatūras pogu Miega režīms. Noklikšķinot uz Sākt un novietojot kursoru virs bultiņas blakus vienumam Shutdown, tiks parādīta izvēlne, kurā ir arī hibernācija. un hibernācija. Hibernācijas laikā dators tiek atvienots no barošanas avota tāpat kā izslēdzot, bet, ieslēdzot datoru, var sākt strādāt tāpat kā pēc miega režīma.
Bet jūs jautājat par kaut ko citu. Vai esat pārbaudījis uzdevumu plānotāju?

Jautājums: Dators naktī pamostas no miega režīma


Laba diena visiem. Šī problēma mani jau ir pārņēmusi. Pats par sevi PC naktī iznāk no miega režīma, ir Windows 10, pirms tam bija 7, nebija tādas problēmas, tāpēc izvēlējos tieši šo sadaļu.
Kas jau ir izdarīts pirms 2 dienām:
1. Event Viewer es atradu iemeslu: Taimeris - tiks izpildīts ieplānotais uzdevums "NT TASK \ Microsoft \ Windows \ UpdateOrchestrator \ Reboot", pieprasot datoram pamosties no miega režīma.
Es devos uz Task Scheduler, atradu šo uzdevumu un noņēmu izvēles rūtiņu no vienuma: Nosacījumi - Pamodiniet datoru, lai pabeigtu uzdevumu.
2. Es devos uz powercfg.cpl - Barošanas shēmas iestatījumi - Mainīt Papildu iespējas Barošana — Miega režīms — Atļaut modināšanas taimerus — ATspējot.

Šovakar situācija atkārtojās, bet skatoties notikumus atradu tikai:

Sistēma ir izgājusi no hibernācijas stāvokļa.

Miega laiks: 2016-10-29T21: 38: 38.657073700Z
Modināšanas laiks: 2016-10-29T21: 58: 34.625754700Z

Izvades avots: nav datu

3. Ierīču pārvaldniekā es noņēmu izvēles rūtiņu "atļaut šai ierīcei pamodināt datoru no gaidstāves režīma" no peles, tastatūras, tīkla kartes un visur, kur es to atradu...

Palīdzi atrisināt šī problēma, vairs nezinu kur rakt...

Atbilde:

Ziņa no GoLeMjkeee

Maksa katru dienu 2-00

Mainiet uz dienas laiku.

Ziņa no GoLeMjkeee

bet ķeksītis .... nav tā vērts.

Viņa ir tāda, ar raksturu.

Jautājums: Kā noņemt ekrānu ar pogu "Pieteikties", izejot no miega režīma?


Windows 10 Pro 1607.
Kad izejat no miega režīma, sistēma Windows lūdz nospiest taustiņu Enter. Pēc pamošanās parādās zils ekrāns ar lietotājvārda uzrakstu un zem tā pogu "Pieteikties". Parole nav iestatīta, lietotājs ir vienīgais sistēmā ar administratora tiesībām. Ielādējot viss kārtībā, nekādu ekrānu un pogu klikšķu, tikai darbvirsma.

Opcijās- Konti- Pieteikšanās opcijas nav vienuma "Nepieciešama pieteikšanās".
Logā Lietotāju konti, cilnē Lietotāji, nav atzīmēta izvēles rūtiņa “Pieprasīt lietotājvārdu un paroli”.
Enerģijas plāna iestatījumos nav vienuma “Pieprasīt paroli modināšanas brīdī”.

Kā es varu noņemt pogu "Pieteikties", izejot no miega režīma, lai dators automātiski palaistu darbvirsmu, apejot šo logu?

Atbilde: noņemt hibernāciju

Jautājums: Windows 8.1 izslēdzas miega režīmā


Sveiki.
Man ir problēma ar hibernāciju. Dators pilnībā izslēdzas miega laikā. Tie. jauda pilnībā pazūd. Agrāk guļošajā vīriņā mirgoja spuldzīte uz sistēmas bloka, tagad ar usb arī pele ir pilnībā "nodzisusi", klaviatūra nodziest un ieslēgt var tikai ar ieslēgšanas pogu un protams visa infa netiek saglabāta .
Esmu lasījis daudzas tēmas internetā, bet neviena problēma nav līdzīga manējai.
Es tūlīt uzrakstīšu datora īpašības: mātesplate ASUS p8h67, video radeons HD7850 (asus), Intel i5 2550k, 8gb RAM, SSD Silīcija jauda s55 120gb, HDD WD 500gb.
Uzstādīta Windows 8.1, stāvēja ļoti ilgu laiku un hibernācija darbojās kā nākas. Kad tas pārstāja darboties, es pat nezinu, kāpēc un pēc kādas (kādas darbības) tas pārstāja darboties. Es neko tādu neinstalēju, likās, ka neatjaunināju draiveri.
Bieži aiz ieraduma, tā vietā, lai to izslēgtu, es nospiežu miega pogu un vienu reizi tas strādāja un strādāja vairākas dienas, bet laika gaitā tas pārstāja darboties.
Mēģināja atjaunināt vai atinstalēt draiverus. Es mēģināju atvienoties no datora papildu ierīces(nu, jūs nekad zināt). Pirms gulētiešanas izslēdzu dažādas programmas. Nekas nepalīdzēja.
Internetā atradu vienīgo informāciju, kas ir tieši tāda pati kā man (8. punkts):

Protams, es nevarēju instalēt draiverus, dažādas platformas. Es nevarēju atrast to pašu sev.

Es nevēlos pārinstalēt OS. viss (izņemot guļošo) darbojas labi.
Ir idejas, kas varētu būt nepareizi?

Pievienots pēc 17 minūtēm
Aizmirsu uzrakstīt, ko BIOS atiestatīja un atjaunina.

Atbilde: pārbaudiet, tad vai nu BP vai māte. Mēs programmatiski konfigurējām miega un hibernācijas režīmu powercfg / h.

Vēl viena iespēja ir pārbaudīt (aizstāt). hiberfil.sys - tas ir atbildīgs par hibernāciju.

Jautājums: pārziemot operētājsistēmā Windows 8


pēc aiziešanas no gulēšanas Windows režīms 8 sāk pārstartēt un pēc tam Windows sāknēšana tiek parādīts šāds ziņojums
pastāstiet man, kā ar to tikt galā?

Atbilde:

Ziņa no azat145

pēc iziešanas no hibernācijas režīma Windows 8 sāk atsāknēt

Vispirms.
Vēlāk.

Jautājums: hibrīdais miegs vai hibernācija? Kas ir vēlams darbvirsmā?


Kopumā jautājums ir virsrakstā. Kā sapratu no meklētāja, pareizāk sakot, no viena un tā paša raksta, kas kopēts visās vietnēs, Hybrid miega režīma priekšrocība ir tikai ieslēgšanas, pamošanās, varētu teikt, ātrumā. Un, ja es vēlos izmantot hibernācijas režīmu savā darbvirsmā Windows 7 x64, tas ir zemūdens akmeņi? Man vienkārši jāizslēdz strāva, un hibrīdā miega režīmā to labāk nedarīt. Paldies visiem, kas atsaucas

Atbilde: Es to šodien izlasīju. Labi, manuprāt, uz manu jautājumu nav citas atbildes, kā tikai īsa Microsoft instruktāža. Tad padalīšos ar saviem atklājumiem (tiem, kas iekrīt šajā tēmā par līdzīgu jautājumu).
Tātad:

plusi Hibrīda miega režīms: 1. Ātra palaišana, nav nepieciešams pilnībā izslēgt datoru;
Mīnusi: 1. Slodzes HDD(pēc viena moderatora no Windows 7 sadaļas mūsu forumā); 2. Neizslēdzas pilnībā, turpina patērēt strāvu, lai gan nedaudz (lai gan dažiem šī prece ir pluss)

Īsāk sakot, hibernācija ir nepieciešama, ja vēlaties pastāvīgi izslēgties no tīkla, bet nevēlaties ilgstoši ielādēt / izslēgt OS.
Hibrīda miega režīms - tiem, kuri ir apmierināti ar datoru, kas pastāvīgi atrodas tīklā.

Jautājums: Iepriekš klēpjdators startēšanas laikā tika izslēgts, tagad miega režīmā


Mans DELL klēpjdators INSPIRON 3521 ar operētājsistēmu Windows 8.1 agrāk startēšanas laikā tika atspējots (parādījās DELL logotips - atspējot - atkārtoti iespējot un normāla darbība). Atjaunināju sistēmu par 10k, nepalīdzēja. Es to nēsāju kalnu servisa centrā, kas bija slavens pilsētā un slavēju - tur klēpjdators 2 nedēļas droši atpūtās no cilvēka uzmanības. Paņemot to, es novērsu problēmu, atvienojot ātra ielāde un, lai atzīmētu, atgriezās pie 8.1.
Ir pagājis mēnesis, un tagad, aizverot klēpjdatora vāku, tas pāriet miega režīmā (kā iestatījumos), bet pēc 20 minūtēm vai nedaudz vairāk izslēdzas pavisam (agrāk tā nebija un jaudas iestatījumi nav mainīti). Ieslēdzot, situācija, ko es aprakstīju iepriekš: ieslēgšana - logotips - izslēgšana. Normāla darbība pēc restartēšanas. Visi draiveri ir atjaunināti. Kāda varētu būt problēma un kā to novērst? Žēl nabaga - kopā pusotrs gads, bet man ir diploms un valsts sertifikāti - es tagad nevaru to nēsāt līdzi meistariem ...

Atbilde: Kā jūs vēlaties, lai tas darbotos? Personīgi es izmantoju hibernāciju, nevis hibernāciju, pāreja uz hibernāciju ir iespējota arī dīkstāvē, iestatījumi pielikumā

Jaudas iestatījumu pārsūtīšana

Nosūtiet savu labo darbu zināšanu bāzē ir vienkārši. Izmantojiet zemāk esošo veidlapu

Studenti, maģistranti, jaunie zinātnieki, kuri izmanto zināšanu bāzi savās studijās un darbā, būs jums ļoti pateicīgi.

Ievietots vietnē http://www.allbest.ru/

1. Teorētiskā informācija

1.1. Windows kodola draiveru izstrāde

Īsa teorētiskā informācija

Kodola draiveru izstrāde

Draiveris ir datorprogramma, ar kuras palīdzību cita programma (parasti operētājsistēma) standarta veidā piekļūst aparatūrai.

Skice, lai parādītu, kā darbojas dažāda veida draiveri:

To ir ērti iedalīt 2 veidos:

- Kodola draiveri (tie strādā 0. privilēģiju līmenī, bet nekādā veidā nesadarbojas ne ar lietotāja programmu, ne ierīci. Tieši ar tiem mēs sāksim (tie ir vienkāršāki un var arī noderēt).

Ierīču draiveri ir nepieciešami, lai mijiedarbotos starp lietotāja programmu un ierīci, proti, lai pārsūtītu datus starp tām, vadītu ierīci. Turklāt ierīces var būt gan reālas, gan virtuālas). Vadītājam nav jākontrolē neviens fiziska ierīce... Dažas operētājsistēmas arī ļauj izveidot draiverus virtuālajām ierīcēm – objektiem, kas darbojas kā I/O ierīces, bet neatbilst nevienai fiziskai ierīcei.

Kodola komponenti, kas darbojas priviliģētā procesora režīmā (ko sauc par kodola režīmu), var darīt visu, proti:

- viņi var izpildīt priviliģētas procesora komandas (piemēram, lgdt),

- var piekļūt sistēmas datiem un kodam,

- ir tieša piekļuve aprīkojumam, piemēram, caur ostām

- piekļūt atmiņas šūnām; draiveris nevar tieši manipulēt ar fizisko atmiņu, taču tas var iegūt jebkuras fiziskās atmiņas virtuālo adresi un ar to manipulēt.

Ja jums ir jāraksta nopietna programma, kurai nepieciešama piekļuve sistēmas iekšējām funkcijām vai datu struktūrām, jūs varat saskarties ar daudziem ierobežojumiem, kurus var pārvarēt, tikai ievietojot savu kodu sistēmas adrešu telpā. Vienīgais dokumentētais veids, kā to izdarīt, ir instalēt draiveri. Šī metode ir salīdzinoši vienkārša, uzticama un, pats galvenais, to pilnībā atbalsta pati operētājsistēma.

Kodola kods (patiesībā šī ir pati sistēma) tiek uzskatīts par pilnībā uzticamu. Tāpēc, ielādējot sistēmas adrešu telpā, draiveris kļūst par sistēmas daļu un uz to neattiecas nekādi ierobežojumi. Operētājsistēmā Windows tas ir praktiski vienīgais veids, kā izstrādātāji, kas nav OS, var rakstīt kodola līmeņa sistēmas komponentus.

Lai rakstītu un pētītu draiveru izstrādes veidus, viņi izmanto DDK (Device Development Kit) - draiveru izstrādes sistēmu.

Papildus dokumentācijai DDK ietver iekļauto failu (* .inc) un bibliotēkas failu kopu (* .lib).

Tādējādi Windows atbalsta dažāda veida ierīču draiverus, taču papildus ir draiveri, kas nav ierīces draiveri, bet vienkārši ļauj izveidot programmas, kas darbosies Windows kodola režīmā, t.i. 0 privilēģiju līmenī. To darot, viņiem ir pilna piekļuve OS un aparatūrai.

Apskatīsim vienkāršāko kodola režīma draiveri.

#iekļauts

int DriverEntry (

IN PDRIVER_OBJECT pDriverObject,

IN PUNICODE_STRING pusRegistryPath) (

}

Ieejas punkts ir DriverEntry, kas ir strukturēta kā procedūra, kurai nepieciešami divi parametri:

pDriverObject Norādītājs uz jaunizveidoto draivera objektu. Ielādējot draiveri, sistēma izveido draivera objektu, kas attēlo tā draivera attēlu atmiņā. Sistēma kontrolē vadītāju, izmantojot šo objektu. Vadītāja objekts ir parasta DRIVER_OBJECT tipa datu struktūra.

pusRegistryPath Norādiet uz reģistra atslēgu, kurā ir draivera inicializācijas parametri.

Šis mūsu pirmais draiveris ir tikko ielādēts sistēmā un nekavējoties izkrauts.

Tagad apskatīsim veidnes programmu, kas būs jāizmanto programmas izstrādei kursa darba pirmajā solī (beeper.sys kodola režīma draiveris).

Šī draivera uzdevums ir sistēmas dinamikā atskaņot vienu noti līdz pirmajai oktāvai. Lai to izdarītu, draiveris izmanto procesora instrukcijas, kas tiek ievadītas un izvadītas, atsaucoties uz atbilstošajiem I / O portiem. Ir vispārzināms, ka piekļuve I/O portiem ir svēti apsargāta. Windows sistēma resurss. Mēģinājums piekļūt jebkuram no tiem gan ievadē, gan izvadē no lietotāja režīma neizbēgami rada izņēmumu.

Mūsu piemērā skaļrunis darbosies (jo īpaši šim nolūkam tiek izmantoti porti 61h, 0 un 1 biti, ports 43h un 42h).

Vadītāja sākumā ir definētas visas 12 notis.

Būs nepieciešams ne tikai ieslēgt skaļruni, bet iestatīt skaņas frekvenci. Šim nolūkam tiek izmantota taimera apakšsistēma, kas darbojas neatkarīgi no procesora un kurai ir 3 kanāli. 2. kanāla izeja ir savienota ar skaļruni, kas tiek izmantots dažādu frekvenču skaņas ģenerēšanai. Skaņas dzirdams diapazons ir 30-6000 Hz.

Lai iestatītu skaņas frekvenci, uz portu 43h (taimera komandu reģistrs) tiek nosūtīts vadības vārds 0Bh:

mov al, 0Bh

ārā 43h, al

Šī vērtība nosaka kanāla numuru, kuru mēs kontrolēsim, darbības veidu, kanāla režīmu un skaitītāja formātu.

Pēc tam pārrēķinātā skaņas frekvence (1193167 / frekvence (Hz)) tiek nosūtīta uz portu 42h divās daļās (vispirms zemākās kārtas daļa, tad augstākās kārtas daļa).

Piemēram, mēs vēlamies iegūt skaņas frekvenci 100 Hz. Mēs pārrēķinām biežumu,

1193167/100 = 11931

Pēc tam:

mov cirvis, 11931

ārā 42h, al

mov al, ak

ārā 42h, al

Kursa darba pirmajā solī ir nepieciešams mainīt programmu, lai tā radītu citas mūzikas skaņas (katrai ir variants).

Uzdevumiem bieži ir jāiestata atšķirīgs ilgums. Šim nolūkam ir ērti izmantot procedūru DO_DELAY, nododot tajā netieši definētu "skanēšanas laika" parametru.

Lai atvieglotu draivera atkļūdošanu, ir dažādi rīki. Vienkāršākais ir parādīt nepieciešamo informāciju īpašā utilīta Debug View logā. Šī programma ir sākotnēji palaista un konfigurēta, lai pārtvertu ziņojumus no kodola līmeņa. Izvadei programma izsauc funkciju DbgPrint, kurai ir viens parametrs – izvades virkne. Pēc draivera palaišanas visa izvade tiek parādīta atkļūdošanas skata logā.

Ir dažādi veidi, kā kodolā instalēt draiveri. Tā kā mūsu draiveris sistēmai faktiski nav vajadzīgs (tas nekontrolē nevienu ierīci), mēs īslaicīgi savienosim draiveri ar sistēmu un pēc tam to izdzēsīsim.

Lai to izdarītu, jums ir jāizveido lietojumprogramma, kas palaiž draiveri. Kā? Draiveris ir kodola līmeņa pakalpojums. Tāpēc lietojumprogramma izmantos SCM — Service Control Manager, kas ir iekļauts sistēmā Windows un darbojas lietotāja līmenī.

Tādējādi risinājums ir jāizveido no diviem projektiem: konsoles lietojumprogrammas un draivera.

Lai izstrādātu draiverus C valodā, vispirms ir:

- instalēt DDK,

- iestatiet WNETBASE vides mainīgo (vērtība ir ceļš uz DDK, piemēram, e: \ winddk \ 3790.1830).

Draivera projektam ir jābūt MakeFile tipam.

Veiciet projekta iestatījumus, izmantojot lietojumprogrammu iestatījumus, un ierakstiet rindiņu laukā Build Command Line

ddkbuild -WNETXP chk. -ceZ

kas nozīmē īpaša skripta izsaukšanu, lai saistītu VC ar DDK

Failiem jāatrodas pašreizējā projekta mapē:

avoti, makefile, ddkbuild.cmd (skripts), draivera avota fails.c

Pēc projekta izveides draiverim ir jābūt sistēmas paplašinājumam.

Lietojumprogramma palaiž draiveri beeper.sys, t.i. reģistrē to reģistrā un palaiž to. Pēc tam, kad tas ir pabeigts, tas izdzēš to no reģistra.

Lai lietojumprogramma palaistu draiveri, pēc risinājuma izveides, kas sastāv no diviem projektiem - lietojumprogrammas un draivera, lietojumprogrammas izpildāmais fails un draiveris ir jāievieto vienā mapē un pēc tam jāpalaiž programma.

Draiverus ir ļoti grūti atkļūdot. Kļūdu gadījumā OS darbībā tā bieži sasalst un prasa atsāknēšanu. Un mūsu draiverim pēc pārstartēšanas jums arī ir jāizdzēš pakalpojums beeper06 no reģistra, izmantojot regedit (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \), un pēc tam vēlreiz jārestartē.

1.2 Windows virtuālo ierīču draiveri

Līdz šim mēs esam izstrādājuši kodola režīma draiveri, kas var paveikt lietas, ko nevar izdarīt lietotāja līmenī, jo īpaši strādāt ar I / O portiem. Šādu draiveri sauc par kodola draiveri, bet ne par ierīces draiveri, jo starp lietotāja programmu un ierīci netiek pārsūtīti dati (galu galā, kāpēc parasti ir vajadzīgs draiveris? Lai organizētu datu apmaiņu starp lietotāja lietojumprogrammu un ierīci ierīce).

Tagad mēs izstrādāsim ierīču draiverus, kas nosūta datus uz priekšu un atpakaļ starp lietotāja lietojumprogrammu un ierīci.

Ja lietojumprogrammai ir nepieciešama I/O darbība, notiek zvans vadītājam. Lai to izdarītu, lietojumprogramma var pieprasīt nolasīt datus no ierīces vai ierakstīt datus ierīcē. Un, ja ir nepieciešama kāda cita darbība, piemēram, aptaujāt vai kontrolēt ierīci, vai kas cits, tad t.s. IOCTL interfeiss (Device In-Out Control).

Mēs apsvērsim tieši šādu gadījumu virtuālajām ierīcēm, jo ​​​​bieži vien kāpēc mums draiverī ir nepieciešama virtuāla ierīce? Lai uz to varētu pārsūtīt datus, kurus vadītājs kaut kā var apstrādāt (kā aplikācijā neiespējami) un rezultātu atgriezt aplikācijā. Atgādiniet, ka parastais kodola draiveris, par kuru tika runāts iepriekš, neko no lietojumprogrammas nepaņēma un tur neko neatgrieza, bet vienkārši veica darbības, kas lietojumprogrammai nebija pieejamas.

Ja lietojumprogrammai ir nepieciešama I/O darbība, notiek zvans vadītājam. Šim nolūkam ts. IOCTL interfeiss (Device In-Out Control).

Zvanīšanas programma veic šādas darbības:

1) Faila atvēršana un tā deskriptora iegūšana:

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

Rezultātā, ja viss notika veiksmīgi, mēs iegūstam ierīces deskriptoru.

2) Darbības koda nosūtīšana vadītājam (ko darīt, vadītājs var veikt daudzas dažādas darbības):

izsaukt DeviceIoControl, deskriptors, darbības kods, ievades bufera adrese, ievades datu lielums, izvades bufera adrese, izvaddatu lielums, bufera adrese faktiskajam baitu skaitam

3) Faila aizvēršana un attiecīgi deskriptora atbrīvošana.

izsaukt CloseHandle ierīces rokturi

Lai pārsūtītu datus, moduļiem (lietojumprogrammai un draiverim) jāvienojas par mijiedarbības protokolu (darbības kodi, buferu struktūra - ievade un izvade).

Tas pats darbības kods tiek izmantots gan lietojumprogrammā, gan draiverī.

Darbības kodu lietojumprogrammā un draiverī var rakstīt heksadecimālā formā, vai arī varat izmantot makro CTL_CODE, kā tas tiek darīts piemēru laboratorijā. strādājiet failā common.inc.

Apskatīsim darbības koda piemēru no virtuālās ierīces draivera, kas tiek izmantots šajā laboratorijā. Nosaukums ir IOCTL_GET.

Virtuālās ierīces gadījumā faila karodziņš ir 0.

Ierīces veids — FILE_DEVICE_UNKNOWN = 22h

Piekļuves tiesības — FILE_READ_ACCESS + FILE_WRITE_ACCESS = 1 + 2 = 3 = 11 b

Funkcijas kods svārstās no 800h līdz FFFh. Mums ir 800h.

Buferizācijas metode - datu pārsūtīšanas veids starp lietojumprogrammu un draiveri (iespējami trīs):

Nelielam datu apjomam parasti tiek izmantots METHOD_BUFFERED (00b) - nelappuses atmiņā tiek piešķirts papildu buferis, kas ir pietiekams, lai ievietotu ievades un izvades buferus. Šī bufera adrese tiek ievietota IRP laukā AssociatedIrp.SystemBuffer. I/O dispečers pārņem datu pārrakstīšanu starp lietotāja buferi un papildu buferi.

Tieša piekļuve datiem (bez bufera) - METHOD_OUT_DIRECT (2) - izvadei vai METOD_IN_DIRECT (1) - ievadei; lauks no IRP — MdlAddress. Šis ir tiešs izsaukums — I/O pārvaldnieks apņemas saglabāt fiziskās lapas, kurās ir lietotāja režīma buferis. Tajā pašā laikā tas izveido palīgstruktūru MDL (Memory Descriptor List), lai aprakstītu fiksētās lapas. Un draivera izstrādātājs strādā ar MDL.

Piekļuve, izmantojot lietotāja līmeņa buferi - METHOD_NEITHER (3); lauks no IRP - SystemBuffer. I/O pārvaldnieks nodod draiverim virtuālās lietotāja režīma adreses. Un draiverī ar viņiem ir jāstrādā ļoti uzmanīgi, jo draiverim šajā gadījumā vajadzētu strādāt tikai izsaucošā pavediena kontekstā.

Kad lietojumprogramma draiverim nosūta darbības kodu, tiek startēts I/O pārvaldnieks. Tas ir atbildīgs par I/O pieprasījuma paketes (IRP) ģenerēšanu un nosūtīšanu draiverim tālākai apstrādei.

Mēs izskatīsim 3 veidu pieprasījumus:

IRP_MJ_CREATE — tiks nodots CreateFile,

IRP_MJ_DEVICE_CONTROL — pārsūtīs DeviceIoControl

IPR_MJ_CLOSE — uz CloseHandle

IRP sastāv no galvenes un piešķiršanas stekiem. I/O pārvaldnieks izveido I/O steka šūnu skaitu, kas ir vienāds ar pieprasījuma apstrādē iesaistīto draivera slāņu skaitu. Katram vadītājam ir atļauts piekļūt savai kaudzes vietai. Kad draiveris nodod IRP zemāka līmeņa draiverim, kaudzes rādītājs tiek pārvietots uz vietu, kas nepieciešama vadītājam. Un otrādi, pēc pieprasījuma apstrādes rādītājs tiek pārvietots uz augstākā līmeņa draivera šūnu. Rādītāja iegūšana, izmantojot funkciju - IoGetCurrentStackLocation ().

Katrā piešķiršanas stekā ir rādītājs uz DeviceObject un FileObject, kuram tika uzsākts pieprasījums. IRP vienmēr tiek saglabāti atmiņā bez lappuses.

Lai draiveris darbotos, tiek izveidoti un lietoti šādi objekti:

Vadītāja objekts;

Ierīču objekti;

Vadītāja posmi.

1) Vadītāja objekta izveide. Izveidots, kad draiveris tiek ielādēts tā palaišanas stadijā. Šajā brīdī tiek palaista funkcija DriverEntry un tiek aizpildīts MajorFunction masīvs, kā arī rādītājs uz ierīces objektu un no tā.

Ierīces objekts ietver:

Ierīces veids.

2) Izveidojiet simbolisku saiti uz ierīci. Lai objekts "ierīce" kļūtu pieejams lietotāja režīma kodam, draiverim ir jāizveido tam pieejamajā direktorijā "\ ???" (lietotāja režīma kods). cits objekts ir simboliska saite. Draiveris shablon.sys izveido simbolisku saiti "slshablon" uz savu ierīci "devshablon" direktorijā "\ ??", kuras vērtība ir virkne "\ Device \ devshablon".

Tādējādi jau ielādējot draiveri (mūsu gadījumā OS ielādes stadijā), mums atmiņā ir trīs objekti: draiveris "\ Driver \ shablon", ierīce "\ Device \ shablon" un simboliskā saite uz ierīce "\ ?? \ slshablon ".

3) Atvēršana. Pēc tam, kad lietojumprogramma tiek startēta, tiek izsaukts CreateFile. Ir saite uz ierīci. Ierīces objekta struktūra DEVICE_OBJECT izgūst informāciju par tās apkalpojošo draiveri. I/O pārvaldnieks ģenerē IRP I/O pieprasījuma paketi IRP_MJ_CREATE un nosūta to draiverim. Tādā veidā draiveris zina, ka lietotāja režīma kods mēģina piekļūt savai ierīcei. Ja draiveris neiebilst, tas atgriež veiksmes kodu. Mūsu vadītājam ir īpaša nosūtīšanas procedūra, kas reaģē uz šo IRP - DispatchCreateClose (ir apvienota procedūra ierīces atvēršanai un aizvēršanai). Tas satur STATUS_SUCCESS laukā Io.Status.Status un 0 laukā Io.Status.Information, jo šajā gadījumā nekas nav jāpārraida. Šī vadītāja atbilde ir signāls objekta pārvaldniekam izveidot virtuālais fails... Tādējādi procesa roktura tabulā tiek izveidots jauns elements ar rādītāju uz objektu "fails", un lietotāja režīma kodam tiek atgriezts jauns rokturis.

Ja viss ir kārtībā, mainīgajā hDevice saglabājam CreateFile atgriezto faila deskriptoru.

4) Darbības ieeja/izeja. Tagad mēs varam veikt darbības, lai vadītu šo ierīci, izsaucot DeviceIoControl funkcijas. Tā kā ierīces draiveris principā var veikt daudz dažādu uzdevumu, ir nepieciešams kaut kā atšķirt pieprasījumus. Šim nolūkam tiek izmantots otrais parametrs dwIoControlCode, ko sauc par I / O kontroles kodu, kas ir izveidots saskaņā ar noteiktiem noteikumiem.

Izmantojot ierīces deskriptoru, I/O pārvaldnieks izgūs informāciju par apkalpojošo draiveri, ģenerēs IRP_MJ_DEVICE_CONTROL tipa I/O pieprasījuma paketi un nosūtīs to draiverim. Draiveris izsauks attiecīgo DispatchControl procedūru, kurai kā parametri tiek nodots darbības kods un informācija par ievades un izvades buferu adresēm un izmēriem. Tas viss tiek paziņots ar IRP starpniecību. Procedūrā no IRP tiek ņemta nepieciešamā informācija: darbības kods, datu pārsūtīšanas bufera adrese.

Procedūra DispatchControl veic nepieciešamās darbības, mūsu gadījumā IRP paketes adrese no ESI reģistra Pēc tam rezultātu pārsūta caur izvades buferi uz lietojumprogrammu.

Līdzīgi kā iepriekšējā procedūrā, mēs caur IRP nododam pabeigšanas statusu un no draivera pārsūtīto baitu skaitu.

Lietojumprogrammā šie dati tiek formatēti un parādīti.

5) Noslēgšana. Kā tas jādara ar rokturiem, kas vairs nav vajadzīgi, izsaucot CloseHandle funkciju, aizveram ierīces rokturi.

6) Vadītāja izkraušana. Noņemiet simbolisko saiti un noņemiet ierīces objektu.

Komplekss (2) sastāv no divām programmām:

Lietojumprogramma, kas prasa draiverim IRP adresi un pēc tam izvada šo adresi uz standarta logs Windows.

Shablon.sys - vadītājs.

Shablon draiveris dara kaut ko tādu, ko nevar izdarīt lietotāja līmenī šajā gadījumā definē esi reģistra saturu, kad draiveris darbojas.

Lietojumprogramma izvades buferī saņem esi saturu, pārvērš to heksadecimālajai izvadei un izvada to standarta Windows logā.

Ja vēlaties iegūt informāciju no CMOS draiverī, jums ir nepieciešams:

Nosūtiet interesējošo CMOS nobīdi uz portu 70h;

Neliela kavēšanās;

Saņemiet informāciju no ostas 71h uz al.

Pēc tam ierakstiet šo informāciju izvades buferī.

Un lietojumprogrammā jums ir jāņem informācija no izvades bufera, ja nepieciešams, tā jāpārveido un jāparāda vai jāanalizē un, atkarībā no rezultāta, standarta logā jāparāda nepieciešamais teksts.

Šajā laboratorijā tiek pieņemts, ka draiveris ir pastāvīgi instalēts operētājsistēmā Windows, izmantojot .inf failu, izmantojot vadības paneli — aparatūras instalēšana: pievienot jaunu ierīci, manuāli instalēt, rādīt visas ierīces, izveidot disku, pārlūkot, lai atlasītu .inf failu (draiverim ir jābūt tajā pašā mapē).

Lai pārbaudītu, vai draiveris ir instalēts, vadības panelī atlasiet Sistēma, Aparatūra, Ierīču pārvaldnieks.

1.3 Piekļuve esošajiem draiveriem no lietotāja režīma lietojumprogrammām

Lietojumprogrammas algoritms, kas strādā ar draiveri

Lai strādātu ar draiveri, lietotāja režīma lietojumprogrammai ir jāiegūst draivera manipulators (rokturis). Šo manipulatoru var iegūt, izmantojot CreateFile vai CreateFileA API funkciju, kas darbojas ar ASCII rakstzīmēm. Tālāk tiek izmantota API funkcija DeviceIoControl, kurai kā viens no parametriem tiek nodots IOCTL kods. IOCTL kods ir kontroles kods, ar kuru draiveris uzzina par darbību, kuru lietojumprogramma pieprasa veikt, par parametru nodošanas metodi un piekļuves tiesībām, kas lietojumprogrammai ir nepieciešamas šīs darbības veikšanai. Pēc tam, kad pieteikums ir zvanījis

IRP_MJ_DEVICE_CONTROL tiek nosūtīts uz DeviceIoControl draiveri. Pēc pieprasījumu apstrādes kontrole tiek atgriezta lietojumprogrammā, un lietojumprogrammai atliek parsēt vadītāja atbildi un aizvērt atvērtos rokturus.

Piemērs

Tālāk esošajā piemērā lietotāja režīma lietojumprogramma nosūta IOCTL_DISK_GET_PARTITION_INFO_EX pieprasījumu failu sistēmas draiverim, parsē saņemto informāciju un izvada cietā diska nodalījuma formātu.

#iekļauts

#iekļauts

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, "CreateFileA error!", "Error", 0);

if (DeviceIoControl (

/ * 1 * / (HANDLE) hDevice,

/ * 5 * / & piPartitionInfo,

/ * 6 * / izmērs (piPartitionInfo),

/ * 7 * / & dwBytesReturned,

if (piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)

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

cits, ja (piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)

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

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

MessageBoxA (NULL, "DeviceIoControl kļūda", "Kļūda", 0);

CloseHandle (hDevice);

Piemēra parsēšana

Tiek deklarēti mainīgie, kas nepieciešami, lai lietojumprogramma darbotos. PARTITION_INFORMATION_EX ir struktūra, kas apraksta informāciju par sadaļa grūti disks.

typedef struktūra (

) PARTITION_INFORMATION_EX;

Šajā programmas daļā tiek izsaukta funkcija CreateFileA, lai iegūtu rokturi, kas tiek ierakstīts mainīgajā hDevice.

Funkciju DeviceIoControl sauc sinhroni. Viņai tas tiek nosūtīts:

ierīces deskriptors;

IOCTL kods IOCTL_DISK_GET_PARTITION_INFO_EX;

rādītājs uz ievades buferi, mūsu gadījumā NULL;

ievades bufera izmērs;

rādītājs uz izvades buferi;

izvades bufera lielums;

rādītājs uz mainīgs patīk DWORD, kas saglabās atgriežamo baitu skaitu;

rādītājs uz OVERLAPPED struktūru, kas tiek izmantota asinhronais zvans funkcijas.

Pēc vadības atgriešanās, sekmīgas funkcijas izpildes gadījumā informācija par nodalījumu tiek saglabāta PARTITION_INFORMATION_EX struktūrā.

Tiek veikta informācijas analīze un izvadīšana. Pirms kontroles atgriešanas operētājsistēma atvērtos rokturus var aizvērt. Funkcija CloseHandle (__ in HANDLE) ļauj to izdarīt. Ja deskriptori nav aizvērti, operētājsistēma to izdarīs jūsu vietā.

2. Kursa darba realizācija

2.1. 1. darbība

Vingrinājums: 1. Izstrādājiet kodola draiveri ar piekļuvi portiem, veicot darbības atbilstoši opcijai un izvadot informāciju logā Debug View (pēc izvēles), kā arī lietojumprogrammu, kas palaiž draiveri.

Saraksts Kurs_test.cpp

#include "stdafx.h"

#include "windows.h"

#include "stdlib.h"

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

if (hSCManager! = 0) (

// reģistrēt spēlētāju SCManager tabulā

if (hService! = 0) (

// Dzēst draivera ierakstu

DeleteService (hService);

CloseServiceHandle (hService);

atgriezties 0;

}

Beeper.sys saraksts

#iekļauts

#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

spēkā neesošs DO_DELAY (starplaiks) (

garš i, j;

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

}

spēkā neesošs DO_BIG_DELAY (starplaiks) (

DO_DELAY (2 * laiks);

}

tukšs ksilofons (int nPitch) (

int nTone = TIMER_FREQUENCY / nPitch

_asm (

mov al, 10110110b; // rakstīt kontroles vārdu 43h

out 43h, al; // Skaņas vadības kanāls — loģika, izmantojot taimera signālu un programmatūras kontrolētos sistēmas porta bitus

mov eax, nTone; // ierakstiet pārrēķināto frekvenci uz 42

out 42h, al; // augšējā daļa

mov al, ah; // zemā daļa

ārā 42h, al

in al, 61h; // mainiet evakuācijas secību - konvertējiet pēdējos bitus uz vieniem

; // bits 0 - atļauja izmantot skaļruni

; // 1. bits - atļauja savienot taimeri-2 ar skaļruni

vai al, 00000011b; skaļrunis IESLĒGTS

ārā 61h, al

}

DO_DELAY (0x7f);

_asm (

in al, 61h

un al, 11111100b; skaļrunis IZSLĒGTS

ārā 61h, al

}

}

Ksilofons (PITCH_C);

Ksilofons (PITCH_С);

Ksilofons (PITCH_С);

Ksilofons (PITCH_С);

Ksilofons (PITCH_С);

Ksilofons (PITCH_С);

Ksilofons (PITCH_С);

atgriezt STATUS_DEVICE_CONFIGURATION_ERROR;

}

2.2 2. darbība

Izstrādājiet virtuālo ierīces draiveri, kas ļauj veikt darbības, kas ir pieejamas tikai nulles privilēģiju līmenī (saskaņā ar opciju), un pēc tam pārsūtīt rezultātus uz lietojumprogrammu trešajā privilēģiju līmenī to parādīšanai.

Lietojumprogrammā rezultāts tiek izvadīts standarta Windows logā.

Saraksts shablon.c

#iekļauts // dažādas NT definīcijas

#iekļauts

UNICODE_STRING g_usDeviceName;

UNICODE_STRING g_usSymbolicLinkName;

spēkā neesošs DriverUnload (IN PDRIVER_OBJECT pDriverObject) (

IoDeleteSymbolicLink (& g_usSymbolicLinkName);

IoDeleteDevice (pDriverObject-> DeviceObject);

}

NTSTATUS DispatchCreateClose (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// Apstrāde MJ_CREATE MJ_CLOSE

pIrp-> IoStatus.Statuss = STATUSS_SUCCESS;

pIrp-> IoStatuss.Informācija = 0;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

atgriezt STATUS_SUCCESS;

}

NTSTATUS DispatchControl (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// tiek apstrādāta IRP_MJ_DEVICECONTROL

NTSTATUS statuss;

int regEsi;

// virziet rādītāju uz IO_STACK_LOCATION, tajā uz IoControlCode

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

// Salīdziniet darbības kodu un, ja tas ir mūsu klients, tad:

_asm (

mov eax, 0

kustība, 10h

ārā 70h, al

in al, 71h

cbw

cwde

mov regEsi, eax

}

// tā ir mūsu funkcionalitāte - mēs paņemam esi reģistra saturu

// ierakstiet to sistēmas buferī

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

pIrp-> IoStatuss.Informācija = 4; // un iestatiet rezultāta lielumu

statuss = STATUSS_SUCCESS;

) else status = STATUSS_INVALID_DEVICE_REQUEST;

pIrp-> IoStatus.Statuss = statuss;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

atgriešanās (statuss);

}

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

NTSTATUSS statuss;

PDEVICE_OBJECT pDeviceObject;

// inicializē Unikoda virknes

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

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

// aizpildiet draivera objektu - skaidri paskaidrojiet vadītājam, kura funkcija ko apstrādā

pDriverObject-> DriverUnload =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

// izveidot virtuālās ierīces loģisku objektu

Statuss = IoCreateDevice (pDriverObject, 0 un g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE un pDeviceObject);

if (! NT_SUCCESS (Statuss)) (atgriezt Statusu;)

// izveidot simbolisku saiti uz ierīci

Statuss = IoCreateSymbolicLink (& g_usSymbolicLinkName, & g_usDeviceName);

ja (! NT_SUCCESS (statuss)) (

IoDeleteDevice (pDeviceObject);

atgriešanas statuss;

}

atgriešanas statuss;

}

Saraksts kurss2.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) (

ROKĀT hDevice;

BOOL DevControl;

DWORD dwBytesReturned;

char stroka;

/*

Iespējas:

lpFileName Nulles beigu virknes adrese, kas norāda izveidojamā vai atveramā objekta nosaukumu.

dwDesiredAccess Piekļuves veids objektam. Šim parametram var būt jebkura šādu vērtību kombinācija:

Vērtība: Apraksts:

0 Nosaka vaicājumu par objekta pieejamību norādītajā ierīcē. Lietojumprogramma var pieprasīt ierīces atribūtus, tai nepiekļūstot.

GENERIC_READ Norāda lasīšanas piekļuvi no objekta. Datus var nolasīt no faila un pārvietot faila rādītāju. Apvienojiet ar GENERIC_WRITE, lai iegūtu lasīšanas un rakstīšanas piekļuvi.

GENERIC_WRITE Norāda rakstīšanas piekļuvi objektam. Datus var ierakstīt failā un pārvietot faila rādītāju. Apvienojiet ar GENERIC_READ, lai iegūtu lasīšanas un rakstīšanas piekļuvi.

dwShareMode Objekta koplietošanas piekļuves režīms. Ja vērtība ir nulle, objektu nevar koplietot vairākas programmas. Visas turpmākās darbības objekta atvēršanai neizdosies, līdz objekta rokturis netiks aizvērts. Lai koplietotu objektu, izmantojiet šādu vērtību kombināciju:

Vērtība: Apraksts:

FILE_SHARE_DELETE Ļauj objekta atvērtai secībai pieprasīt dzēšanas piekļuvi.

FILE_SHARE_READ Ļauj objekta atvērtai secībai pieprasīt lasīšanas piekļuvi.

FILE_SHARE_WRITE Ļauj objekta atvērtai secībai pieprasīt rakstīšanas piekļuvi

lpSecurityAttributes SECURITY_ATTRIBUTES struktūras adrese, kas nosaka, vai funkcijas atgriezto turi var mantot pakārtotais process.

Ja lpSecurityAttributes ir NULL, deskriptoru nevar mantot.

dwCreationDisposition

Vērtība: Apraksts:

CREATE_ALWAYS Vienmēr izveido jaunu failu.

Ja fails pastāv, funkcija pārraksta failu.

CREATE_NEW Izveido jaunu failu. Funkcija neizdosies, ja fails pastāv.

OPEN_ALWAYS Vienmēr atvērt failu. Ja fails neeksistē, funkcija to izveido tāpat, ja dwCreationDisposition būtu CREATE_NEW.

OPEN_EXISTING Atver failu. Funkcija neizdosies, ja fails neeksistē.

TRUNCATE_EXISTING Atver failu un saīsina to līdz nullei. Funkcija neizdosies, ja fails neeksistē.

dwFlagsAndAttributes Failu karodziņi un atribūti.

Kad tiek atvērts esošs fails, CreateFile ignorē veidnes failu.

Atgriešanas vērtības:

Ja funkcija ir veiksmīga, norādītajam failam tiek atgriezts atvērts rokturis. Ja norādītais fails pastāv pirms funkcijas izsaukuma un dwCreationDisposition parametrs ir CREATE_ALWAYS vai OPEN_ALWAYS, GetLastError izsaukums atgriezīs ERROR_ALREADY_EXISTS pat tad, ja funkcija ir veiksmīga. Ja fails neeksistē pirms izsaukuma, GetLastError atgriezīs 0 (nulle).

Kļūdas gadījumā funkcija atgriezīs INVALID_HANDLE_VALUE. Lai iegūtu papildinformāciju par kļūdu, zvaniet uz GetLastError.

*/

if (hDevice! = 0) (

/*

hDevice ir CreateFile atgrieztais rokturis.

dwIocontrolCode ir vērtība, kas norāda veicamo darbību.

lpInBuffer ir bufera adrese, kas satur datus, kas nepieciešami dwIoControlCode norādītās darbības veikšanai. Ja darbībai nav nepieciešami dati, varat nodot NULL.

nInBufferSize ir datu lielums baitos buferī, uz kuru norāda lpInBuffer.

lpOutBuffer ir bufera adrese, kas tiks aizpildīta ar izvadi, kad darbība būs veiksmīga. Ja darbība nenodrošina izvadi, šim laukam OBLIGĀTI ir jābūt NULL.

nOutBufferSiz ir bufera lielums baitos, uz kuru norāda lpOutbuffer.

lpBytesReturned ir dword mainīgā adrese, kas saņems lpOutBuffer ievadīto datu lielumu.

lpOverlapped ir OVERLAPPED struktūras adrese, ja vēlaties, lai darbība būtu asinhrona. Ja vēlaties gaidīt, līdz darbība tiks pabeigta, šajā laukā ierakstiet NULL.

*/

wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // ierakstiet rindiņu buferī (adwOutBuffer -> stroka)

CloseHandle (hDevice);

atgriezties 0;

}

draivera kodola datorprogramma

2.3 3. darbība

Saraksts kurss.cpp

#iekļauts

#iekļauts

#iekļauts

{

DWORD junk;

0, // faila atribūti

atgriezties (FALSE);

}

0, // ievades bufera izmērs

CloseHandle (hDevice);

atgriešanās (bResult);

}

int main (int argc, char * argv)

{

/*

typedef struktūra (

PARTITION_STYLE PartitionStyle; // sadaļas formāts

LARGE_INTEGER StartingOffset; // sadaļas sākuma nobīde

LARGE_INTEGER Partition Length; // nodalījuma izmērs

DWORD nodalījuma numurs; // sadaļas numurs

BOOLEAN RewritePartition; // ja sadaļa ir pārrakstāma, tad TRUE

savienība (

PARTITION_INFORMATION_MBR Mbr; // papildu informācija par sadaļu MBR stils

PARTITION_INFORMATION_GPT Gpt; // papildu informācija par sadaļu GPT stils

};

) PARTITION_INFORMATION_EX;

*/

BOOL bRezultāts;

sistēma ("PAUSE");

atgriešanās ((int) bResult);

}

2.4 4. darbība

1) Apvienojiet visas 1.–3. darbībā izstrādātās funkcijas vienā programmu komplektā.

Galīgajam kompleksam vajadzētu izskatīties šādi:

- Mūsu draiveris ir iebūvēts sistēmā un tiek ielādēts Windows sāknēšanas fāzē.

- Lietojumprogramma prasa vadītājam nepieciešamo informāciju (norādīta 2. posmā), vadītājs pārraida šo informāciju, savukārt skaļrunis tiek ieslēgts arī uz brīdi un tiek atskaņota melodija (norādīta 1. posmā). Pēc tam lietojumprogramma veic pieprasījumu sistēmā esošajam vadītājam (saskaņā ar 3. posma iespēju).

2) Sastādiet paskaidrojuma rakstu, kurā jāapraksta visi 4 posmi, kā arī katra posma teorētiskā informācija.

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

{

ROKĀT hDevice; // pārbaudītās ierīces deskriptors

BOOL bRezultāts; // rezultātu karodziņš

DWORD junk;

hDevice = CreateFile (TEXT ("\\\\. \\ c:"), // ierīce, kas jāatver

VISPĀRĪGI_LASĪT | GENERIC_WRITE, // piekļuve ierīcei

FILE_SHARE_READ | FILE_SHARE_WRITE, // koplietošanas režīms

NULL, // noklusējuma drošības atribūti

OPEN_EXISTING, // atrašanās vieta

0, // faila atribūti

NULL); // nekopējiet faila atribūtus

if (hDevice == INVALID_HANDLE_VALUE) (// nevar atvērt ierīci

printf ("Izveidot failu () neizdevās! \ n");

atgriezties (FALSE);

}

bResult = DeviceIoControl (hDevice, // pieprasītā ierīce

IOCTL_DISK_GET_PARTITION_INFO_EX, // tiek veikta darbība

NULL, // rādītājs uz ievades buferi

0, // ievades bufera izmērs

pex, sizeof (* pex), // izvades buferis

& junk, // atgriežamo baitu skaits

(LPOVERLAPPED) NULL); // sinhronizēt ieeju/izvadi (I/O)

CloseHandle (hDevice);

atgriešanās (bResult);

}

int _tmain (int argc, _TCHAR * argv) (

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

ROKĀT hDevice;

BOOL DevControl;

DWORD dwBytesReturned;

LPVOID adwInBuffer, adwOutBuffer;

char stroka;

PARTITION_INFORMATION_EX pex; // ierīces struktūra

BOOL bRezultāts;

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

if (hDevice! = 0) (

DevControl = DeviceIoControl (hDevice, IOCTL_GET un adwInBuffer, izmērs (adwInBuffer) & adwOutBuffer, izmērs (adwOutBuffer), & dwBytesReturned, NULL);

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

wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // ierakstiet rindiņu buferī (adwOutBuffer -> stroka)

if (stroka == "00000100") MessageBox (NULL, "Atrasts 1,44 Mb", "Jermakova FDD skeneris", MB_OK);

else MessageBox (NULL, "Nav atrasts", "Jermakova FDD skeneris", MB_OK);

hSCManager = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE);

if (hSCManager! = 0) (

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

// Reģistrējiet mūziķi SCM tabulās

hService = CreateService (hSCManager, "beeper11", "Nice Melody Beeper11",

SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,

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

if (hService! = 0) (

StartService (hService, 0, NULL);

DeleteService (hService);

CloseServiceHandle (hService);

) else MessageBox (NULL, "Nevar" t reģistrēt draiveri ", NULL, MB_ICONSTOP);

CloseServiceHandle (hSCManager);

) else MessageBox (NULL, "Nevar" izveidot savienojumu ar SCManager ", NULL, MB_ICONSTOP);

) else MessageBox (NULL, "Nevar" sūtīt kontroles kodu ", NULL, MB_OK);

CloseHandle (hDevice);

) else MessageBox (NULL, "Izstrādātājs nav klāt", NULL, MB_ICONSTOP);

bResult = GetPartitionNumber (& pex);

if (bResult) (printf ("PartitionNumber =% d \ n", pex.PartitionNumber);

) else (printf ("GetPartitionNumber () neizdevās. Error% d. \ n", GetLastError ());)

sistēma ("PAUSE");

atgriešanās ((int) bResult);

}

3. Lietojumprogrammas darbība

3.1.attēls. Vadītājs no 2. darbības

3.2.attēls. Vadītājs no 3. darbības

Ievietots vietnē Allbest.ru

Līdzīgi dokumenti

    Kodola režīma draivera un lietotāja lietojumprogrammas mijiedarbības mehānismi: daudzslāņu draivera arhitektūra, datu slēpšanas algoritms, draivera un lietojumprogrammas mijiedarbība, lietotāja interfeiss failu piekļuves filtrēšanas programmas.

    kursa darbs, pievienots 23.06.2009

    Windows NT I/O arhitektūra. Iekšējā organizācija USB kopne... Būtiska WDM draivera modeļa īpašība. Izstrādājamā draivera ieejas punkti, koda ievietošana atmiņā, draivera instalēšana sistēmā. Vadītāja koda ieviešana C.

    kursa darbs, pievienots 27.09.2014

    Lietotāja režīma struktūra, kas ļauj lietotājam mijiedarboties ar sistēmu. Kodola režīma apraksts, kas nodrošina lietotāja aplikāciju (programmu) drošu izpildi. Windows NT aparatūras abstrakcijas slānis.

    prezentācija pievienota 23.10.2013

    Windows 98 kodols. 16 bitu kodola moduļu loma. Veiktspējas problēmas. Kooperatīva un preventīva daudzuzdevumu veikšana. Uzlabota resursu izmantošana operētājsistēmā Windows 98. WordArt izmantošana. MS Outlook Express: ziņojumu izveide un sūtīšana.

    tests, pievienots 14.04.2005

    Visu datora ierīču kopīga darbība un piekļuve tā resursiem. Grafiskās operāciju zāles koncepcija un funkcijas Windows sistēmas... Fons Windows serviss... Kontrole failu sistēma... Plug and Play tehnoloģija. Grafiskais interfeiss Windows.

    tests, pievienots 22.01.2011

    Operētājsistēmas īpašības. Windows attīstības vēsture. Salīdzinošās īpašības Windows versijas... Elementi un Windows rīki XP. Lietojumprogrammas operētājsistēmā Windows XP. Darbvirsma un portatīvie datori darbojas Windows.

    ziņojums pievienots 16.10.2011

    Kodola režīma draivera un vadības lietojumprogrammas izmantošana, lai izveidotu sistēmas pavedienus. Datu apstrādes simulēšana un aizkaves organizēšana. Draiveru izstrāde C++ valodā. Testēšanas stenda konfigurācija. Aizkaves un taimera darbības izmaiņu precizitāte.

    kursa darbs, pievienots 24.06.2009

    Windows operētājsistēmas iekšējās struktūras priekšdarbi. NT arhitektūra un galvenā struktūra. Metodes funkciju ignorēšanai kodola režīmā un koristuvach režīmā. Izpratne par vadītāju. I / O paketes. Windows sistēmu stabilitātes un drošības novērtējums.

    kursa darbs, pievienots 01.02.2014

    Ugunsmūra jēdziens, veidi un darbība. Iebūvēts Windows ugunsmūris. Windows XP SP2, piekļuve ugunsmūra iestatījumiem Windows XP 2. servisa pakotne. Windows Vista, atļautā trafika. Windows 7, aktīvie profila iestatījumi. Personīgais ugunsmūris, testa līmeņi.

    abstrakts, pievienots 19.11.2010

    Iepazans ar tehniskajiem parametriem personālais dators... Operētājsistēmas instalēšana un Windows draiveri 7. Metodes logu tīrīšana XP Professional SP3. Operētājsistēmas atkopšanas metodes. Performance Microsoft instalācijas Office 2010.

Microsoft operētājsistēmā Windows 10 lielu uzmanību pievērš drošībai. Viens no svarīgākajiem sistēmas elementiem ir " Windows aizsargs”, Bet viņš nespēj tikt galā ar visiem draudiem. Jo īpaši pēdējā laikā popularitāti gūst Ransomware vīrusi, kuru slavenākās reinkarnācijas ir ļaunprogrammatūra Petja un. Korporācija Microsoft ir ieviesusi kodola izolācijas un atmiņas integritātes līdzekļus operētājsistēmā Windows 10, lai cīnītos pret Ransomware vīrusiem. Pēc noklusējuma tie ir atspējoti.

Satura rādītājs:

Kas ir kodola izolācija un atmiņas integritāte

Serdes izolācija ir papildu aizsardzības process, ko nodrošina datora procesu pasargāšanas metode no operētājsistēmas un ierīces. Pateicoties šīm darbībām, ir iespējams izvairīties no operētājsistēmas darbības graušanas, kad datorā nokļūst vīrusi.

Atmiņas integritāte ir aizsargfunkcija, kas pavada kodola izolāciju, kuras mērķis ir ierobežot nezināmu potenciāli bīstamu programmu piekļuvi procesiem ar augsts līmenis drošību.

Svarīgi! Kodola izolācijas funkcija var darboties tikai tad, ja tam ir pietiekami nosacījumi no datora aparatūras puses. V BIOS iestatījumi virtualizācijas tehnoloģijai jābūt aktīvai, kā dēļ dators, kurā darbojas operētājsistēma Windows 10, var darbināt dažādas lietojumprogrammas virtuālajā konteinerā, ierobežojot to piekļuvi no galvenajiem sistēmas komponentiem.

Kā iespējot kodola izolāciju un atmiņas integritāti

Operētājsistēmas Windows 10 iestatījumi ļauj pilnībā kontrolēt datora drošības līdzekļus. Izmantojot Windows 10 iestatījumus, varat iespējot kodola izolāciju un atmiņas integritāti, kā norādīts tālāk.


Kā minēts iepriekš, ja jūsu datora aparatūra neatbalsta virtualizāciju, šī funkcija nedarbosies. Kad tas ir iespējots, lietotājs redzēs ziņojumu “Nevar nodrošināt atmiņas integritāti. Iespējama nesaderība." Ja parādās šis ziņojums, ieteicams doties uz BIOS un pārbaudīt, vai funkcija ir iespējota. Droša sāknēšana(Sāknēšanas režīms).

Kā atspējot kodola izolāciju un atmiņas integritāti

Jaunas operētājsistēmas funkcijas, kas nopietni ietekmē tās darbību, vienmēr riskē radīt problēmas ar datoru. Kodola izolācijas funkcija nav izņēmums. Lietotāji, kuri to jau ir izmēģinājuši, Microsoft forumos atzīmē, ka viņiem rodas problēmas, palaižot vairākas spēles un programmas. Vienīgais veids, kā novērst šo problēmu, ir atspējot kodola izolāciju un atmiņas integritāti. Iespējams, turpmākajos atjauninājumos lietojumprogrammu izstrādātāji vai Microsoft novērsīs šo nesaderību.

Ir 3 veidi, kā atspējot kodola izolāciju un atmiņas integritāti: