阅读:1838回复:0
求助 已知卷设备对象 如何获取卷所在磁盘的句柄并进行磁盘读写?
我写了一个卷过滤驱动 想截获卷加载的时候读取它所在的磁盘内容 但是问题如下:
//根据卷设备的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; } 哪里的问题? 麻烦给点意见 谢谢 |
|