【VC++积累】之二、黑客编程之提权SDK

 提权啊。。。。1要打开当前进程的权限令牌。。。。。。。2要获取权限标识。。。。。。。3要提升令牌权限。。。。。。。。。。。。3个API函数搞定

分别是:

           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 于南昌

原文地址:https://www.cnblogs.com/java20130723/p/3211425.html