网上没有找到Delphi的,直接动手写出来,Delphi Xe2 测试通过。CSDN第一次写,以后有什么资料直接发上来共享。
type
TCheckTokenMembership= function (a: THandle; b: PSID; c: PBOOL): BOOL;stdcall;
function IsAdmin: Boolean;
const
SECURITY_BUILTIN_DOMAIN_RID=32;
DOMAIN_ALIAS_RID_ADMINS=544;
var
NtAuthority: _SID_IDENTIFIER_AUTHORITY;
IsAdminMember: BOOL;
SecurityIdentifier:PSID;
hAdvapi32:THandle;
CheckTokenMembership:TCheckTokenMembership;
begin
Result :=False;
NtAuthority.Value[0] :=0;
NtAuthority.Value[1] :=0;
NtAuthority.Value[2] :=0;
NtAuthority.Value[3] :=0;
NtAuthority.Value[4] :=0;
NtAuthority.Value[5] :=5;
if (not AllocateAndInitializeSid(@NtAuthority , 2,
SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0,
0, 0, SecurityIdentifier)) then
Exit;
hAdvapi32 :=LoadLibrary(PWideChar('Advapi32.dll' ));
CheckTokenMembership := GetProcAddress( hAdvapi32, 'CheckTokenMembership' );
if ( not CheckTokenMembership(0, SecurityIdentifier, @IsAdminMember)) then
IsAdminMember :=FALSE;
FreeSid(SecurityIdentifier);
Result :=IsAdminMember;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsAdmin then
ShowMessage('is admin');
end;