Get percentage free space on database volumes
Personally, I don't know why you need to do this from within SQL Server. You can get this as often as you want and fairly straightforward using PowerShell, or C#, or even VBScript in a scheduled task of some kind, and then have that program update a table if you really need this stored in the database (and frequency would be dictated by how volatile your disks are and how current you need the data to be). I recommend against shelling out to the OS to collect this information while an end user is waiting.

That said, in SQL Server 2012 (and 2008 R2 SP1+) there is a new DMV called sys.dm_os_volume_stats. This DMV has total size and available size so you can perform any resulting calculations from there. I haven't tested how current this data is - it may be seconds behind or more.