阅读:3687回复:4
求助 通过\\Device\\HarddiskVolume1获得盘符名
尝试使用RtlVolumeDeviceToDosName
但是他需要设备指针 然后我通过ObReferenceObjectByName 到ObReferenceObjectByName这一步就错误了 status = ObReferenceObjectByName ( &nameInfo->Volume, OBJ_CASE_INSENSITIVE, NULL, 0, IoDriverObjectType, KernelMode, NULL, &DeviceObject ); STATUS c0000024 返回设备类型错误 显示设备类型不正确 IoDriverObjectType IoDeviceObjectType都试过了 |
|
沙发#
发布于:2011-03-17 17:12
&nameInfo->Volume 为类似 \\Device\\HarddiskVolume1
|
|
板凳#
发布于: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; 就开始使用了 这样很危险 |
|
地板#
发布于:2012-05-23 10:31
虽然过去几年了,但是我还是回复一下楼上的,
RtlVolumeDeviceToDosName,这个函数比较奇怪,自己会给DosName->Buffer分配内存, 虽然你分配了一段内存,但是执行RtlVolumeDeviceToDosName以后,DosName->Buffer又指向了系统分配的内存, 这个你自己分配的内存,没有清空,会造成内存泄露 |
|
地下室#
发布于:2012-06-14 08:53
赞一下楼上求真的精神。
|
|
|