Ich möchte den Benutzernamen des Prozesses abrufen und überprüfen, ob es sich um einen lokalen Administrator handelt. Oder direkt prüfen, ob der aktuelle procees Benutzer ein lokaler Administrator istÜberprüfen, ob Prozessbenutzer Administrator ist C++
Antwort
Vorausgesetzt, Sie auf einem Windows-OS sind gibt es eine Shell-Funktion: IsUserAnAdmin
Siehe MSDN article
In diesem Artikel wird vorschlagen, eine eigene Funktion rollen Verwenden Sie jedoch CheckTokenMembership. Es gibt sogar ein Codebeispiel, das Ihnen hilft.
danke! aber alles, was ich habe, ist der angemeldete Benutzer Ich suche nach einer Möglichkeit, den Benutzer wjo einen Dienst zu starten und überprüfen, ob es ein lokaler Administrator ist – sofr
Ich bin mir nicht sicher, wo Sie herkommen. Aber ich bin bereit zu helfen. Etwas mehr Hintergrundwissen zu dem, was Sie letztlich erreichen wollen, kann mir helfen. Ist dieser Service etwas, das Sie geschrieben haben? Wenn dies der Fall ist, können Sie während der Installation Sicherheit anwenden, um Benutzern (und/oder Gruppen) zu erlauben oder zu verbieten, den Dienst zu starten oder zu stoppen, wenn Sie danach suchen. Im Allgemeinen werden Windows-Dienste nicht als der Benutzer ausgeführt, der sie gestartet hat. Standardmäßig wird das Systemkonto als das Konto verwendet, unter dem ein Dienst ausgeführt wird, aber dies kann als beliebiger Benutzer konfiguriert werden. Die Dienst-Threads können dann die Benutzer nach ihren Wünschen imitieren. – MrBry
Ich weiß, dies ist eine alte Antwort, aber nur um darauf hinzuweisen, das funktioniert nur bis Windows Vista, also für Windows 7, 8 und 10 wird diese Funktion nicht funktionieren. – Alex
Holen Sie sich den aktuellen Benutzernamen mit GetUserName(), dann rufen Sie NetUserGetInfo() mit dem Server-Namen (NULL für lokale) und Benutzernamen Sie gerade erhalten haben. Übergeben Sie es eine USER_INFO_1 Struktur, und dann Zugriff usri1_priv in der Struktur. Wenn der Wert USER_PRIV_ADMIN ist, dann wissen Sie, dass der Benutzername ein Administrator ist.
Getestet unter Windows XP SP3, Windows 7 32 Bit und 64 Bit mit Admin-Benutzer und Nicht-Admin-Benutzer. Code, der aus dem entsprechenden C# portiert wurde und ATL-Windows-Wrapper-Sicherheitsklassen verwendet.
#include <atlbase.h>
#include <atlsecurity.h>
// The function returns true if the user who is running the
// application is a member of the Administrators group,
// which does not necessarily mean the process has admin privileges.
bool IsAdministrator(HRESULT &rHr)
{
bool bIsAdmin = false;
try
{
// Open the access token of the current process.
ATL::CAccessToken aToken;
if (!aToken.GetProcessToken(TOKEN_QUERY))
{
throw MAKE_SCODE(SEVERITY_ERROR, FACILITY_WIN32,
::GetLastError());
}
// Query for the access token's group information.
ATL::CTokenGroups groups;
if (!aToken.GetGroups(&groups))
{
throw MAKE_SCODE(SEVERITY_ERROR, FACILITY_WIN32,
::GetLastError());
}
// Iterate through the access token's groups
// looking for a match against the builtin admins group.
ATL::CSid::CSidArray groupSids;
ATL::CAtlArray<DWORD> groupAttribs;
groups.GetSidsAndAttributes(&groupSids, &groupAttribs);
for (UINT i = 0; !bIsAdmin && i < groupSids.GetCount(); ++i)
{
bIsAdmin = groupSids.GetAt(i) == ATL::Sids::Admins();
}
rHr = S_OK;
}
catch (HRESULT hr)
{
rHr = hr;
}
return bIsAdmin;
}
- 1. C#: Überprüfen Sie, ob Administrator Schreibzugriff auf eine Datei hat
- 2. C# Prüfen Sie, ob als Administrator ausführen
- 3. Überprüfen, ob flowLayoutPanel in c leer ist #
- 4. C++ - Überprüfen, ob TCHAR-Array leer ist
- 5. C# überprüfen, ob ein Verzeichnis ausgeblendet ist?
- 6. C# Überprüfen, ob das Fenster geladen ist
- 7. Überprüfen, ob etwas leer ist
- 8. C# DataGridView Überprüfen, ob leer
- 9. Azure AD - Office365APIs. Überprüfen Sie, ob der verbundene Benutzer globaler Administrator ohne Admin-Einwilligung ist Bereiche
- 10. C++ Überprüfen, ob geschweifte Klammern
- 11. Überprüfen, ob Formularelement vorhanden ist
- 12. Überprüfen, ob innerHTML leer ist
- 13. Überprüfen, ob Realm leer ist?
- 14. Überprüfen, ob Hintergrundbild eingestellt ist
- 15. Überprüfen, ob NumericUpDown leer ist
- 16. Überprüfen, ob NSNumber leer ist
- 17. Überprüfen, ob NSDictionary leer ist
- 18. Überprüfen, ob window.history.go erfolgreich ist?
- 19. Wie überprüfen, ob Wertnummer ist
- 20. überprüfen, ob UIButton ausgewählt ist
- 21. Überprüfen, ob Stdin leer ist
- 22. Überprüfen, ob ArrayCollection leer ist
- 23. Überprüfen, ob generic 0 ist
- 24. Prüfe, ob der Benutzer Administrator/Gamemaster ist [MYSQLI]
- 25. Überprüfen, ob das Gerät "angeschlossen"/verfügbar ist
- 26. Überprüfen, ob das Abfrageergebnis in c null ist #
- 27. Überprüfen Sie, ob der Benutzer root in C ist?
- 28. Überprüfen Sie, ob ein Textfeld-Steuerelement leer ist C++ Win32
- 29. Überprüfen, ob ein Benutzername bereits in der Datenbank ist C#
- 30. Überprüfen, ob Datensatz in Sqlite + C vorhanden ist #
Welches Betriebssystem? Es macht wahrscheinlich einen Unterschied ... – crashmstr
"lokalen Administrator" ist am ehesten auf Windows. – sharptooth
Ich renne - Windows OS – sofr