Retrieve Disk Capacity: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 16: Line 16:
Also on volumes with user quotas (ie NTFS servers) the amount may be less tham the actual amount - this warning is courtesy of the Microsoft documentation on the [http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespaceex.asp GetDiskFreeSpaceEx] function.
Also on volumes with user quotas (ie NTFS servers) the amount may be less tham the actual amount - this warning is courtesy of the Microsoft documentation on the [http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespaceex.asp GetDiskFreeSpaceEx] function.


Please note that the function returns the capacity of the volume that the specified directory is in. See the more detailed note at CheckFreeSpace.
Please note that the function returns the capacity of the volume that the specified directory is in. See the more detailed note at [[CheckSpaceFree]].


== The Script ==
== The Script ==

Revision as of 14:59, 13 January 2007

Author: dirtydingus (talk, contrib)


Description

Note: GetDiskFreeSpaceEx is not supported by the first edition of Windows 95.

Use GetDiskFreeSpace instead if you want your check to be compatible with this version.


This code is based on Sunjammer's code to CheckSpaceFree, but uses the same system function call to return the drive capacity instead.

The value returned is the amount in KBytes.

Notes

I suspect there may be problems if the drive size is >2Tb as then it will no longer be a 32bit integer.

Also on volumes with user quotas (ie NTFS servers) the amount may be less tham the actual amount - this warning is courtesy of the Microsoft documentation on the GetDiskFreeSpaceEx function.

Please note that the function returns the capacity of the volume that the specified directory is in. See the more detailed note at CheckSpaceFree.

The Script

!define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l) i'
 
; $1 - path to check (e.g. 'C:\') should work on \\computer\share\ also
; $1 - trashed returns vol space in KBytes 
; (NB odd things may happen on >2Tb drives, have not checked)
function GetCapacityFunc
  push $2
  System::Call '${sysGetDiskFreeSpaceEx}(r1,.,.r2,)'
  ; convert the large integer byte values into managable kb
  System::Int64Op $2 / 1024
  Pop $1
  Pop $2
functionend

Share & Enjoy