2017-09-04 7 views
0

Ich muss eine Softwarelizenz lesen, die in einem Registrierungsschlüssel unter HKEY_CURRENT_USER gespeichert ist.Erhalte USER SID in einem Service

Ich bin in einem Dienst im Konto SYSTEM ausgeführt, so kann ich diesen Schlüssel nicht lesen.

Ich entdeckte, dass dieser Registrierungsschlüssel ein Konto in HKEY_USER hat, wo ich die Informationen lesen kann. Aber ich muss herausfinden, die SID des angemeldeten Benutzers.

Wie finde ich das von einem Service in Delphi?

+1

Warum imitieren Sie nicht den Benutzer, der den Dienst aufruft, und lesen Sie den Registrierungsschlüssel? – Remko

+0

Welcher angemeldete Benutzer? Es kann mehrere geben. Oder keine. –

Antwort

3

Rufen Sie LookupAccountName an, um die SID zu erhalten, die zu einem bestimmten Benutzernamen gehört (und zu der Domäne, zu der er gehört). ConvertSidToStringSid kann verwendet werden, um die SID in einen String zu konvertieren.

Alternativ können Sie die Delphi Jedi Windows Security Code Library (JWSCL) verwenden.

+1

Sie können 'WTSEnumerateSessions()' verwenden, um angemeldete Sitzungen zu ermitteln, und 'WTSQuerySessionInformation()', um den Benutzernamen + die Domäne dieser Sitzungen abzurufen, und dann 'LookupAccountName()' aufrufen. Eine andere Option besteht darin, laufende Prozesse aufzuzählen, bis Sie einen (normalerweise Explorer) in der gewünschten Sitzung gefunden haben, dann eine Kennung für den Prozess öffnen, dessen Prozesstoken abrufen und für seine Anmeldungs-SID abfragen. –

+0

Bitte, wie LookupAccountName verwenden. O Name Benutzer aktiv, finde die Funktion JEDI Library "GetInteractiveUserName". –

+0

Die Lösung http://pasotech.altervista.org/delphi/articolo24.htm –