Found it: IO_IOCTL_LAST_CLUSTER returns the number of the last cluster. This (as far as I know) can be used as the total number of clusters in the file system. To obtain the total size of the filesystem, multiply that by the cluster size. (casting and error checking left out of code example).
ioctl(fs_ptr, IO_IOCTL_FREE_SPACE, &free_b);
ioctl(fs_ptr, IO_IOCTL_LAST_CLUSTER, &last_cluster);
ioctl(fs_ptr, IO_IOCTL_GET_CLUSTER_SIZE, &cluster_b);
total_kb = last_cluster*cluster_b/1024;
free_kb = free_b/1024;
used_kb = total_kb - free_kb;