mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Use CreateToolhelp32Snapshot instead of NtQueryInformationProcess to get ppid on Windows
Try to get rid of a spec error.
This commit is contained in:
parent
b7d9ec8caa
commit
09022b6d70
1 changed files with 21 additions and 0 deletions
|
@ -42,6 +42,7 @@
|
|||
#include <shlobj.h>
|
||||
#include <mbstring.h>
|
||||
#include <shlwapi.h>
|
||||
#include <tlhelp32.h>
|
||||
#if _MSC_VER >= 1400
|
||||
#include <crtdbg.h>
|
||||
#include <rtcapi.h>
|
||||
|
@ -6139,6 +6140,26 @@ rb_w32_getppid(void)
|
|||
static query_func *pNtQueryInformationProcess = (query_func *)-1;
|
||||
rb_pid_t ppid = 0;
|
||||
|
||||
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
||||
if (hSnap != INVALID_HANDLE_VALUE) {
|
||||
BOOL ok;
|
||||
PROCESSENTRY32 pe;
|
||||
DWORD pid = GetCurrentProcessId();
|
||||
pe.dwSize = sizeof(pe);
|
||||
ok = Process32First(hSnap, &pe);
|
||||
while (ok) {
|
||||
if (pe.th32ProcessID == pid) {
|
||||
ppid = (rb_pid_t)pe.th32ParentProcessID;
|
||||
break;
|
||||
}
|
||||
ok = Process32Next(hSnap, &pe);
|
||||
}
|
||||
CloseHandle(hSnap);
|
||||
if (ppid != 0) {
|
||||
return ppid;
|
||||
}
|
||||
}
|
||||
|
||||
if (pNtQueryInformationProcess == (query_func *)-1)
|
||||
pNtQueryInformationProcess = (query_func *)get_proc_address("ntdll.dll", "NtQueryInformationProcess", NULL);
|
||||
if (pNtQueryInformationProcess) {
|
||||
|
|
Loading…
Add table
Reference in a new issue