看到很多介绍使用API关机的例子,都说在2000/XP下要提升进程的权限才能做到,并有如下的代码 HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
hProcess=GetCurrentProcess();
OpenProcessToke(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL);尤其是OpenProcessToke,LookupPrivilegeValue,AdjustTokenPrivileges我在msdn看了很久也没精确的弄懂意思,大侠来指导一下吧.
TOKEN_PRIVILEGES Privileges;
LUID luid;
hProcess=GetCurrentProcess();
OpenProcessToke(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL);尤其是OpenProcessToke,LookupPrivilegeValue,AdjustTokenPrivileges我在msdn看了很久也没精确的弄懂意思,大侠来指导一下吧.
LPCTSTR lpSystemName,
LPCTSTR lpName,
PLUID lpLuid
);从本地系统获得信息
LPCTSTR lpSystemName,字符串指针,里面字符串是对你需要查找系统的描述
LPCTSTR lpName,也是描述信息,可以是常量,E_SECURITY_NAME 或着 "SeSecurityPrivilege".
PLUID lpLuid 用来存储权限信息。BOOL AdjustTokenPrivileges(
HANDLE TokenHandle,
BOOL DisableAllPrivileges,
PTOKEN_PRIVILEGES NewState,
DWORD BufferLength,
PTOKEN_PRIVILEGES PreviousState,
PDWORD ReturnLength
);The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access.MSDN仔细看看吧!!