|
阅读:1799回复:3
Win2000下,进程创建初期,ZwOpenProcess会失败?
PsSetCreateProcessNotifyRoutine做进程监控时,得到进程的ID,使用ZwOpenProcess打开。
在winXP和win2003上没问题,但在win2000上则失败,返回错误码STATUS_INVALID_PARAMETER 是否2000和xp有着不同的进程打开机制? 代码: CLIENT_ID ClientId;
OBJECT_ATTRIBUTES ObjectAttributes;
memset(&ClientId, 0x0, sizeof(CLIENT_ID));
ClientId.UniqueProcess = (HANDLE)ProcId;
ClientId.UniqueThread = 0;
memset(&ObjectAttributes, 0x0, sizeof(OBJECT_ATTRIBUTES));
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
ntStatus = ZwOpenProcess(
&ProcessHandle,
PROCESS_ALL_ACCESS,
&ObjectAttributes,
&ClientId);
if(!NT_SUCCESS(ntStatus))
{
dprintf("ZwOpenProcess error = 0x%.8x! \n", (ULONG)ntStatus);
return FALSE;
} |
|
|
沙发#
发布于:2007-01-17 18:14
晕死,直接lookup出eprocess,handle个什么~
|
|
|
|
板凳#
发布于:2007-01-18 10:24
一直在试着取进程路径更安全的方法
进程创建时PEB没被填充,所以原来想用ZwQueryInformationProcess() -> ProcessImageFileName来取进程的全路径。 但2000下面取handle失败,其实ZwOpenProcess()内部也是先lookup再ObOpenObjectByPointer。 刚刚又查了2000的源代码,竟然发现2000下ZwQueryInformationProcess()根本没ProcessImageFileName这一信息块,无语中。。。 |
|
|
地板#
发布于:2007-01-18 10:41
引用第2楼jackiefzj于2007-01-18 10:24发表的“”: lookup应该不会失败,但是后面Handle化可能失败(嘿嘿)。 查那个还是老实的使用SectionHandle ->SectionObject->SegMeXX->xxxlist->FileObject->FileName |
|
|