Էլեկտրաէներգիայի կառավարում Windows-ում. Էլեկտրաէներգիայի կառավարում Windows Powercfg-ի ժառանգական միջուկի զանգահարողում

Windows Defender անվտանգության կենտրոն, ներառյալ նոր բաժինՍարքի անվտանգություն, որն առաջարկում է առաջադեմ անվտանգության գործիքների կառավարում, ինչպիսին է միջուկի մեկուսացումը:

Core Isolation-ը վիրտուալացման վրա հիմնված անվտանգության տեխնոլոգիա է, որն ապահովում է լրացուցիչ մակարդակպաշտպանություն խելացի հարձակումներից. Հիշողության ամբողջականությունը միջուկի մեկուսացման տեխնոլոգիայի կառուցման բլոկներից մեկն է. գործառույթ, որը նախատեսված է ներդրումը կանխելու համար: վնասակար կոդբարձր անվտանգությամբ գործընթացների մեջ: Պաշտպանությունն ապահովվում է՝ համոզվելով, որ միջուկի վիրտուալ հիշողության էջը սկսում է գործել միայն հետևողականության ստուգումը հաջողությամբ անցնելուց հետո:

Եկեք տեսնենք, թե ինչպես միացնել Հիշողության ամբողջականությունը Windows 10-ի 2018 թվականի ապրիլի թարմացումում՝ ձեր համակարգիչը ավելի անվտանգ դարձնելու համար:

Հիշողության ամբողջականության ապահովում

  • Բացեք Windows Defender անվտանգության կենտրոնը:
  • Ընտրեք «Սարքի անվտանգություն» բաժինը:
  • «Միջուկի մեկուսացում» բաժնում կտտացրեք «Միջուկի մեկուսացման տեղեկատվություն» հղմանը:
  • Հիշողության ամբողջականության անջատիչը դրեք ակտիվ դիրքում:

Այս քայլերն ավարտելուց հետո դուք պետք է վերագործարկեք ձեր համակարգիչը, որպեսզի փոփոխություններն ուժի մեջ մտնեն:

ՆշումՁեր պրոցեսորը պետք է աջակցի վիրտուալացման տեխնոլոգիաներին, որպեսզի այս գործառույթն աշխատի: Բացի այդ, վիրտուալացումը պետք է միացված լինի BIOS-ում կամ UEFI-ում: Հակառակ դեպքում գործառույթն անհասանելի կլինի:

Միջուկի մեկուսացման հետ կապված խնդիրների շտկում

Որոշ դեպքերում, եթե միջուկի մեկուսացումը միացված է, որոշ հավելվածներում կարող եք հանդիպել համատեղելիության հետ կապված խնդիրների: Խնդիրը շտկելու համար դուք ստիպված կլինեք անջատել գործառույթը:

Եթե ​​փորձում եք անջատել «Հիշողության ամբողջականությունը» Windows Defender Security Center-ում, սակայն տարբերակը դարձել է մոխրագույն և ցուցադրվում է «Այս կարգավորումը վերահսկվում է ձեր ադմինիստրատորի կողմից» հաղորդագրությունը, դուք դեռ կարող եք անջատել գործառույթը՝ օգտագործելով համակարգի ռեեստրը:

ՆշումՌեեստրի սխալ փոփոխությունը կարող է լուրջ խնդիրներ առաջացնել: Խորհուրդ է տրվում ստեղծել կրկնօրինակում windows ռեեստրայս քայլերին անցնելուց առաջ: Ռեեստրի խմբագրիչի ընտրացանկից ընտրեք Ֆայլ> Արտահանում` կրկնօրինակը պահելու համար:

  • Մամուլի համակցություն Windows ստեղներ+ R՝ Run պատուհանը բացելու համար:
  • Մուտքագրեք regedit և սեղմեք OK՝ ռեեստրի խմբագրիչը գործարկելու համար:
  • Անցեք հետևյալ ճանապարհին.
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ DeviceGuard \ Սցենարներ \ HypervisorEnforcedCodeIntegrity
  • Կրկնակի սեղմեք մուտքի վրա Միացված է.
  • Փոխեք արժեքը 1-ից 0-ի:
  • Սեղմեք OK:

Անջատելու համար կարող եք նաև օգտագործել պատրաստի տարբերակը

Հարց. Երբ երկար աշխատանքհամակարգիչը կամ քնի ռեժիմից արթնանալը, տառատեսակը կորչում է մեկնարկային ընտրացանկում


Երբ համակարգիչը երկար ժամանակ աշխատում է կամ երբ դուրս է գալիս քնի ռեժիմից, Start ընտրացանկը դառնում է այսպիսին.

Ինչպե՞ս կարող եմ սա շտկել: Օգնեցեք, խնդրում եմ..

Պատասխան.արդեն վերատեղադրված և թարմացված ՕՀ-ն (

Հարց. Ինչպե՞ս կարող եմ իմ համակարգիչը դնել քնի ռեժիմի S1 («Stand by»):


Միացված չէ սեղանադիր համակարգիչ, ոչ էլ նոութբուքի վրա ես չեմ կարողանում պարզել, թե ինչպես համակարգիչը դնել ձմեռման S1 տեսակի մեջ:

«Powercfg / a» գործարկման արդյունքը

Այս համակարգում հասանելի են ձմեռման հետևյալ վիճակները.
Սպասման ռեժիմ (S3)

Հետևյալ ձմեռային վիճակները հասանելի չեն այս համակարգում.
Սպասման ռեժիմ (S1)

Սպասման ռեժիմ (S2)
Համակարգի որոնվածը չի աջակցում սպասման ռեժիմին:

Ձմեռում
Ձմեռային ռեժիմը միացված չէ:

Սպասման ռեժիմ (միացված)
Համակարգի որոնվածը չի աջակցում սպասման ռեժիմին:

Հիբրիդային քնի ռեժիմ

Արագ մեկնարկ
Ձմեռային ռեժիմը հասանելի չէ:

Պատասխան.Թող համակարգիչը մի քանի րոպե անգործության մատնվի, այնուհետև քնեցրեք և արթնացրեք:

Իրադարձությունների մատյանում՝
Գործողություն => ստեղծել հատուկ դիտում
Ամսաթվի կետում սահմանեք, օրինակ, երկու րոպեանոց ընդմիջում և տեսեք, թե ինչ է տեղի ունեցել:

Այլևս գաղափարներ չունեմ:

Դե, ստուգեք համակարգչին միացված դրայվերներն ու սարքերը

Հարց. Արթնանում է առավոտյան ժամը 4-ին


Համարյա ամեն գիշեր համակարգիչը արթնանում է ու ինձ արթնացնում։
սարքի կառավարիչում, ցանցային ադապտերներ, հանեք «արթնացեք կախարդական փաթեթներով» վանդակը:
անջատել է արթնացման ժամաչափերը հոսանքի կարգավորումներում:
v հրամանի տող powercfg / waketimers հրամանը ցույց է տալիս սա:

c: \> powercfg / waketimers
Legacy Kernel Caller-ի կողմից սահմանված ժամաչափը գործում է մինչև 01/09/2016-ի ժամը 4:14:46-ը:
Պատճառը:

Օգնություն. Ո՞վ է մեղավոր և ինչ անել.

Պատասխան.վերջում նա բուժեց այս հիվանդությունը.

Կառավարման վահանակ -> Անվտանգություն և սպասարկում -> Սպասարկում -> Ավտոմատ սպասարկում -> Փոխել սպասարկման կարգավորումները -> հանել նշեք «Թույլատրել սպասարկման առաջադրանքին արթնացնել իմ համակարգիչը ...»:

Հարց. Համակարգիչը գիշերը ինքնաբերաբար միանում է


Անցյալ անգամ (մոտ 1 ... 2 ամիս), համակարգիչը քնի ռեժիմի մեջ դնելուց մոտ 30 ... 60 րոպե անց (որպեսզի կարողանաք առավոտյան աշխատել այն ընդհատվելու պահից), այն ինքնաբերաբար միանում է: Ես ավարտում եմ աշխատանքը գիշերը մոտավորապես ժամը 12-ին, այսինքն. միացումը տեղի է ունենում 0:30 ... 01:00: Այնուամենայնիվ, մոնիտորը մնում է մութ: Ես վեր եմ կենում անկողնուց, շարժում եմ մկնիկը - մոնիտորը միանում է, նորմալ ռեժիմով մտնում եմ պրոֆիլը, նորից դնում եմ քնի ռեժիմի - այս գիշեր այն այլևս չի միանում:

Win7 համակարգչի վրա կա ռեզիդենտ հակավիրուսային MS Cecurity Esentials: Ես մի քանի անգամ գործարկեցի արդիական (նոր ներբեռնված) բուժիչ կոմունալ ծառայությունները mbar և DrWeb Cureit. նրանք հանդիպեցին մի քանի բայակի, բայց այնուամենայնիվ ինքնաբուխ ակտիվացումը մնաց: Կարծես վիրուս լինի, որը միացնում է իմ համակարգիչը DDOS գրոհներին: Ավելին, ժամանակ առ ժամանակ Google-ը արգելափակում է մուտքը իմ IP-ից եկող կասկածելի տրաֆիկի պատճառով։ Սա տեղի է ունենում երկար ժամանակ (ավելի քան մեկ տարի), բայց ես միայն վերջերս նկատեցի համակարգչի ինքնաբուխ գործարկումը:

Իրականում հարցն այն է, որ եթե անսարքությունը հայտնի է, և համեմատաբար հեշտ է այն բուժել, ապա ես ներբեռնում եմ առաջարկվող ծրագրաշարը, սկանավորում և տեղադրում այն: Եթե ​​խնդիրն ավելի բարդ է, ապա ես չեմ խաբի ինձ կամ տեղացի գուրուին և հիմարաբար չեմ վերադասավորի համակարգը։

Պատասխան. Ֆալկոնիստմի բան, որ ես այնքան էլ չհասկացա...

Հաղորդագրություն Ֆալկոնիստ

համակարգիչը քնի ռեժիմի դնելուց հետո ... ինքնաբերաբար միանում է

7-ին քունն ու ձմեռումը բոլորովին տարբեր բաներ են: Այն քնի ռեժիմի մեջ դնելու համար պարզապես սեղմեք ստեղնաշարի «Sleep» կոճակը: Եթե ​​սեղմեք «Սկսել» և մկնիկը տեղափոխեք «Անջատման» կողքին գտնվող սլաքի վրա, կհայտնվի մենյու, որում կա նաև «Ձմեռային ռեժիմ»: և ձմեռում: Ձմեռման ժամանակ համակարգիչը անջատվում է սնուցումից այնպես, ինչպես անջատում եք, բայց երբ համակարգիչը միացնում եք, կարող եք սկսել աշխատել այնպես, ինչպես քնի ռեժիմից հետո:
Բայց դուք այլ բանի մասին եք հարցրել։ Դուք ստուգե՞լ եք առաջադրանքների ժամանակացույցը:

Հարց. Համակարգիչը գիշերը արթնանում է քնի ռեժիմից


Բարի օր բոլորին։ Այս խնդիրն արդեն հասցրել է ինձ: Ինքնին ԱՀ-ը գիշերը քնի ռեժիմից է դուրս գալիս, դա Windows 10-ն է, մինչ այդ 7-ը կար, նման խնդիր չկար, ես ընտրեցի կոնկրետ այս բաժինը։
Այն, ինչ արդեն արվել է 2 օր առաջ.
1. Միջոցառման դիտիչում ես գտա պատճառը. Ժամաչափ - «NT TASK \ Microsoft \ Windows \ UpdateOrchestrator \ Reboot» պլանավորված առաջադրանքը կկատարվի՝ խնդրելով համակարգչին արթնանալ քնի ռեժիմից:
Ես գնացի Task Scheduler, գտա այս առաջադրանքը և հանեցի վանդակը կետից. Պայմաններ - Արթնացրեք համակարգիչը առաջադրանքն ավարտելու համար:
2. Ես գնացի powercfg.cpl - Power scheme settings - Change Լրացուցիչ ընտրանքներԷլեկտրաէներգիա - Քուն - Թույլատրել արթնացման ժամաչափերը - ԱՆՋԱՏԵԼ:

Այս գիշեր իրավիճակը կրկնվեց, բայց իրադարձությունները դիտելիս ես գտա միայն.

Համակարգը դուրս է եկել ձմեռային վիճակից:

Քնի ժամանակը. 2016-10-29T21: 38: 38.657073700Z
Արթնանալու ժամ. 2016-10-29T21: 58: 34.625754700Z

Արդյունքի աղբյուրը. Տվյալներ չկան

3. Սարքի կառավարիչում ես մկնիկից, ստեղնաշարից, ցանցային քարտից հանել եմ «թույլ տուր այս սարքին արթնացնել համակարգիչը սպասման ռեժիմից» վանդակը և որտեղ էլ որ գտա այն ...

Օգնեք լուծել այս խնդիրը, ես այլևս չգիտեմ որտեղ փորել...

Պատասխան.

Հաղորդագրություն GoLeMjkeee

Արժեքը օրական 2-00

Փոխել ցերեկային ժամերին:

Հաղորդագրություն GoLeMjkeee

բայց մի տիզ .... չարժե այն:

Նա այդպիսին է, բնավորությամբ:

Հարց. Ինչպե՞ս հեռացնել էկրանը «Մուտք» կոճակով քնի ռեժիմից դուրս գալու ժամանակ:


Windows 10 Pro 1607.
Երբ դուրս եք գալիս քնի ռեժիմից, Windows-ը խնդրում է սեղմել «Enter»: Արթնանալուց հետո հայտնվում է կապույտ էկրանօգտանունի մակագրությամբ և դրա տակ «Մուտք» կոճակը։ Գաղտնաբառը սահմանված չէ, օգտատերը համակարգում միակն է, ով ունի ադմինիստրատորի իրավունքներ: Բեռնելիս ամեն ինչ կարգին է, էկրաններ և կոճակներ սեղմումներ չկան, պարզապես աշխատասեղան:

Ընտրանքներում - Հաշիվներ- Մուտքի ընտրանքներ չկա «Մուտք պահանջվում է» կետ:
Օգտատերերի հաշիվների պատուհանում Օգտատերերի ներդիրում «Պահանջել օգտվողի անուն և գաղտնաբառ» վանդակը չնշված է:
Էլեկտրաէներգիայի պլանի կարգավորումներում չկա «Պահանջել գաղտնաբառ արթնացման ժամանակ» կետը:

Ինչպե՞ս կարող եմ հեռացնել «Մուտք» կոճակը քնի ռեժիմից դուրս գալու ժամանակ, որպեսզի համակարգիչը ավտոմատ կերպով գործարկի աշխատասեղանը՝ շրջանցելով այս պատուհանը:

Պատասխան.հեռացնել ձմեռումը

Հարց. Windows 8.1-ն անջատվում է քնի ռեժիմում


Բարեւ Ձեզ.
Ես ձմեռելու խնդիր ունեմ։ Համակարգիչն ամբողջությամբ անջատվում է քնած ժամանակ։ Նրանք. իշխանությունը լիովին անհետանում է. Նախկինում համակարգային բլոկի լամպը թարթում էր քնաբերում, այժմ մկնիկը նույնպես ամբողջությամբ «խամրել» է usb-ով, ստեղնաշարը դուրս է գալիս և կարող է միանալ միայն միացման կոճակի միջոցով և, իհարկե, ամբողջ infa-ն չի պահպանվում:
Համացանցում շատ թեմաներ եմ կարդացել, բայց ոչ մի խնդիր իմ նման չէ։
Ես անմիջապես կգրեմ ԱՀ-ի բնութագրերը՝ մայրական ASUS p8h67, վիդեո ռադեոն HD7850 (asus), Intel i5 2550k, 8gb RAM, SSD Սիլիկոնային հզորություն s55 120gb, HDD WD 500gb:
Տեղադրված Windows 8.1-ը երկար ժամանակ կանգնած էր, և ձմեռային ռեժիմն աշխատեց այնպես, ինչպես պետք է: Մի անգամ այն ​​դադարեց աշխատել, ես նույնիսկ հստակ չգիտեմ, թե ինչու և ինչից հետո (որոշ գործողություններից) այն դադարեց աշխատել: Ես տենց բան չեմ տեղադրել, դրայվերը կարծես թարմացրել եմ։
Հաճախ սովորությունից դրդված անջատելու փոխարեն սեղմում եմ քնելու կոճակը ու մի անգամ մի քանի օր աշխատել ու աշխատել է, բայց ժամանակի ընթացքում դադարեց աշխատել։
Փորձել եք թարմացնել կամ հեռացնել դրայվերները: Փորձեցի անջատվել համակարգչից լրացուցիչ սարքեր(լավ, դու երբեք չգիտես): Քնելուց առաջ անջատել եմ տարբեր ծրագրեր։ Ոչինչ չօգնեց։
Ինտերնետում ես գտա միակ տեղեկատվությունը, որը ճիշտ է իմին (կետ 8).

Իհարկե, չկարողացա տեղադրել դրայվերները, տարբեր հարթակներ։ Ես չկարողացա նույնը գտնել ինձ համար:

Ես չեմ ուզում նորից տեղադրել ՕՀ-ն: ամեն ինչ (բացի քնածից) լավ է աշխատում։
Գաղափարներ կան, թե ինչ կարող է լինել սխալ:

Ավելացվել է 17 րոպե հետո
Մոռացել եմ գրել, թե ինչ է BIOS-ը վերակայել և թարմացնել:

Պատասխան.ստուգեք, ապա կամ BP կամ Mother: Մենք ծրագրավորել ենք քնի և ձմեռման ռեժիմը միացված է powercfg/h:

Մեկ այլ տարբերակ ստուգելն է (փոխարինելը): hiberfil.sys - այն պատասխանատու է ձմեռման համար:

Հարց. Ձմեռել Windows 8-ում


քնից դուրս գալուց հետո windows ռեժիմ 8-ը սկսում է վերագործարկել և դրանից հետո Windows bootհետևյալ հաղորդագրությունը հեռանում է
ասա ինձ, թե ինչպես վարվել դրա հետ:

Պատասխան.

Հաղորդագրություն ազատ145

ձմեռային ռեժիմից դուրս գալուց հետո Windows 8-ը սկսում է վերագործարկել

Սկզբում.
Ավելի ուշ։

Հարց՝ հիբրիդային քուն, թե՞ ձմեռում: Ի՞նչն է նախընտրելի աշխատասեղանին:


Ընդհանուր առմամբ հարցը վերնագրի մեջ է. Ինչպես հասկացա որոնողական համակարգից, ավելի ճիշտ՝ բոլոր կայքերում պատճենված նույն հոդվածից, Hybrid sleep ռեժիմի առավելությունը միայն միացման, արթնանալու արագության մեջ է, կարելի է ասել։ Եվ եթե ես ուզում եմ օգտագործել Ձմեռային ռեժիմը իմ աշխատասեղանի Windows 7 x64-ում, կա ստորջրյա ժայռեր? Ես պարզապես պետք է անջատեմ հոսանքը, և ավելի լավ է դա չանել հիբրիդային քնի ռեժիմում: Շնորհակալություն բոլորին, ովքեր արձագանքում են

Պատասխան.Այսօր կարդացի։ Լավ, իմ կարծիքով, իմ հարցի այլ պատասխան չկա, քան Microsoft-ի կարճ ճեպազրույցը: Այնուհետև ես կկիսվեմ իմ բացահայտումներով (նրանց համար, ովքեր ընկնում են այս թեմայի մեջ նմանատիպ հարցի շուրջ):
Այսպիսով.

կողմՀիբրիդ քնի ռեժիմ. 1. Արագ մեկնարկ, համակարգիչը ամբողջությամբ անջատելու կարիք չկա;
Մինուսներ 1. Բեռներ HDD(ըստ մեր ֆորումի Windows 7 բաժնի մեկ մոդերատորի); 2. Ամբողջովին չի անջատվում, շարունակում է հոսանք սպառել, թեկուզ քիչ (չնայած ոմանց համար այս տարրը պլյուս է)

Մի խոսքով, ձմեռման ռեժիմը անհրաժեշտ է, եթե ցանկանում եք անընդհատ անջատվել ցանցից, բայց չեք ցանկանում երկար ժամանակ բեռնել/անջատել ՕՀ-ը:
Հիբրիդային քնի ռեժիմ՝ նրանց համար, ովքեր բավարարված են համակարգչով, որն անընդհատ ցանցում է:

Հարց. Նախկինում նոութբուքն անջատված էր գործարկման ժամանակ, այժմ քնի ռեժիմում


իմ DELL նոութբուք INSPIRON 3521-ը Windows 8.1-ով նախկինում անջատված էր գործարկման ժամանակ (հայտնվեց DELL-ի լոգոն - անջատել - նորից միացնել և նորմալ գործել): Համակարգը թարմացրել եմ 10k-ով, չօգնեց։ Ես այն հագա լեռնային սպասարկման կենտրոնում, որը հայտնի էր քաղաքում և գովաբանում էի. այնտեղ նոութբուքը 2 շաբաթ ապահով հանգստացավ մարդկային ուշադրությունից: Վերցնելով այն՝ ես խնդիրը շտկեցի՝ անջատելով արագ բեռնումև, նշելու համար, վերադարձավ 8.1:
Անցել է մեկ ամիս, և հիմա, երբ փակում եմ նոութբուքի կափարիչը, այն անցնում է քնի ռեժիմի (ինչպես կարգավորումներում), բայց 20 րոպեից կամ մի փոքր ավելի հետո այն ընդհանրապես անջատվում է (նախկինում այդպես չէր և հոսանքի պարամետրերը չեն փոխվել): Միացնելիս իրավիճակը, որը նկարագրեցի վերևում. միացում - լոգո - անջատում: Նորմալ շահագործում վերագործարկումից հետո: Բոլոր վարորդները թարմացված են: Ինչ կարող է լինել խնդիրը և ինչպես շտկել այն: Ափսոս է աղքատ մարդու համար, ընդհանուր առմամբ մեկուկես տարի, բայց ես ունեմ դիպլոմ և պետական ​​վկայականներ, ես հիմա չեմ կարող դա տանել վարպետների շուրջը ...

Պատասխան.Ինչպե՞ս եք ցանկանում, որ այն աշխատի: Անձամբ ես օգտագործում եմ ձմեռում, ոչ թե ձմեռում, անցումը ձմեռման ռեժիմին միացված է նաև անգործության ժամանակ, կարգավորումները հավելվածում

Էլեկտրաէներգիայի կարգավորումների փոխանցում

Ուղարկել ձեր լավ աշխատանքը գիտելիքների բազայում պարզ է: Օգտագործեք ստորև ներկայացված ձևը

Ուսանողները, ասպիրանտները, երիտասարդ գիտնականները, ովքեր օգտագործում են գիտելիքների բազան իրենց ուսումնառության և աշխատանքի մեջ, շատ շնորհակալ կլինեն ձեզ:

Տեղադրված է http://www.allbest.ru/ կայքում

1. Տեսական տեղեկատվություն

1.1 Windows Kernel Drivers-ի մշակում

Համառոտ տեսական տեղեկատվություն

Միջուկի վարորդի մշակում

Վարորդը համակարգչային ծրագիր է, որի միջոցով մեկ այլ ծրագիր (սովորաբար օպերացիոն համակարգ) ստանդարտ ձևով մուտք է գործում սարքավորում:

Էսքիզ՝ ցույց տալու, թե ինչպես են աշխատում տարբեր տեսակի վարորդներ.

Հարմար է բաժանել 2 տեսակի.

- միջուկի դրայվերներ (նրանք աշխատում են արտոնությունների 0 մակարդակում, բայց ոչ մի կերպ չեն փոխազդում ոչ օգտագործողի ծրագրի, ոչ սարքի հետ: Հենց նրանցով մենք կսկսենք (դրանք ավելի պարզ են և կարող են նաև օգտակար լինել):

Սարքի վարորդներն անհրաժեշտ են օգտատիրոջ ծրագրի և սարքի միջև փոխազդելու համար, մասնավորապես՝ տվյալների փոխանցման, սարքը կառավարելու համար: Ավելին, սարքերը կարող են լինել ինչպես իրական, այնպես էլ վիրտուալ): Վարորդը պարտավոր չէ որևէ մեկին կառավարել ֆիզիկական սարք... Որոշ օպերացիոն համակարգեր նաև թույլ են տալիս ստեղծել վարորդներ վիրտուալ սարքերի համար՝ օբյեկտներ, որոնք իրենց նման են I/O սարքերի, բայց չեն համապատասխանում որևէ ֆիզիկական սարքի:

Միջուկի բաղադրիչները աշխատում են արտոնյալ պրոցեսորի ռեժիմով (կոչվում է միջուկի ռեժիմ), կարող են անել ամեն ինչ, մասնավորապես.

- նրանք կարող են կատարել արտոնյալ պրոցեսորի հրամաններ (ինչպես lgdt),

- կարող է մուտք ունենալ համակարգի տվյալների և կոդի,

- ունենալ անմիջական մուտք դեպի սարքավորումներ, օրինակ, նավահանգիստների միջոցով

- մուտք ունենալ դեպի հիշողության բջիջներ; վարորդը չի կարող ուղղակիորեն շահարկել ֆիզիկական հիշողությունը, սակայն կարող է ցանկացած ֆիզիկական հիշողության վիրտուալ հասցե ստանալ և շահարկել այն:

Եթե ​​Ձեզ անհրաժեշտ է գրել որևէ լուրջ ծրագիր, որը պահանջում է մուտք գործել համակարգի ներքին գործառույթներ կամ տվյալների կառուցվածքներ, ապա կարող եք հանդիպել բազմաթիվ սահմանափակումների, որոնք հնարավոր է հաղթահարել միայն ձեր կոդը տեղադրելով համակարգի հասցեների տարածքում: Դա անելու միակ փաստաթղթավորված միջոցը վարորդի տեղադրումն է: Այս մեթոդը համեմատաբար պարզ է, հուսալի և, ամենակարևորը, ամբողջությամբ աջակցվում է հենց օպերացիոն համակարգի կողմից:

Միջուկի կոդը (իրականում սա ինքնին համակարգն է) համարվում է լիովին վստահելի։ Հետևաբար, բեռնվելով համակարգի հասցեների տարածությունում՝ վարորդը դառնում է համակարգի մաս և ենթակա չէ որևէ սահմանափակումների: Windows-ում սա գործնականում միակ միջոցն է ոչ ՕՀ մշակողների համար՝ գրել միջուկի մակարդակի համակարգի բաղադրիչներ:

Դրայվերների մշակման ուղիները գրելու և ուսումնասիրելու համար նրանք օգտագործում են DDK (Device Development Kit)՝ վարորդների մշակման համակարգ:

Բացի փաստաթղթերից, DDK-ն ներառում է ներառող ֆայլերի մի շարք (* .inc) և գրադարանային ֆայլեր (* .lib):

Այսպիսով, Windows-ն աջակցում է տարբեր տեսակի սարքերի դրայվերների, բայց բացի այդ, կան դրայվերներ, որոնք սարքի դրայվեր չեն, այլ պարզապես թույլ են տալիս ստեղծել ծրագրեր, որոնք կաշխատեն Windows միջուկի ռեժիմում, այսինքն. 0 արտոնությունների մակարդակով: Դրանով նրանք լիովին հասանելի են ՕՀ-ին և սարքավորումներին:

Եկեք նայենք միջուկի ռեժիմի ամենապարզ դրայվերին:

#ներառում

int DriverEntry (

PDRIVER_OBJECT-ում pDriverObject,

PUNICODE_STRING pusRegistryPath-ում) (

}

Մուտքի կետը DriverEntry-ն է, որը կառուցված է որպես ընթացակարգ, որը վերցնում է երկու պարամետր.

pDriverObject Ցուցիչ դեպի նոր ստեղծված դրայվեր օբյեկտ: Վարորդը բեռնելիս համակարգը ստեղծում է վարորդի օբյեկտ, որը ներկայացնում է վարորդի հիշողության պատկերը դրա համար: Համակարգը կառավարում է վարորդին այս օբյեկտի միջոցով: Վարորդի օբյեկտը DRIVER_OBJECT տիպի սովորական տվյալների կառուցվածք է:

pusRegistryPath Ցուցիչ դեպի ռեեստրի բանալի, որը պարունակում է վարորդի սկզբնավորման պարամետրեր:

Այս մեր առաջին դրայվերը պարզապես բեռնվում է համակարգ և անմիջապես բեռնաթափվում:

Հիմա եկեք նայենք կաղապարային ծրագրին, որը պետք է օգտագործվի դասընթացի աշխատանքի առաջին քայլում ծրագիրը մշակելու համար (beeper.sys միջուկի ռեժիմի դրայվեր):

Այս դրայվերի խնդիրն է մեկ նոտա նվագարկել մինչև առաջին օկտավանը համակարգի դինամիկայի վրա: Դա անելու համար վարորդը օգտագործում է պրոցեսորի հրահանգները ներս և դուրս՝ հղում կատարելով համապատասխան I/O պորտերին: Հայտնի է, որ մուտքը դեպի I/O նավահանգիստներ սրբորեն պաշտպանված է: Windows համակարգռեսուրս. Դրանցից որևէ մեկին մուտք գործելու փորձը, ինչպես մուտքային, այնպես էլ ելքային, օգտագործողի ռեժիմից, անխուսափելիորեն հանգեցնում է բացառության:

Մեր օրինակում բարձրախոսը կաշխատի (դրա համար, մասնավորապես, օգտագործվում են 61h, 0 և 1 բիթ, պորտ 43h և 42h):

Վարորդի սկզբում բոլոր 12 նշումները սահմանվում են:

Անհրաժեշտ կլինի ոչ միայն միացնել բարձրախոսը, այլև սահմանել ձայնի հաճախականությունը։ Դրա համար օգտագործվում է ժամանակաչափ ենթահամակարգ, որն աշխատում է պրոցեսորից անկախ և ունի 3 ալիք։ 2-րդ ալիքի ելքը միացված է բարձրախոսին, որն օգտագործվում է տարբեր հաճախականությունների ձայն ստեղծելու համար: Ձայնի ձայնի տիրույթը 30 Հց-6000 Հց է:

Ձայնի հաճախականությունը սահմանելու համար հսկիչ բառը 0Bh ուղարկվում է 43h նավահանգիստ (ժմչփի հրամանի ռեգիստր).

mov al, 0Bh

դուրս 43ժ, ալ

Այս արժեքը որոշում է ալիքի համարը, որը մենք կվերահսկենք, գործողության տեսակը, ալիքի ռեժիմը և հաշվիչի ձևաչափը:

Այնուհետև վերահաշվարկված ձայնային հաճախականությունը (1193167 / հաճախականություն (Հց)) ուղարկվում է 42h նավահանգիստ երկու մասով (նախ ցածր կարգի մասը, այնուհետև բարձրակարգը):

Օրինակ, մենք ուզում ենք ստանալ ձայնային հաճախականություն 100 Հց: Մենք վերահաշվում ենք հաճախականությունը,

1193167/100 = 11931

Ապա.

mov ax, 11931 թ

դուրս 42ժ, ալ

մով ալ, ահ

դուրս 42ժ, ալ

Դասընթացի աշխատանքի առաջին քայլին անհրաժեշտ է փոխել ծրագիրը, որպեսզի այն արտադրի այլ երաժշտական ​​հնչյուններ (յուրաքանչյուրն ունի իր տարբերակ):

Քվեստները հաճախ պետք է տարբեր տեւողություններ սահմանեն: Դրա համար հարմար է օգտագործել DO_DELAY պրոցեդուրան՝ դրանում փոխանցելով անուղղակիորեն սահմանված «ձայնի ժամանակ» պարամետրը։

Վարորդի վրիպազերծումը հեշտացնելու համար կան տարբեր գործիքներ: Ամենապարզը անհրաժեշտ տեղեկատվությունը ցուցադրելն է Debug View կոմունալ ծրագրի հատուկ պատուհանում: Այս ծրագիրը նախապես գործարկվել և կազմաձևվել է միջուկի մակարդակից հաղորդագրությունները ընդհատելու համար: Արդյունքի համար ծրագիրը կանչում է DbgPrint ֆունկցիան, որն ունի մեկ պարամետր՝ ելքային տողը։ Վարորդը գործարկելուց հետո ամբողջ ելքը ցուցադրվում է Debug View պատուհանում:

Վարորդը միջուկում տեղադրելու տարբեր եղանակներ կան: Քանի որ մեր դրայվերը, ըստ էության, համակարգին պետք չէ (այն չի կառավարում ոչ մի սարք), մենք ժամանակավորապես կկապենք դրայվերը համակարգին, ապա կջնջենք այն։

Դա անելու համար դուք պետք է ստեղծեք ծրագիր, որը կգործարկի վարորդը: Ինչպե՞ս: Վարորդը միջուկի մակարդակի ծառայություն է: Հետևաբար, հավելվածը կօգտագործի SCM - Service Control Manager-ը, որն ընդգրկված է Windows-ում և աշխատում է օգտատիրոջ մակարդակով:

Այսպիսով, դուք պետք է լուծում ստեղծեք երկու նախագծերից՝ կոնսոլային հավելված և դրայվեր:

C-ում դրայվերներ մշակելու համար նախ պետք է.

- տեղադրել DDK,

- սահմանել WNETBASE միջավայրի փոփոխականը (արժեքը DDK-ի ուղին է, օրինակ՝ e: \ winddk \ 3790.1830):

Վարորդի նախագիծը պետք է լինի MakeFile տեսակի:

Կատարեք նախագծի կարգավորումները՝ օգտագործելով Application Settings-ը և գրեք տողը Build Command Line դաշտում

ddkbuild -WNETXP chk. -ceZ

ինչը նշանակում է զանգահարել հատուկ սկրիպտ՝ VC-ին DDK-ի հետ կապելու համար

Ֆայլերը պետք է ներկա լինեն ծրագրի ընթացիկ թղթապանակում.

աղբյուրներ, makefile, ddkbuild.cmd (սկրիպտ), դրայվեր սկզբնաղբյուր file.c

Նախագիծը կառուցելուց հետո վարորդը պետք է ունենա sys ընդլայնում:

Հավելվածը գործարկում է beeper.sys դրայվերը, այսինքն. գրանցում է այն ռեեստրում և գործարկում: Հետո, երբ ավարտվում է, այն ջնջում է ռեեստրից:

Որպեսզի հավելվածը գործարկի դրայվերը, լուծում ստեղծելուց հետո, որը բաղկացած է երկու նախագծից՝ հավելվածից և դրայվերից, դուք պետք է տեղադրեք հավելվածի գործարկվող ֆայլը և դրայվերը նույն թղթապանակում, այնուհետև գործարկեք հավելվածը:

Վարորդները շատ դժվար է կարգաբերել: ՕՀ-ի աշխատանքի ժամանակ սխալների դեպքում այն ​​հաճախ սառչում է և պահանջում է վերաբեռնում: Իսկ մեր վարորդի համար, վերագործարկումից հետո, դուք նույնպես պետք է ջնջեք beeper06 ծառայությունը ռեեստրից՝ օգտագործելով regedit (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \), այնուհետև նորից վերագործարկեք:

1.2 Windows վիրտուալ սարքի վարորդներ

Մինչ այժմ մենք մշակում ենք միջուկի ռեժիմի վարորդ, որը կարող է անել այնպիսի բաներ, որոնք հնարավոր չէ անել օգտվողի մակարդակով, մասնավորապես, աշխատել I/O պորտերի հետ: Նման դրայվերը կոչվում է միջուկի դրայվեր, բայց ոչ սարքի դրայվեր, քանի որ տվյալները չեն փոխանցվում օգտատիրոջ ծրագրի և սարքի միջև (ի վերջո, ինչո՞ւ է սովորաբար անհրաժեշտ դրայվերը: Օգտվողի հավելվածի և օգտատիրոջ միջև տվյալների փոխանակումը կազմակերպելու համար: սարք):

Այժմ մենք կմշակենք սարքի դրայվերներ, որոնք տվյալներ են փոխանցում օգտատիրոջ հավելվածի և սարքի միջև:

Երբ հավելվածը պահանջում է I/O գործողություն, զանգ է կատարվում վարորդին: Դա անելու համար հավելվածը կարող է սարքից տվյալներ կարդալու կամ սարքում տվյալներ գրելու հարցում կատարել: Իսկ եթե ինչ-որ այլ գործողություն է պահանջվում, օրինակ՝ սարքի հարցում կամ կառավարում, կամ այլ բան, ապա այսպես կոչված. IOCTL ինտերֆեյս (Device In-Out Control):

Մենք կդիտարկենք հենց այդպիսի դեպք վիրտուալ սարքերի համար, քանի որ ավելի հաճախ, քան ոչ, ինչու է մեզ անհրաժեշտ վիրտուալ սարքը դրայվերում: Որպեսզի կարողանաք դրան փոխանցել տվյալներ, որոնք վարորդը կարող է ինչ-որ կերպ մշակել (որպես հավելվածում անհնար է) և արդյունքը վերադարձնել հավելված։ Հիշեցնենք, որ նախկինում քննարկված միջուկի սովորական դրայվերը ոչինչ չի վերցրել հավելվածից և այնտեղ ոչինչ չի վերադարձրել, այլ պարզապես արել է գործողություններ, որոնք հասանելի չեն հավելվածին:

Երբ հավելվածը պահանջում է I/O գործողություն, զանգ է կատարվում վարորդին: Դրա համար այսպես կոչված. IOCTL ինտերֆեյս (Device In-Out Control):

Զանգահարող հավելվածն անում է հետևյալը.

1) ֆայլ բացելը և դրա նկարագրիչը ստանալը.

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

Արդյունքում, եթե ամեն ինչ հաջողությամբ տեղի ունեցավ, մենք ստանում ենք սարքի նկարագրիչը:

2) Վարորդին գործողությունների կոդը ուղարկելը (ինչ անել, վարորդը կարող է իրականացնել բազմաթիվ տարբեր գործողություններ).

կանչել DeviceIoControl, նկարագրիչ, գործողության կոդը, մուտքային բուֆերի հասցեն, մուտքային տվյալների չափը, ելքային բուֆերի հասցեն, ելքային տվյալների չափը, բայթերի իրական քանակի բուֆերի հասցեն

3) Ֆայլի փակում և, համապատասխանաբար, նկարագրիչի ազատում:

կանչել CloseHandle սարքի բռնակը

Տվյալների փոխանցման համար մոդուլները (հավելվածը և դրայվերը) պետք է համաձայնեցնեն փոխազդեցության արձանագրությունը (գործողության կոդերը, բուֆերների կառուցվածքը՝ մուտքային և ելք):

Գործողության նույն կոդը օգտագործվում է ինչպես հավելվածում, այնպես էլ դրայվերում:

Գործողությունների կոդը հավելվածում և դրայվերում կարող է գրվել տասնվեցական ձևով, կամ կարող եք օգտագործել CTL_CODE մակրո, ինչպես արվում է օրինակ լաբորատորիայում: աշխատել common.inc ֆայլում:

Դիտարկենք գործողության կոդի օրինակ վիրտուալ սարքի վարորդից, որն օգտագործվում է այս լաբորատորիայում: Անունն է IOCTL_GET:

Վիրտուալ սարքի դեպքում ֆայլի դրոշակը 0 է։

Սարքի տեսակը - FILE_DEVICE_UNKNOWN = 22 ժամ

Մուտքի իրավունքներ - FILE_READ_ACCESS + FILE_WRITE_ACCESS = 1 + 2 = 3 = 11b

Գործառույթի կոդը տատանվում է 800h-ից մինչև FFFh: Մենք ունենք 800ժ.

Բուֆերային մեթոդ - հավելվածի և վարորդի միջև տվյալների փոխանցման եղանակ (հնարավոր է երեքը).

Փոքր քանակությամբ տվյալների համար սովորաբար օգտագործվում է METHOD_BUFFERED (00b) - լրացուցիչ բուֆեր է հատկացվում ոչ էջային հիշողության մեջ, որը բավարար է մուտքային և ելքային բուֆերները տեղավորելու համար: Այս բուֆերի հասցեն տեղադրված է IRP-ում՝ AssociatedIrp.SystemBuffer դաշտում: I/O դիսպետչերը ստանձնում է օգտագործողի բուֆերի և օժանդակ բուֆերի միջև տվյալների վերագրման աշխատանքը:

Տվյալների ուղղակի մուտք (առանց բուֆերի) - METHOD_OUT_DIRECT (2) - ելքի համար, կամ METOD_IN_DIRECT (1) - մուտքագրման համար; դաշտ IRP-ից - MdlAddress: Սա ուղղակի զանգ է. I/O կառավարիչը պարտավորվում է հիշել ֆիզիկական էջերը, որոնք պարունակում են օգտագործողի ռեժիմի բուֆեր: Միևնույն ժամանակ, այն ստեղծում է օժանդակ կառուցվածք MDL (Memory Descriptor List)՝ ամրագրված էջերը նկարագրելու համար։ Իսկ վարորդի մշակողը աշխատում է MDL-ի հետ։

Մուտք գործածողի մակարդակի բուֆերի միջոցով - METHOD_NEITHER (3); դաշտ IRP-ից - SystemBuffer: I/O կառավարիչը վարորդին փոխանցում է վիրտուալ օգտագործողի ռեժիմի հասցեներ: Իսկ վարորդում պետք է շատ զգույշ աշխատել նրանց հետ, քանի որ վարորդն այս դեպքում պետք է աշխատի միայն կանչող թեմայի համատեքստում։

Երբ հավելվածը գործողության կոդ է ուղարկում վարորդին, գործարկում է I/O կառավարիչը: Այն պատասխանատու է I/O հարցումների փաթեթ (IRP) ստեղծելու և այն վարորդին հետագա մշակման համար ուղարկելու համար:

Մենք կքննարկենք 3 տեսակի հարցումներ.

IRP_MJ_CREATE - կփոխանցվի CreateFile-ին,

IRP_MJ_DEVICE_CONTROL - կփոխանցվի DeviceIoControl-ի միջոցով

IPR_MJ_CLOSE - CloseHandle-ում

IRP-ն բաղկացած է վերնագրից և բաշխման կույտերից: I/O կառավարիչը ստեղծում է I/O կույտային բջիջների քանակը, որը հավասար է վարորդի շերտերի քանակին, որոնք ներգրավված են հարցումը մշակելիս: Յուրաքանչյուր վարորդին թույլատրվում է մուտք գործել իր սեփական կույտի գտնվելու վայրը: Երբ դրայվերը IRP է փոխանցում ավելի ցածր մակարդակի դրայվերին, կույտի ցուցիչը տեղափոխվում է այն վայրը, որն անհրաժեշտ է վարորդին: Ընդհակառակը, հարցումը մշակելուց հետո ցուցիչը տեղափոխվում է վերին մակարդակի վարորդի բջիջ: Սլաքի ստացում ֆունկցիայի միջոցով՝ IoGetCurrentStackLocation ():

Յուրաքանչյուր հատկացման կույտ պարունակում է ցուցիչ դեպի DeviceObject և FileObject, որոնց համար հարցումն սկսվել է: IRP-ները միշտ պահվում են չէջադրված հիշողության մեջ:

Վարորդի աշխատանքի համար ստեղծվում և կիրառվում են հետևյալ օբյեկտները.

Վարորդի օբյեկտ;

Սարքի օբյեկտներ;

Վարորդի փուլերը.

1) Վարորդի օբյեկտի ստեղծում. Ստեղծվել է, երբ վարորդը բեռնված է իր գործարկման փուլում: Այս պահին DriverEntry ֆունկցիան գործարկվում է, և MajorFunction զանգվածը լրացվում է, ինչպես նաև ցուցիչը դեպի սարքի օբյեկտ և դրանից դուրս:

Սարքի օբյեկտը ներառում է.

Սարքի տեսակը.

2) Ստեղծեք սարքի խորհրդանշական հղում: Որպեսզի «սարք» օբյեկտը հասանելի դառնա օգտագործողի ռեժիմի կոդը, վարորդը պետք է ստեղծի իրեն հասանելի «\ ??» գրացուցակում (օգտագործողի ռեժիմի կոդը): մեկ այլ առարկա խորհրդանշական կապ է: shablon.sys դրայվերը «\ ??» գրացուցակում ստեղծում է «slshablon» խորհրդանշական հղում իր սարքի «devshablon», որի արժեքը «\ Device \ devshablon» տողն է։

Այսպիսով, արդեն վարորդը բեռնելիս (մեր դեպքում՝ ՕՀ-ի բեռնման փուլում), մենք հիշողության մեջ ունենք երեք օբյեկտ՝ դրայվերը «\ Driver \ shablon», սարքը «\ Device \ shablon» և խորհրդանշական հղումը դեպի սարքը «\ ?? \ slshablon»:

3) բացում. Հաջորդը, երբ դիմումը սկսվում է, կանչվում է CreateFile: Սարքի հղում կա: DEVICE_OBJECT սարքի օբյեկտի կառուցվածքը տեղեկատվություն է առբերում իր սպասարկող վարորդի մասին: I/O կառավարիչը ստեղծում է IRP I/O հարցումների փաթեթ IRP_MJ_CREATE տիպի և ուղարկում այն ​​վարորդին: Ահա թե ինչպես է վարորդը իմանում, որ օգտագործողի ռեժիմի կոդը փորձում է մուտք գործել իր սարք: Եթե ​​վարորդը դեմ չէ, ապա այն վերադարձնում է հաջողության կոդը: Մեր վարորդն ունի առաքման հատուկ ընթացակարգ, որն արձագանքում է այս IRP-ին՝ DispatchCreateClose (կա սարքը բացելու և փակելու համակցված ընթացակարգ): Այն պարունակում է STATUS_SUCCESS Io.Status.Status դաշտում և 0 Io.Status.Information-ում, քանի որ այս դեպքում ոչինչ պետք չէ փոխանցել։ Վարորդի այս պատասխանը ազդանշան է օբյեկտների կառավարչին ստեղծելու համար վիրտուալ ֆայլ... Սա նոր տարր է ստեղծում գործընթացի բռնակի աղյուսակում՝ «ֆայլ» օբյեկտի ցուցիչով, և նոր բռնակ վերադարձնում է օգտագործողի ռեժիմի կոդը:

Եթե ​​ամեն ինչ կարգին է, ապա մենք պահում ենք CreateFile-ի վերադարձած ֆայլի նկարագրիչը hDevice փոփոխականում:

4) Գործողություններ ներս/դուրս. Այժմ մենք կարող ենք այս սարքը կառավարելու գործողություններ իրականացնել՝ զանգահարելով DeviceIoControl ֆունկցիաները: Քանի որ սարքի վարորդը կարող է սկզբունքորեն կատարել բազմաթիվ տարբեր առաջադրանքներ, անհրաժեշտ է ինչ-որ կերպ տարբերակել հարցումները: Սա է dwIoControlCode երկրորդ պարամետրի նպատակը, որը կոչվում է I/O կառավարման կոդը, որը կառուցված է որոշակի կանոնների համաձայն:

Օգտագործելով սարքի նկարագրիչը՝ I/O կառավարիչը կվերցնի սպասարկող վարորդի մասին տեղեկատվություն, կստեղծի IRP_MJ_DEVICE_CONTROL տիպի I/O հարցումների փաթեթ և այն կուղարկի վարորդին: Վարորդը կկանչի համապատասխան DispatchControl պրոցեդուրան, որին փոխանցվում է գործողության կոդը և մուտքային և ելքային բուֆերների հասցեների ու չափերի մասին տեղեկությունները որպես պարամետրեր: Այս ամենը հաղորդվում է IRP-ի միջոցով: Ընթացակարգում անհրաժեշտ տեղեկատվությունը վերցվում է IRP-ից՝ գործողության կոդը, տվյալների փոխանցման բուֆերի հասցեն:

DispatchControl պրոցեդուրան կատարում է անհրաժեշտ գործողությունները, մեր դեպքում՝ IRP փաթեթի հասցեն ESI ռեգիստրից Այնուհետև արդյունքը ելքային բուֆերի միջոցով փոխանցում է հավելված:

Նախորդ ընթացակարգի նման, մենք անցնում ենք IRP-ի ավարտի կարգավիճակը և դրայվերից փոխանցված բայթերի քանակը:

Հավելվածում այս տվյալները ֆորմատավորվում և ցուցադրվում են:

5) փակում. Ինչպես դա պետք է արվի այլևս կարիք չունեցող բռնակներով, կանչելով CloseHandle ֆունկցիան, մենք փակում ենք սարքի բռնակը։

6) վարորդի բեռնաթափում. Հեռացրեք խորհրդանշական հղումը և հեռացրեք սարքի օբյեկտը:

Համալիրը (2) բաղկացած է երկու ծրագրերից.

Ծրագիր, որը վարորդից հարցնում է IRP հասցեն, այնուհետև թողարկում է այս հասցեն ստանդարտ պատուհան Windows.

Shablon.sys - վարորդ.

Shablon դրայվերն անում է մի բան, որը հնարավոր չէ անել օգտատիրոջ մակարդակով այս դեպքումսահմանում է esi ռեգիստրի բովանդակությունը, երբ վարորդը աշխատում է:

Ելքային բուֆերում գտնվող հավելվածը ստանում է esi բովանդակությունը, այն փոխակերպում է տասնվեցական ելքի համար և այն դուրս է բերում ստանդարտ Windows պատուհանի:

Եթե ​​Ձեզ անհրաժեշտ է վարորդի մեջ CMOS-ից տեղեկատվություն ստանալ, ապա ձեզ անհրաժեշտ է.

Ուղարկեք հետաքրքրության CMOS օֆսեթը 70h նավահանգստին;

Փոքր ուշացում;

Ստացեք տեղեկատվություն 71h նավահանգստից մինչև al.

Այնուհետև գրեք այս տեղեկատվությունը ելքային բուֆերում:

Իսկ հավելվածում պետք է տեղեկատվություն վերցնել ելքային բուֆերից, անհրաժեշտության դեպքում վերափոխել այն և ցուցադրել, կամ վերլուծել այն և, կախված արդյունքից, ցուցադրել անհրաժեշտ տեքստը ստանդարտ պատուհանում։

Այս լաբորատորիան ենթադրում է, որ դրայվերը մշտապես տեղադրված է Windows-ում՝ օգտագործելով .inf ֆայլ՝ օգտագործելով Control Panel - Սարքավորումների տեղադրում. Ավելացնել նոր սարք, տեղադրել ձեռքով, Ցուցադրել բոլոր սարքերը, ունենալ սկավառակ, զննել՝ ընտրելու .inf ֆայլը (վարորդը պետք է լինել նույն թղթապանակում):

Ստուգելու համար, որ դրայվերը տեղադրված է, կառավարման վահանակում ընտրեք System, Hardware, Device Manager:

1.3 Օգտվողի ռեժիմի հավելվածներից գոյություն ունեցող վարորդների հասանելիություն

Վարորդի հետ աշխատող հավելվածի ալգորիթմ

Վարորդի հետ աշխատելու համար օգտագործողի ռեժիմի հավելվածը պետք է ստանա վարորդի մանիպուլյատոր (բռնակ): Այս մանիպուլյատորը կարելի է ձեռք բերել CreateFile կամ CreateFileA API ֆունկցիայի միջոցով, որն աշխատում է ASCII նիշերով: Այնուհետև օգտագործվում է API ֆունկցիան DeviceIoControl, որին փոխանցվում է IOCTL կոդը՝ որպես պարամետրերից մեկը։ IOCTL կոդը կառավարման ծածկագիրն է, որով վարորդը իմանում է գործողության մասին, որը պահանջում է կատարել հավելվածը, պարամետրերի փոխանցման եղանակը և մուտքի իրավունքները, որոնք անհրաժեշտ են հավելվածին այս գործողությունը կատարելու համար: Դիմումը զանգահարելուց հետո

IRP_MJ_DEVICE_CONTROL-ն ուղարկվում է DeviceIoControl վարորդին: Հարցումները մշակելուց հետո կառավարումը վերադարձվում է հավելվածին, և մնում է, որ հավելվածը վերլուծի վարորդի պատասխանը և փակի բաց բռնակները։

Օրինակ

Ստորև բերված օրինակում օգտագործողի ռեժիմի հավելվածը IOCTL_DISK_GET_PARTITION_INFO_EX հարցում է ուղարկում ֆայլային համակարգի դրայվերին, վերլուծում է ստացված տեղեկատվությունը և թողարկում կոշտ սկավառակի բաժանման ձևաչափը:

#ներառում

#ներառում

int _tmain (int argc, _TCHAR * argv)

DWORD dwBytesՎերադարձված = 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 * / ԲԱՑՎԱԾ Է,

եթե (hՍարք == INVALID_HANDLE_VALUE)

MessageBoxA (NULL, «CreateFileA error!», «Error», 0);

եթե (DeviceIoControl (

/ * 1 * / (HANDLE) hDevice,

/ * 5 * / & piPartitionInfo,

/ * 6 * / sizeof (piPartitionInfo),

/ * 7 * / & dwBytesՎերադարձված,

եթե (piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)

MessageBoxA (NULL, «PARTITION_STYLE_MBR», «Caption», 0);

else if (piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)

MessageBoxA (NULL, «PARTITION_STYLE_GPT», «Caption», 0);

MessageBoxA (NULL, «PARTITION_STYLE_RAW», «Caption», 0);

MessageBoxA (NULL, «DeviceIoControl սխալ», «Սխալ», 0);

CloseHandle (hDevice);

Օրինակի վերլուծություն

Հայտարարված են հավելվածի աշխատանքի համար պահանջվող փոփոխականները: PARTITION_INFORMATION_EX-ը կառույց է, որը նկարագրում է տեղեկատվությունը բաժին դժվարսկավառակ.

typedef struct (

) PARTITION_INFORMATION_EX;

Ծրագրի այս հատվածում CreateFileA ֆունկցիան կանչվում է բռնակ ստանալու համար, որը գրված է hDevice փոփոխականում։

DeviceIoControl ֆունկցիան կոչվում է համաժամանակյա: Նրան փոխանցվում է.

սարքի նկարագրիչ;

IOCTL կոդը IOCTL_DISK_GET_PARTITION_INFO_EX;

ցուցիչ դեպի մուտքային բուֆեր, մեր դեպքում NULL;

մուտքային բուֆերի չափը;

ցուցիչ դեպի ելքային բուֆեր;

ելքային բուֆերի չափը;

ցուցիչ դեպի փոփոխական նման DWORD, որը կպահի վերադարձվող բայթերի քանակը.

ցուցիչ OVERLAPPED կառուցվածքին, որն օգտագործվում է ասինխրոն զանգգործառույթները։

Վերահսկողության վերադարձից հետո ֆունկցիան հաջողությամբ ավարտելու դեպքում բաժանման մասին տեղեկատվությունը պահվում է PARTITION_INFORMATION_EX կառուցվածքում։

Կատարվում է տեղեկատվության վերլուծություն և ելք: Նախքան վերահսկողությունը վերադարձնելը օպերացիոն համակարգբաց բռնակները կարող են փակվել: CloseHandle (__ HANDLE-ում) ֆունկցիան թույլ է տալիս դա անել: Եթե ​​նկարագրիչները փակված չեն, օպերացիոն համակարգը դա կանի ձեզ փոխարեն:

2. Կուրսային աշխատանքի իրականացում

2.1 Քայլ 1

Զորավարժություններ. 1. Մշակեք միջուկի դրայվեր՝ մուտք դեպի նավահանգիստներ, կատարելով գործողություններ ըստ ընտրանքի և տեղեկատվություն դուրս բերելով Debug View պատուհանում (ըստ տարբերակի), ինչպես նաև հավելված, որը գործարկում է դրայվերը:

Listing Kurs_test.cpp

#include «stdafx.h»

#include «windows.h»

#include «stdlib.h»

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

եթե (hSCManager! = 0) (

// գրանցել խաղացողը SCManager աղյուսակում

եթե (hService! = 0) (

// Ջնջել վարորդի մուտքը

DeleteService (hService);

CloseServiceHandle (hService);

վերադարձ 0;

}

Beeper.sys ցուցակում

#ներառում

#define TIMER_FREQUENCY 1193167 // 1,193,167 Հց

#սահմանել PITCH_C 523 // 523,25 Հց

#սահմանել PITCH_Cs 554 // 554.37 Հց

#սահմանել PITCH_D 587 // 587,33 Հց

#սահմանել PITCH_Ds 622 // 622,25 Հց

#սահմանել PITCH_E 659 // 659,25 Հց

#սահմանել PITCH_F 698 // 698.46 Հց

#սահմանել PITCH_Fs 740 // 739,99 Հց

#սահմանել PITCH_G 784 // 783,99 Հց

#սահմանել PITCH_Gs 831 // 830.61 Հց

#սահմանել PITCH_A 880 // 880.00 Հց

#սահմանել PITCH_As 988 // 987,77 Հց

անվավեր DO_DELAY (int time) (

երկար i, j;

համար (i = 0; i<=time*0xfffff; i++) {}

}

անվավեր DO_BIG_DELAY (int time) (

DO_DELAY (2 * անգամ);

}

void Xylophone (int nPitch) (

int nTone = TIMER_FREQUENCY / nPitch

_ասմ (

mov al, 10110110b; // գրեք հսկիչ բառը 43 ժ

դուրս 43 ժամ, ալ; // Ձայնի կառավարման ալիք - տրամաբանություն՝ օգտագործելով ժմչփի ձայնը և ծրագրակազմի վերահսկվող համակարգի միացքի բիթերը

mov eax, nTone; // գրեք վերահաշվարկված հաճախականությունը 42-ի

դուրս 42ժ, ալ; // վերին մաս

mov al, ah; // ցածր մաս

դուրս 42ժ, ալ

al, 61h; // փոխել փախուստի հաջորդականությունը - վերափոխել վերջին բիթերը բիթերի

; // բիթ 0 - բարձրախոսն օգտագործելու թույլտվություն

; // բիթ 1 - ժմչփ-2 բարձրախոսին միացնելու թույլտվություն

կամ ալ, 00000011b; բարձրախոսը միացված է

դուրս 61ժ, ալ

}

DO_DELAY (0x7f);

_ասմ (

ալ, 61ժ

and al, 11111100b; բարձրախոսն անջատված է

դուրս 61ժ, ալ

}

}

Քսիլոֆոն (PITCH_C);

Քսիլոֆոն (PITCH_С);

Քսիլոֆոն (PITCH_С);

Քսիլոֆոն (PITCH_С);

Քսիլոֆոն (PITCH_С);

Քսիլոֆոն (PITCH_С);

Քսիլոֆոն (PITCH_С);

վերադարձնել STATUS_DEVICE_CONFIGURATION_ERROR;

}

2.2 Քայլ 2

Մշակեք վիրտուալ սարքի դրայվեր, որը թույլ է տալիս կատարել գործողություններ, որոնք հասանելի են միայն զրոյական արտոնությունների մակարդակում (ըստ տարբերակի), այնուհետև արդյունքները փոխանցեք հավելվածին երրորդ արտոնության մակարդակում՝ դրանք ցուցադրելու համար:

Հավելվածում մենք արդյունքը դուրս ենք բերում Windows-ի ստանդարտ պատուհանում:

Ցուցակ shablon.c

#ներառում // տարբեր NT սահմանումներ

#ներառում

UNICODE_STRING g_usDeviceName;

UNICODE_STRING g_usSymbolicLinkName;

void DriverUnload (IN PDRIVER_OBJECT pDriverObject) (

IoDeleteSymbolicLink (& g_usSymbolicLinkName);

IoDeleteDevice (pDriverObject-> DeviceObject);

}

NTSTATUS DispatchCreateClose (PDEVICE_OBJECT pDeviceObject, PIRP pIRp) (// մշակվում է MJ_CREATE MJ_CLOSE

pIrp-> IoStatus.Status = STATUS_SUCCESS;

pIrp-> IoStatus.Information = 0;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

վերադարձ STATUS_SUCCESS;

}

NTSTATUS DispatchControl (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// մշակվում է IRP_MJ_DEVICECONTROL

NTSTATUS կարգավիճակը;

int regEsi;

// ցուցիչը վերցրեք դեպի IO_STACK_LOCATION, այնտեղ՝ դեպի IoControlCode

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

// Համեմատեք գործողության կոդը և եթե սա մեր հաճախորդն է, ապա.

_ասմ (

mov eax, 0

mov al, 10h

դուրս 70ժ, հ

ալ, 71ժ

cbw

cwde

mov regEsi, eax

}

// սա մեր ֆունկցիոնալությունն է. մենք վերցնում ենք esi ռեգիստրի բովանդակությունը

// գրեք այն համակարգի բուֆերում

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

pIrp-> IoStatus.Information = 4; // և սահմանեք արդյունքի չափը

կարգավիճակ = STATUS_SUCCESS;

) else կարգավիճակ = STATUS_INVALID_DEVICE_REQUEST;

pIrp-> IoStatus.Status = կարգավիճակ;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

վերադարձ (կարգավիճակ);

}

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

NTSTATUS կարգավիճակ;

PDEVICE_OBJECT pDeviceObject;

// սկզբնավորել Unicode տողերը

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

RtlInitUnicodeString (& g_usSymbolicLinkName, L «\\ ?? \\ sldevGet»);

// լրացրեք դրայվերի օբյեկտը - հստակ բացատրեք վարորդին, թե որ ֆունկցիան ինչ է մշակում

pDriverObject-> DriverUnload =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

// ստեղծել վիրտուալ սարքի տրամաբանական օբյեկտ

Կարգավիճակ = IoCreateDevice (pDriverObject, 0, & g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, & pDeviceObject);

եթե (! NT_SUCCESS (կարգավիճակ)) (վերադարձի կարգավիճակ;)

// ստեղծել սարքի խորհրդանշական հղում

Կարգավիճակ = IoCreateSymbolicLink (& g_usSymbolicLinkName, & g_usDeviceName);

եթե (! NT_SUCCESS (կարգավիճակ)) (

IoDeleteDevice (pDeviceObject);

վերադարձի կարգավիճակ;

}

վերադարձի կարգավիճակ;

}

Listing course2.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 dwBytesՎերադարձված;

char stroka;

/*

Ընտրանքներ:

lpFileName Անվավեր վերջացրած տողի հասցեն, որը նշում է ստեղծվող կամ բացվող օբյեկտի անունը:

dwDesiredAccess Օբյեկտի հասանելիության տեսակը: Այս պարամետրը կարող է վերցնել հետևյալ արժեքների ցանկացած համակցություն.

Արժեքը: Նկարագրություն:

0 Որոշում է հարցումը նշված սարքի վրա օբյեկտի առկայության մասին: Հավելվածը կարող է պահանջել սարքի ատրիբուտներ՝ առանց դրան մուտք գործելու:

GENERIC_READ Նշում է օբյեկտից կարդալու հասանելիությունը: Տվյալները կարելի է կարդալ ֆայլից և ֆայլի ցուցիչը կարող է տեղափոխվել: Միավորել GENERIC_WRITE-ի հետ՝ կարդալու-գրելու հասանելիության համար:

GENERIC_WRITE Նշում է օբյեկտի մուտքը գրելու հնարավորություն: Տվյալները կարող են գրվել ֆայլում, իսկ ֆայլի ցուցիչը կարող է տեղափոխվել: Միավորել GENERIC_READ-ի հետ՝ կարդալու-գրելու հասանելիության համար:

dwShareMode Օբյեկտի ընդհանուր մուտքի ռեժիմ: Եթե ​​արժեքը զրո է, օբյեկտը չի կարող համօգտագործվել մի քանի ծրագրերի կողմից: Օբյեկտը բացելու բոլոր հետագա գործողությունները ձախողվելու են այնքան ժամանակ, մինչև օբյեկտի բռնակը փակվի: Օբյեկտով կիսվելու համար օգտագործեք հետևյալ արժեքների համակցությունը.

Արժեքը: Նկարագրություն:

FILE_SHARE_DELETE Թույլ է տալիս օբյեկտի բաց հաջորդականությունը ջնջելու թույլտվություն խնդրելու համար:

FILE_SHARE_READ Թույլ է տալիս օբյեկտի բաց հաջորդականությունը կարդալու հասանելիություն խնդրելու համար:

FILE_SHARE_WRITE Թույլ է տալիս օբյեկտի բաց հաջորդականությունը գրելու թույլտվություն խնդրելու համար

lpSecurityAttributes SECURITY_ATTRIBUTES կառուցվածքի հասցեն, որը որոշում է, արդյոք ֆունկցիայի կողմից վերադարձված բռնիչը կարող է ժառանգվել երեխայի գործընթացի կողմից, թե ոչ:

Եթե ​​lpSecurityAttributes-ը NULL է, ապա նկարագրիչը չի կարող ժառանգվել:

dwCreationDisposition

Արժեքը: Նկարագրություն:

CREATE_ALWAYS Ստեղծում է նոր ֆայլ, միշտ:

Եթե ​​ֆայլը գոյություն ունի, ֆունկցիան վերագրանցում է ֆայլը:

CREATE_NEW Ստեղծում է նոր ֆայլ: Ֆունկցիան չի հաջողվի, եթե ֆայլը գոյություն ունենա:

OPEN_ALWAYS Բացեք ֆայլը, միշտ: Եթե ​​ֆայլը գոյություն չունի, ֆունկցիան այն ստեղծում է նույն կերպ, եթե dwCreationDisposition-ը լինի CREATE_NEW:

OPEN_EXISTING Բացում է ֆայլ: Ֆունկցիան չի հաջողվի, եթե ֆայլը գոյություն չունի:

TRUNCATE_EXISTING Բացում է ֆայլ և կրճատում այն ​​զրոյական չափի: Ֆունկցիան չի հաջողվի, եթե ֆայլը գոյություն չունի:

dwFlagsAndAttributes Ֆայլի դրոշակներ և ատրիբուտներ:

Երբ գոյություն ունեցող ֆայլը բացվում է, CreateFile-ն անտեսում է կաղապարի ֆայլը:

Վերադարձի արժեքներ.

Եթե ​​գործառույթը հաջողվի, բաց բռնակ է վերադարձվում նշված ֆայլին: Եթե ​​նշված ֆայլը գոյություն ունի ֆունկցիայի կանչից առաջ, և dwCreationDisposition պարամետրը CREATE_ALWAYS կամ OPEN_ALWAYS է, GetLastError կանչը կվերադարձնի ERROR_ALREADY_EXISTS, նույնիսկ եթե գործառույթը հաջողված է: Եթե ​​ֆայլը չկա զանգից առաջ, GetLastError-ը կվերադարձնի 0 (զրո):

Սխալի դեպքում ֆունկցիան կվերադարձնի INVALID_HANDLE_VALUE: Սխալի վերաբերյալ լրացուցիչ տեղեկությունների համար զանգահարեք GetLastError:

*/

եթե (hDevice! = 0) (

/*

hDevice-ը CreateFile-ի կողմից վերադարձված բռնակն է:

dwIocontrolCode-ը արժեք է, որը ցույց է տալիս կատարվող գործողությունը:

lpInBuffer-ը բուֆերի հասցեն է, որը պարունակում է dwIoControlCode-ում նշված գործողությունը կատարելու համար անհրաժեշտ տվյալները: Եթե ​​գործողությունը չի պահանջում տվյալներ, կարող եք անցնել NULL:

nInBufferSize-ը բայթերով տվյալների չափն է բուֆերում, որի վրա մատնանշված է lpInBuffer:

lpOutBuffer-ը բուֆերի հասցեն է, որը կլցվի ելքով, երբ գործողությունը հաջող լինի: Եթե ​​գործողությունը արդյունք չի տալիս, ապա այս դաշտը ՊԵՏՔ է լինի NULL:

nOutBufferSiz-ը բայթերով բուֆերի չափն է, որի վրա մատնանշված է lpOutbuffer-ը:

lpBytesReturned-ը dword փոփոխականի հասցեն է, որը կստանա lpOutBuffer-ում մուտքագրված տվյալների չափը:

lpOverlapped-ը OVERLAPPED կառուցվածքի հասցեն է, եթե ցանկանում եք, որ գործողությունը լինի ասինխրոն: Եթե ​​ցանկանում եք սպասել գործողության ավարտին, այս դաշտում դրեք NULL:

*/

wsprintf ((LPSTR) stroka, «% X», adwOutBuffer); // գրել տող բուֆերում (adwOutBuffer -> stroka)

CloseHandle (hDevice);

վերադարձ 0;

}

վարորդի միջուկի համակարգչային ծրագիր

2.3 Քայլ 3

Listing course.cpp

#ներառում

#ներառում

#ներառում

{

DWORD աղբ;

0, // ֆայլի հատկանիշներ

վերադարձ (FALSE);

}

0, // մուտքագրման բուֆերի չափը

CloseHandle (hDevice);

վերադարձ (bResult);

}

int main (int argc, char * argv)

{

/*

typedef struct (

PARTITION_STYLE PartitionStyle; // բաժնի ձևաչափը

LARGE_INTEGER Մեկնարկային օֆսեթ; // հատվածի սկզբի օֆսեթ

LARGE_INTEGER բաժանման երկարությունը; // բաժանման չափը

DWORD բաժանման համարը; // բաժնի համարը

BOOLEAN Rewrite Partition; // եթե բաժինը վերագրանցելի է, ապա TRUE

միություն (

PARTITION_INFORMATION_MBR Mbr; // լրացուցիչ տեղեկություններ MBR Style բաժնի մասին

PARTITION_INFORMATION_GPT Gpt; // լրացուցիչ տեղեկություններ GPT Style բաժնի մասին

};

) PARTITION_INFORMATION_EX;

*/

BOOL bResult;

համակարգ («ԴԱԴԱՐ»);

վերադարձ ((int) bResult);

}

2.4 Քայլ 4

1) Միավորել 1-3 քայլերով մշակված բոլոր ֆունկցիոնալությունը ծրագրերի մեկ փաթեթի մեջ:

Վերջնական համալիրը պետք է այսպիսի տեսք ունենա.

- Մեր դրայվերը ներկառուցված է համակարգում և բեռնված Windows-ի բեռնման փուլում:

- Հավելվածը վարորդից խնդրում է անհրաժեշտ տեղեկությունը (նշված է 2-րդ փուլում), վարորդը փոխանցում է այդ տեղեկատվությունը, մինչդեռ բարձրախոսը նույնպես որոշ ժամանակ միացված է և հնչում է մեղեդի (նշված է 1-ին փուլում): Այնուհետև հավելվածը հարցում է անում համակարգում առկա վարորդին (3-րդ փուլի տարբերակին համապատասխան):

2) Կազմել բացատրական գրություն, որում պետք է նկարագրվեն բոլոր 4 փուլերը, ինչպես նաև տեսական տեղեկատվություն յուրաքանչյուր փուլի համար:

#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 Get PartitionNumber (PARTITION_INFORMATION_EX * pex)

{

HANDLE hDevice; // ստուգված սարքի նկարագրիչ

BOOL bResult; // արդյունքի դրոշ

DWORD աղբ;

hDevice = CreateFile (TEXT («\\\\. \\ c:»), // սարքը բացելու համար

GENERIC_READ | GENERIC_WRITE, // մուտք դեպի սարք

FILE_SHARE_READ | FILE_SHARE_WRITE, // համօգտագործվող օգտագործման ռեժիմ

NULL, // լռելյայն անվտանգության հատկանիշներ

OPEN_EXISTING, // գտնվելու վայրը

0, // ֆայլի հատկանիշներ

ԴԱՏԱՐԿ); // մի պատճենիր ֆայլի ատրիբուտները

եթե (hՍարք == INVALID_HANDLE_VALUE) (// հնարավոր չէ բացել սարքը

printf ("CreateFile () ձախողվեց! \ n");

վերադարձ (FALSE);

}

bResult = DeviceIoControl (hDevice, // պահանջվող սարք

IOCTL_DISK_GET_PARTITION_INFO_EX, // կատարվող գործողությունը

NULL, // ցուցիչ դեպի մուտքագրման բուֆեր

0, // մուտքագրման բուֆերի չափը

pex, sizeof (* pex), // ելքային բուֆեր

& junk, // վերադարձվող բայթերի քանակը

(LPOVERLAPPED) NULL); // համաժամացնել մուտքագրումը / ելքը (I / O)

CloseHandle (hDevice);

վերադարձ (bResult);

}

int _tmain (int argc, _TCHAR * argv) (

SC_HANDLE hSCManager;

SC_HANDLE hService;

char acDriverPath;

HANDLE hDevice;

BOOL DevControl;

DWORD dwBytesՎերադարձված;

LPVOID adwInBuffer, adwOutBuffer;

char stroka;

PARTITION_INFORMATION_EX pex; // սարքի կառուցվածքը

BOOL bResult;

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

եթե (hDevice! = 0) (

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

եթե ((DevControl! = 0) && (dwBytesReturned! = 0)) (

wsprintf ((LPSTR) stroka, «% X», adwOutBuffer); // գրել տող բուֆերում (adwOutBuffer -> stroka)

if (stroka == «00000100») MessageBox (NULL, «Գտնվել է 1.44 Մբ», «Yermakov FDD scaner», MB_OK);

else MessageBox (NULL, «Չի գտնվել», «Yermakov FDD scaner», MB_OK);

hSCManager = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE);

եթե (hSCManager! = 0) (

GetFullPathName («beeper.sys», acDriverPath, acDriverPath, NULL);

// Գրանցեք երաժշտի SCM աղյուսակներում

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

եթե (hService! = 0) (

StartService (hService, 0, NULL);

DeleteService (hService);

CloseServiceHandle (hService);

) else MessageBox (NULL, «Can» t գրանցել վարորդը», NULL, MB_ICONSTOP);

CloseServiceHandle (hSCManager);

) else MessageBox (NULL, «Կարող եմ» միանալ SCManager-ին», NULL, MB_ICONSTOP);

) else MessageBox (NULL, «Can» t ուղարկել կառավարման կոդը «, NULL, MB_OK);

CloseHandle (hDevice);

) else MessageBox (NULL, «Dev is not present», NULL, MB_ICONSTOP);

bResult = GetPartitionNumber (& pex);

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

) else (printf («GetPartitionNumber () ձախողվեց: Սխալ% d. \ n», GetLastError ());)

համակարգ («ԴԱԴԱՐ»);

վերադարձ ((int) bResult);

}

3. Կիրառական գործողություն

Նկար 3.1. Վարորդ 2-րդ քայլից

Նկար 3.2. Վարորդ 3-րդ քայլից

Տեղադրված է Allbest.ru-ում

Նմանատիպ փաստաթղթեր

    Միջուկի ռեժիմի դրայվերի և օգտագործողի հավելվածի միջև փոխազդեցության մեխանիզմները. օգտագործողի ինտերֆեյսֆայլերի մուտքի զտիչ ծրագրեր:

    կուրսային աշխատանք, ավելացվել է 23.06.2009թ

    Windows NT I / O ճարտարապետություն: Ներքին կազմակերպում USB ավտոբուս... WDM վարորդի մոդելի հիմնական բնութագիրը: Մշակվող վարորդի մուտքի կետերը, կոդի տեղադրումը հիշողության մեջ, վարորդի տեղադրումը համակարգում: Վարորդի կոդի ներդրում C-ում.

    կուրսային աշխատանք, ավելացվել է 27.09.2014թ

    Օգտագործողի ռեժիմի կառուցվածքը, որը թույլ է տալիս օգտագործողին փոխազդել համակարգի հետ: Միջուկի ռեժիմի նկարագրությունը, որն ապահովում է օգտատերերի հավելվածների (ծրագրերի) անվտանգ կատարումը։ Windows NT ապարատային աբստրակցիոն շերտ:

    ներկայացումը ավելացվել է 10/23/2013

    Windows 98 միջուկը 16-բիթանոց միջուկի մոդուլների դերը. Կատարողական խնդիրներ. Համագործակցային և կանխարգելիչ բազմաբնույթ առաջադրանք: Բարելավված ռեսուրսների օգտագործում Windows 98-ում: Օգտագործելով WordArt-ը: MS Outlook Express՝ հաղորդագրությունների ստեղծում և ուղարկում:

    թեստ, ավելացվել է 04/14/2005 թ

    Համակարգչի բոլոր սարքերի համատեղ աշխատանք և դրա ռեսուրսների հասանելիություն: Գրաֆիկական վիրահատարանի հայեցակարգը և գործառույթները Windows համակարգեր... Նախապատմություն windows ծառայություն... Վերահսկողություն ֆայլային համակարգ... Plug and Play տեխնոլոգիա: Գրաֆիկական ինտերֆեյս Windows.

    թեստ, ավելացվել է 01/22/2011

    Օպերացիոն համակարգի բնութագրերը. Windows-ի զարգացման պատմությունը. Համեմատական ​​բնութագրեր Windows-ի տարբերակները... Տարրեր և Windows գործիքներ XP. Կիրառական ծրագրեր Windows XP-ում: Սեղան և նոութբուք համակարգիչներ Windows-ով աշխատող:

    հաշվետվություն ավելացվել է 16.10.2011թ

    Օգտագործելով միջուկի ռեժիմի դրայվեր և կառավարման հավելված՝ համակարգի թելեր ստեղծելու համար: Տվյալների մշակման մոդելավորում և ուշացումների կազմակերպում: Վարորդի մշակում C ++-ում: Փորձարկման նստարանի կոնֆիգուրացիա: Հետաձգումների և ժմչփի աշխատանքի փոփոխությունների ճշգրտությունը:

    կուրսային աշխատանք, ավելացվել է 24.06.2009թ

    Windows օպերացիոն համակարգի ներքին կառուցվածքի նախնական աշխատանք. NT ճարտարապետություն և հիմնական կառուցվածք: Միջուկի և koristuvach ռեժիմում գործառույթների գերակայման մեթոդներ: Հասկանալով վարորդին. I/O փաթեթներ: Windows համակարգերի կայունության և անվտանգության գնահատում:

    կուրսային աշխատանք, ավելացվել է 02.01.2014թ

    Firewall-ի հայեցակարգը, տեսակները և շահագործումը: Ներկառուցված Windows firewall. Windows XP SP2, մուտք դեպի firewall կարգավորումներ Windows XP Service Pack 2. Windows Vista, թույլատրված տրաֆիկ: Windows 7, ակտիվ պրոֆիլի կարգավորումներ: Անձնական Firewall, թեստային մակարդակներ:

    վերացական, ավելացվել է 19.11.2010 թ

    Ծանոթություն տեխնիկական բնութագրերը անհատական ​​համակարգիչ... Օպերացիոն համակարգի տեղադրում և Windows-ի դրայվերներ 7. Մեթոդներ պատուհանների մաքրում XP Professional SP3. Օպերացիոն համակարգի վերականգնման մեթոդներ. Կատարում Microsoft-ի տեղադրումներ Office 2010 թ.

Microsoft-ը Windows 10 օպերացիոն համակարգում մեծ ուշադրություն է դարձնում անվտանգությանը։ Համակարգի կարևոր տարրերից է « Windows պաշտպանԲայց նա ի վիճակի չէ դիմակայել բոլոր սպառնալիքներին։ Մասնավորապես, վերջերս հայտնի են դառնում Ransomware վիրուսները, որոնցից ամենահայտնի ռեինկառնացիաներն են. չարամիտ ծրագիրՊետյա և. Microsoft-ը Windows 10-ում ներդրել է միջուկի մեկուսացման և հիշողության ամբողջականության առանձնահատկությունները՝ Ransomware վիրուսների դեմ պայքարելու համար: Նրանք լռելյայն անջատված են:

Բովանդակություն:

Ինչ է միջուկի մեկուսացումը և հիշողության ամբողջականությունը

Հիմնական մեկուսացումլրացուցիչ պաշտպանության գործընթաց է, որն ապահովվում է համակարգչային գործընթացները օպերացիոն համակարգից և սարքից պաշտպանելու մեթոդով։ Այս գործողությունների շնորհիվ հնարավոր է խուսափել օպերացիոն համակարգի աշխատանքը խաթարելուց, երբ վիրուսները հայտնվում են համակարգչում:

Հիշողության ամբողջականությունպաշտպանիչ գործառույթ է, որն ուղեկցում է միջուկի մեկուսացմանը, որն ուղղված է սահմանափակելու անհայտ պոտենցիալ վտանգավոր ծրագրերի մուտքը դեպի գործընթացներ: բարձր մակարդականվտանգություն։

Կարևոր է. միջուկի մեկուսացման գործառույթը կարող է աշխատել միայն այն դեպքում, եթե դրա համար բավարար պայմաններ կան համակարգչի ապարատային մասում: Վ BIOS-ի կարգավորումներՎիրտուալացման տեխնոլոգիան պետք է ակտիվ լինի, ինչի շնորհիվ Windows 10-ով աշխատող համակարգիչը կարող է տարբեր հավելվածներ գործարկել վիրտուալ կոնտեյներով՝ սահմանափակելով դրանց մուտքը համակարգի հիմնական բաղադրիչներից:

Ինչպես միացնել միջուկի մեկուսացումը և հիշողության ամբողջականությունը

Windows 10 օպերացիոն համակարգի կարգավորումները թույլ են տալիս լիովին վերահսկել ձեր համակարգչի անվտանգության առանձնահատկությունները: Windows 10-ի կարգավորումների միջոցով դուք կարող եք միացնել միջուկի մեկուսացումը և հիշողության ամբողջականությունը հետևյալ կերպ.


Ինչպես նշվեց վերևում, եթե ձեր համակարգչի ապարատը չի աջակցում վիրտուալացմանը, այս ֆունկցիանչի աշխատի. Երբ միացված է, օգտատերը կտեսնի «Անհնար է ապահովել հիշողության ամբողջականությունը: Հնարավոր անհամատեղելիություն»: Եթե ​​այս հաղորդագրությունը հայտնվի, խորհուրդ է տրվում գնալ BIOS և տեսնել, թե արդյոք գործառույթը միացված է: Ապահով բեռնախցիկ(Boot Mode):

Ինչպես անջատել միջուկի մեկուսացումը և հիշողության ամբողջականությունը

Օպերացիոն համակարգի նոր գործառույթները, որոնք լրջորեն ազդում են դրա աշխատանքի վրա, միշտ վտանգված են համակարգչի հետ խնդիրներ առաջացնելու համար: Միջուկի մեկուսացման գործառույթը բացառություն չէ: Օգտատերերը, ովքեր արդեն փորձել են այն, նշում են Microsoft-ի ֆորումներում, որ խնդիրներ են ունենում մի շարք խաղեր և ծրագրեր գործարկելիս: Այս խնդիրը լուծելու միակ միջոցը միջուկի մեկուսացումն ու հիշողության ամբողջականությունն անջատելն է: Հավանաբար, ապագա թարմացումների ժամանակ հավելվածի մշակողները կամ Microsoft-ը շտկեն այս անհամատեղելիությունը:

Միջուկի մեկուսացումն ու հիշողության ամբողջականությունն անջատելու 3 եղանակ կա.