Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#1

Dateiname zu FileHandle auslesen

  Alt 2. Dez 2007, 18:42
mir war zwar so, als wenn's hier mal etwas dazu gab, aber hab irgendwie nichts gefunden -.-''

also, weiß zufällig wer wie ich aus einem FileHandle (CreateFile) den Dateinamen rausbekomm?
über MemoryMapping und GetModuleFilename ging's leider nicht.

ich wollte meinen Programmcode etwas aufräumen und daher
das auskommentierte MSDN-Library durchsuchenReOpenFile (da erst ab Vista) aktivieren und den Ersatzcode weglassen,
aber dafür bräuchte ich eine Möglichkeit um an den Dateinamen ranzukommen
um einen Vor-Vista-Ersatz schreiben zu können:
Code:
Var ReOpenFileW: Function (hOriginalFile: THandle;
  dwDesiredAccess, dwShareMode, dwFlags: LongWord): THandle; StdCall;

Function ReOpenFileW_(hOriginalFile: THandle;
  dwDesiredAccess, dwShareMode, dwFlags: LongWord): THandle; StdCall;

  Var FileName: WideString;
    lpSecurityAttributes: PSecurityAttributes;
    hTemplateFile: THandle;

  Begin
    FileName            := [color=red]FileHandleToFileName[/color](hOriginalFile);
    lpSecurityAttributes := nil; // diese Beiden müssen für mich nicht
    hTemplateFile       := 0;   // unbedingt ausgelesen werden

    CloseHandle(hOriginalFile);
    Result := CreateFileW(PWideChar(FileName), dwDesiredAccess, dwShareMode,
      lpSecurityAttributes, OPEN_EXISTING, dwFlags, hTemplateFile);
  End;

ReOpenFileW := GetProcAddress(GetModuleHandle('kernel32.dll'), 'ReOpenFileW');
If @ReOpenFileW = nil Then ReOpenFileW := @ReOpenFileW_;
Und nein, auch noch CreateFile/CloseHandle zu hooken und die Dateinamen/FileHandles zu speichern kommt nicht in Frage ... da laß ich es doch lieber so wie es jetzt ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat