gpt4 book ai didi

delphi - 检索我自己的进程是否启用了 SeDebugPrivilege

转载 作者:行者123 更新时间:2023-12-03 15:28:15 25 4
gpt4 key购买 nike

如何确定我自己的进程是否启用了 SeDebugPrivilege?

最佳答案

如果有人需要的话,这里是解决方案。

type
TPrivilegesArray = array [0..1024] of TLuidAndAttributes;
PPrivilegesArray = ^TPrivilegesArray;
var
luid : TLargeInteger;
LuidSDP : TLargeInteger;
hToken : THandle;

Size : Cardinal;
Privileges : PTokenPrivileges;
I : Integer;

Name : string;
Attr : Longword;

function AttrToString: string;
begin
Result := 'Disabled';
if (Attr and SE_PRIVILEGE_ENABLED) <> 0 then Result := 'Enabled';
if (Attr and SE_PRIVILEGE_ENABLED_BY_DEFAULT) <> 0 then Result := 'Enabled By Default';

Result := Result;
end;
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, hToken);

GetTokenInformation(hToken, TokenPrivileges, nil, 0, Size);
Privileges := AllocMem(Size);
GetTokenInformation(hToken, TokenPrivileges, Privileges, Size, Size);
LookupPrivilegeValue(nil, 'SeDebugPrivilege', LuidSDP);

for I := 0 to Privileges.PrivilegeCount - 1 do
begin
if LuidSDP <> PPrivilegesArray(@Privileges^.Privileges)^[I].Luid then Continue;

Luid := PPrivilegesArray(@Privileges^.Privileges)^[I].Luid;
Attr := PPrivilegesArray(@Privileges^.Privileges)^[I].Attributes;
Size := 0;

LookupPrivilegeName(nil, Luid, nil, Size);
SetLength(Name, Size);
LookupPrivilegeName(nil, Luid, PChar(Name), Size);

Form1.Memo2.Lines.Add(Format('[%d][%s][%s]', [Luid, PChar(Name), AttrToString]));
end;

FreeMem(Privileges);
CloseHandle(hToken);

此代码列出了所有权限以及是否禁用、默认启用或启用的权限。经过一些搜索和修改后,此代码可以完美运行。

如果需要列出所有权限,只需注释该行

if LuidSDP <> PPrivilegesArray(@Privileges^.Privileges)^[I].Luid then Continue;

关于delphi - 检索我自己的进程是否启用了 SeDebugPrivilege,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com