首页
社区
课程
招聘
[求助]FltCreateFile 有没有办法直接访问物理磁盘
发表于: 2019-8-27 12:12 4738

[求助]FltCreateFile 有没有办法直接访问物理磁盘

2019-8-27 12:12
4738
现在有一个需求上层下发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;
		}


最后于 2019-8-27 13:58 被MRRighter编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (6)
游客
登录 | 注册 方可回帖
返回
//