9 HMODULE hNtdll = GetModuleHandleA(
"ntdll");
10 if (!hNtdll)
return false;
12 HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
14 typedef LONG(NTAPI *NtSuspendProcess)(IN HANDLE ProcessHandle);
16 auto pfnNtSuspendProcess = (NtSuspendProcess)GetProcAddress(
17 hNtdll,
"NtSuspendProcess");
18 if (!pfnNtSuspendProcess) {
21 LONG res = pfnNtSuspendProcess(processHandle);
22 CloseHandle(processHandle);
31 HMODULE hNtdll = GetModuleHandleA(
"ntdll");
32 if (!hNtdll)
return false;
34 HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
36 typedef LONG(NTAPI *NtResumeProcess)(IN HANDLE ProcessHandle);
38 auto pfnNtResumeProcess = (NtResumeProcess)GetProcAddress(
39 hNtdll,
"NtResumeProcess");
40 if (!pfnNtResumeProcess) {
43 LONG res = pfnNtResumeProcess(processHandle);
44 CloseHandle(processHandle);
53 DWORD my_pid = GetCurrentProcessId();
54 const bool is_me = (remote_pid == my_pid);
66 bool is_my_child = remote_parent == my_pid;
67 bool is_my_parent = my_parent == remote_pid;
68 bool is_sibling = my_parent == remote_parent;
70 if (!is_my_child && !is_my_parent && !is_sibling) {
80 PROCESS_BASIC_INFORMATION pbi = { 0 };
83 HMODULE hNtdll = GetModuleHandleA(
"ntdll");
86 typedef NTSTATUS(__stdcall* FPTR_NtQueryInformationProcess) (HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG);
87 auto NtQueryInformationProcess
88 = (FPTR_NtQueryInformationProcess)GetProcAddress(hNtdll,
"NtQueryInformationProcess");
89 if (!NtQueryInformationProcess) {
93 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,
102 NTSTATUS ntStatus = NtQueryInformationProcess(hProcess,
103 ProcessBasicInformation,
105 sizeof(PROCESS_BASIC_INFORMATION),
109 if (ntStatus == S_OK)
110 dwParentPID = (DWORD)pbi.InheritedFromUniqueProcessId;
111 CloseHandle(hProcess);