分别是:
OpenProcessToken();
LookupPrivilegeValue();
AdjustTokenPrivileges();
BOOL OpenProcessToken( __in HANDLE ProcessHandle, //要修改访问权限的进程句柄 __in DWORD DesiredAccess, //指定你要进行的操作类型 __out PHANDLE TokenHandle //返回的访问令牌指针 ); BOOL LookupPrivilegevalue( LPCTSTR lpSystemName, // 表示所要查看的系统,本地系统直接用NULL LPCTSTR lpName, // 表示所要查看的特权信息的名称 PLUID lpLuid //接收所返回的制定特权名称的信息 ); BOOL AdjustTokenPrivileges( HANDLE TokenHandle, //包含特权的句柄 BOOL DisableAllPrivileges,//禁用所有权限标志 PTOKEN_PRIVILEGESNewState,//新特权信息的指针(结构体) DWORD BufferLength, //缓冲数据大小,以字节为单位的PreviousState的缓存区(sizeof) PTOKEN_PRIVILEGES PreviousState,//接收被改变特权当前状态的Buffer PDWORD ReturnLength //接收PreviousState缓存区要求的大小 );
下面来看一下代码:
HANDLE TokenHandle; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &TokenHandle)) { return ; } TOKEN_PRIVILEGES t_privileges = {0}; if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &t_privileges.Privileges[0].Luid)) { return ; } t_privileges.PrivilegeCount = 1; t_privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(TokenHandle, FALSE, &t_privileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { CloseHandle(TokenHandle); return ; }
呃。。。。忘了说了。。。。WINDOWS NT 以上的内核需要提权。。。。进行对系统的操作(关机 重启 注销)98啥的就不用了 直接调用 ExitWindowsEx就行了。。。。。。。这里只说提权了 要了解的话 去看一下MSDN这个API 函数的用法
2012/8/5
jofranks 于南昌