Ich bin neu in der Windows-Sicherheit ... aber beim Lesen von MSDN und einigen Blogs scheint mir, dass die Art und Weise, wie MS mit anderen benutzerspezifischen Daten umgehen soll, ein Benutzer-Token ist.
Es verwendet ein schönes Wiki von Keith Brown .Net Developers Guide zu Windows-Sicherheit zu sein ... Sie es immer noch im Google-Cache für "Plural keith.guidebook"
Fall 1 finden: Wenn Sie don Habe kein Benutzerpasswort:
Für lokale Konten können Sie versuchen, die Windows-Registrierung zu lesen, wie Nas Banov bereits vorgeschlagen hat, und es gibt einige andere Rezepte auf SO oder im Internet.
Ich bin nicht sicher, wie verschiedene Windows-Versionen sich für neu erstellte Benutzer verhalten ... diejenigen, die noch nie eine interaktive Sitzung Anmeldung durchgeführt haben ... erstellt sie automatisch ihre Registrierung, Home-Ordner und Profildaten? Ich habe einige Tests auf Windows XP durchgeführt und diese Registrierungsschlüssel waren nicht vorhanden nach dem Erstellen eines lokalen Kontos ... aber in diesem Fall können Sie versuchen, es in All Users Registry-Werte zu erraten ... oder einfach scheitern :)
Für Desktop-Anwendungen, wenn die Anwendung als angemeldeter Benutzer ausgeführt wird, verwende ich so etwas, um den Home-Ordner zu erhalten .... und um das Äquivalent von ~/.local zu erhalten, verwende ich CSIDL_APPDATA für Roaming-Profile oder nur CSIDL_LOCAL_APPDATA.
from win32com.shell import shell, shellcon
# See microsoft references for further CSIDL constants
# http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx
folder_name = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, 0, 0)
Lesen Keith Brown Artikel „How To Get A Token For A User“ .. Sie für einige andere Wege, um ein Benutzertoken, ohne ein Passwort aussehen kann ...
Fall 2: Wenn Sie das Benutzerkennwort:
Das Lesen der MSDN Ich habe das Beeindruckende, dass ich, wenn ich ein Benutzer-Token habe, seine Ordner abrufen kann, indem ich etwas wie den Code unten anrufe ... aber es hat nicht für mich funktioniert. (Nicht sicher, warum)
token = win32security.LogonUser(
username,
None, # we uses UPN format for username
password,
win32security.LOGON32_LOGON_NETWORK,
win32security.LOGON32_PROVIDER_DEFAULT,
)
folder_name = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, token, 0)
diesem Grund habe ich mit diesem Code am Ende ..., die weit davon entfernt ist, perfekt zu sein aufgrund der Tatsache, dass es Benutzernamen und ein Passwort erfordert.
token = win32security.LogonUser(
username,
None, # Here should be the domain ... or just go with default values
password,
win32security.LOGON32_LOGON_NETWORK,
win32security.LOGON32_PROVIDER_DEFAULT,
)
win32security.ImpersonateLoggedOnUser(token)
folder_name = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, 0, 0)
win32security.RevertToSelf()
Diese Frage ist irgendwie miteinander verwandt: How to find the real user home directory using python?
immer eine gute "Python unter Windows" Frage liebt. Je früher wir die Erleuchtung auf diese Plattform bringen (wenn es möglich ist), desto besser für alle. –
'~ Benutzer' soll nicht auf 2.5 arbeiten, es ist in 2.6+ implementiert, aber auf eine gebrochene Weise - siehe meine Antwort unten für die Arbeitsimplementierung. Ja, ich musste in der Registry gucken, fürchte ich. –