AccessCheck Implementation - Delphi

DarkCoderSc personal avatar
DarkCoderSc

Jean-Pierre LESUEUR

uses
  System.SysUtils, Winapi.Windows;

// ...

function AccessCheck(ADesiredAccess : DWORD; const hToken : THandle; const ptrSecurityDescriptor : PSecurityDescriptor) : Boolean;
begin
  var AMapping : TGenericMapping;
  AMapping.GenericRead    := KEY_READ;
  AMapping.GenericWrite   := KEY_WRITE;
  AMapping.GenericExecute := KEY_EXECUTE;
  AMapping.GenericAll     := KEY_ALL_ACCESS;
  ///

  MapGenericMask(ADesiredAccess, AMapping);

  var APrivilegeSet : TPrivilegeSet;
  var APrivilegeSetSize := DWORD(SizeOf(TPrivilegeSet));

  var AGrantedAccess := DWORD(0);
  var AStatus : BOOL;

  if not Winapi.Windows.AccessCheck(
    ptrSecurityDescriptor,
    hToken,
    ADesiredAccess,
    AMapping,
    APrivilegeSet,
    APrivilegeSetSize,
    AGrantedAccess,
    AStatus
  ) then
    result := False
  else
    result := AStatus;
end;

Creating and researching code snippets takes time and effort. You’re welcome to share them through your own platforms, but please don’t forget to credit the original author, here: Jean-Pierre LESUEUR.

no AI logo



Created

December 2, 2025

Last Revised

December 2, 2025