阅读:1623回复: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 |
|
|