Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

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

Re: Vierten Zeitstempel ermitteln

  Alt 30. Mai 2008, 17:44
Zitat von nicodex:
Öhm, ja, schön, aber dein Buffer ist nicht so groß.
Stimmt.

Delphi-Quellcode:
function GetNTTime(fn: String; var FileInformation: FILE_BASIC_INFORMATION): Boolean;
var
  dosfn : ANSI_STRING;
  szNtDeviceName : array[0..MAX_PATH] of Char;
  ObjName : UNICODE_STRING;
  ObjectAttributes : OBJECT_ATTRIBUTES;
  Buffer : array of WideChar;
  Status : NTSTATUS;
  DosErr : DWORD;
  Error : PChar;
begin
  Result := False;

  FillChar(dosfn, SizeOf(ANSI_STRING), 0);
  FillChar(ObjName, SizeOf(UNICODE_STRING), 0);
  FillChar(ObjectAttributes, SizeOf(OBJECT_ATTRIBUTES), 0);
  FillChar(FileInformation, SizeOf(FILE_BASIC_INFORMATION), 0);

  QueryDosDevice(PAnsiChar(ExtractFileDrive(fn)), szNtDeviceName, MAX_PATH);
  RtlInitAnsiString(@dosfn, PAnsiChar(Format('%s\%s', [szNtDeviceName, copy(fn, 4, Length(fn) - 3)])));
  RtlAnsiStringToUnicodeString(@ObjName, @dosfn, True);

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

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

  Result := NT_SUCCESS(Status);

  if not Result
  then begin
    doserr := RtlNtStatusToDosError(Status);
    SetLastError(DosErr);
    GetMem(Error, 255);
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError, 0, @Error, 255, nil);
    ShowMessage(Trim(Error));
  end;
end;
Damit sehen die Buffergrößen schon besser aus. Der Fehler ist damit leider nicht behoben.

Zitat von nicodex:
Deine Definition von TFileBasicInformation ist falsch (es fehlt die implizite Ausrichtung, die Struktur ist nicht packed!
Die Deklarationen habe ich von dort:
http://www.koders.com/delphi/fid50A5...6A08E3B70.aspx
http://www.koders.com/delphi/fidFFCC...D78A4039C.aspx

Dein Code funktioniert, aber meinem ist die Deklaration egal.
Angehängte Dateien
Dateityp: 7z filetime_100.7z (5,5 KB, 8x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat