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