r4o5m6e8o@163.c
驱动牛犊
驱动牛犊
  • 注册日期2015-04-22
  • 最后登录2015-04-23
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2123回复:2

在Windows中 驱动层与用户层 数据交换有哪几种方式?

楼主#
更多 发布于:2015-04-23 15:02
最近在做一个虚拟声卡驱动,目的是把Windows中到达驱动层的数据,全部抓出来,现在已经能获取到数据了。现在问题是如何把数据传到用户层。
 
我所知道的方法:
     第一步.替换 WDMDispatchRoutine 函数,自处理自己的IRP,其余的继续交由原来的函数处理。(这个OK了)
     第二步.在驱动层创建 设备的 SymbolLink 与 设备对象的名字 关联起来(IoCreateSymbolLink),这样才能在用户层打开此设备,得到句柄,才能发起IOCTROL命令。问题就在这里了,我得不到设备名称.我只能得到 内核中的设备句柄。
     分析如下: 在 WDMAddDevice 入口函数,我们可以得到 pDriverObj 和 pPDObj 2个对象。我用DeviceTree查看到 pDriverObj 是本层驱动对象,pPDObj 是在 HDAudBus 这个驱动上的一个对象,在调用完 PcAddAdapterDevice 函数后,pDriverObj->DeviceObject 是本驱动最新创建的设备对象,并且它被Attach到了pPDObj上。   (我看到pDriverObj->DeviceObject == pPDObj->AttachedDevice). 如是我现在有2个DeviceObject了。我在网上看到有个函数可以通过 设备对象得到 设备名,  
status = IoGetDeviceProperty(  pDevObj, DevicePropertyPhysicalDeviceObjectName, lenNameNeed, pResultBuffer, &lenNameNeed );
我传入 pPDObj 确实可以得到设备名,之后我创建  SymbolLink 也成功了,
 
                //////
                // create symLink.
                UNICODE_STRING symLinkName;
                RtlInitUnicodeString( &symLinkName, L"\\??\\AAA1");
                UNICODE_STRING devName;
                RtlInitUnicodeString( &devName, pDevName );
                NTSTATUS status2 = IoCreateSymbolicLink( &symLinkName, &devName );
但是在用户层去打开这个设备却是失败的。
g_hDevice = ::CreateFile( _T("\\\\.\\AAA1"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
我猜测pPDObj  并不是我的驱动所创建的,用户层打不开或者找不到也可能是这个原因。
 
然后,我就试图去获取 pDriverObj->DeviceObject  的设备名,可能都是失败。IoGetDeviceProperty 的返回值是 0xC0000010

0xC0000010
STATUS_INVALID_DEVICE_REQUEST

The specified request is not a valid operation for the target device.

 没有SymbolLink,我就无法在用户层打开设备,也就无法调用IOCTRL,所以在这里请教各位大神有什么招。
 
 
 
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2015-04-25 10:15
你的设备支持irp_mj_create吗?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
cpp肥兔
未验证会员
未验证会员
  • 注册日期2020-09-15
  • 最后登录2021-02-04
  • 粉丝0
  • 关注4
  • 积分24分
  • 威望190点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2021-01-05 15:38
-CreateFile + ReadFile
-DeviceIOControl
-Private_Shared_Memory_Map;
游客

返回顶部