sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:993回复:1

求助:98下IoGetDeviceObjectPointer()的问题

楼主#
更多 发布于:2004-02-27 12:52
我的程序在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不一致呢,请大侠们指教。急啊。。。。 :(
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-27 14:18
而且,在98下调用IoGetDeviceObjectPointer()时,底层驱动不会收到IRP_MJ_CREATE。而在2k下,底层驱动会收到IRP_MJ_CREATE。98下,IoGetDeviceObjectPointer()的执行机制到底有什么不同啊?
游客

返回顶部