在监控进程时,常用PsSetCreateProcessNotifyRoutine注册一个回调函数。
查看回调函数签名:
VOID (*PCREATE_PROCESS_NOTIFY_ROUTINE) (
IN HANDLE ParentId,
IN HANDLE ProcessId,
IN BOOLEAN Create
);
平时我们用到的进程PID也是DWORD类型(包括64bit系统也应该是DWORD)。
而这里为什么需要HANDLE来表示进程ID (即:IN HANDLE ProcessId)
在64bit 系统上,DWORD是 32 位无符号整数,而HANDLE 为64位指针。
(1)我想知道微软为什么这么设计(用HANDLE来作为pid类型)
(2)在64bit环境下,如果传入的 DWORD很大 pid 最高位为1:
pid & 0x80000000 == 0x80000000,扩展为64位 HANDLE 会不会把1当作符号位扩展?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)