各位好:
各位好,初学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);
///////////////////////////////////////////////////////还请路过的高手指教,再次感谢,诚恳期待。
//
各位好,初学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);
///////////////////////////////////////////////////////还请路过的高手指教,再次感谢,诚恳期待。
//
{
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);
}