2012-03-26 7 views
1

Ich muss die AuthenticationID wie von GetTokenInformation mit der TokenStatistics-Klasse für den Benutzer, der auf der Station angemeldet, ob ich erhöht oder nicht.Wenn ein Prozess erhöht ist, wie bekomme ich die Windows-Authentifizierung ID der nicht erhöhten Sitzung

Lemme geben Sie einige weitere Informationen. Angenommen, ich tue:

var Result = GetTokenInformation(WindowsIdentity.GetCurrent().Token, TOKEN_INFORMATION_CLASS.TokenStatistics, TokenInformation, TokenInfLength, out TokenInfLength); 

Dies ermöglicht mir die AuthenticationID aus der TokenInformation Struktur problemlos zu bekommen. Angenommen, die sich ergebende Authentifizierungs-ID lautet "00000000-000"

Wenn ich nun rechts auf Visual Studio klicke und auf "Als Administrator ausführen" klicke, starte meinen Code ein zweites Mal, das Ergebnis ist etwas anderes, zum Beispiel "00000000-00001289 ". Aber ich brauche "00000000-000"

Wie kann ich "00000000-000" bekommen, ob der aktuelle Prozess erhöht ist oder nicht?

Ich nehme an, es ist nur eine Frage der richtigen Token zu finden, zu GetTokenInformation zu geben, aber ich laufe hier im Kreis ...

Anmerkung: Ich basierend meinen Code auf How to get the logon SID in C# GetTokenInformation zu implementieren und dann angepasst um TokenStatistics zu erhalten.

Antwort

3

OK, ich habe es endlich zur Arbeit gebracht. Dies sind die Schritte (nicht den vollständigen Code zu veröffentlichen, es ist ziemlich lang):

  1. Verwenden WMI (Managementobject) auf der Klasse Win32_Process + verwalteten Klasse Prozess rekursiv den aktuellen Prozess Abstammung
  2. In meinem speziellen zu erstellen Fall Ich stoppe den Algorithmus, wenn ich den "Explorer" -Prozess finde oder wenn ich eine Ausnahme treffe, da es sehr wahrscheinlich ist, dass der Explorer nicht erhöht ist.
  3. P/Invoke die Open Funktion von advapi32.dll auf dem ProcessId Schritt zurück 2. Diese bekommt man einen Usertoken, die verwendet werden können, einen neuen Windows zu konstruieren, die Sie in Schritt 4
  4. Sie können dann füttern können, dass WindowsIdentity Token-Eigenschaft zu GetTokenInformation, um Ihre AuthenticationID zurückzuerhalten.

Dies ist getestet und funktioniert.

Referenz:

Wenn Sie Sehen Sie irgendein Problem mit diesem Verfahren zögern Sie nicht, Ihre eigene Antwort zu kommentieren oder zu posten!


Hinweis: Es gibt ein Problem, wenn man von den übergeordneten Prozess getötet wurde: WMI geben Sie die ID eines Prozesses, der nicht mehr existiert. Die Natur des Produktes, das ich arbeite, hat mich Forscher von Zeit zu Zeit neu gestartet (nur während des Entwickelns), so sah ich das Problem. Es ist nicht wirklich ein Problem für mich, aber gut zu wissen.

Dank

Verwandte Themen