-
-
[求助]FltCreateFile 有没有办法直接访问物理磁盘
-
发表于: 2019-8-27 12:12 4772
-
现在有一个需求上层下发IRP,需要读取物理磁盘的前512个字节 然后写入数据,我现在是使用FltCreateFile来打开并且防止重入,因为磁盘上已经有过滤器了,现在问题如下:
1、传入参数 \\\\.\\PhysicalDrive1 返回 STATUS_OBJECT_NAME_INVALID
2、传入参数\??\PhysicalDrive1或者
"\Device\Harddisk1\DR2"
返回STATUS_INVALID_DEVICE_OBJECT_PARAMETER
我的instance是通过卷名获取到的 我怀疑是这里的问题
如果通过设置绕过ThreadID的方法就是在minifilter函数里面判断发送irp的是不是当前线程如果是就放过,我直接通过zwCreateFile 参数为 "\??\PHYSICALDRIVE1" 是可以直接打开的 但是通过上面的方法就是打不开 用绕过ThreadID的方法有点不够优雅~!
代码如下 求各位大佬告知这个参数应该怎么填写才能打开物理磁盘对象 谢谢
g_dwBypassThreadID = PsGetCurrentThreadId(); InitializeObjectAttributes(&oa, &pInstanceContext->ustrPhyDeviceName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0); ntStatus = ZwCreateFile(&hFileHandle, GENERIC_READ | GENERIC_WRITE, &oa, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); g_dwBypassThreadID = 0; if (STATUS_SUCCESS != ntStatus) { break; } if (hFileHandle != NULL) { ZwClose(hFileHandle); hFileHandle = NULL; } InitializeObjectAttributes(&oa, &pInstanceContext->ustrPhyDeviceName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0); ntStatus = FltCreateFileEx(g_pFilterObj, pRetInstance, &hFileHandle, &pFileObject, GENERIC_READ | GENERIC_WRITE, &oa, &IoStatus, NULL, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT | FILE_WRITE_THROUGH | FILE_NO_INTERMEDIATE_BUFFERING, NULL, 0, 0);// if (STATUS_SUCCESS != ntStatus) { break; }
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-8-27 13:58
被MRRighter编辑
,原因:
赞赏
看原图
赞赏
雪币:
留言: