您的位置:首页 > 编程语言 > C语言/C++

c++ 提升应用程序的权限

2015-07-02 11:49 405 查看
转自:http://blog.csdn.net/leez0301/article/details/8608609

1、判断当前用户权限是否管理员权限

[cpp] view
plaincopy

BOOL IsRunAsAdmin()

{

BOOL fIsRunAsAdmin = FALSE;

DWORD dwError = ERROR_SUCCESS;

PSID pAdministratorsGroup = NULL;

// Allocate and initialize a SID of the administrators group.

SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;

if (!AllocateAndInitializeSid(

&NtAuthority,

2,

SECURITY_BUILTIN_DOMAIN_RID,

DOMAIN_ALIAS_RID_ADMINS,

0, 0, 0, 0, 0, 0,

&pAdministratorsGroup))

{

dwError = GetLastError();

goto Cleanup;

}

// Determine whether the SID of administrators group is enabled in

// the primary access token of the process.

if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin)){

dwError = GetLastError();

goto Cleanup;

}

Cleanup:

// Centralized cleanup for all allocated resources.

if (pAdministratorsGroup){

FreeSid(pAdministratorsGroup);

pAdministratorsGroup = NULL;

}

// Throw the error if something failed in the function.

if (ERROR_SUCCESS != dwError){

throw dwError;

}

return fIsRunAsAdmin;

}

2、 如果当前用户权限非管理员,提升当前用户权限

[cpp] view
plaincopy

BOOL ElevateCurrentProcess(CString sCmdLine)

{

USES_CONVERSION;

TCHAR szPath[MAX_PATH] = {0};

if (::GetModuleFileName(NULL, szPath, MAX_PATH)){

// Launch itself as administrator.

SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };

sei.lpVerb = _T("runas");

sei.lpFile = szPath;

sei.lpParameters = (LPCTSTR)sCmdLine;

// sei.hwnd = hWnd;

sei.nShow = SW_SHOWNORMAL;

if (!ShellExecuteEx(&sei)){

DWORD dwStatus = GetLastError();

if (dwStatus == ERROR_CANCELLED) {

return FALSE;

}else if (dwStatus == ERROR_FILE_NOT_FOUND) {

return FALSE;

}

return FALSE;

}

return TRUE;

}

return FALSE;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: