windows - 检查特定过程在delphi中是否升高

标签 windows delphi token elevation security-identifier

我有以下代码,可以帮助检查该进程是否在高架下运行。
img1
我如何修改代码以便允许它检查某个进程是否被提升?

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;

最佳答案

您的答案几乎在您的问题中...
函数IsElevatedGetTokenInformation获取结果,该结果采用TokenHandle。该TokenHandleOpenProcessToken给出,它接收当前的进程句柄。
现在,您对当前的过程不感兴趣,而对您有ProcessID的另一个过程感兴趣。因此,您可以通过使用processID调用OpenProcess来获得所需的进程句柄。您可能需要提高特权才能做到这一点。

关于windows - 检查特定过程在delphi中是否升高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65139155/

相关文章:

php - 错误代码 200 phpmyadmin 4.6.0

windows - 在不询问管理员密码的情况下执行 wamp (windows)

delphi - 如何从特定文本中提取第一个字符串

delphi - Delphi中如何获取64位随机值?

java - 使用 Split 方法创建分词器

php : The term 'php' is not recognized as the name of a cmdlet, 函数、脚本文件或可运行程序

windows - Windows 通用应用程序中的 ADAL 问题

delphi - 从外部应用程序将数据写入 Delphi TStringGrid

ruby - Ruby 出现意外的 token 错误

angular - 为什么我的 auth0 token 在刷新页面或单击 Angular 应用程序中的链接时会过期?