HANDLE hSnapshot = INVALID_HANDLE_VALUE;
PROCESSENTRY32 pe;
HANDLE hProc = NULL;
DWORD dwProcessID = 0;
TOKEN_USER *pTokenUser = NULL;
DWORD dwNeedLen = 0;
SID_NAME_USE sn;
TCHAR szDomainName[MAX_PATH];
DWORD dwDmLen = MAX_PATH;
TCHAR szUserName[256] = { 0 };
DWORD nNameLen = 256;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
return FALSE;
}
pe.dwSize = sizeof(pe);
if (Process32First(hSnapshot, &pe))
{
do{
if(lstrcmpi(L"explorer.exe", pe.szExeFile) == 0)
{
dwProcessID = pe.th32ProcessID;
break;
}
} while(Process32Next(hSnapshot, &pe));
}
CloseHandle(hSnapshot);
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
if (hProc == NULL)
{
OutputDebugStringA("OpenProcess Failed!\n");
return -1;
}
if(!OpenProcessToken(hProc, TOKEN_ALL_ACCESS, &phToken))
{
OutputDebugStringA("OpenProcessToken Failed!\n");
CloseHandle(hProc);
return -1;
}
if(GetTokenInformation(phToken,TokenUser, NULL, 0, &dwNeedLen))
{
if (dwNeedLen > 0)
{
pTokenUser = (TOKEN_USER*)malloc(sizeof(BYTE)*dwNeedLen);
if(!GetTokenInformation(phToken,
TokenUser,
pTokenUser,
dwNeedLen,
&dwNeedLen))
{
OutputDebugStringA("GetTokenInformation Failed!\n");
}
}
if(!LookupAccountSid(NULL,
pTokenUser->User.Sid,
szUserName,
&nNameLen,
szDomainName,
&dwDmLen,
&sn))
{
OutputDebugStringA("LookupAccountSid Failed!\n");
}
}
else
{
OutputDebugStringA("GetTokenInformation Failed!\n");
}