mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-28 10:02:14 +00:00
UPD: Use NtQueryInformationFile to get file change time
This commit is contained in:
parent
985adb14bb
commit
35276ca09d
2 changed files with 17 additions and 30 deletions
|
|
@ -770,9 +770,8 @@ begin
|
|||
fpModificationTime,
|
||||
{$IF DEFINED(MSWINDOWS)}
|
||||
fpCreationTime,
|
||||
{$ELSE}
|
||||
fpChangeTime,
|
||||
{$ENDIF}
|
||||
fpChangeTime,
|
||||
fpLastAccessTime,
|
||||
uFileProperty.fpLink,
|
||||
fpOwner,
|
||||
|
|
@ -782,9 +781,6 @@ begin
|
|||
, fpCompressedSize
|
||||
{$ENDIF}
|
||||
];
|
||||
{$IF DEFINED(MSWINDOWS)}
|
||||
if CheckWin32Version(6, 1) then Result += [fpChangeTime];
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function TFileSystemFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation;
|
||||
|
|
|
|||
|
|
@ -567,6 +567,22 @@ begin
|
|||
Int64Rec(Result).Lo:= GetCompressedFileSizeW(PWideChar(UTF16LongName(FileName)), @Int64Rec(Result).Hi);
|
||||
end;
|
||||
|
||||
function mbGetFileChangeTime(const FileName: String; out ChangeTime: TFileTime): Boolean;
|
||||
var
|
||||
Handle: System.THandle;
|
||||
IoStatusBlock : TIoStatusBlock;
|
||||
FileInformation: TFileBasicInformation;
|
||||
begin
|
||||
Handle:= CreateFileW(PWideChar(UTF16LongName(FileName)), FILE_READ_ATTRIBUTES,
|
||||
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
|
||||
nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
|
||||
if Handle = INVALID_HANDLE_VALUE then Exit(False);
|
||||
Result:= NtQueryInformationFile(Handle, @IoStatusBlock, @FileInformation,
|
||||
SizeOf(FileInformation), FileBasicInformation) = 0;
|
||||
CloseHandle(Handle);
|
||||
ChangeTime:= TFileTime(FileInformation.ChangeTime);
|
||||
end;
|
||||
|
||||
type
|
||||
TOKEN_ELEVATION_TYPE = (
|
||||
TokenElevationTypeDefault:= 1, TokenElevationTypeFull,
|
||||
|
|
@ -598,31 +614,6 @@ function GetTokenInformation(TokenHandle: HANDLE; TokenInformationClass: TOKEN_I
|
|||
TokenInformation: Pointer; TokenInformationLength: DWORD;
|
||||
out ReturnLength: DWORD): BOOL; stdcall; external 'advapi32' name 'GetTokenInformation';
|
||||
|
||||
function mbGetFileChangeTime(const FileName: String; out ChangeTime: TFileTime): Boolean;
|
||||
var
|
||||
Handle: System.THandle;
|
||||
lpFileInformation: TFileBasicInformation;
|
||||
GetFileInformationByHandleEx: function(hFile: THandle; FileInformationClass: DWORD;
|
||||
lpFileInformation: LPVOID; dwBufferSize: DWORD): BOOL; stdcall;
|
||||
begin
|
||||
Result:= CheckWin32Version(6, 1);
|
||||
if Result then
|
||||
begin
|
||||
Pointer(GetFileInformationByHandleEx):= GetProcAddress(GetModuleHandle(Kernel32), 'GetFileInformationByHandleEx');
|
||||
Result:= Assigned(GetFileInformationByHandleEx);
|
||||
if Result then
|
||||
begin
|
||||
Handle:= CreateFileW(PWideChar(UTF16LongName(FileName)), FILE_READ_ATTRIBUTES,
|
||||
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
|
||||
nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
|
||||
if Handle = INVALID_HANDLE_VALUE then Exit(False);
|
||||
Result:= GetFileInformationByHandleEx(Handle, 0, @lpFileInformation, SizeOf(lpFileInformation));
|
||||
CloseHandle(Handle);
|
||||
ChangeTime:= TFileTime(lpFileInformation.ChangeTime);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function IsUserAdmin: LongBool;
|
||||
var
|
||||
ReturnLength: DWORD;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue