Entwickler-Ecke
Windows API - Pfad (CSIDL_PERSONAL) eines anderen Users ermitteln
sa2728 - Di 23.02.10 12:31
Titel: Pfad (CSIDL_PERSONAL) eines anderen Users ermitteln
Hallo,
weiss jemand wie man den Pfad für eigene Dateien eines bestimmten (nicht des eigenen) Users ermitteln kann?
Mit CSIDL_PERSONAL findet man ja nur den Pfad des eigenen Users.
Gruss Andreas
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 23.02.2010 um 11:41
delphi10 - Di 23.02.10 13:19
Auf dem gleichen Rechner? Wofür? Wenn das OS rechtemäßig richtig aufgesetzt ist, kannst Du da weder lesen noch schreiben, mein ich.
Narses - Di 23.02.10 13:37
Moin!
delphi10 hat folgendes geschrieben : |
| Auf dem gleichen Rechner? Wofür? Wenn das OS rechtemäßig richtig aufgesetzt ist, kannst Du da weder lesen noch schreiben, mein ich. |
Warum sollte das nicht gehen? Wenn dein Programm ein Dienst ist oder Admin-Rechte hat, geht das problemlos. ;)
Aber mir fällt auf anhieb auch nur der Weg über die Registry ein (also User-SID rauspopeln und die Pfad-Ersetzungs-Keys aus der Registry durcharbeiten). Ist aber nicht wirklich gut. :? Warten wir mal auf einen Vorschlag von
Luckie. ;)
cu
Narses
sa2728 - Di 23.02.10 13:42
Hallo,
ja, auf dem gleichen Rechner. Ich brauche das, weil ich als Admin mir ein kleines Tool schreiben will, mit dem ich die Daten von Usern (inkl. eigene Dateien, Favoriten, Bookmarks, Outlook.pst, ...) von einem PC auf einen anderen kopieren kann.
Gruss Andreas
---
Moderiert von
Narses: Beiträge zusammengefasst---
Und wie geht das genau?
Ich habe momentan folgende Funktion, die gut für den eigenen User funktioniert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| function GetSpecialFolder(hWindow: HWND; Folder: Integer): String; var pMalloc: IMalloc; pidl: PItemIDList; Path: PChar;
begin if (SHGetMalloc(pMalloc) <> S_OK) then begin MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.', 'SHGetMalloc(pMalloc)', 16); Exit; end;
SHGetSpecialFolderLocation(hWindow, Folder, pidl); GetMem(Path, MAX_PATH); SHGetPathFromIDList(pidl, Path); Result := Path; FreeMem(Path);
pMalloc.Free(pidl); end; |
Wie müsste ich die ergänzen, um noch den gewünschten Usernamen mit anzugeben?
Gruss Andreas
Moderiert von
Narses: Zitat- durch Delphi-Tags ersetzt
BenBE - Mi 24.02.10 21:19
Such bei der WinAPI mal nach ImpersonateToken oder wie die Funktion hieß. Und damit den eigenen Prozess- oder Thread-Token auf den anderen User biegen. Nicht probiert; reine Vermutung.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!