各位好:
     各位好,初学delphi,应用了openProcessToken,发现只能GetCurrentProcess参数下成功,既本进程可获得Token。当这个参数为其它进程的handle的时候。结果全部是 acess denay,错误代码5. 
     问题:如何才能获得其他进程的token。是否需要修改acl? 诚恳请教,只希望获得一个思路就好,如能有代码将感激涕零。 感谢每位路过的朋友////代码片段///
procedure Tjoke.SetPrivilege(ifdebug:bool);
var
num:Dword;
szError:array[0..200]of char ;
begin
   OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);   LookupPrivilegeValue(nil, 'SeDebugPrivilege', Luid);   OldTokenPrivileges.Privileges[0].luid := Luid;   OldTokenPrivileges.PrivilegeCount := 1;   OldTokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  
 AdjustTokenPrivileges(hToken, False, OldTokenPrivileges, ReturnLength, PTokenPrivileges(nil)^, ReturnLength);
   num:=  GetLastError();
   if GetLastError()<>0 then
   begin
    FormatMessage(
    FORMAT_MESSAGE_FROM_SYSTEM,
    Nil,
    num,
    0,
    szError,
    sizeof(szError),
    nil);
   showmessage('本身权限无法提升,错误代码及原因:'+inttostr(num)+szerror);
   end;
   CloseHandle(hToken);
///////////////////////////////////////////////////////还请路过的高手指教,再次感谢,诚恳期待。
//

解决方案 »

  1.   

    void RaisePrivilege()
    {
        HANDLE hToken;
        TOKEN_PRIVILEGES tp;
        tp.PrivilegeCount = 1;
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken))
        {
            if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
            {
                AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,0);
            }
        }
        if(hToken)
            CloseHandle(hToken);
    }