win7 模拟低权限用户去登录 windows安全大神 求指导

Bboy简单 2015-05-15 05:49:52
情况是这样的 我先用服务启动了一个应用程序,这个应用程序启动是需要权限的,所以现在的用户是system
但是我是想把应用程序模拟成当前普通用户,拿到了当前用户的explorer的token, ImpersonateLoggedOnUser,去模拟当前用户登录,在xp下是可以成功的,因为我在应用程序里需要打开公共对话框,在win7下模拟之后虽然打印出来的用户名称是当前用户,但是打开公共对话框还是system权限 因为他可以浏览到所有管理员的文件目录,xp下是正常的,希望知道的人指导下

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;
}
...全文
50 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧