Чтобы получить другую информацию о процессе, вы должны включить SeDebugPrivilege
для своей программы.
Этот код активирует ее для вас:
{
int err = 0;
int result = 0;
HANDLE token = NULL;
HANDLE proc_handle = NULL;
TOKEN_PRIVILEGES priv;
/*Get the open process handle to the process*/
proc_handle = GetCurrentProcess ();
/* Get a token for this process.*/
result = OpenProcessToken (proc_handle, TOKEN_ALL_ACCESS, &token);
if (! result)
{
/* return failure */
}
/* Get the LUID for the SeDebugPrivilege privilege.*/
result = LookupPrivilegeValue (NULL, SE_DEBUG_NAME,
&priv.Privileges[0].Luid);
if (! result)
{
err = qerr_win32toq (GetLastError ());
printf("LookupPrivilegeValue failed with err: %d", err);
goto out;
}
priv.PrivilegeCount = 1;
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
result = AdjustTokenPrivileges (token, FALSE, &priv, 0, (PTOKEN_PRIVILEGES)
NULL, 0);
if (! result)
{
err = qerr_win32toq (GetLastError ());
printf ("AdjustTokenPrivilege failed with err: %d", err);
goto out;
}
out:
if (token)
CloseHandle (token);
return err;
}