FR: Windows.GetDiskFreeSpaceExW use unsigned paramters
Summary
Windows.GetDiskFreeSpaceExW uses signed (TLargeInteger=Int64) parameters.
MS defines GetDiskFreeSpaceExW as follows:
BOOL GetDiskFreeSpaceExW(
[in, optional] LPCWSTR lpDirectoryName,
[out, optional] PULARGE_INTEGER lpFreeBytesAvailableToCaller,
[out, optional] PULARGE_INTEGER lpTotalNumberOfBytes,
[out, optional] PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
And ULARGE_INTEGER is a union representing a 64-bit unsigned integer value.
However in rtl/win/wininc/redef.inc we define 2 overloads for this function:
function GetDiskFreeSpaceExW(lpDirectoryName: LPWSTR; var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes: TLargeInteger; lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;external 'kernel32' name 'GetDiskFreeSpaceExW';
function GetDiskFreeSpaceExW(lpDirectoryName: LPWSTR; lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes: pLargeInteger; lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;external 'kernel32' name 'GetDiskFreeSpaceExW';
I would ask for an overload using 64-bit unsigned paramters (TULargeInteger/UInt64).
System Information
- Operating system: Windows 11 Home 64
- Processor architecture: 32-bit fpc
- Device: Laptop
Relevant 3rd party information
On the ML Thomas pointed out that the original implementation most like is Delphi compatible.
See Delphi's DocWiki