15,471
社区成员
发帖
与我相关
我的任务
分享
BOOL CAppInst::ToExplorer()
{
DWORD dwExplorerPID = GetExplorerPID();
if(dwExplorerPID <= 0)
{
OutputDebugString(L"[Debug] Get explorer pid to failed!");
return FALSE;
}
// Debug infos
{
TCHAR szLogInfo[MAX_PATH];
wsprintf(szLogInfo, L"[Debug] The explorer pid is %d", (INT)dwExplorerPID);
OutputDebugString(szLogInfo);
}
HANDLE hExplorerProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, dwExplorerPID); //获取Explorer.exe进程句柄
if(NULL == hExplorerProcess)
{
// Debug infos
{
TCHAR szLogInfo[MAX_PATH];
wsprintf(szLogInfo, L"[Debug] OpenProcess() == NULL!! lasterror:%d", (INT)GetLastError());
OutputDebugString(szLogInfo);
}
return FALSE;
}
HANDLE hExplorerToken;
if(!OpenProcessToken(hExplorerProcess, TOKEN_QUERY|TOKEN_DUPLICATE, &hExplorerToken))
{
// Debug infos
{
TCHAR szLogInfo[MAX_PATH];
wsprintf(szLogInfo, _T("[Debug] !OpenProcessToken()!! lasterror:%d"), (int)GetLastError());
OutputDebugString(szLogInfo);
}
CloseHandle(hExplorerProcess);
return FALSE;
}
if(!ImpersonateLoggedOnUser(hExplorerToken))
{
// Debug infos
{
TCHAR szLogInfo[MAX_PATH];
wsprintf(szLogInfo, _T("[Debug] !ImpersonateLoggedOnUser()!! lasterror:%d"), (int)GetLastError());
OutputDebugString(szLogInfo);
}
CloseHandle(hExplorerToken);
return FALSE;
}
/*TCHAR dir[1024]={0};
TCHAR szLogInfo[MAX_PATH];
GetUserProfileDirectory(hExplorerToken,dir,(LPDWORD)1024);*/
/*
TCHAR GetUserProfileDirectory[MAX_PATH];
wsprintf(GetUserProfileDirectory, _T("[Debug] !ImpersonateLoggedOnUser()!! lasterror:%d"), (int)GetLastError());
OutputDebugString(GetUserProfileDirectory);
::MessageBox(NULL,dir,L"dir",0);*/
CloseHandle(hExplorerProcess);
CloseHandle(hExplorerToken);
TCHAR szLogonUserName[MAX_PATH]; //当前登陆用户用户名
DWORD dwLogonUserNameLen = MAX_PATH;
GetUserName(szLogonUserName,&dwLogonUserNameLen);
// Debug infos
{
TCHAR szLogInfo[MAX_PATH];
wsprintf(szLogInfo, _T("[Debug] Logon user name: %s"), szLogonUserName);
OutputDebugString(szLogInfo);
}
return TRUE;
}