funny
驱动小牛
驱动小牛
  • 注册日期2003-04-17
  • 最后登录2021-07-30
  • 粉丝0
  • 关注0
  • 积分1012分
  • 威望178点
  • 贡献值0点
  • 好评度123点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2289回复:2

用静态枚举创建设定了名字,为何WdfFdoInitQueryProperty查询的pdo名字是空呢?

楼主#
更多 发布于:2009-11-12 09:47
    
用静态枚举设定了名字,为何WdfFdoInitQueryProperty查询的名字是空呢?其中返回 resultLength = 0
//代码如下
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//总线驱动中  静态枚举创建pdo
  pDeviceInit = WdfPdoInitAllocate(Device);

    if (pDeviceInit == NULL) {
        status = STATUS_INSUFFICIENT_RESOURCES;
        goto Cleanup;
    }

    RtlUnicodeStringPrintf(&deviceName, L"%ws%ws%d",
                                  L"\\Device\\", L"ABCDEFG", num);
     KdPrint(("AddPdoDevice: %ws", deviceName.Buffer));      

    //设定设备类型名称    
  status = WdfDeviceInitAssignName(pDeviceInit, &deviceName);
    if(!NT_SUCCESS(status))
    {
         KdPrint(("Can not set deviceName"));
    }
    WdfDeviceInitSetDeviceType(pDeviceInit, FILE_DEVICE_BUS_EXTENDER);
    WdfDeviceInitSetExclusive(pDeviceInit, TRUE);
    WdfDeviceInitSetCharacteristics(pDeviceInit, FILE_DEVICE_SECURE_OPEN, TRUE );
    .....................

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //功能驱动中
   DECLARE_UNICODE_STRING_SIZE( deviceName, DEVICE_OBJECT_NAME_LENGTH );
   bufferLength = 256;    
    UNREFERENCED_PARAMETER(Driver);

    PAGED_CODE();

      //查询物理设备名 pdo 的名字
   status =  WdfFdoInitQueryProperty(pDeviceInit,
                     DevicePropertyPhysicalDeviceObjectName,
                     bufferLength,
                     deviceName.Buffer,
                    &resultLength  );

    if (!NT_SUCCESS(status)) {
            return status;
    }
.   ....................

   请各位高手给解释一下。那个地方错了。thanks。
  还有其它的好的方法吗?
驱动现在,成就未来
funny
驱动小牛
驱动小牛
  • 注册日期2003-04-17
  • 最后登录2021-07-30
  • 粉丝0
  • 关注0
  • 积分1012分
  • 威望178点
  • 贡献值0点
  • 好评度123点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2009-11-13 10:51
在FDO中用此方法也不行:
IoGetDeviceProperty(
                                    WdfFdoInitWdmGetPhysicalDevice( pDeviceInit )
                                    DevicePropertyPhysicalDeviceObjectName,
                                    bufferLength,
                                   deviceName.Buffer,
                                    &resultLength   );


可是我在总线驱动中命名设置了pdo的名字:WdfDeviceInitAssignName(............)

我需要在功能驱动中获取PDO设备的名字。可是就是得不到。

请高手指点。
驱动现在,成就未来
drivercoding
驱动牛犊
驱动牛犊
  • 注册日期2009-10-19
  • 最后登录2013-08-17
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-11-24 13:07
你是想获取了PDO的名字后,在unnamed FDO的基础上建立symbolic link吧。

如果是这样的话,就不要用这个方法了。WdfDeviceCreateSymbolicLink()的第一个参数,是你建立的device。PDO是不行的。
游客

返回顶部