阅读:995回复:1
求助:98下IoGetDeviceObjectPointer()的问题
我的程序在AddDevice()中,用IoRegisterPlugPlayNotification()注册监听底层设备的插拔,在其回调函数中,使用如下方法取得底层设备驱动的DeviceObject:
if(IsEqualGUID(dicn->Event, GUID_DEVICE_INTERFACE_ARRIVAL)) { status = IoGetDeviceObjectPointer( dicn->SymbolicLinkName, FILE_ALL_ACCESS, &pFile, &pdo); ................. } 我发现在2k下,返回的pdo与底层驱动中的DeviceObject相同,后面我创建的IRP也能顺利发送给底层驱动。此时,dicn->SymbolicLinkName形式为\??\USB#Vid_6513Pid_0089#51e37dc9701#{guid} 而在98下,我发现同样的程序,IoGetDeviceObjectPointer()也返回成功,但返回的pdo与底层驱动中的DeviceObject不同,我创建的IRP,用IoCallDriver()发给底层驱动,底层也收不到。为什么?此时,dicn->SymbolicLinkName形式为\DosDevice\0000000000000002#{guid}。 为什么在98下IoGetDeviceObjectPointer()返回的pdo会与底层驱动中的DeviceObject不一致呢,请大侠们指教。急啊。。。。 :( |
|
沙发#
发布于:2004-02-27 14:18
而且,在98下调用IoGetDeviceObjectPointer()时,底层驱动不会收到IRP_MJ_CREATE。而在2k下,底层驱动会收到IRP_MJ_CREATE。98下,IoGetDeviceObjectPointer()的执行机制到底有什么不同啊?
|
|