Window:进程操作

1、获取当前进程名称

TCHAR szFileFullPath[256];
::GetModuleFileName(NULL, static_cast<LPTSTR>(szFileFullPath), 256);
tstring wstrProcessName(szFileFullPath);
if (!wstrProcessName.empty())
{
    int nPos = wstrProcessName.find_last_of(_T('\\'));
    int nLen = wstrProcessName.length();
    wstrProcessName = wstrProcessName.substr(nPos + 1,nLen);
}

2、在System权限降权读取appdata目录。

TCHAR wszAppDataPath[MAX_PATH * 2] = { 0 };
::SHGetSpecialFolderPath(NULL, wszAppDataPath, CSIDL_APPDATA, TRUE);
HANDLE hToken = NULL;
if(true == ImpersonateLoggedOnUserWrapper(hToken))
{
    if (S_OK == SHGetFolderPath(NULL, CSIDL_APPDATA, hToken, SHGFP_TYPE_DEFAULT, wszAppDataPath))
    {
        //使用完毕之后通过调用RevertToSelf取消模拟
        RevertToSelf();
    }
}

//对当前用户权限降权以普通用户执行
bool ImpersonateLoggedOnUserWrapper(HANDLE& hToken)
{
    DWORD dwConsoleSessionId = WTSGetActiveConsoleSessionId();
    if (WTSQueryUserToken(dwConsoleSessionId, &hToken))
    {
        if (ImpersonateLoggedOnUser(hToken))
        {
            return true;
        }
    }
    return false;
}

猜你喜欢

转载自blog.csdn.net/lishangke/article/details/80361711