PROGRAM INCLUDE('LoadLib.inc'),ONCE MAP INCLUDE('i64.INC') MODULE('kernel32') GetDiskFreeSpaceExLA PROCEDURE( | !BOOL GetDiskFreeSpaceExA( <*CSTRING lpDirectoryName> , | !in optional LPCSTR lpDirectoryName , | !out optional PULARGE_INTEGER lpFreeBytesAvailableToCaller , | !out optional PULARGE_INTEGER lpTotalNumberOfBytes | !out optional PULARGE_INTEGER lpTotalNumberOfFreeBytes ),BOOL,PROC,RAW,PASCAL,DLL(1)!,name('GetDiskFreeSpaceExA') GetDiskFreeSpaceExLE PROCEDURE( | !BOOL GetDiskFreeSpaceExA( <*CSTRING lpDirectoryName> , | !in optional LPCSTR lpDirectoryName LONG lpFreeBytesAvailableToCaller=0 , | !out optional PULARGE_INTEGER lpFreeBytesAvailableToCaller LONG lpTotalNumberOfBytes =0 , | !out optional PULARGE_INTEGER lpTotalNumberOfBytes LONG lpTotalNumberOfFreeBytes =0 | !out optional PULARGE_INTEGER lpTotalNumberOfFreeBytes ),BOOL,PROC,RAW,PASCAL,DLL(_fp_)!,name('GetDiskFreeSpaceExA') END END ! Function pointer variables to receive the address of the api function. ! You must assign a valid address BEFORE you attempt to call the function. fpGetDiskFreeSpaceExLe LONG,AUTO,NAME('GetDiskFreeSpaceExLe') Kernel &LoadLibClass freeBytesUINT64 LIKE(UINT64) freeBytesDECIMAL DECIMAL(31) CODE Kernel &= NEW LoadLibClass IF NOT Kernel &= NULL ! GetDiskFreeSpaceEx() and GetDiskFreeSpace() are exported from kernel32.dll. ! The kernel is always mapped into the address space of your process. ! Therefore, it's not necessary to use LoadLibrary(), Instead specify that the ! LoadLibrary() method use GetModuleHandle(). RetVal# = Kernel.LlcLoadLibrary('kernel32.dll', Method:GetModuleHandle) IF Kernel.LibraryLoaded() fpGetDiskFreeSpaceExLe = Kernel.LlcGetProcAddress('GetDiskFreeSpaceExA') GetDiskFreeSpaceExLe(,,,ADDRESS(freeBytesUINT64)) i64ToDecimal(freeBytesDECIMAL,freeBytesUINT64) MESSAGE('Bytes Free: ' & FORMAT(freeBytesDECIMAL,@N40)) ELSE MESSAGE('Error Loading Library') fpGetDiskFreeSpaceExLe = 0 END END