vc 判断当前用户是否在管理员组以及是否SYSTEM权限运行
BOOL IsUserInAdminGroup() //判断是否在管理员组 { BOOL fInAdminGroup = FALSE; HANDLE hToken = NULL; HANDLE hTokenToCheck = NULL; DWORD cbSize = 0; OSVERSIONINFO osver = {0}; osver.dwOSVersionInfoSize = sizeof(osver); if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &hToken)) goto Cleanup; if (!GetVersionEx(&osver)) goto Cleanup; if (osver.dwMajorVersion >= 6) { TOKEN_ELEVATION_TYPE elevType; if (!GetTokenInformation(hToken, TokenElevationType, &elevType, sizeof(elevType), &cbSize)) goto Cleanup; if (TokenElevationTypeLimited == elevType) { if (!GetTokenInformation(hToken, TokenLinkedToken, &hTokenToCheck, sizeof(hTokenToCheck), &cbSize)) goto Cleanup; } } if (!hTokenToCheck) { if (!DuplicateToken(hToken, SecurityIdentification, &hTokenToCheck)) goto Cleanup; } BYTE adminSID[SECURITY_MAX_SID_SIZE]; cbSize = sizeof(adminSID); if (!CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, &adminSID, &cbSize)) goto Cleanup; if (!CheckTokenMembership(hTokenToCheck, &adminSID, &fInAdminGroup)) goto Cleanup; Cleanup: if (hToken) CloseHandle(hToken); if (hTokenToCheck) CloseHandle(hTokenToCheck); return fInAdminGroup; } BOOL IsRunAsAdmin() //判断是否以管理员权限运行 { BOOL fIsRunAsAdmin = FALSE; DWORD dwError = ERROR_SUCCESS; PSID pAdministratorsGroup = NULL; 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; } if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin)) { dwError = GetLastError(); goto Cleanup; } Cleanup: if (pAdministratorsGroup) FreeSid(pAdministratorsGroup); return fIsRunAsAdmin; } if (!IsUserInAdminGroup()) { exit(1); } if (IsRunAsAdmin()) { code(); }