回 帖 发 新 帖 刷新版面

主题:关于这段关机权限代码的问题

#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);   这个地方是查找本地系统的权限情况,如果第一个参数变成网络改如何写成格式了是不是应该写成\\对方的对器名称这样了.
请叫高手!!

回复列表 (共3个回复)

沙发

如果你想关别人的机器, 要先建立一个连接, 以对方机器上拥有关机权限的帐号登录

使用 WNetAddConnection2

WNetAddConnection2
The WNetAddConnection2 function makes a connection to a network resource. The function can redirect a local device to the network resource.

The WNetAddConnection2 function supersedes the WNetAddConnection function. If you can pass a handle to a window that the provider of network resources can use as an owner window for dialog boxes, call the WNetAddConnection3 function instead.

DWORD WNetAddConnection2(
  LPNETRESOURCE lpNetResource,  // connection details
  LPCTSTR lpPassword,           // password
  LPCTSTR lpUsername,           // user name
  DWORD dwFlags                 // connection options
);

板凳

这个函数我查了一下是建立一个网络资源,我的意思不是这样的,但还是要谢谢你
你能不能帮我解释一下 TOKEN_PRIVILEGES   这个结构再整个程序中的用法

3 楼

这个程序我终于搞白了,谢谢了TOKEN_PRIVILEGES   这个是打开权限的使能的必用结构再后而修改令牌时要用到.

我来回复

您尚未登录,请登录后再回复。点此登录或注册