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

来源:互联网 发布:js 里面加载js 编辑:程序博客网 时间:2024/05/17 01:10


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

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、 如果当前用户权限非管理员,提升当前用户权限

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;}



原创粉丝点击