deviceiocontrol的同步和非同步呼叫方式:
上層應該可以以同步或非同步的方式.
ov ;
ov.hevent = createevent (null, true, false, null) ;
deviceiocontrol(……, &ov );
//執行其它操作.
//等待驅動事件
handle
aevents[2] ;
aevents[0] = ov.hevent ;
aevents[1] = hstopevent ;
dword nwaitresult = waitformultipleobjects (2, aevents, false, infinite) ;
這裡使用waitformultipleobjects等待事件,為什麼還有乙個hstopevent事件呢, waitformultipleobjects可能等待多個事件,只要有收到其中乙個事件,就返回,這樣當沒有收到驅動發出的事件時又想停止等待時,就可以發別外乙個事件來停止等待.
當收到事件後就可以使用
驅動中獲取上層資料:
majorfunction[irp_mj_device_control]函式中,接收irp,在irp中:
pio_stack_location stack = iogetcurrentirpstacklocation(irp); //
輸入緩衝區長度,deviceiocontrol的第四引數
ulong cbin = stack->parameters.deviceiocontrol.inputbufferlength; //
輸出緩衝區長度,deviceiocontrol的第六引數
ulong cbout = stack->parameters.deviceiocontrol.outputbufferlength; //
控制**,deviceiocontrol的第二個引數
ulong code = stack->parameters.deviceiocontrol.iocontrolcode;
WDM驅動和NT式驅動
win32裝置驅動程式體系結構 目前,由於需要支援新的業務和新的pc外部裝置型別對驅動程式開發造成了新的挑戰。新型匯流排增加了裝置的數量和對裝置驅動程式的需求。裝置上各種功能的不斷增加使驅動程式的開發變得越來越複雜。同時,快速反應的互動式應用程式要求將軟體和硬體緊密的結合在一起。1997年,在用於w...
在WDM驅動中如何獲得PCI卡的物理Slot號
在wdm驅動中如何獲得pci卡的物理slot號?系統提供了乙個函式 iogetdeviceproperty 來實現這個功能。該函式的宣告如下 ntstatus iogetdeviceproperty in pdevice objectdeviceobject in device registry p...
驅動 3 2核心空間和使用者空間的資料互動
write fd,buf,len 呼叫核心中的磁碟驅動程式將使用者空間buf中的資料寫入到磁碟裝置 read fd,buf,len 呼叫核心中的磁碟驅動程式將磁碟中的資料寫入到使用者空間的buf 原則 1 使用者空間 不能訪問核心空間資料 2 核心空間 也不直接訪問使用者空間資料 訪問前先做許可權檢...