Implement NtQueryVolumeInformationFile for type
FileFsDeviceInformation on FreeBSD.
This commit is contained in:
parent
5e6b43e2a0
commit
f23e8fec10
|
@ -1505,6 +1505,48 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io
|
|||
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
|
||||
break;
|
||||
}
|
||||
#elif defined(__FreeBSD__)
|
||||
struct statfs stfs;
|
||||
|
||||
/* The proper way to do this in FreeBSD seems to be with the
|
||||
* name rather than the type, since their linux-compatible
|
||||
* fstatfs call converts the name to one of the Linux types.
|
||||
*/
|
||||
if (fstatfs( fd, &stfs ) < 0)
|
||||
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
|
||||
else if (!strncmp("cd9660", stfs.f_fstypename,
|
||||
sizeof(stfs.f_fstypename)))
|
||||
{
|
||||
info->DeviceType = FILE_DEVICE_CD_ROM_FILE_SYSTEM;
|
||||
/* Don't assume read-only, let the mount options set it
|
||||
* below
|
||||
*/
|
||||
info->Characteristics |= FILE_REMOVABLE_MEDIA;
|
||||
}
|
||||
else if (!strncmp("nfs", stfs.f_fstypename,
|
||||
sizeof(stfs.f_fstypename)))
|
||||
{
|
||||
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
|
||||
info->Characteristics |= FILE_REMOTE_DEVICE;
|
||||
}
|
||||
else if (!strncmp("nwfs", stfs.f_fstypename,
|
||||
sizeof(stfs.f_fstypename)))
|
||||
{
|
||||
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
|
||||
info->Characteristics |= FILE_REMOTE_DEVICE;
|
||||
}
|
||||
else if (!strncmp("procfs", stfs.f_fstypename,
|
||||
sizeof(stfs.f_fstypename)))
|
||||
info->DeviceType = FILE_DEVICE_VIRTUAL_DISK;
|
||||
else
|
||||
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
|
||||
if (stfs.f_flags & MNT_RDONLY)
|
||||
info->Characteristics |= FILE_READ_ONLY_DEVICE;
|
||||
if (!(stfs.f_flags & MNT_LOCAL))
|
||||
{
|
||||
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
|
||||
info->Characteristics |= FILE_REMOTE_DEVICE;
|
||||
}
|
||||
#elif defined (__APPLE__)
|
||||
# include <IOKit/IOKitLib.h>
|
||||
# include <CoreFoundation/CFNumber.h> /* for kCFBooleanTrue, kCFBooleanFalse */
|
||||
|
|
Loading…
Reference in New Issue