Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Vierten Zeitstempel ermitteln

  Alt 30. Mai 2008, 15:15
Delphi-Quellcode:
function GetNTTime(fn: String; var FileInformation: FILE_BASIC_INFORMATION): Boolean;
var
  dosfn : String;
  szNtDeviceName : array[0..MAX_PATH] of Char;
  Status : NTSTATUS;
  ObjName : UNICODE_STRING;
  ObjectAttributes : OBJECT_ATTRIBUTES;
  Buffer : array of WideChar;
begin
  Result := False;

  QueryDosDevice (PAnsiChar(ExtractFileDrive(fn)), szNtDeviceName, MAX_PATH);
  dosfn := Format('%s\%s', [szNtDeviceName, copy(fn, 4, Length(fn) - 3)]);

  try
    SetLength(Buffer, Length(dosfn));

    FillChar(ObjectAttributes, SizeOf(OBJECT_ATTRIBUTES), 0);
    FillChar(FileInformation, SizeOf(FILE_BASIC_INFORMATION), 0);

    MultiByteToWideChar(CP_UTF8, 0, @dosfn[1], Length(dosfn), PWideChar(Buffer), Length(Buffer));
    ObjName.Buffer := @Buffer[0];
    ObjName.Length := Length(dosfn) * SizeOf(WideChar);

    InitializeObjectAttributes(@ObjectAttributes, @ObjName, OBJ_CASE_INSENSITIVE, 0, nil);

    Status := NtQueryAttributesFile(@ObjectAttributes, @FileInformation);

    Result := NT_SUCCESS(Status);
  finally
    //
  end;
end;
Ich denke, der Fehler liegt bei ObjName. Es funktioniert weder mit dem Dateinamen noch dem Devicenamen. Also zum Beispiel:

D:\Garfield\Beispiel.txt
\Device\HarddiskVolume2\Garfield\Beispiel.txt

Wie müsste ein Objectname aussehen?
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat