Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

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

Re: Vierten Zeitstempel ermitteln

  Alt 1. Jun 2008, 16:14
Gelöst!

Der Fehler
Code:
---------------------------
Filetime
---------------------------
Unzulässiger Zugriff auf einen Speicherbereich.
---------------------------
OK  
---------------------------
lag an
  QueryDosDevice(PAnsiChar(ExtractFileDrive(fn)), szNtDeviceName, MAX_PATH); Das ungültige Handle lag an falschen Parametern. Jetzt sieht es so aus:
Delphi-Quellcode:
function GetNTTime(fn: String; var FileInformation: FILE_BASIC_INFORMATION): Boolean;
const
  FILE_LIST_DIRECTORY = $0001;
var
  RootDirectory : THandle;
  FileName : ANSI_STRING;
  ObjName : UNICODE_STRING;
  ObjectAttributes : OBJECT_ATTRIBUTES;
  Status : NTSTATUS;
  DosErr : DWORD;
  Error : PChar;
begin
  Result := False;

  RtlZeroMemory(@ObjName, SizeOf(UNICODE_STRING));
  RtlZeroMemory(@ObjectAttributes, SizeOf(OBJECT_ATTRIBUTES));
  RtlZeroMemory(@FileInformation, SizeOf(FILE_BASIC_INFORMATION));

  RootDirectory := CreateFile(PAnsiChar(ExtractFilePath(fn)), FILE_LIST_DIRECTORY, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
  RtlInitAnsiString(@FileName, PAnsiChar(ExtractFileName(fn)));
  RtlAnsiStringToUnicodeString(@ObjName, @FileName, True);

  InitializeObjectAttributes(@ObjectAttributes, @ObjName, OBJ_CASE_INSENSITIVE, RootDirectory, 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;

  CloseHandle(RootDirectory);
end;
Das scheint auch ein Irrtum zu sein:
Zitat von Garfield:
Wenn man sich ein Handle auf die Datei holt, wird die LastAccessTime geändert, was ich vermeiden möchte.
Vielen Dank an nicodex. Durch ihn habe ich wieder einiges gelernt.
Angehängte Dateien
Dateityp: 7z filetime_108.7z (5,8 KB, 17x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat