NtQueryInformationProcess
作用
获取指定文件大小,in byte。
原型
DWORD GetFileSize(__kernel_entry NTSTATUS NtQueryInformationProcess(
HANDLE ProcessHandle,
PROCESSINFOCLASS ProcessInformationClass,
PVOID ProcessInformation,
ULONG ProcessInformationLength,
PULONG ReturnLength
);
参数说明
- ProcessHandle:检索其信息的进程的句柄。
- ProcessInformationClass:要检索的进程信息的类型,此参数可以是PROCESSINFOCLASS枚举中的值之一 。
- ProcessInformation:指向调用应用程序提供的缓冲区的指针,函数将请求的信息写入该缓冲区。写入的信息大小取决于ProcessInformationClass参数的数据类型:
PROCESS_BASIC_INFORMATION
当ProcessInformationClass 参数是ProcessBasicInformation,缓冲器指向的PROCESSINFORMATION参数应该足够大,以保持单个PROCESS_BASIC_INFORMATION具有下述布局结构:
typedef struct _PROCESS_BASIC_INFORMATION {
PVOID Reserved1;
PPEB PebBaseAddress;
PVOID Reserved2[2];
ULONG_PTR UniqueProcessId;
PVOID Reserved3;
} PROCESS_BASIC_INFORMATION;
此结构体等价于
typedef struct{
DWORD ExitStatus; //プロセス終了状態
DWORD PebBaseAddress; //プロセス環境ブロックアドレス
DWORD AffinityMask; //プロセス関連マスク
DWORD BasePriority; //进程优先级
ULONG UniqueProcessId; //进程ID
ULONG InheritedFromUniqueProcessId;//父进程ID
} PROCESS_BASIC_INFORMATION;
- ProcessInformationLength:ProcessInformation参数指向的缓冲区的大小,以字节为单位。
- ReturnLength:指向返回信息大小的指针 。
追加说明
- 可能会在 Windows 的未来版本中更改或不可用
- 该函数一般用以获取父进程ID。
示例
PROCESS_BASIC_INFORMATION pbi;
DWORD Pid = GetCurrentProcessId();
PROCNTQSIP NtQueryInfoProcess = (PROCNTQSIP)GetProcAddress(GetModuleHandle("ntdll"),
"NtQueryInformationProcess");
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, Pid );
NtQueryInformationProcess(hProcess,
ProcessBasicInformation,
(PVOID)&pbi,
sizeof(PROCESS_BASIC_INFORMATION),
NULL
);
CloseHandle(hProcess);