Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
Delphi XE5 Professional
|
Re: Vierten Zeitstempel ermitteln
1. Jun 2008, 17: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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
|
|
Zitat
|