NT式驱动和WDM式驱动
剛開(kāi)始學(xué)習(xí)驅(qū)動(dòng),沒(méi)什么基礎(chǔ),對(duì)于好多名詞也不是很理解,感覺(jué)每天學(xué)的驅(qū)動(dòng)都不一樣。。。。。。。今天看了書之后才知道,原來(lái)驅(qū)動(dòng)分為NT式驅(qū)動(dòng)和WDM式驅(qū)動(dòng)兩種。大概總結(jié)一下它們之間的區(qū)別。
對(duì)于NT式驅(qū)動(dòng)來(lái)說(shuō),主要的函數(shù)是DriverEntry函數(shù),卸載函數(shù),以及各個(gè)IRP的派遣函數(shù),不支持即插即用功能,要導(dǎo)入的頭文件是ntddk.h.
其入口函數(shù)DriverEntry主要進(jìn)行初始化工作,驅(qū)動(dòng)加載時(shí),系統(tǒng)進(jìn)程創(chuàng)建新的線程,調(diào)用對(duì)象管理器,創(chuàng)建驅(qū)動(dòng)對(duì)象。它創(chuàng)建設(shè)備對(duì)象是通過(guò)IoCreateDevice內(nèi)核函數(shù)完成的。
NTSTATUS IoCreateDevice( _In_PDRIVER_OBJECT DriverObject, //指向驅(qū)動(dòng)對(duì)象的指針 _In_ULONG DeviceExtensionSize, //設(shè)備擴(kuò)展的大小 _In_opt_PUNICODE_STRING DeviceName, //設(shè)備對(duì)象名 _In_DEVICE_TYPE DeviceType, //設(shè)備對(duì)象類型 _In_ULONG DeviceCharacteristics,//設(shè)備對(duì)象特征 _In_BOOLEAN Exclusive, //是否在內(nèi)核下使用 _Out_PDEVICE_OBJECT *DeviceObject //返回設(shè)備對(duì)象地址 );
卸載函數(shù)刪除創(chuàng)建的設(shè)備對(duì)象,還負(fù)責(zé)一些資源的回收。
而對(duì)于WDM式驅(qū)動(dòng)來(lái)說(shuō),它支持即插即用功能要導(dǎo)入的頭文件為wdm.h.
這是Windows2000后加入的新的驅(qū)動(dòng)模型,比NT式驅(qū)動(dòng)更加復(fù)雜一些,完成一個(gè)設(shè)備操作,至少要兩個(gè)驅(qū)動(dòng)設(shè)備共同完成,分別是物理設(shè)備對(duì)象(PDO)和功能設(shè)備對(duì)象(FDO),F(xiàn)DO會(huì)附加在PDO上。
WDM的入口函數(shù)也是DriverEntry,但創(chuàng)建設(shè)備對(duì)象的責(zé)任交給了AddDevice函數(shù),而且必須加載IRP_MJ_PNP派遣回調(diào)函數(shù)。
而且在WDM驅(qū)動(dòng)中,大部分卸載工作都不是由DriverUnload來(lái)處理,而是放在對(duì)IRP_MN_REMOVE_DEVICE的IRP的處理函數(shù)中處理。
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
{
KdPrint(("Enter DriverEntry\n"));
pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice;
pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp;
pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =
pDriverObject->MajorFunction[IRP_MJ_CREATE] =
pDriverObject->MajorFunction[IRP_MJ_READ] =
pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMDispatchRoutine;
pDriverObject->DriverUnload = HelloWDMUnload;
KdPrint(("Leave DriverEntry\n"));
return STATUS_SUCCESS;
}
WDM式驅(qū)動(dòng)不是按照服務(wù)來(lái)加載,安裝WDM式驅(qū)動(dòng)需要一個(gè)inf文件。inf文件描述了WDM驅(qū)動(dòng)程序的操作硬件設(shè)備的信息和驅(qū)動(dòng)程序的一些信息。
可以直接右擊這個(gè)inf文件進(jìn)行安裝即可。
總結(jié)
以上是生活随笔為你收集整理的NT式驱动和WDM式驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 图像处理一些常用的网站
- 下一篇: C#画图——Graphics