方法一:
-
C/C++ code
-
bool EnableDebugPrivilege() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, & hToken)) { return FALSE; } if ( ! LookupPrivilegeValue(NULL, SE_DEBUG_NAME, & sedebugnameValue)) { CloseHandle(hToken); return false ; } tkp.PrivilegeCount = 1 ; tkp.Privileges[ 0 ].Luid = sedebugnameValue; tkp.Privileges[ 0 ].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges(hToken, FALSE, & tkp, sizeof (tkp), NULL, NULL)) { CloseHandle(hToken); return false ; } return true ; }
方法二:
-
C/C++ code
-
bool UpPrivilege() { HANDLE hToken; // handle to process token TOKEN_PRIVILEGES tkp; // pointer to token structure bool result = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, & hToken); if ( ! result) // 打开进程错误 return result; result = LookupPrivilegeValue( NULL, SE_DEBUG_NAME, & tkp.Privileges[ 0 ].Luid); if ( ! result) // 查看进程权限错误 return result; tkp.PrivilegeCount = 1 ; // one privilege to set tkp.Privileges[ 0 ].Attributes = SE_PRIVILEGE_ENABLED; result = AdjustTokenPrivileges( hToken, FALSE, & tkp, sizeof (TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL); return result; }
方法三:
-
C/C++ code
-
#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege") #define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege") #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege") #define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege") #define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege") #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege") #define SE_TCB_NAME TEXT("SeTcbPrivilege") #define SE_SECURITY_NAME TEXT("SeSecurityPrivilege") #define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege") #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege") #define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege") #define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege") #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege") #define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege") #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege") #define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege") #define SE_BACKUP_NAME TEXT("SeBackupPrivilege") #define SE_RESTORE_NAME TEXT("SeRestorePrivilege") #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege") #define SE_DEBUG_NAME TEXT("SeDebugPrivilege") #define SE_AUDIT_NAME TEXT("SeAuditPrivilege") #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege") #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege") #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege") #define SE_UNDOCK_NAME TEXT("SeUndockPrivilege") #define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege") #define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege") #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege") BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName,BOOL bEnable) { HANDLE hToken; TOKEN_PRIVILEGES tp; LUID luid; if ( ! OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | TOKEN_READ, & hToken)) return FALSE; if ( ! LookupPrivilegeValue(NULL, lpszPrivilegeName, & luid)) return TRUE; tp.PrivilegeCount = 1 ; tp.Privileges[ 0 ].Luid = luid; tp.Privileges[ 0 ].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0 ; AdjustTokenPrivileges(hToken,FALSE, & tp,NULL,NULL,NULL); CloseHandle(hToken); return (GetLastError() == ERROR_SUCCESS); }
/********************************VISTA************************/ 嵌入manifest 如果是vs2008 在项目属性里面直接修改为requireAdministrator就可以了
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="test.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
该代码添加到VC资源中, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1