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

求助 已知卷设备对象 如何获取卷所在磁盘的句柄并进行磁盘读写?

楼主#
更多 发布于:2011-09-01 09:48
我写了一个卷过滤驱动 想截获卷加载的时候读取它所在的磁盘内容 但是问题如下:
//根据卷设备的VPB获得磁盘设备
DeviceObject= 卷设备的VPB->RealDevice
那么磁盘设备对象就是已知了 那么如何获得句柄HANDLE 来对磁盘进行读写?我进行了几次尝试未果
 
第一次是使用ObOpenObjectByPointer 通过设备对象来获得句柄句柄HANDLE
但是在ZwReadFile使用这个句柄对磁盘读写 返回类型错误
 
 
 
然后我尝试使用ObQueryNameString
 
//根据卷设备的VPB获得磁盘设备
DeviceObject= 卷设备的VPB->RealDevice
获得磁盘设备然后
 
status = ObQueryNameString (DeviceObject,
PFileNameInfo,
NumberOfBytes,
&LengthNeeded); //这里名字获得成功 "\Device\Harddisk1\DP(1)0-0+7"
 
InitializeObjectAttributes(&ObjAttrib,&(PFileNameInfo->Name),
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,NULL);
status = ZwCreateFile(&DeviceHandle,
GENERIC_READ,
&ObjAttrib,
&IoStatus,
NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
if(!NT_SUCCESS(status))
{ //总失败 #define STATUS_NO_SUCH_DEVICE ((NTSTATUS)0xC000000EL)
ExFreePool (PFileNameInfo);
PFileNameInfo = NULL;
DbgPrint("IsSafeUSB() Create File Failed\n");
return status;
}
哪里的问题? 麻烦给点意见 谢谢
 
游客

返回顶部