• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 974
  • Last Modified:

Check for Admin rights?

I have used www.Youseful.com to create a custom setup program that was built using Delphi 3.02.

This setup program install a Win32 application that supports both Win9x and WinNT/2000.

I have had several ppl send me e-mail complaining that they can't install the program on WinNT/2000... I always ask the question:

"Do you have administrator rights on the computer your trying to install my program on?"

To which I always get a response simular to "No."

So, this brings me to my question:
Does anyone know how to programicly check NT to determine if the current user has administrator rights necessary to install software?

:::crossing fingers:::
John
0
zitt
Asked:
zitt
  • 3
  • 2
1 Solution
 
MadshiCommented:
Call GetUserName to get the name of the current user, then NetUserGetInfo with level 1. In the level 1 structure you find a field "usri1_priv", which can be one of the following values:

Value      Meaning
USER_PRIV_GUEST      Guest
USER_PRIV_USER      User
USER_PRIV_ADMIN      Administrator

Regards, Madshi.
0
 
intheCommented:
hi,
This function  checks if the currently logged user has Admin rights:
Regards Barry


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;
0
 
zittAuthor Commented:
inthe (Barry),

Thanks... works like a charm. (at least on Win2000)

Mash,
I appreciate you answer; it's just inthe's was "plug-n-play".

John
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
MadshiCommented:
Hmmm... Do you have to belong to the administrator group to have administrator rights? Can't you have administrator rights without belonging to the administrator group? In such a case (if it is possible) Barry's code wouldn't work.

Regards, Madshi.
0
 
zittAuthor Commented:
Sounds logical... I tested his code on my Win2k machine... for which I have administrator rights. It correctly reported that I had rights; however, I haven't yet tested it against a usr without rights.

How would you change the code?
0
 
MadshiCommented:
I would use NetUserGetInfo, see my first comment...   :-)
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now