WDM驅動和應用的互動

2021-04-14 19:38:34 字數 1082 閱讀 4794

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 核心空間 也不直接訪問使用者空間資料 訪問前先做許可權檢...