lmmir
驱动牛犊
驱动牛犊
  • 注册日期2008-07-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望171点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2751回复:3

IoAttachDeviceToDeviceStack 绑定设备失败。。。。

楼主#
更多 发布于:2010-11-18 14:49
同一个驱动对象创建的多个设备对象 能进行绑定吗?

我的代码如下
 但绑定不成功。。。


    NTSTATUS status;
    PDEVICE_OBJECT pDev_Obj_Old;
    //创建设备名称
    UNICODE_STRING devName;
    UNICODE_STRING devNameTop;
    RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
    
    //创建设备
    status = IoCreateDevice( pDriverObject,0,&(UNICODE_STRING)devName,FILE_DEVICE_UNKNOWN,0, FALSE,&g_pDevObj );
    if (!NT_SUCCESS(status))
        return status;

    g_pDevObj->Flags |=  DO_BUFFERED_IO;


    RtlInitUnicodeString(&devNameTop,L"\\Device\\MyDDKDeviceTop");
    //创建设备
    status = IoCreateDevice( pDriverObject,0,&(UNICODE_STRING)devNameTop,FILE_DEVICE_UNKNOWN,0, FALSE,&g_pDevObjTop );
    if (!NT_SUCCESS(status))
        return status;
    g_pDevObjTop->Flags |= DO_BUFFERED_IO;
    
    pDev_Obj_Old=IoAttachDeviceToDeviceStack(g_pDevObj,g_pDevObjTop);
    g_pDevObjTop->Flags=g_pDevObjTop->Flags & ~DO_DEVICE_INITIALIZING;
    KdPrint(("%X",g_pDevObj));
    KdPrint(("%X",pDev_Obj_Old));
    return STATUS_SUCCESS;
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
沙发#
发布于:2010-11-19 10:14
用户被禁言,该主题自动屏蔽!
mengwuji
驱动牛犊
驱动牛犊
  • 注册日期2010-07-20
  • 最后登录2014-06-06
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-11-19 23:00
首先,楼主的行为我认为存在多余,创建的多个设备时,设置可以用DEVICE_OBJECT对象的NextDevice参数。
把创建的设备构成个设备栈,那么上层发往的IRP请求会一层层传递下去。
还有就如楼主所说的想法,我想应该设置下同步,不然万一设备没创建成功,你的绑定也就不成功了。

最后,我认为绑定和设置设备栈内部原理应该一样的,只是根据不同的应用使用了不同的方法。
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
地板#
发布于:2010-11-20 00:50
用户被禁言,该主题自动屏蔽!
游客

返回顶部