[34] | 1 | function GetAdminSid: PSID;
|
---|
| 2 | const
|
---|
| 3 | // bekannte SIDs ... (WinNT.h)
|
---|
| 4 | SECURITYNTAUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
|
---|
| 5 | // bekannte RIDs ... (WinNT.h)
|
---|
| 6 | SECURITYBUILTINDOMAINRID: DWORD = $00000020;
|
---|
| 7 | DOMAINALIASRIDADMINS: DWORD = $00000220;
|
---|
| 8 | begin
|
---|
| 9 | Result := nil;
|
---|
| 10 | AllocateAndInitializeSid(SECURITYNTAUTHORITY,
|
---|
| 11 | 2,
|
---|
| 12 | SECURITYBUILTINDOMAINRID,
|
---|
| 13 | DOMAINALIASRIDADMINS,
|
---|
| 14 | 0,
|
---|
| 15 | 0,
|
---|
| 16 | 0,
|
---|
| 17 | 0,
|
---|
| 18 | 0,
|
---|
| 19 | 0,
|
---|
| 20 | Result);
|
---|
| 21 | end;
|
---|
| 22 |
|
---|
| 23 | function IsAdmin: LongBool;
|
---|
| 24 | var
|
---|
| 25 | TokenHandle : THandle;
|
---|
| 26 | ReturnLength : DWORD;
|
---|
| 27 | TokenInformation : PTokenGroups;
|
---|
| 28 | AdminSid : PSID;
|
---|
| 29 | Loop : Integer;
|
---|
| 30 | wv : TOSVersionInfo;
|
---|
| 31 | begin
|
---|
| 32 | wv.dwOSVersionInfoSize := sizeof(TOSversionInfo);
|
---|
| 33 | GetVersionEx(wv);
|
---|
| 34 |
|
---|
| 35 | Result := (wv.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
|
---|
| 36 |
|
---|
| 37 | if(wv.dwPlatformId = VER_PLATFORM_WIN32_NT) then
|
---|
| 38 | begin
|
---|
| 39 | TokenHandle := 0;
|
---|
| 40 | if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then
|
---|
| 41 | try
|
---|
| 42 | ReturnLength := 0;
|
---|
| 43 | GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength);
|
---|
| 44 | TokenInformation := GetMemory(ReturnLength);
|
---|
| 45 | if Assigned(TokenInformation) then
|
---|
| 46 | try
|
---|
| 47 | if GetTokenInformation(TokenHandle, TokenGroups,
|
---|
| 48 | TokenInformation, ReturnLength, ReturnLength) then
|
---|
| 49 | begin
|
---|
| 50 | AdminSid := GetAdminSid;
|
---|
| 51 | for Loop := 0 to TokenInformation^.GroupCount - 1 do
|
---|
| 52 | begin
|
---|
| 53 | if EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) then
|
---|
| 54 | begin
|
---|
| 55 | Result := True; break;
|
---|
| 56 | end;
|
---|
| 57 | end;
|
---|
| 58 | FreeSid(AdminSid);
|
---|
| 59 | end;
|
---|
| 60 | finally
|
---|
| 61 | FreeMemory(TokenInformation);
|
---|
| 62 | end;
|
---|
| 63 | finally
|
---|
| 64 | CloseHandle(TokenHandle);
|
---|
| 65 | end;
|
---|
| 66 | end;
|
---|
| 67 | end;
|
---|
| 68 |
|
---|
| 69 | function WVersion: string;
|
---|
| 70 | var
|
---|
| 71 | OSInfo: TOSVersionInfo;
|
---|
| 72 | begin
|
---|
| 73 | Result := '3X';
|
---|
| 74 | OSInfo.dwOSVersionInfoSize := sizeof(TOSVERSIONINFO);
|
---|
| 75 | GetVersionEx(OSInfo);
|
---|
| 76 | case OSInfo.dwPlatformID of
|
---|
| 77 | VER_PLATFORM_WIN32S: begin
|
---|
| 78 | Result := '3X';
|
---|
| 79 | Exit;
|
---|
| 80 | end;
|
---|
| 81 | VER_PLATFORM_WIN32_WINDOWS: begin
|
---|
| 82 | Result := '9X';
|
---|
| 83 | Exit;
|
---|
| 84 | end;
|
---|
| 85 | VER_PLATFORM_WIN32_NT: begin
|
---|
| 86 | Result := 'NT';
|
---|
| 87 | Exit;
|
---|
| 88 | end;
|
---|
| 89 | end; //case
|
---|
| 90 | end;
|
---|