首页
社区
课程
招聘
[求助]PsSetCreateProcessNotifyRoutine中的callback中打开进程文失败的问题
发表于: 2011-12-29 14:14 8744

[求助]PsSetCreateProcessNotifyRoutine中的callback中打开进程文失败的问题

2011-12-29 14:14
8744
我在callback例程中获取了进程的NT路径,然后我想打开这个进程的文件计算md5,但是我用ZwCreateFile打开这个文件(正在运行)的时候就失败了,返回STATUS_SHARING_VIOLATION

		InitializeObjectAttributes(&objAttr, ustrSrcFile,
			OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,
			NULL, NULL);

		ntstatus = ZwCreateFile(&handle,
			GENERIC_ALL|SYNCHRONIZE,
			&objAttr, 
			&ioStatusBlock, 
			NULL,
			FILE_ATTRIBUTE_NORMAL,
			FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
			FILE_OPEN, 
			FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
			NULL, 
			0);
		if (!NT_SUCCESS(ntstatus))
		{
			KdPrint(("CalcProcessMd5  Routine ZwCreateFile Failed 0x%08lx\n",ntstatus));
			__leave;
		}


传给ustrSrcFile的数据为
\\Device\\HarddiskVolume1\\WINDOWS\\system32\\notepad.exe

但是为什么打开失败

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 2271
活跃值: (2160)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
2
程序是用独占的方式打开notepad的, 然后你这里就打不开了.
2011-12-29 14:31
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那怎么办呢
2011-12-29 14:33
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
尽量少在callback里面做事 在其他线程里面去做吧
2011-12-29 14:44
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 改成  FILE_SHARE_READ
2011-12-29 15:07
0
雪    币: 75
活跃值: (688)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
Image Section 已经建好了..直接读内存算贝..在这里与硬盘上保存的文件相比 只是 对齐上面的差别..没验证.应该行得通
2011-12-29 15:11
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
改了没用,应该不是这个原因
2012-1-4 10:25
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我打开notepad后,在DriverEntry里面还是可以正确计算出MD5的,这是为什么啊
2012-1-4 10:27
0
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
9
源代码中有说的,调用者无法打开调用者已经打开过的文件
回调之前,在R3层 windows已经CreateFile过了
2012-1-4 19:19
0
雪    币: 136
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
什么源代码啊
2012-1-4 20:53
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
11
用PsReferenceProcessFilePointer直接获得FileObject就好了~
2012-1-5 00:50
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
传说中的未导出函数。。。。

好像我在minifilter处理IRP的函数中,也无法获取当前发起IRP的进程的MD5 纠结啊
2012-1-5 08:37
0
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
13
自己在R3写个小测试就知道了,两次CreateFile同一个文件,第二次应该是会失败的
2012-1-5 10:42
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
也就是说,比如我创建了一个notepad进程,那么我驱动就到了notepad进程的上下文里面,此时也就是说notepad进程打开自己的文件失败了??

解决方法就是自己发IRP?或者是V校的那个未导出函数?
2012-1-5 10:54
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
解决了
GENERIC_ALL-->SYNCHRONIZE|FILE_READ_DATA ,就可以了
2012-1-5 13:22
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
16
导出的,请看MSDN~
2012-1-5 15:09
0
游客
登录 | 注册 方可回帖
返回
//