主题:关于这段关机权限代码的问题
#include <windows.h>
int main()
{
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osv);
if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
//获得当前的进程号
hProcess=GetCurrentProcess();
//获得进程的存取令牌. 第二个参数为TOKEN_ADJUST_PRIVILEGERS时,
//获得可调整的存取令.
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
//查找关机权限的ID号
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//调整存取权限, 如果不成功, 本函数返回 -1
if (!AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL))
return -1;
}
ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0);
return 0;
}
这是CSDN上找到的,TOKEN_PRIVILEGES这结构是一个关于优先级定义的结构,
Privileges.PrivilegeCount=1; 那这个结构在整个代码中起到了什么作用,
有点晕头了,
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid); 这个地方是查找本地系统的权限情况,如果第一个参数变成网络改如何写成格式了是不是应该写成\\对方的对器名称这样了.
请叫高手!!
int main()
{
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osv);
if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
//获得当前的进程号
hProcess=GetCurrentProcess();
//获得进程的存取令牌. 第二个参数为TOKEN_ADJUST_PRIVILEGERS时,
//获得可调整的存取令.
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
//查找关机权限的ID号
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//调整存取权限, 如果不成功, 本函数返回 -1
if (!AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL))
return -1;
}
ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0);
return 0;
}
这是CSDN上找到的,TOKEN_PRIVILEGES这结构是一个关于优先级定义的结构,
Privileges.PrivilegeCount=1; 那这个结构在整个代码中起到了什么作用,
有点晕头了,
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid); 这个地方是查找本地系统的权限情况,如果第一个参数变成网络改如何写成格式了是不是应该写成\\对方的对器名称这样了.
请叫高手!!