|
Ózbekistan respublikasí informaciyalíq texnologiyalarí HÁm kommunikaciyalarín rawajlandíRÍw ministrligi
|
bet | 2/3 | Sana | 03.06.2024 | Hajmi | 190,5 Kb. | | #259778 |
Bog'liq Artikbaev M. Ornatlg\'an sistema 4-kursWDM arxitekturasi
WDM ( Windows driver Model ) Windows OS ushın Microsoft drayver modeli bolıp, ol Windows OS - vxD ( virtual ) ushın drayverlarni jazıw ushın aldınǵı ortalıqtı almastırdı. apparat aydawshı ).
WDM házirde drayverlarni jazıwda eń zárúrli túsiniklerden biri esaplanadı. Onıń tiykarǵı qásiyetleri:
- Windows 98 hám Windows sistemaları ushın drayverlar ortasındaǵı ekilik uyqaslıq NT
- quvvatni basqarıwdı qollap-quwatlaw
- Plugni qollap-quwatlaw hám oynaw
- " aldıńǵı" avtobus basqarıwdı qollap-quwatlaw ( aldıńǵı avtobus basqarıw )
WDM drayverining " turmıs cikli" :
1. Avtobus aydawshısı apparattı anıqlaydı.
2. vilka hám oynaw Menejer apparat giltini dizimge alıw kitapınıń Enum bóliminde tabadı. Bul giltda funktsiya drayverini (bólek apparattı basqaratuǵın hám tiykarǵı apparat drayveri) belgileytuǵın basqa dizimge alıw kitapı giltiga kórsetkish bar. Pnp menejeri funksiya drayverini dinamikalıq túrde júkleydi.
3. PnP menejeri DRIvER_OBJECT jaratıw ushın drayverning AddDevice funksiyasın shaqıradı. Eger drayver bir neshe haqıyqıy apparatlarǵa uyqas kelse, PnP menejeri hár biri ushın AddDevice ni shaqıradı. Sol waqıttan baslap, aydawshınıń sırtqı dúnya menen barlıq baylanısları IRP ( I / O Soraw Paket ) - paketler.
4. PnP menejeri drayverga kerek bolǵan barlıq kirgiziw-shıǵarıw resurslarini (úzilis sorawları, port nomerleri hám basqalar ) ajratadı hám apparattı jumısqa túsiriw ushın soraw jiberedi.
Ba'zi qurilmalar kompyuterni o'chirmasdan tizimdan olib tashlanishi mumkin. Agar qurilma shulardan biri bo'lsa, u holda PnP menejeri haydovchiga maxsus IRP paketini yuboradi, buning natijasida AddDevice funktsiyasi tomonidan yaratilgan qurilma ob'ekti yo'q qilinadi.
Barcha qurilmalar olib tashlanganda, I/U menejeri ( I / U Manager ) drayver tasvirini xotiradan olib tashlaydigan DriverUnload funksiyasini chaqiradi.
Drayver dúzilisi.
Tiykarınan, drayverni ápiwayı yadro dárejesindegi DLL dep esaplaw múmkin. Sonday etip, drayverni ápiwayıǵana sırtqı programmalar tárepinen waqıtı -waqıtı menen shaqıriletuǵın proceduralar kompleksi retinde oyda sawlelendiriw múmkin. Hár qıylı apparatlar ushın aydawshı proceduraları júdá basqasha bolsa -de, barlıq drayverlar ushın ulıwma dúzılıw hám ulıwma funktsiyalar bar.
DriverEntry - tiykarǵı drayver funktsiyası.jumısqa túsiriw funktsiyası. Onıń tiykarǵı wazıypaları barlıq kerekli jumısqa túsiriw háreketlerin orınlaw hám aydawshınıń qalǵan funktsiyaları ushın kirisiw noqatların anıqlaw bolıp tabıladı. Bul funktsiyası shaqırdı de júklew aydawshı.
NSTATUS
DriverEntry{
IN PDRIVER_OBJECT DriverOBject,
PUNICODE_STRING RegistryPathda
};
Ol 2 argumentni aladı : birinshisi kórsetkish ústinde PDRIvER_OBJECT tipidagi DriverObject. Bul DriverEntry funksiyasına Dispatch, AddDevice, StartIo hám drayver obiektindegi drayverni túsiriw funksiyalarına kórsetkishlerdi belgilew imkaniyatın beredi. RegistryPath argumenti DriverEntry funksiyasına kórsetkishni dizimge alıw kitabındaǵı drayver giltiga joldı óz ishine alǵan Unicode qatarına ótkeredi.
Hár bir aydawshı keminde bir Dispatch procedurasına ıyelewi kerek.
NTSTATUS
XxxDispatchpnP{
PDEVICE_OBJECTda DeviceObject,
IN PIRP Irp
};
Eger apparat drayveri barlıq múmkin bolǵan kirgiziw-shıǵarıw sorawların atqara almasa
Dispatch procedurasında ol StartIo procedurasına ıyelewi yamasa bir yamasa bir neshe ishki gezeklerdi ornatıwı hám óziniń kutilayotgan úzilis sorawı mexanizmin basqarıwı kerek.
vIOD
XxxStartIo{
PDEvICE_OBJECTda DeviceObject,
IN PIRP Irp
};
Aydawshınıń úzilis sorawın qayta islew tarmaǵında iyelegen dárejesine qaray, aydawshı tómendegi tártiplerge ıyelewi múmkin.
DriverEntry procedurasına qosımsha túrde, drayverda DriverEntry qaytqanınan keyin sistemanı júklew waqtında bir yamasa bir neshe ret shaqıriletuǵın Reinitialize procedurası bolıwı múmkin.
BO'LGAN
Qayta jumısqa túsiriw{
PDRIVER_OBJECT DriverObject da,
PVOID kontekstinde,
ULONG SOZIB
};
Úzilislerdi jaratatuǵın hár qanday fizikalıq apparat drayveri bul tártipke ıyelewi kerek. Bul drayver mudamı stackdagi eń tómen esaplanadı.
BUL
Xızmetti úziw {
IN PKINTERRUPT Toqtatıw,
IN PvOID ServiceContext
};
ISRga iye bolǵan hár qanday drayverda DpcForIsr yamasa CustomDpc bolıwı kerek
OID
DpcForIsr{
PKDPC Dpc da,
IN struct _DEVICE_OBJECT *DeviceObject,
IN struct _IRP *Irp,
PVOID kontekstida
};
BO'LGAN
CustomDpc{
IN struct _KDPC *Dpc,
PVOID DeferredContextda,
PVOID SystemArgument1 da,
IN PVOID Tizim argumenti 2
};
ISR hám basqa drayverlar tártiplerinde maǵlıwmatları yamasa tiyisli apparat registrlari ózgertiliwi múmkin bolǵan hár qanday tómen dárejedegi apparat drayverida bir yamasa bir neshe SynchCritSection tártipleri bolıwı kerek.
BUL
SynchCritSection{
PvOID SynchronizeContextda
};
DMA den paydalanatuǵın hár qanday apparat drayverlari AdapterControl procedurasına ıyelewi kerek. Bir neshe apparatlar yamasa apparat kanalları ushın fizikalıq kontroller operatsiyaların sinxronlashtirish kerek bolǵan hár qanday apparat drayverida ControllerControl bolıwı kerek.
IO_ALLOCATION_ACTION
Adapter basqarıwi{
PDEvICE_OBJECTda DeviceObject,
PIRP Irp de,
PvOID MapRegisterBase de,
PvOID kontekstinde
};
IO_ALLOCATION_ACTION
ControllerControl{
PDEvICE_OBJECTda DeviceObject,
PIRP Irp de,
PvOID MapRegisterBase de,
IN PvOID Kontekst
};
Klaviatura, tıshqansha, izbe-iz, parallel, dawıs hám fayl sisteması drayverlarida Bıykarlaw procedurası bar. Uzaq waqıt dawamında sorawdı qayta isleytuǵın hár qanday aydawshı (paydalanıwshı operatsiyanı bıykarlawı múmkin bolǵanda ) Bıykarlaw procedurasına ıyelewi kerek. Ádetde sorawdı qayta islew stekidagi eń joqarı drayverda bul procedura bar.
vOID Bıykarlaw{
PDEvICE_OBJECTda DeviceObject,
IN PIRP Irp
};
tárepinen jaratılǵan barlıq IRP strukturaların shıǵarıw ushın keminde bir IOComlpetion procedurasına ıyelewi kerek. Sonday etip, hár qanday joqarı dárejedegi drayverda IOComlpetion procedurası bolıwı kerek. Basqa drayverlar tártipleri IOComlpetion -ga barlıq tómen dárejedegi drayverlar ámeldegi sorawdı qayta islegende shaqırilishini aytiwi múmkin.
NTSTATUS
IOComlpetition{
PDEVICE_OBJECTda DeviceObject,
PIRP Irp da,
PVOID kontekstida
};
Kirisiw/chiqarish procedurası yamasa islep shıǵıwshı tárepinen belgilengen basqa maqsetler ushın sarplanǵan waqtın gúzetip barıw ushın hár qanday drayverda IoTimer va/yoki CustomTimerDpc proceduraları bolıwı kerek. Aydawshı taymerni jumısqa túsirgende, IoTimer sekundta bir ret shaqırıladı. Ekinshisin kishilew yamasa ózgeriwshen aralıqta shaqırıw múmkin.
BO'LGAN
CustomTimerDpc{
struct_KDPC de *Dpc,
PvOID DeferredContextda,
PvOID SystemArgument1 de,
IN PvOID Sistema argumenti 2
};
Sistema islep atirǵan waqıtta onı túsiriw múmkin bolsa, drayverda Unload procedurası bolıwı kerek.
BO'LGAN
XxxUnload{
PDRIvER_OBJECTda DriverObject
};
Mikroyadroga qońıraw qılıw, registr, yad, ob'ektler, sinxronizatsiya hám basqalar menen islew ushın yadronı qollap-quwatlaw funktsiyaları dep atalatuǵın funktsiyalar kompleksi bar.
Funktsiyalar IoCreateDevice jańa apparat ob'ektin jaratadı jáne onı drayver tárepinen paydalanıw ushın jumısqa túsiredi. Apparat ob'ekti fizikalıq, virtual yamasa logikalıq apparat bolıp, aydawshı bul apparattıń dinamikalıq basqarıwdı qollap-quwatlawı kerek.
NTSTATUS
IoCreateDevice{
IN PDRIvER_OBJECT DriverObject, // kórsetkish ústinde ob'ekt aydawshılar
IN ULONG DeviceExtensionSize, // maslastırılǵan blok kólemi
// báyitler degi maǵlıwmatlar
IN PUNICODE_STRING _ _ DeviceName, // apparat atı (geyde ótkerip jiberilgen)
IN QURILMA_TYPE _ _ DeviceType, // apparat túri (ceriyali,
// disk, tıshqansha hám basqalar )
IN ULONG DeviceCharacteristics, // apparat parametrleri
// (alınatuǵın hám basqalar )
IN BUL Eksklyuziv, // apparatlarǵa parallel kirisiw
OUT PDEvICE_OBJECT *DeviceObject // kórsetkish ústinde ob'ekt
// jaratılǵan apparat
};
IOCreateSymbolicLink funksiyası apparat hám paydalanıwshına kórinetuǵın at ortasında ramziy baylanısıw payda etedi.
NTSTATUS
IOCcreateSymbolicLink{
IN SymbolicLinkName, // ramziy at,
// paydalanıwshına kórinedi
IN PUNICODE_STRING _ _ DeviceName // apparat atı
Windows at maydanında
};
IoCompleteRequest funksiyası kirgiziw /chiqarish basqarıwshısına ámeldegi kirgiziw/chiqarish sorawın qayta islew pıtkenligi haqqında xabar beredi.
BO'LGAN
ioCompleteRequest {
IN PIRP Irp, // I/Ol sorawına kórsetkish
IN CCHAR PriorityBoost // Qayta islew ushın drayverning ústinligin asırıw
// soraw. Qayta islengen apparatqa baylanıslı.
// Qáte yamasa júdá tez sorawdı qayta islewde IO _ NO _ INCREMENT
};
|
| |