Toitehaldus Windowsis. Toitehaldus Windows Powercfg-s on aegunud kerneli helistaja

Windows Defenderi turvakeskus, sealhulgas uus jaotis"Seadme turvalisus", mis pakub täiustatud turbetööriistade, näiteks "Kernel Isolation" haldamist.

Core isolation on virtualiseerimisel põhinev turbetehnoloogia, mis pakub täiendav tase kaitse intellektuaalsete rünnakute eest. Mälu terviklikkus on üks tuuma eraldamise tehnoloogia komponente – funktsioon, mis on mõeldud sisestamise vältimiseks pahatahtlik kood kõrge turvalisusega protsessides. Kaitse tagab asjaolu, et kerneli virtuaalmälu leht hakkab täitma alles pärast edukat terviklikkuse kontrolli.

Vaatame, kuidas lubada Windows 10 aprilli 2018 värskenduses mälu terviklikkuse funktsioon arvuti turvalisuse parandamiseks.

Mälu terviklikkuse lubamine

  • Avage Windows Defenderi turvakeskus.
  • Valige jaotis "Seadme turvalisus".
  • Jaotises Kerneli eraldamine klõpsake linki Kerneli eraldamise üksikasjad.
  • Liigutage mälu terviklikkuse lüliti aktiivsesse asendisse.

Pärast nende toimingute sooritamist peate muudatuste jõustumiseks arvuti taaskäivitama.

Märge Märkus. Selle funktsiooni toimimiseks peab teie protsessor toetama virtualiseerimistehnoloogiaid. Samuti peab virtualiseerimine olema BIOS-is või UEFI-s lubatud. Vastasel juhul pole funktsioon saadaval.

Kerneli isoleerimise probleemide lahendamine

Kui tuuma eraldamine on lubatud, võib mõnel juhul tekkida mõne rakenduse ühilduvusprobleeme. Probleemi lahendamiseks peate funktsiooni keelama.

Kui proovite Windows Defenderi turbekeskuses mälu terviklikkust keelata, kuid suvand on muutunud halliks ja kuvatakse teade "Seda sätet haldab teie administraator", saate selle funktsiooni siiski süsteemiregistri abil keelata.

Märge: Registri vale muutmine võib põhjustada tõsiseid probleeme. Soovitatav on luua varukoopia Windowsi register enne nende toimingute sooritamist. Varukoopia salvestamiseks valige registriredaktori menüüst Fail > Ekspordi.

  • Vajutage kombinatsiooni Windowsi võtmed+ R, et avada aken Run.
  • Tippige regedit ja klõpsake registriredaktori käivitamiseks nuppu OK.
  • Minge järgmisele teele:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity
  • Topeltklõpsake kirjel Lubatud.
  • Muutke väärtust 1-lt 0-le.
  • Klõpsake nuppu OK.

Keelamiseks võite kasutada ka valmis

Küsimus: Millal pikk töö arvutist või puhkerežiimist väljumisel kaob startmenüüs olev font


Kui arvuti töötab pikka aega või ärkab unerežiimist, muutub menüü Start selliseks.

Kuidas seda parandada? Aita mind palun..

Vastus: OS juba uuesti installitud ja värskendatud (

Küsimus: Kuidas ma saan panna oma arvuti S1 tüüpi puhkeolekusse ("Ooterežiim")?


Kumbki sisse lülitatud lauaarvuti, ega ka sülearvutis ei saa ma aru, kuidas arvuti unerežiimi panna, näiteks S1.

"powercfg /a" käivitamise tulemus

Selles süsteemis on saadaval järgmised unerežiimid:
Ooterežiim (S3)

Järgmised puhkeolekud pole selles süsteemis saadaval:
Ooterežiim (S1)

Ooterežiim (S2)
Süsteemi püsivara ei toeta ooterežiimi.

talveunestus
Talveunerežiim pole lubatud.

Ooterežiim (ühendatud)
Süsteemi püsivara ei toeta ooterežiimi.

Hübriidne uni

Kiire käivitamine
Talveunerežiim pole saadaval.

Vastus: Laske arvutil paar minutit jõude seista, seejärel pange see magama ja äratage üles.

Sündmuste logis:
Toiming => loo kohandatud vaade
Kuupäeva elemendis määrake näiteks kaheminutiline intervall ja vaadake, mis juhtus.

Mul pole enam ideid.

Noh, kontrollige arvutiga ühendatud draivereid ja seadmeid

K: Unest ärkamine kell 4 hommikul


Peaaegu igal õhtul ärkab arvuti ja äratab mind.
seadmehalduris, Võrguadapterid, märkimata "ärata võlupakettidega".
lülitage äratustaimerid välja toiteseadetes.
sisse käsurida käsk powercfg /waketimers näitab seda.

c:\>powercfg /waketimers
Pärandtuuma helistaja seatud taimer kehtib kuni 4:14:46 01/09/2016.
Põhjus:

Abi. Kes on süüdi ja mida teha?

Vastus: lõpuks ravis selle haiguse välja:

Juhtpaneel -> Turvalisus ja hooldus -> Hooldus -> Automaatne hooldus -> Muuda hooldussätteid -> tühjendage ruut "Luba hooldustoimingul arvuti äratada..."

Teema: Minu arvuti lülitub öösel juhuslikult sisse


Hiljuti (umbes 1 ... 2 kuud), umbes 30 ... 60 minutit pärast arvuti puhkerežiimi panemist (et saaksite hommikul katkestamise hetkest tööd jätkata), lülitub see spontaanselt sisse. Töö lõpetan kella 12 paiku öösel, st. sisselülitamine toimub 0:30...1:00 öösel. Sel juhul jääb monitor pimedaks. Tõusen voodist, liigutan hiirt - monitor lülitub sisse, sisenen profiili tavarežiimis, panen selle tagasi unerežiimi - sel ööl see enam sisse ei lülitu.

Arvutisüsteemis Win7 on viirusetõrje MS Security Esentials. Käivitasin mitu korda praegust (värskelt alla laaditud) kõvendusutiliidid mbar ja DrWeb Cureit - leidsin paar byaki, kuid spontaanne aktiveerimine jäi siiski alles. See näeb välja nagu viirus, mis ühendab mu arvuti DDOS-i rünnakutega. Lisaks blokeerib Google aeg-ajalt juurdepääsu minu IP-st tuleva kahtlase liikluse tõttu. Seda on juhtunud juba päris pikka aega (üle aasta), kuid arvuti spontaanset sisselülitamist märkasin alles hiljuti.

Tegelikult on küsimus selles, et kui probleem on teada ja suhteliselt lihtsalt ravitav, siis laadin soovitatud tarkvara alla, skaneerin ja postitan. Kui probleem on keerulisem, siis ma ei hakka ennast ega kohalikke gurusid lollitama ja süsteemi rumalalt ümber korraldama.

Vastus: Falconist millest ma päris aru ei saanud...

Sõnum saatjalt Falconist

pärast arvuti unerežiimi panemist ... lülitub see spontaanselt sisse

Puhke- ja talveunerežiim 7-s on täiesti erinevad asjad. Unerežiimile lülitumiseks vajutage lihtsalt klaviatuuril unerežiimi nuppu. Kui klõpsate nuppu Start ja hõljutate kursorit suvandi Shut down kõrval oleva noole kohal, kuvatakse menüü, kus on ka puhkerežiim. ja talveunestus. Talveunerežiimi ajal lülitub arvuti vooluvõrgust välja samamoodi nagu väljalülitamisel, kuid arvuti sisselülitamisel saab tööle asuda samamoodi nagu pärast unerežiimi.
Aga sa küsisid millegi muu kohta. Kas kontrollisite ülesannete ajakava?

Küsimus: Arvuti ärkab öösel


Head päeva kõigile. Mul on see probleem juba käes. Iseenesest arvuti ärkab öösel, see maksab Windows 10, enne seda oli 7, sellist probleemi polnud, nii et valisin selle konkreetse jaotise.
Mis on juba 2 päeva tagasi tehtud:
1. Sündmuste vaatajas leidsin põhjuse: Taimer – Täidetakse ajastatud ülesanne "NT TASK\Microsoft\Windows\UpdateOrchestrator\Reboot", mis palus arvutil puhkerežiimist äratada.
Läksin Task Schedulerisse, leidsin selle ülesande ja eemaldasin linnukese üksuse juurest: Tingimused – äratage arvuti ülesande täitmiseks.
2. Ma läksin saidile powercfg.cpl – Toiteplaani seadistamine – Muuda Lisavalikud Toide - Unerežiim - Luba äratustaimerid - KEELA.

Täna õhtul olukord kordus, kuid sündmuste vaatajas leidsin ainult:

Süsteem väljus vähese energiatarbega olekust.

Uneaeg: 2016-10-29T21:38:38.657073700Z
Äratusaeg: 2016-10-29T21:58:34.625754700Z

Väljundallikas: andmed puuduvad

3. Seadmehalduris eemaldage hiirelt, klaviatuurilt, võrgukaardilt ja mujalt, kus ma leidsin, märkeruut "luba sellel seadmel arvuti ooterežiimist äratada"

Aidake lahendada see probleem Ma ei tea enam, kuhu kaevata...

Vastus:

Sõnum saatjalt GoLeMjkeee

Tasub iga päev kell 2-00

Muutke päevaseks.

Sõnum saatjalt GoLeMjkeee

aga linnuke .... pole seda väärt.

10-ka ta on, iseloomuga.

Küsimus: Kuidas peita unerežiimist ärgates ekraani nupuga "Logi sisse"?


Windows 10 Pro 1607.
Kui väljute puhkerežiimist, palub Windows teil vajutada "Logi sisse". Ilmub ärkamisel sinine ekraan kasutajanime kirjaga ja selle all nupp "Logi sisse". Parool pole määratud, kasutaja on süsteemis ainsana administraatori õigustega. Laadimisel on kõik korras, ei mingeid ekraane ja nupuvajutusi, ainult töölaud.

valikutes - Kontod- Sisselogimisvalikutel puudub üksus "Sisselogimine on vajalik".
Aknas Kasutajakontod vahekaardil Kasutajad on märkeruut "Nõua kasutajanime ja parooli" märkimata.
Toiteplaani seadetes pole valikut „Nõua ärkamisel parooli”.

Kuidas eemaldada unerežiimist väljumisel nupp "Logi sisse", et arvuti käivitaks automaatselt töölaua, minnes sellest aknast mööda?

Vastus: unerežiimi eemaldamine

Küsimus: Windows 8.1 lülitub puhkerežiimis välja


Tere.
Mul on probleem unerežiimiga. Arvuti lülitub unerežiimis täielikult välja. Need. toit on täielikult kadunud. Varem vilkus süsteemiploki pirn magamisasendis, nüüd täitsa “optuhat” ja ka hiir usb-ga, klaviatuur kustub ja sisse lülitada saab ainult toitenupuga ja loomulikult kogu infot pole salvestatud.
Lugesin Internetist palju teemasid, kuid mitte ühtegi probleemi pole minu omaga sarnane.
Panen kohe kirja arvuti omadused: emaplaat ASUS p8h67, Radeoni video HD7850 (asus), Intel i5 2550k, 8gb RAM, SSD Räni võimsus s55 120gb, HDD WD 500gb.
Installisin Windows 8.1, see on väga kaua seisnud ja unerežiim töötas nii nagu peab. Kui ta lõpetas töötamise, ei tea ma isegi täpselt, miks ja pärast mida (mis tahes toiminguid) ta töö lõpetas. Tundub, et ma ei seadnud midagi sellist, ma ei värskendanud draiverit.
Harjumusest vajutan sageli unerežiimi väljalülitamise asemel ja kord töötas ja töötas mitu päeva, kuid lõpuks lakkas töötamast.
Proovis draivereid värskendada või desinstallida. Proovis arvutist lahti ühendada lisaseadmed(noh, kunagi ei tea). Enne magamaminekut lülitas erinevad programmid välja. Miski ei aidanud.
Internetist leidsin ainsa teabe, mis on minu omaga täpselt sama (punkt 8):

Muidugi ei saanud ma draiverit installida, erinevaid platvorme. Ei leidnud endale sellist.

Ma ei taha OS-i uuesti installida. kõik (v.a magamine) toimib hästi.
On ideid, mis võiks viga olla?

Lisatud 17 minuti pärast
Unustasin kirjutada, et BIOS lähtestati ja värskendati.

Vastus: kontrolli siis kas BP või ema. Programmiliselt konfigureerisime une- ja talveunerežiimi sisselülitatud powercfg /h-ga.

Teine võimalus on kontrollida (asendada). hiberfil.sys – vastutab talveunerežiimi eest.

Küsimus: puhkerežiim Windows 8-s


peale unest ärkamist windowsi režiim 8 hakkab taaskäivitama ja pärast seda laadige alla aknad ilmub järgmine teade
ütle mulle, kuidas sellega toime tulla?

Vastus:

Sõnum saatjalt Azat145

Windows 8 taaskäivitub pärast talveunest ärkamist

Esiteks.
Siis.

K: Hübriidunerežiim või talveunerežiim? Kumb on lauaarvutis parem?


Põhimõtteliselt on küsimus pealkirjas. Nagu ma otsingumootorist või õigemini kõikidele saitidele kopeeritud samast artiklist aru sain, seisneb hübriidse unerežiimi eelis vaid sisselülitamise, ärkamise kiiruses, võib öelda. Ja kui ma tahan kasutada oma töölaual Windows 7 x64 talveunerežiimi, on see olemas veealused kivid? Lihtsalt pean toite välja lülitama ja hübriidrežiimi puhul on parem seda mitte teha. Aitäh kõigile, kes vastavad

Vastus: Lugege täna. Olgu, ma arvan, et minu küsimusele pole muud vastust kui Microsofti lühike infotund. Siis jagan oma leide (neile, kes sarnase teemaga sellesse teemasse satuvad).
Niisiis:

plussid Hübriidne puhkerežiim: 1. Kiire sisselülitamine, pole vaja arvutit täielikult välja lülitada;
Miinused: 1. Koormused HDD(meie foorumi Windows 7 jaotise ühe moderaatori sõnul); 2. Ei lülitu täielikult välja, sööb voolu edasi, kuigi veidi (kuigi mõne jaoks on see ese plussiks)

Lühidalt öeldes on talveunerežiim vajalik, kui soovite seda pidevalt võrgust välja lülitada, kuid ei soovi OS-i pikka aega laadida / sulgeda.
Hübriidne puhkerežiim – neile, kes on rahul pidevalt võrgus oleva arvutiga.

Küsimus: Varem lülitus sülearvuti alguses välja, nüüd on see puhkerežiimis


Minu sülearvuti DELL INSPIRON 3521 koos Windows 8.1-ga lülitus varem käivitamisel välja (ilmus DELL-i logo - seiskamine - taaslubamine ja normaalne töö). Uuendasin süsteemi 10k peale, ei aidanud. Kandsin seda linnas tuntud mäeteeninduskeskuses ja kiitlesin - seal puhkas sülearvuti 2 nädalat turvaliselt inimeste tähelepanu eest. Võttes selle ära, lahendasin probleemi, lülitades selle välja kiire laadimine ja naasis õnnelikult 8.1 juurde.
Kuu on möödas ja nüüd, kui ma sülearvuti kaane sulgen, läheb see unerežiimi (nii seadetes), kuid 20 minuti pärast või natuke rohkem lülitub see täielikult välja (seda pole varem juhtunud ja toide seaded pole muutunud). Kui lülitate sisse ülalkirjeldatud olukorra: sisse - logo - välja. Pärast taaskäivitamist normaalne töö. Kõik draiverid on ajakohased. Milles võib probleem olla ja kuidas seda parandada? Vaesest on kahju - kokku poolteist aastat, aga mul on diplom ja riiklikud dokumendid - ma ei saa seda nüüd meistrite juurde tirida ...

Vastus: Kuidas soovite, et see toimiks? Isiklikult kasutan talveunerežiimi, mitte puhkerežiimi, üleminek talveunerežiimile kui jõude on ka lubatud, seaded on manuses

Toiteseadete migreerimine

Saada oma head tööd teadmistebaasi on lihtne. Kasutage allolevat vormi

Üliõpilased, magistrandid, noored teadlased, kes kasutavad teadmistebaasi oma õpingutes ja töös, on teile väga tänulikud.

Majutatud aadressil http://www.allbest.ru/

1. Teoreetiline teave

1.1 Windowsi kerneli draiverite arendamine

Lühike teoreetiline teave

Kerneli draiverite arendamine

Draiver on arvutiprogramm, mis võimaldab teisel programmil (tavaliselt operatsioonisüsteemil) riistvarale standardsel viisil juurde pääseda.

Skemaatiliselt, et näidata, kuidas erinevat tüüpi draiverid töötavad:

Seda on mugav jagada kahte tüüpi:

- Kernelidraiverid (töötavad privileegide tasemel 0, aga ei suhtle kuidagi ei kasutajaprogrammi ega seadmega. Alustame neist (need on lihtsamad ja võivad ka kasulikud olla).

Seadme draiverid - on vajalikud kasutajaprogrammi ja seadme vahelise suhtluse läbiviimiseks, nimelt andmete edastamiseks nende vahel, seadme juhtimiseks. Lisaks võivad seadmed olla nii reaalsed kui ka virtuaalsed). Juht ei pea ühtegi juhtima füüsiline seade. Mõned operatsioonisüsteemid võimaldavad luua ka virtuaalseid seadmedraivereid – objekte, mis käituvad sarnaselt I/O-seadmetega, kuid ei vasta ühelegi füüsilisele seadmele.

Kerneli komponendid, mis töötavad protsessori privilegeeritud režiimis (nn kerneli režiimis), saavad teha kõike, nimelt:

- nad saavad täita privilegeeritud protsessori käske (näiteks lgdt),

- pääseb ligi süsteemiandmetele ja koodile,

- omama otsest juurdepääsu seadmetele, näiteks läbi sadamate

- omama juurdepääsu mälurakkudele; draiver ei saa otseselt füüsilist mälu manipuleerida, kuid ta saab hankida mis tahes füüsilisele mälule virtuaalse aadressi ja sellega manipuleerida.

Kui soovite kirjutada mis tahes tõsist rakendust, mis nõuab juurdepääsu süsteemi sisemistele funktsioonidele või andmestruktuuridele, võite kokku puutuda paljude piirangutega, millest saate üle vaid oma koodi paigutamisega süsteemi aadressiruumi. Dokumenteeritud on ainult üks viis - installige draiver. See meetod on suhteliselt lihtne, töökindel ja mis kõige tähtsam, seda toetab täielikult operatsioonisüsteem ise.

Kerneli koodi (tegelikult on see süsteem ise) peetakse täielikult usaldusväärseks. Seetõttu saab draiver süsteemi aadressiruumi laadimisel süsteemi osaks ja talle ei kehti piirangud. Windowsis on see praktiliselt ainus viis mitte-OS-i arendajatele kirjutada kerneli tasemel süsteemikomponente.

Draiverite arendamise kirjutamiseks ja õppimiseks kasutage DDK-d (Device Development Kit) – draiverite arendamise süsteemi.

Lisaks dokumentatsioonile sisaldab DDK komplekti kaasamisfaile (*.inc) ja teegifaile (*.lib).

Seega toetab Windows erinevat tüüpi seadmedraivereid, kuid lisaks on draivereid, mis ei ole seadmedraiverid, vaid võimaldavad lihtsalt luua programme, mis Windowsis hakkavad jooksma kerneli režiimis, s.t. privileegide tasemel 0. Samal ajal on neil täielik juurdepääs OS-ile ja riistvarale.

Mõelge lihtsaimale kernelirežiimi draiverile.

#kaasa

int DriverEntry(

PDRIVER_OBJECTis pDriverObject,

IN PUNICODE_STRING pusRegistryPath) (

}

Sisendpunkt on DriverEntry, mis on vormindatud protseduurina, mis võtab kaks parameetrit:

pDriverObject on kursor vastloodud draiveriobjektile. Kui süsteem laadib draiveri, loob süsteem draiveriobjekti, mis esindab draiveri mälupilti. Selle objekti kaudu juhib süsteem juhti. Objekt "draiver" on tavaline andmestruktuur tüüpi DRIVER_OBJECT.

pusRegistryPath – kursor draiveri lähtestamisparameetreid sisaldavale registrivõtmele.

See meie esimene draiver laaditakse ainult süsteemi ja laaditakse kohe maha.

Nüüd kaaluge malliprogrammi, mida tuleb kursusetöö esimeses etapis programmi arendamiseks kasutada (kernelirežiimi draiver beeper.sys).

Selle draiveri ülesanne on esitada süsteemi dünaamikas üks noot kuni esimese oktaavini. Selleks kasutab draiver vastavatele I/O-portidele juurdepääsu saamiseks protsessori sisse- ja väljalaskejuhiseid. On üldteada, et juurdepääs I / O portidele on püha valvega Windowsi süsteem ressurss. Katse kasutajarežiimist mõnele neist juurde pääseda, nii sisendiks kui ka väljundiks, toob paratamatult kaasa erandi.

Meie näites töötab kõlar (selleks kasutatakse eelkõige porti 61h, 0 ja 1 bitti, porti 43h ja 42h).

Draiveri alguses on kõik 12 nooti määratletud.

Peate mitte ainult kõlarit sisse lülitama, vaid ka heli sagedust seadistama. Selleks kasutatakse taimeri alamsüsteemi, mis töötab protsessorist sõltumatult ja millel on 3 kanalit. Kanali 2 väljund on ühendatud kõlariga, mida kasutatakse erinevate sagedustega heli tekitamiseks. Kuuldava heli vahemik on 30Hz-6000Hz.

Heli sageduse määramiseks saadetakse juhtsõna 0Bh porti 43h (taimeri käsuregister):

mov al,0Bh

välja 43h, al

See väärtus määrab hallatava kanali numbri, toimingu tüübi, kanali töörežiimi ja loenduri vormingu.

Seejärel saadetakse ümberarvutatud helisagedus (1193167/sagedus (Hz)) kahes osas porti 42h (kõigepealt madal osa, siis kõrge osa).

Näiteks tahame saada helisageduseks 100 Hz. Arvutage sagedus ümber

1193167/100 = 11931

Seejärel:

movax, 11931

välja 42h, al

mov al, ah

välja 42h, al

Kursusetöö esimeses etapis peate muutma programmi nii, et see tekitaks muid muusikalisi helisid (igaühel on oma versioon).

Tihti tuleb ülesanded määrata erineva kestusega. Selleks on mugav kasutada protseduuri DO_DELAY, edastades sellele kaudselt määratletud parameetri "heliaeg".

Draiveri silumise hõlbustamiseks on erinevaid tööriistu. Kõige lihtsam on kuvada vajalik teave utiliidi Silumisvaate spetsiaalses aknas. See programm käivitatakse esmalt ja konfigureeritakse kerneli tasemel sõnumite pealtkuulamiseks. Väljundiks kutsub programm välja funktsiooni DbgPrint, millel on üks parameeter – väljundstring. Pärast draiveri käivitamist kuvab silumisvaate aken kogu väljundi.

Draiveri kernelisse installimiseks on erinevaid viise. Kuna meie draiverit tegelikult süsteem ei vaja (see ei juhi ühtegi seadet), ühendame draiveri ajutiselt süsteemiga ja eemaldame selle.

Selleks peate looma rakenduse, mis käivitab draiveri. Kuidas? Draiver on kerneli tasemel teenus. Seetõttu kasutab rakendus SCM-i – Service Control Manageri, mis on Windowsiga kaasas ja töötab kasutaja tasemel.

Seega on vaja lahendus ehitada kahest projektist: konsoolirakendusest ja draiverist.

Draiverite arendamiseks C-s peate esmalt:

- installige DDK,

- määrake keskkonnamuutuja WNETBASE (väärtus - tee DDK-sse, näiteks e:\winddk\3790.1830).

Draiveri projekti tüüp peab olema MakeFile.

Tehke projekti sätted rakenduse sätete abil ja kirjutage rida väljale Koosta käsurida

ddkbuild -WNETXP chk . -ceZ

mida tähendab VC ja DDK suhtlemiseks spetsiaalse skripti kutsumine

Praeguses projektikaustas peaksid olema järgmised failid:

allikad, makefile, ddkbuild.cmd (skript), draiveri lähtefail.c

Pärast projekti koostamist peab draiveril olema laiendus .sys.

Rakendus käivitab draiveri beeper.sys, st. määrab selle registris ette ja võtab kasutusele. Kui see on lõpetatud, eemaldatakse see registrist.

Et lubada rakendusel draiverit käivitada, peate pärast kahest projektist, rakendusest ja draiverist koosneva lahenduse loomist asetama rakenduse käivitatava faili ja draiveri samasse kausta ning seejärel käivitama rakenduse.

Draivereid on väga raske siluda. OS-i töös ilmnevate vigade korral see enamasti külmub ja vajalik on taaskäivitamine. Ja meie draiveri jaoks on pärast taaskäivitamist vaja ka teenus beeper06 registrist eemaldada, kasutades regediti (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\) ja seejärel taaskäivitada.

1.2 Windowsi virtuaalsed seadme draiverid

Seni oleme välja töötanud kerneli režiimis draiveri, mis suudab teha asju, mida kasutaja tasemel teha ei saa, näiteks tegeleda I/O-portidega. Sellist draiverit nimetatakse kerneli draiveriks, kuid mitte seadme draiveriks, kuna kasutajaprogrammi ja seadme vahel andmeid ei edastata (Miks on ju tavaliselt draiverit vaja? Andmevahetuse korraldamiseks kasutajarakenduse ja seadme vahel) .

Nüüd töötame välja seadmedraiverid, mis edastavad andmeid edasi-tagasi kasutajarakenduse ja seadme vahel.

Kui rakendus vajab I/O-toimingut, kutsutakse draiver. Selleks saab rakendus väljastada taotluse andmete lugemiseks seadmest või andmete seadmesse kirjutamiseks. Ja kui on vaja mingit muud toimingut, näiteks pollimist või seadme juhtimist või midagi muud, siis nn. IOCTL liides (Device In-Out Control).

Kaalume just sellist juhtumit virtuaalsete seadmete puhul, sest enamasti on meil vaja draiveris virtuaalset seadet? Et saaksid sinna üle kanda andmed, mida juht saab kuidagi töödelda (nagu see rakenduses pole võimalik) ja tulemuse rakendusele tagastada. Tuletame meelde, et tavaline kerneli draiver, millest varem räägiti, ei võtnud rakendusest midagi ega tagastanud sinna midagi, vaid tegi lihtsalt toiminguid, mida rakendus ei saanud.

Kui rakendus vajab I/O-toimingut, kutsutakse draiver. Selleks on nn. IOCTL liides (Device In-Out Control).

Helistamisrakendus teeb järgmist:

1) Faili avamine ja selle käepideme leidmine:

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

Selle tulemusena, kui kõik läks hästi, saame seadme käepideme.

2) Toimingukoodi saatmine juhile (mida teha, juht saab rakendada palju erinevaid toiminguid):

DeviceIoControli käivitamine, käepide, tegevuskood, sisendpuhvri aadress, sisendi suurus, väljundpuhvri aadress, väljundi suurus, puhvri aadress tegeliku baitide arvu jaoks

3) Faili sulgemine ja vastavalt deskriptori vabastamine.

kutsuge välja CloseHandle'i seadme käepide

Andmete edastamiseks peavad moodulid (rakendus ja draiver) kokku leppima interaktsiooniprotokolli (toimingukoodid, puhvristruktuur – sisend ja väljund).

Sama tegevuskoodi kasutatakse nii rakenduses kui ka draiveris.

Rakenduses ja draiveris oleva toimingukoodi saab kirjutada kuueteistkümnendsüsteemis või kasutada makrot CTL_CODE, nagu on tehtud labori näites. töötada failis common.inc.

Vaatame laboris kasutatava virtuaalseadme draiveri näidistoimingukoodi. Nimi on IOCTL_GET.

Virtuaalse seadme puhul on faililipp 0.

Seadme tüüp – FILE_DEVICE_UNKNOWN = 22h

Õigused – FILE_READ_ACCESS+FILE_WRITE_ACCESS = 1+2=3=11b

Funktsiooni kood on vahemikus 800h kuni FFFh. Meil on 800h.

Puhverdusmeetod - viis andmete edastamiseks rakenduse ja draiveri vahel (võimalik on kolm):

Väikese andmehulga jaoks kasutatakse tavaliselt METHOD_BUFFERED (00b) – lisapuhver eraldatakse mitte-lehemälus, millest piisab sisend- ja väljundpuhvri mahutamiseks. Selle puhvri aadress asetatakse IRP-s väljale AssociatedIrp.SystemBuffer. I/O haldur hoolitseb andmete ümberkirjutamise eest kasutaja puhvri ja lisapuhvri vahel.

Otsene juurdepääs andmetele (ilma puhvrita) - METHOD_OUT_DIRECT (2) - väljundiks või METOD_IN_DIRECT (1) - sisendiks; väli IRP-st – MdlAddress. See on otsekõne – I/O-haldur sisestab kasutajarežiimi puhvrit sisaldavad füüsilised lehed mällu. See loob pühendunud lehtede kirjeldamiseks abistruktuuri MDL (Memory Descriptor List). Ja draiveri arendaja töötab MDL-iga.

Juurdepääs kasutajataseme puhvri kaudu - METHOD_NEITHER(3); väli IRP-st – SystemBuffer. I/O-haldur edastab draiverile kasutajarežiimi virtuaalsed aadressid. Ja draiveris peate nendega olema väga ettevaatlik, sest sel juhul peaks draiver töötama ainult kutsuva lõime kontekstis.

Kui rakendus saadab draiverile tegevuskoodi, hakkab I/O haldur töötama. See vastutab I/O päringu paketi (IRP) genereerimise ja draiverile edasiseks töötlemiseks saatmise eest.

Arvestame kolme tüüpi taotlustega:

IRP_MJ_CREATE – edastatakse CreateFile'ile,

IRP_MJ_DEVICE_CONTROL – edastatakse DeviceIoControlile

IPR_MJ_CLOSE – CloseHandle'is

IRP-pakett koosneb päisest ja I/O paigutuse pinudest. I/O haldur loob arvu I/O pinu lahtreid, mis on võrdne päringu töötlemisega seotud draiverikihtide arvuga. Igal juhil on juurdepääs oma virna asukohale. Kui draiver saadab IRP-i madalama taseme draiverile, viiakse virna asukoha osuti selle draiveri nõutud asukohta. Vastupidi, pärast päringu töötlemist liigub kursor ülemise taseme draiveri lahtrisse. Osuti hankimine funktsiooni IoGetCurrentStackLocation() abil.

Iga jaotuspinn sisaldab kursorit DeviceObjectile ja FileObjectile, mille jaoks taotlus esitati. IRP-d salvestatakse alati mittelehetatavasse mällu.

Järgmised objektid luuakse ja neid kasutatakse draiveri tööks:

Juhi objekt;

Seadme objektid;

Juhi etapid.

1) Draiveri objekti loomine. Loodud, kui draiver laaditakse selle käivitamise etapis. Sel hetkel käivitatakse funktsioon DriverEntry ja Massiiv MajorFunction on täidetud, samuti on kursor seadme objektile ja vastupidi.

Seadme objekt sisaldab:

Seadme tüüp.

2) Looge seadmele sümboolne link. Selleks, et objekt "seade" muutuks kasutajarežiimi koodile kättesaadavaks, peab draiver looma "\???" veel üks objekt – sümboolne link (sümboliline link). Draiver shablon.sys loob sümboolse lingi "slshablon" oma seadmele "devshablon" kataloogis "\??", mille väärtus on string "\Device\devshablon".

Seega on meil juba draiveri laadimisel (meie puhul OS-i laadimise etapis) mälus kolm objekti: draiver "\Driver\shablon", seade "\Device\shablon" ja sümboolne link seade "\??\slshablon".

3) Avamine. Järgmiseks, kui rakendus käivitub, kutsutakse välja CreateFile. Seadmele on link. Seadme objektistruktuurist DEVICE_OBJECT hangitakse teave seda teenindava draiveri kohta. I/O haldur genereerib I/O päringu IRP tüüpi IRP_MJ_CREATE ja saadab selle draiverile. See annab draiverile teada, et kasutajarežiimi kood üritab oma seadmele juurde pääseda. Kui draiveril pole vastuväiteid, tagastab see edukoodi. Meie juhil on spetsiaalne väljasaatmisprotseduur, mis vastab sellele IRP-le - DispatchCreateClose (seadme avamiseks ja sulgemiseks on kombineeritud protseduur). Selles edastatakse STATUS_SUCCESS väljal Io.Status.Status ja 0 väljal Io.Status.Information, kuna sel juhul pole vaja midagi üle kanda. Selline juhi vastus on signaal objektihaldurile loomiseks virtuaalne fail. See loob protsessi käepidemetabelisse uue kirje, kus on kursor failiobjektile, ja tagastab kasutajarežiimi koodile uue käepideme.

Kui kõik on korras, salvestame CreateFile'i tagastatud failideskriptori muutujas hDevice.

4) I/O toimingud. Nüüd saame sellel seadmel juhtimistoiminguid teha, kutsudes välja DeviceIoControli funktsioonid. Kuna seadmedraiver suudab põhimõtteliselt täita paljusid erinevaid ülesandeid, on vaja päringuid kuidagi eristada. Selleks on ette nähtud teine ​​parameeter dwIoControlCode, mida nimetatakse I / O juhtkoodiks, mis on üles ehitatud teatud reeglite järgi.

Seadme käepideme abil hangib I/O-haldur teavet seda teenindava draiveri kohta, moodustab IRP_MJ_DEVICE_CONTROL tüüpi I/O-päringu paketi ja saadab selle draiverile. Draiveris kutsutakse välja vastav protseduur DispatchControl, mis edastab parameetritena tegevuskoodi ning teabe sisend- ja väljundpuhvri aadresside ja suuruste kohta. Kõik see edastatakse IRP kaudu. Protseduuri käigus võetakse IRP-st vajalik teave: toimingukood, andmeedastuse puhvri aadress.

Protseduur DispatchControl teeb vajalikud toimingud, meie puhul IRP paketi aadress ESI registrist Seejärel edastab tulemuse läbi väljundpuhvri rakendusse.

Sarnaselt eelmisele protseduurile saadame IRP kaudu valmimise oleku ja draiverilt üle kantud baitide arvu.

Rakenduses need andmed vormindatakse ja kuvatakse.

5) Sulgemine. Nagu enam mittevajalike käepidemetega peakski tegema, siis CloseHandle funktsiooni kutsudes sulgeme seadme käepideme.

6) Juhi mahalaadimine. Kustutage sümboolne link ja kustutage seadme objekt.

Kompleks (2) koosneb kahest programmist:

Rakendus, mis küsib draiverilt IRP-aadressi ja seejärel väljastab selle aadressi standardne aken Windows.

Shablon.sys on draiver.

Shabloni draiver teeb asju, mida kasutaja tasemel teha ei saa sel juhul määrab esiregistri sisu, kui draiver töötab.

Rakendus võtab esi-sisu vastu väljundpuhvris, teisendab selle kuueteistkümnendsüsteemi väljundiks ja väljastab selle standardsesse Windowsi aknasse.

Kui teil on vaja draiveris CMOS-ist teavet hankida, vajate:

Saada pordile 70h meid huvitava CMOS-i nihe;

Väike viivitus;

Võtke infot sadamast 71h al.

Seejärel kirjutage see teave väljundpuhvrisse.

Ja rakenduses tuleb väljundpuhvrist infot võtta, vajadusel teisendada ja kuvada või siis analüüsida ja olenevalt tulemusest tavaaknas vajalik tekst kuvada.

See labor eeldab, et draiver on Windowsis püsivalt installitud .inf-faili kasutades juhtpaneeli abil – Riistvara installimine: Lisa uus seade, Käsitsi installimine, Kuva kõik seadmed, Installi kettalt, Sirvige .inf-faili valimiseks (draiver peab olema samas kaustas).

Draiveri installimise kontrollimiseks valige juhtpaneelil Süsteem, Riistvara, Seadmehaldur.

1.3 Juurdepääs olemasolevatele draiveritele kasutajarežiimi rakendustest

Draiveriga töötava rakenduse algoritm

Draiveriga töötamiseks peab kasutajarežiimi rakendus saama draiveri käepideme. Selle manipulaatori saab hankida funktsiooni CreateFile või CreateFileA API abil, mis töötab ASCII-märkidega. Järgmisena kasutatakse DeviceIoControl API funktsiooni, millele ühe parameetrina edastatakse IOCTL kood. IOCTL-kood on juhtkood, mille abil juht saab teada toimingust, mida rakendus taotleb, parameetrite edastamise meetodit ja juurdepääsuõigusi, mida rakendus selle toimingu tegemiseks vajab. Pärast seda, kui taotlus on helistanud

DeviceIoControli saadab draiverile IRP_MJ_DEVICE_CONTROL. Kui päringud on töödeldud, naaseb juhtimine rakendusele ja rakendus jäetakse sõeluma juhi vastust ja sulgema avatud käepidemed.

Näide

Järgmises näites saadab kasutajarežiimi rakendus failisüsteemi draiverile päringu IOCTL_DISK_GET_PARTITION_INFO_EX, analüüsib saadud teavet ja väljastab kõvaketta partitsiooni vormingu.

#kaasa

#kaasa

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, "Loo faili viga!", "Viga", 0);

if (DeviceIoControl(

/*1*/(HANDLE) hSeade,

/*5*/&piPartitionInfo,

/*6*/sizeof(piPartitionInfo),

/*7*/&dwBytesReturned,

if(piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)

MessageBoxA(NULL, "PARTITSIOON_STIILI_MBR", "Piitrikiri", 0);

else if(piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)

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

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

MessageBoxA(NULL, "DeviceIoControl error", "Error", 0);

CloseHandle(hDevice);

Näite analüüsimine

Deklareeritakse rakenduse toimimiseks vajalikud muutujad. PARTITION_INFORMATION_EX on struktuur, mis kirjeldab teavet selle kohta jagu raske kettale.

typedef struct (

) PARTITSIOON_INFORMATSIOON_EX;

Selles programmiosas kutsutakse funktsioon CreateFileA, et saada käepide, mis kirjutatakse muutujasse hDevice.

Funktsiooni DeviceIoControl kutsutakse sünkroonselt. Talle antakse:

seadme deskriptor;

IOCTL kood IOCTL_DISK_GET_PARTITION_INFO_EX;

kursor sisendpuhvrile, meie puhul NULL;

sisendpuhvri suurus;

osuti väljundpuhvrile;

väljundpuhvri suurus;

osuti tüüpi muutuja DWORD, mis salvestab tagastatud baitide arvu;

kursor OVERLAPPED struktuurile, mis on harjunud asünkroonne kõne funktsioonid.

Pärast juhtelemendi naasmist salvestatakse funktsiooni eduka täitmise korral teave partitsiooni kohta struktuuris PARTITION_INFORMATION_EX.

Teostatakse teabe analüüs ja väljastamine. Enne kontrolli tagastamist operatsioonisüsteem avatud käepidemeid saab sulgeda. See võimaldab teil teha funktsiooni CloseHandle(__in HANDLE). Kui deskriptorid pole suletud, teeb operatsioonisüsteem seda teie eest.

2. Kursuse töö lõpetamine

2.1 1. samm

Harjutus: 1. Arendage välja kerneli draiver, millel on juurdepääs portidele, mis teostab toiminguid vastavalt variandile ja väljastab teavet silumisvaate aknasse (vastavalt variandile), samuti rakendus, mis käivitab draiveri.

Nimekiri Kurs_test.cpp

#include "stdafx.h"

#include "windows.h"

#include "stdlib.h"

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

if (hSCManager!=0)(

// mängija registreerimine SCManageri tabelis

if (hService!=0)(

// Kustutage draiveri kirje

KustutaService(hService);

CloseServiceHandle(hService);

tagasi 0;

}

Beeper.sys loend

#kaasa

#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

tühine DO_DELAY(int time)(

pikk i,j;

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

}

tühine DO_BIG_DELAY(int time)(

DO_DELAY(2*aeg);

}

tühi ksülofon(int nPitch)(

int nTone = TIMER_FREQUENCY/nPitch

_asm(

mov al, 10110110b;//kirjuta kontrollsõna kell 43h

välja 43h, al;//Heli juhtimiskanal - loogikalülitus, mis kasutab taimeri tooni ja tarkvaraga juhitud süsteemi pordi bitte

mov eax, nTone;//kirjuta ümberarvutatud sagedus 42-ks

välja 42h, al;//kõrgem osa

mov al, ah;//alumine osa

välja 42h, al

in al, 61h;//juhtjärjestuse muutmine - viimaste bittide teisendamine ühtedeks

;// bitt 0 - kõlari kasutamise luba

;// bitt 1 - luba ühendada taimer-2 kõlariga

või al, 00000011b; kõlar ON

välja 61h, al

}

DO_DELAY(0x7f);

_asm(

aastal, 61 h

ja al, 11111100b; kõlar VÄLJAS

välja 61h, al

}

}

ksülofon(PITCH_C);

ksülofon(PITCH_C);

ksülofon(PITCH_C);

ksülofon(PITCH_C);

ksülofon(PITCH_C);

ksülofon(PITCH_C);

ksülofon(PITCH_C);

tagasta STATUS_DEVICE_CONFIGURATION_ERROR;

}

2.2 2. samm

Töötage välja virtuaalne seadmedraiver, mis võimaldab teha toiminguid, mis on saadaval ainult õiguste nulltasemel (vastavalt valikule), ja seejärel edastada tulemused 3. privileegtaseme rakendusse nende ekraanil kuvamiseks.

Rakenduses kuvame tulemuse tavalises Windowsi aknas.

Nimekiri shablon.c

#kaasa // erinevad NT definitsioonid

#kaasa

UNICODE_STRING g_usDeviceName;

UNICODE_STRING g_usSymbolicLinkName;

void DriverUnload(IND PDRIVER_OBJECT pDriverObject)(

IoDeleteSymbolicLink(&g_usSymbolicLinkName);

IoDeleteDevice(pDriverObject->DeviceObject);

}

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

pIrp->IoStatus.Status = OLEK_ÕNNEKUS;

pIrp->IoStatus.Informatsioon = 0;

IoCompleteRequest(pIrp,IO_NO_INCREMENT);

tagasta STATUS_SUCCESS;

}

NTSTATUS DispatchControl(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)(//käsitlus IRP_MJ_DEVICECONTROL

NTSTATUS olek;

int regEsi;

// viige kursor asukohta IO_STACK_LOCATION, selles IoControlCode'i

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

//Võrdle tegevuskoodi ja kui see on meie klient, siis:

_asm(

liikuma eax,0

liikumine, 10h

välja 70h, al

aastal 71 h

cbw

cwde

mov regEsi,eax

}

// see on meie funktsionaalsus - võtame esi registri sisu

// kirjutage see süsteemipuhvrisse

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

pIrp->IoStatus.Informatsioon = 4; // ja määrake tulemuse suurus

olek = STATUS_SUCCESS;

) else status = STATUS_INVALID_DEVICE_REQUEST;

pIrp->IoStatus.Status = olek;

IoCompleteRequest(pIrp, IO_NO_INCREMENT);

tagastamine(staatus);

}

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

NTSTATUS olek;

PDEVICE_OBJECT pDeviceObject;

// Unicode'i stringide lähtestamine

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

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

// täitke draiveri objekt – selgitage juhile selgelt, milline funktsioon millega tegeleb

pDriverObject->DriverUnload =

pDriverObject->MajorFunction =

pDriverObject->MajorFunction =

pDriverObject->MajorFunction =

// looge loogiline virtuaalse seadme objekt

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

if(!NT_SUCCESS(Olek))(tagasi olek;)

// looge seadmele sümboolne link

Olek = IoCreateSymbolicLink(&g_usSymbolicLinkName, &g_usDeviceName);

if(!NT_SUCCESS(Olek))(

IoDeleteDevice(pDeviceObject);

tagastamise staatus;

}

tagastamise staatus;

}

Kursuste loetlemine2.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;

tähestring;

/*

Valikud:

lpFileName Nulllõpuga stringi aadress, mis määrab loodava või avatava objekti nime.

dwDesiredAccess Juurdepääsu tüüp objektile. See parameeter võib võtta mis tahes kombinatsiooni järgmistest väärtustest:

Väärtus: Kirjeldus:

0 Määrab päringu objekti saadavuse kohta määratud seadmes. Rakendus saab esitada päringu seadme atribuutide kohta ilma sellele juurdepääsuta.

GENERIC_READ Määrab lugemise juurdepääsu objektilt. Andmeid saab failist lugeda ja failikursorit liigutada. Kombineerige GENERIC_WRITE-ga lugemis- ja kirjutamisõiguse saamiseks.

GENERIC_WRITE Määrab objektile kirjutamisõiguse. Andmeid saab faili kirjutada ja failikursorit liigutada. Kombineerige lugemis- ja kirjutamisjuurdepääsuks GENERIC_READ-iga.

dwShareMode Objektile jagatud juurdepääsu režiim. Kui see on null, ei saa objekti mitme programmi vahel jagada. Kõik järgnevad objekti avamise toimingud nurjuvad, kuni objekti käepide on suletud. Objekti jagamiseks kasutage järgmiste väärtuste kombinatsiooni.

Väärtus: Kirjeldus:

FILE_SHARE_DELETE Võimaldab toimingute jada avada objekti, et taotleda juurdepääsu kustutamist.

FILE_SHARE_READ Võimaldab toimingute jada avada objekti lugemisõiguse taotlemiseks.

FILE_SHARE_WRITE Võimaldab toimingute jada avada objekti kirjutamisõiguse taotlemiseks

lpSecurityAttributes SECURITY_ATTRIBUTES struktuuri aadress, mis määrab, kas funktsiooni tagastatud käepide saab pärida alamprotsessi poolt või mitte.

Kui lpSecurityAttributes on NULL, ei saa käepidet pärida.

dwCreationDisposition

Väärtus: Kirjeldus:

CREATE_ALWAYS Loob alati uue faili.

Kui fail on olemas, kirjutab funktsioon faili üle.

CREATE_NEW Loob uue faili. Funktsioon nurjub, kui fail on olemas.

OPEN_ALWAYS Ava fail alati. Kui faili pole olemas, loob funktsioon selle samamoodi nagu dwCreationDisposition oleks olnud CREATE_NEW.

OPEN_EXISTING Avab faili. Funktsioon nurjub, kui faili pole olemas.

TRUNCATE_EXISTING Avab faili ja kärbib selle suuruseks null. Funktsioon nurjub, kui faili pole olemas.

dwFlagsAndAttributes Faili lipud ja atribuudid.

Olemasoleva faili avamisel ignoreerib CreateFile mallifaili.

Tagastusväärtused:

Kui funktsioon on edukas, tagastatakse määratud faili avatud käepide. Kui määratud fail on olemas enne funktsiooni kutset ja dwCreationDisposition on CREATE_ALWAYS või OPEN_ALWAYS, tagastab GetLastErrori väljakutse ERROR_ALREADY_EXISTS isegi siis, kui funktsioon õnnestub. Kui faili enne kõnet ei eksisteeri, tagastab GetLastError väärtuse 0 (null).

Vea korral tagastab funktsioon INVALID_HANDLE_VALUE. Vea kohta lisateabe saamiseks helistage GetLastErrorile.

*/

if (hSeade != 0)(

/*

hDevice on CreateFile'i tagastatav käepide.

dwIocontrolCode on väärtus, mis määrab sooritatava toimingu.

lpInBuffer on puhvri aadress, mis sisaldab dwIoControlCode'is määratud toimingu sooritamiseks vajalikke andmeid. Kui toiming ei nõua andmeid, saate sisestada NULL.

nInBufferSize on puhvris olevate andmete suurus baitides, millele osutab lpInBuffer.

lpOutBuffer on puhvri aadress, mis täidetakse toimingu õnnestumisel väljundandmetega. Kui toimingul pole väljundit, peab see väli olema NULL.

nOutBufferSiz on puhvri suurus baitides, millele osutab lpOutbuffer.

lpBytesReturned – dword tüüpi muutuja aadress, mis võtab vastu lpOutBufferisse sisestatud andmete suuruse.

lpOverlapped on OVERLAPPED struktuuri aadress, kui soovite, et toiming oleks asünkroonne. Kui soovite oodata, kuni toiming on lõpetatud, sisestage sellele väljale NULL.

*/

wsprintf((LPSTR) stroka, "%X", adwOutBuffer);//kirjuta string puhvrisse (adwOutBuffer --> stroka)

CloseHandle(hDevice);

tagasi 0;

}

draiveri põhiline arvutiprogramm

2.3 3. samm

Loetelu coursework.cpp

#kaasa

#kaasa

#kaasa

{

DWORD rämps;

0, // faili atribuudid

tagasi (FALSE);

}

0, // sisendpuhvri suurus

CloseHandle(hDevice);

tagastama(result);

}

int main(int argc, char *argv)

{

/*

typedef struct (

PARTITION_STYLE PartitionStyle; // partitsiooni vorming

LARGE_INTEGER StartingOffset; // sektsiooni alguse nihe

LARGE_INTEGER partitsiooni pikkus; // partitsiooni suurus

DWORD-i partitsiooninumber; // jaotise number

BOOLEAN RewritePartition; // kui partitsioon on kirjutatav, siis TRUE

liit (

PARTITION_INFORMATION_MBR Mbr; // lisateave MBR stiili jaotis

PARTITION_INFORMATION_GPT Gpt; // lisateave GPT stiili jaotis

};

) PARTITSIOON_INFORMATSIOON_EX;

*/

BOOL bTulemus;

system("PAUS");

return((int)bResult);

}

2.4 4. samm

1) Ühendage kõik sammudes 1–3 välja töötatud funktsioonid üheks programmikomplektiks.

Lõplik kompleks peaks välja nägema selline:

- Meie draiver on süsteemi sisse ehitatud ja laaditakse Windowsi alglaadimise faasis.

- Rakendus küsib juhilt vajalikku (2. sammus seatud) teavet, juht edastab selle teabe, samal ajal lülitub korraks sisse ka kõlar ja mängitakse meloodiat (saadud sammus 1). Seejärel teeb rakendus päringu süsteemis olemasolevale draiverile (vastavalt 3. sammu valikule).

2) Koostage seletuskiri, mis peaks kirjeldama kõiki 4 etappi, samuti iga etapi teoreetiline teave.

#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; // kontrollitava seadme deskriptor

BOOL bTulemus; // tulemuse lipp

DWORD rämps;

hDevice = CreateFile(TEXT("\\\\.\\c:"), // seade, mida avada

ÜLDINE_LOE | GENERIC_WRITE, // juurdepääs seadmele

FILE_SHARE_READ |FILE_SHARE_WRITE, // jagamisrežiim

NULL, // vaiketurvaatribuudid

OPEN_EXISTING, // asukoht

0, // faili atribuudid

NULL); // ära kopeeri failiatribuute

if (hDevice == INVALID_HANDLE_VALUE)( // seadet ei saa avada

printf("Faili() loomine nurjus!\n");

tagasi (FALSE);

}

bResult = DeviceIoControl(hSeade, // nõutud seade

IOCTL_DISK_GET_PARTITION_INFO_EX, // teostatav toiming

NULL, // osuti sisendpuhvrile

0, // sisendpuhvri suurus

pex, sizeof(*pex), // väljundpuhver

&rämps, // tagastatud baitide arv

(LPOVERLAPPED) NULL); // sünkrooni sisend/väljund (I/O)

CloseHandle(hDevice);

tagastama(result);

}

int _tmain(int argc, _TCHAR* argv)(

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

HANDLE hDevice;

BOOL DevControl;

DWORD dwBytesReturned;

LPVOID adwInBuffer, adwOutBuffer;

tähestring;

PARTITION_INFORMATION_EX pex; // seadme struktuur

BOOL bTulemus;

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

if (hSeade != 0)(

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

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

wsprintf((LPSTR) stroka, "%X", adwOutBuffer);//kirjuta string puhvrisse (adwOutBuffer --> stroka)

if (stroka =="00000100") MessageBox(NULL,"Leitud 1,44 Mb","Jermakovi FDD skanner",MB_OK);

else MessageBox(NULL,"Ei leitud","Jermakovi FDD skanner",MB_OK);

hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);

if (hSCManager!=0)(

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

// Registreerige muusik SCM-i tabelites

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

KustutaService(hService);

CloseServiceHandle(hService);

)else MessageBox(NULL"Ei saa draiverit registreerida",NULL,MB_ICONSTOP);

CloseServiceHandle(hSCManager);

)else MessageBox(NULL,"SCManageriga ei saa ühendust",NULL, MB_ICONSTOP);

)else MessageBox(NULL"Ei saa juhtkoodi saata",NULL,MB_OK);

CloseHandle(hDevice);

)else MessageBox(NULL, "Arendaja puudub", NULL, MB_ICONSTOP);

bResult = GetPartitionNumber(&pex);

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

)else( printf ("GetPartitionNumber() nurjus. Viga %d.\n", GetLastError());)

system("PAUS");

return((int)bResult);

}

3. Rakenduse toimimine

Joonis 3.1. Juht 2. sammust

Joonis 3.2. Juht 3. sammust

Majutatud saidil Allbest.ru

Sarnased dokumendid

    Kernelirežiimi draiveri ja kasutajarakenduse vahelise interaktsiooni mehhanismid: mitmekihiline draiveri arhitektuur, andmete peitmise algoritm, draiveri ja rakenduse interaktsioon, kasutajaliides failidele juurdepääsu filtreerimisprogrammid.

    kursusetöö, lisatud 23.06.2009

    Windows NT I/O arhitektuur. Sisemine korraldus USB siin. WDM-draiveri mudeli põhiomadus. Arendatud draiveri sisenemispunktid, koodi mällu paigutamine, draiveri installimine süsteemi. Juhikoodi juurutamine C-keeles.

    kursusetöö, lisatud 27.09.2014

    Kasutajarežiimi struktuur, mis võimaldab kasutajal süsteemiga suhelda. Kerneli režiimi kirjeldus, mis tagab kasutaja rakenduste (programmide) turvalise täitmise. Windows NT riistvara abstraktsioonikiht.

    esitlus, lisatud 23.10.2013

    Windows 98 kernel. 16-bitiste tuumamoodulite roll. Kiiruse probleemid. Koostöö ja ennetav multitegumtöö. Täiustatud ressursikasutus opsüsteemis Windows 98. WordArti kasutamine. MS Outlook Express: sõnumite loomine ja saatmine.

    kontrolltöö, lisatud 14.04.2005

    Kõigi arvutiseadmete ühine töö ja juurdepääs selle ressurssidele. Graafilise operatsioonisaali kontseptsioon ja funktsioonid Windowsi süsteemid. Viide windowsi teenus. Kontroll failisüsteem. Plug and play tehnoloogia. GUI Windows.

    test, lisatud 22.01.2011

    Operatsioonisüsteemi omadused. Windowsi arendamise ajalugu. Võrdlevad omadused Windowsi versioonid. Elemendid ja windowsi tööriistad xp. Rakendusprogrammid Windows XP-s. Lauaarvuti ja sülearvutid töötab Windows.

    aruanne, lisatud 16.10.2011

    Kerneli režiimi draiveri ja juhtimisrakenduse kasutamine süsteemilõimede loomiseks. Andmetöötluse imiteerimine ja viivituste korraldamine. Draiveri arendamine C++ keeles. Testistendi konfiguratsioon. Viivituste ja taimeri töö muutmise täpsus.

    kursusetöö, lisatud 24.06.2009

    Windowsi operatsioonisüsteemi sisemise struktuuri uurimine. NT arhitektuur ja põhistruktuur. Funktsioonide vahetamise meetodid kerneli režiimis ja põhirežiimis. Autojuhi poolt mõistetav. I/O paketid. Windowsi süsteemi stabiilsuse ja turvalisuse hindamine.

    kursusetöö, lisatud 01.02.2014

    Tulemüüri kontseptsioon, tüübid ja töö. Manustatud Windowsi tulemüüri. Windows XP hoolduspakett SP2, juurdepääs tulemüüri sätetele Windows XP hoolduspakett Service Pack 2. Windows Vista, liiklus lubatud. Windows 7, aktiivse profiili seaded. Isiklik tulemüür, testtasemed.

    abstraktne, lisatud 19.11.2010

    Tutvumine tehnilised kirjeldused personaalarvuti. Operatsioonisüsteemi paigaldamine ja Windowsi draiverid 7. Teed Akende puhastus XP Professional SP3. Operatsioonisüsteemi taastamise meetodid. Esitus Microsofti installid kontor 2010.

Microsoft Windows 10 operatsioonisüsteem paneb palju rõhku turvalisusele. Süsteemi üks olulisi elemente on " Windows Defender”, kuid ta ei suuda kõigi ähvardustega toime tulla. Eelkõige on viimasel ajal populaarsust kogunud Ransomware viirused, mille kuulsaimad reinkarnatsioonid on pahavara Petya ja . Microsoft on lunavaraviiruste vastu võitlemiseks kasutusele võtnud Windows 10 tuumaisolatsiooni ja mälu terviklikkuse funktsioonid. Vaikimisi on need keelatud.

Sisukord:

Mis on tuuma isoleerimine ja mälu terviklikkus

Südamiku isolatsioon- See on täiendav kaitseprotsess, mille tagab arvutiprotsesside kaitsmise meetod operatsioonisüsteemi ja seadme eest. Nende toimingute tõttu on võimalik vältida operatsioonisüsteemi töö kahjustamist, kui viirused arvutisse sisenevad.

Mälu terviklikkus on kerneli isoleerimisega kaasnev kaitsefunktsioon, mille eesmärk on piirata tundmatute potentsiaalselt ohtlike programmide juurdepääsu protsessidele kõrge tase turvalisus.

Tähtis: Kerneli eraldamise funktsioon saab töötada ainult siis, kui arvuti riistvara poolt on selleks piisavad tingimused. AT BIOS-i sätted virtualiseerimistehnoloogia peab olema aktiivne, tänu millele saab Windows 10 operatsioonisüsteemiga arvuti virtuaalses konteineris käivitada erinevaid rakendusi, piirates neile juurdepääsu süsteemi põhikomponentidelt.

Kuidas lubada tuuma eraldamist ja mälu terviklikkust

Windows 10 operatsioonisüsteemi sätted võimaldavad teil täielikult hallata arvuti turvafunktsioone. Windows 10 sätete kaudu saate lubada tuuma eraldamise ja mälu terviklikkuse järgmiselt.


Nagu eespool märgitud, kui arvuti riistvarakomponent virtualiseerimist ei toeta, antud funktsioon ei tööta. Sisselülitamisel näeb kasutaja paremas alanurgas teadet „Mälu terviklikkust ei saa tagada. Võimalik kokkusobimatus." Kui see teade kuvatakse, on soovitatav minna BIOS-i ja vaadata, kas funktsioon on lubatud. turvaline alglaadimine(käivitusrežiim).

Kuidas keelata kerneli isoleerimine ja mälu terviklikkus

Operatsioonisüsteemi uued funktsioonid, mis selle tööd tõsiselt mõjutavad, võivad arvuti töötamise ajal alati probleeme tekitada. Kerneli eraldamise funktsioon pole erand. Kasutajad, kes on seda juba proovinud, märgivad Microsofti foorumites, et paljude mängude ja programmide käivitamisel tekib probleeme. Ainus viis selle probleemi lahendamiseks on tuuma eraldamise funktsioon ja mälu terviklikkus keelata. Võib-olla parandavad rakenduste arendajad või Microsoft tulevastes värskendustes selle ühildumatuse.

Kerneli eraldamise ja mälu terviklikkuse keelamiseks on kolm võimalust: