看到很多介绍使用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看了很久也没精确的弄懂意思,大侠来指导一下吧.

解决方案 »

  1.   

    BOOL LookupPrivilegeValue(
      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仔细看看吧!!