Как имея данные о процессе(pid, если надо, хендл) определить какой пользователь его запустил? Документированных функций нету, однако Task Manager как-то это делает.
sadomazer 1) Открыл процес - получил хендл. 2) По хенделу получил токен. 3) По токену получил владельца. P.S. Например: OpenProcess, OpenProcessToken, GetTokenInformation
вот тебе простенький примерчик о чем говорит DelExe в примере процесс берет информацию о самом себе Код (Text): #include "windows.h" #include "stdio.h" void main() { HANDLE hProcToken; char szModuleName[1024]; char szUserName[1024]; char szDomainName[1024]; DWORD dwLenUser; DWORD dwLenDomain; //next 2 lines are included to make more obvious how to get Process Handle from Process ID DWORD dwProcessID = GetCurrentProcessId(); HANDLE ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessID); //For current process it is possible to call // HANDLE ProcessHandle = GetCurrentProcess(); if (OpenProcessToken(ProcessHandle, TOKEN_QUERY, &hProcToken) != FALSE) { BYTE *byData = new BYTE[1024]; DWORD dwRetLen; if (GetTokenInformation(hProcToken, TokenUser/*TokenOwner*/, byData, 1024, &dwRetLen) != FALSE) { dwLenUser = sizeof(szUserName); dwLenDomain = sizeof(szDomainName); TOKEN_USER * pTokenUser = (TOKEN_USER*)byData; SID_NAME_USE sidUse; if (LookupAccountSid(NULL, /*sid*/pTokenUser->User.Sid, szUserName, &dwLenUser, szDomainName, &dwLenDomain, &sidUse) != FALSE) { GetModuleFileName(NULL, szModuleName, sizeof(szModuleName)); printf("Process: %s\nUserName: %s\nDomainName: %s", szModuleName, szUserName, szDomainName); } } delete[] byData; } } результат выполнения: Process: C:\TestProjects\test\Debug\test.exe UserName: Smike DomainName: BlackIP