catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
阅读:3584回复:4

求助 通过\\Device\\HarddiskVolume1获得盘符名

楼主#
更多 发布于:2011-03-17 17:11
尝试使用RtlVolumeDeviceToDosName
但是他需要设备指针
然后我通过ObReferenceObjectByName

到ObReferenceObjectByName这一步就错误了
status = ObReferenceObjectByName (
                        &nameInfo->Volume,
                        OBJ_CASE_INSENSITIVE,
                        NULL,
                        0,
                        IoDriverObjectType,
                        KernelMode,
                        NULL,
                        &DeviceObject );
STATUS c0000024 返回设备类型错误
显示设备类型不正确  IoDriverObjectType IoDeviceObjectType都试过了


catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2011-03-17 17:12
      &nameInfo->Volume 为类似 \\Device\\HarddiskVolume1
catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
板凳#
发布于:2011-03-18 09:07
自己解答吧 很简单的一句代码

RtlInitUnicodeString(&DosName,L"X:\\");
            RtlVolumeDeviceToDosName(Data->Iopb->TargetFileObject-> DeviceObject, &DosName);
            DbgPrint("ParLette is %wZ\n",&DosName);

注意网络上很多范例代码 UNICODE没有分配内存 直接
UNICODE_STRING DosName;
就开始使用了 这样很危险
guijc1
驱动牛犊
驱动牛犊
  • 注册日期2008-06-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望231点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地板#
发布于:2012-05-23 10:31
虽然过去几年了,但是我还是回复一下楼上的,

RtlVolumeDeviceToDosName,这个函数比较奇怪,自己会给DosName->Buffer分配内存,
虽然你分配了一段内存,但是执行RtlVolumeDeviceToDosName以后,DosName->Buffer又指向了系统分配的内存,


这个你自己分配的内存,没有清空,会造成内存泄露
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地下室#
发布于:2012-06-14 08:53
赞一下楼上求真的精神。
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部