C++ Builder Snippets  

Prüfen, ob der aktuelle NT/2000-Benutzer Administrator-Rechte besitzt:
 
//----------------------------------------------------------------------------
// Funktion CurrentUserIsAdmin() prüft, ob der aktuelle Benutzer
// Administrator-Rechte unter Win NT/2000 hat
//----------------------------------------------------------------------------
// Rückgabewert: true, falls der User Admin-Rechte hat, anderengfalls false
//----------------------------------------------------------------------------
// Um sicherzustellen, dass das Programm auch unter Win95-ME starten kann,
// wird die NETAPI32.DLL dynamisch geladen.
//
// (werden die NetApi-Funktionen statisch eingebunden, wird der
// Programmstart unter Win95 mit der Meldung "Fehler beim Starten des
// Programms. Die Datei xxx.exe ist mit fehlenden Export-NETAPI32.DLL:
// NetUserGetInfo verknüpft" abgebrochen)
//----------------------------------------------------------------------------
#include <lm.h>

// Definition der Funktionszeiger:
typedef NET_API_STATUS (NET_API_FUNCTION * pfNetUserGetInfo)(LPCWSTR,
  LPCWSTR, DWORD, LPBYTE);
typedef NET_API_STATUS (NET_API_FUNCTION * pfNetApiBufferFree)(LPVOID);

bool CurrentUserIsAdmin()
{

  bool blRetVal;
  HINSTANCE hNetApi=LoadLibrary("NETAPI32.DLL");
  if(hNetApi)
  {
    // Zeiger auf die NetUserGetInfo() und
    // NetApiBufferFree() besorgen:
    pfNetUserGetInfo pfUserGetInfo= (pfNetUserGetInfo)
      GetProcAddress(hNetApi,"NetUserGetInfo");
    pfNetApiBufferFree pfBufferFree =(pfNetApiBufferFree)
      GetProcAddress(hNetApi,"NetApiBufferFree");

    // Funktionszeiger auf NULL prüfen:
    blRetVal = pfUserGetInfo && pfBufferFree;

    if(blRetVal) // falls alles ok:
    {
      wchar_t wcaUserName[256];  // für den Benutzernamen
      USER_INFO_1* pUserInfo;    // Zeiger audie USER_INFO-Struktur
      DWORD ilUserInfoSize = sizeof(wcaUserName);
      GetUserNameW(wcaUserName, &ilUserInfoSize); // Benutzernamen ermitteln
      // USER_INFO Struktur füllen:
      if(pfUserGetInfo(NULL, wcaUserName, 1, (byte*)&pUserInfo) != NERR_Success)
        blRetVal = false;
      else blRetVal = pUserInfo->usri1_priv == USER_PRIV_ADMIN;
      // Speicher aufräumen
      pfBufferFree(pUserInfo);
    }
    FreeLibrary(hNetApi);
  }
  return blRetVal;
}
//---------------------------------------------------------------------------
// Anwendungsbeispiel:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(OsWinNt())
  {
    if(CurrentUserIsAdmin()) ShowMessage("Admin !");
    else ShowMessage("Kein Admin !");
  }
  else ShowMessage("Kein NT!");
}



© '99-2000 by S. Kreutzmann