vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Hat der aktuelle User Adminrechte? Vista + UAC 
Autor: A2009W
Datum: 05.07.09 19:35

Hallo zusammen!

Das Thema scheint echt nicht so leicht für mich zu lösen zu sein...

Von einem Programmierer einer Partnerfirma habe ich zwei Codes bekommen, der meinte, dass die Ansätze hier in den Tipps stehen grundsätzlich falsch wären von der Herangehensweise... Mag sein - kann ich leider nicht beurteilen...

Hier die 2 Codes, die ich leider noch nicht in VB.net übersetzen konnte. Ich werde versuchen, ihn dazu noch mal zu bitten, dass zu tun, damit das auch in vb.net läuft...

Prüfen ob überhaupt Admin (2000,XP,Vista...):

function IsAdmin: Boolean;
var
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  psidAdministrators: PSID;
  x: Integer;
  bSuccess: BOOL;
  dwLength : DWORD;
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
    try
      // Get required buffer size and allocate the TOKEN_GROUPS buffer.
      if Not Windows.GetTokenInformation( _
        hAccessToken,Windows.TokenGroups,ptgGroups,0,dwLength) then begin
         if (GetLastError<>ERROR_INSUFFICIENT_BUFFER) then exit;
         GetMem(ptgGroups, dwLength);
         if ptgGroups=Nil then exit;
      end;
      bSuccess:=Windows.GetTokenInformation( _
        hAccessToken,Windows.TokenGroups,ptgGroups,dwLength,dwLength);
      if bSuccess then
      begin
        AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
          SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
          0, 0, 0, 0, 0, 0, psidAdministrators);
 
        for x := 0 to ptgGroups.GroupCount - 1 do
          if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then
          begin
            Result := True;
            Break;
          end;
        FreeSid(psidAdministrators);
      end;
      FreeMem(ptgGroups);
     finally
       CloseHandle(hAccessToken);
     end;
   end;
end;
Prüfen ob voller Admin unter Vista:

function GetProcessIntegrityLevel: TProcessIntegrityLevel;
Var hToken, hProcess: cardinal;
    dwLengthNeeded, dwError: cardinal;
    pTIL: PTOKEN_MANDATORY_LABEL;
    dwIntegrityLevel: dword;
    psc: PUCHAR;
    sc: Byte;
    pil: PDWORD;
begin
   Result:=ilNone;
   if Win32MajorVersion<=5 then exit;   //Erst ab Vista
   dwError:=ERROR_SUCCESS;
   pTIL:=nil;
   hProcess:=GetCurrentProcess;
   if OpenProcessToken(hProcess,TOKEN_QUERY or TOKEN_QUERY_SOURCE,hToken) then _
     begin
     if Not myGetTokenInformation( _
     hToken,TokenIntegrityLevel,nil,0,dwLengthNeeded) then begin
        dwError:=GetLastError;
        if dwError=ERROR_INSUFFICIENT_BUFFER then begin
           dwError:=ERROR_SUCCESS;
           GetMem(pTIL,dwLengthNeeded);
           if pTIL<>nil then begin
             if myGetTokenInformation( _
               hToken,TokenIntegrityLevel,pTIL,dwLengthNeeded,dwLengthNeeded) _
               then begin
                 dwError:=ERROR_SUCCESS;
                 psc:=GetSidSubAuthorityCount(pTIL^.mLabel.Sid);
                 sc:=0;
                 if psc<>Nil then begin
                   sc:=psc^-1;
                 end;
                 pil:=GetSidSubAuthority(pTIL^.mLabel.Sid,sc);
                 if pil<>Nil then begin
                   dwIntegrityLevel:=pil^;
                   if (dwIntegrityLevel<SECURITY_MANDATORY_MEDIUM_RID) then begin
                      Result:=ilLow;
                   end else
                   if (dwIntegrityLevel>=SECURITY_MANDATORY_MEDIUM_RID) and
                      (dwIntegrityLevel<SECURITY_MANDATORY_HIGH_RID) then begin
                       Result:=ilMedium;
                   end else
                   if (dwIntegrityLevel>=SECURITY_MANDATORY_HIGH_RID) and
                      (dwIntegrityLevel<SECURITY_MANDATORY_SYSTEM_RID) then begin
                       Result:=ilHigh; 
                   end else
                   if (dwIntegrityLevel>=SECURITY_MANDATORY_SYSTEM_RID) and
                      (dwIntegrityLevel<SECURITY_MANDATORY_PROTECTED_PROCESS_
                        _RID) then begin
                       Result:=ilSystem;
                   end else
                   if _
                     dwIntegrityLevel>=SECURITY_MANDATORY_PROTECTED_PROCESS__
                     RID then begin
                       Result:=ilProtected;
                   end;
                 end;
             end;
           end;
        end;
     end;
   end;
end;
Im 2. Code das Result:=ilHigh; soll dann aussagen, dass der User alle Adminrechte hat...

Danke für jeden Tipp und wenn dies jemand in vb.net übersetzen kann, dann nur her damit
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Hat der aktuelle User Adminrechte? Vista + UAC2.213A2009W28.06.09 15:37
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.255Üggi28.06.09 17:27
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.207A2009W29.06.09 17:24
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.163A2009W28.06.09 19:30
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.115Üggi29.06.09 20:08
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.360ModeratorRalf Ehlert30.06.09 09:14
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.229A2009W30.06.09 16:33
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.295Maas30.06.09 16:35
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.235A2009W05.07.09 19:35
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.104dfense20.07.09 15:00
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.058A2009W21.07.09 17:09
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.059ModeratorRalf Ehlert21.07.09 17:14
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.005A2009W21.07.09 17:59
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.075ModeratorRalf Ehlert22.07.09 08:37
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.243A2009W22.07.09 12:10
Re: Hat der aktuelle User Adminrechte? Vista + UAC1.081ModeratorRalf Ehlert22.07.09 12:43

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel