Autor Beitrag
sa2728
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 23.02.10 12:31 
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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 23.02.2010 um 11:41
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: 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.

_________________
Salus populi suprema lex esto
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 23.02.10 13:37 
Moin!

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconLuckie. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 23.02.10 13:42 
Das geht ganz normal über SHGetFolderLocation, nur dass man eben nicht das Token des eigenen Benutzers angibt, sondern das des gewünschten Benutzers. Das muss man sich vorher holen.
sa2728 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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 user profile iconNarses: Beiträge zusammengefasst---

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das geht ganz normal über SHGetFolderLocation, nur dass man eben nicht das Token des eigenen Benutzers angibt, sondern das des gewünschten Benutzers. Das muss man sich vorher holen.


Und wie geht das genau?

Ich habe momentan folgende Funktion, die gut für den eigenen User funktioniert:
ausblenden 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
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)'16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;

Wie müsste ich die ergänzen, um noch den gewünschten Usernamen mit anzugeben?

Gruss Andreas

Moderiert von user profile iconNarses: Zitat- durch Delphi-Tags ersetzt
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 23.02.10 18:54 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
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. ;)

cu
Narses

Hmm, von Admin war oben nicht die Rede. Ich bin von einem normalen User ausgegangen.

_________________
Salus populi suprema lex esto
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.