У меня есть дескриптор процесса с
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, THE_PROCESS_ID);
Как я могу получить имя пользователя пользователя, который выполняет процесс?
Я использую неуправляемый код (никакая.NET).
Используйте OpenProcessToken , чтобы получить токен (очевидно), затем GetTokenInformation с TokenOwner
], чтобы получить SID владельца. Затем вы можете использовать LookupAccountSid , чтобы получить имя пользователя.
WMI - это, вероятно, путь наименьшего сопротивления. Вы также должны иметь возможность получить токен с помощью OpenProcessToken, а затем GetTokenInformation, чтобы получить SID владельца. Затем вы можете превратить SID в имя пользователя.
WMI должен иметь возможность сообщить вам эту информацию. В противном случае вам придется полагаться на недокументированные забавы в ntdll.dll. Похоже, другие нашли решения, которые не используют ntdll.dll - используйте их, а не недокументированный материал.