zoukankan      html  css  js  c++  java
  • Delphi检测用户是否具有administrator权限(OpenThreadToken,OpenProcessToken,GetTokenInformation,AllocateAndInitializeSid和EqualSid)

    检测用户是否具有administrator权限
    const
    SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
    (Value: (0, 0, 0, 0, 0, 5));
    SECURITY_BUILTIN_DOMAIN_RID = $00000020;
    DOMAIN_ALIAS_RID_ADMINS = $00000220;

    function IsAdmin: Boolean;
    var
    hAccessToken: THandle;
    ptgGroups: PTokenGroups;
    dwInfoBufferSize: DWORD;
    psidAdministrators: PSID;
    x: Integer;
    bSuccess: BOOL;
    begin
    Result := False;
    bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
    hAccessToken);
    if not bSuccess then
    begin
    if GetLastError = ERROR_NO_TOKEN then
    bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
    hAccessToken);
    end;
    if bSuccess then
    begin
    GetMem(ptgGroups, 1024);
    bSuccess := GetTokenInformation(hAccessToken, TokenGroups,
    ptgGroups, 1024, dwInfoBufferSize);
    CloseHandle(hAccessToken);
    if bSuccess then
    begin
    AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
    SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
    0, 0, 0, 0, 0, 0, psidAdministrators);
    {$R-}
    for x := 0 to ptgGroups.GroupCount - 1 do
    if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
    begin
    Result := True;
    Break;
    end;
    {$R+}
    FreeSid(psidAdministrators);
    end;
    FreeMem(ptgGroups);
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if isAdmin then
    ShowMessage('Logged in as Administrator');
    end;

  • 相关阅读:
    SQLServer中给表增加组合唯一约束
    使用axis调用WebService服务端
    SQLServer查询锁表
    SQLServer修改字段类型
    SQLServer中修改字段为空
    查看SQLserver编码格式的SQL语句
    查询表结构sql
    Sublime Text3 如何开启Debug
    JMeter——JMeter如何进行汉化
    Redis——redis使用redis-dump,redis-load导出导入数据——【三】
  • 原文地址:https://www.cnblogs.com/findumars/p/5281970.html
Copyright © 2011-2022 走看看