我有以下代码,可以帮助检查该进程是否在高架下运行。
我如何修改代码以便允许它检查某个进程是否被提升?
function IsElevated: Boolean;
const
TokenElevation = TTokenInformationClass(20);
type
TOKEN_ELEVATION = record
TokenIsElevated: DWORD;
end;
var
TokenHandle: THandle;
ResultLength: Cardinal;
ATokenElevation: TOKEN_ELEVATION;
HaveToken: Boolean;
begin
if CheckWin32Version(6, 0) then
begin
TokenHandle := 0;
HaveToken := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, TokenHandle);
if (not HaveToken) and (GetLastError = ERROR_NO_TOKEN) then
HaveToken := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle);
if HaveToken then
begin
try
ResultLength := 0;
if GetTokenInformation(TokenHandle, TokenElevation, @ATokenElevation, SizeOf(ATokenElevation), ResultLength) then
Result := ATokenElevation.TokenIsElevated <> 0
else
Result := False;
finally
CloseHandle(TokenHandle);
end;
end
else
Result := False;
end
else
Result := True;
end;
最佳答案
您的答案几乎在您的问题中...
函数IsElevated
从GetTokenInformation获取结果,该结果采用TokenHandle
。该TokenHandle
由OpenProcessToken给出,它接收当前的进程句柄。
现在,您对当前的过程不感兴趣,而对您有ProcessID
的另一个过程感兴趣。因此,您可以通过使用processID
调用OpenProcess来获得所需的进程句柄。您可能需要提高特权才能做到这一点。
关于windows - 检查特定过程在delphi中是否升高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65139155/