Index: /trunk/include/iprt/nt/nt.h
===================================================================
--- /trunk/include/iprt/nt/nt.h	(revision 78485)
+++ /trunk/include/iprt/nt/nt.h	(revision 78486)
@@ -1609,4 +1609,35 @@
 NTSYSAPI NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FS_INFORMATION_CLASS);
 
+typedef struct _FILE_DIRECTORY_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_DIRECTORY_INFORMATION;
+typedef FILE_DIRECTORY_INFORMATION *PFILE_DIRECTORY_INFORMATION;
+typedef struct _FILE_FULL_DIR_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    ULONG           EaSize;
+    WCHAR           FileName[1];
+} FILE_FULL_DIR_INFORMATION;
+typedef FILE_FULL_DIR_INFORMATION *PFILE_FULL_DIR_INFORMATION;
 typedef struct _FILE_BOTH_DIR_INFORMATION
 {
@@ -1651,4 +1682,213 @@
 } FILE_NAME_INFORMATION;
 typedef FILE_NAME_INFORMATION *PFILE_NAME_INFORMATION;
+typedef FILE_NAME_INFORMATION FILE_NETWORK_PHYSICAL_NAME_INFORMATION;
+typedef FILE_NETWORK_PHYSICAL_NAME_INFORMATION *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
+typedef struct _FILE_INTERNAL_INFORMATION
+{
+    LARGE_INTEGER   IndexNumber;
+} FILE_INTERNAL_INFORMATION;
+typedef FILE_INTERNAL_INFORMATION *PFILE_INTERNAL_INFORMATION;
+typedef struct _FILE_EA_INFORMATION
+{
+    ULONG           EaSize;
+} FILE_EA_INFORMATION;
+typedef FILE_EA_INFORMATION *PFILE_EA_INFORMATION;
+typedef struct _FILE_ACCESS_INFORMATION
+{
+    ACCESS_MASK     AccessFlags;
+} FILE_ACCESS_INFORMATION;
+typedef FILE_ACCESS_INFORMATION *PFILE_ACCESS_INFORMATION;
+typedef struct _FILE_RENAME_INFORMATION
+{
+    union
+    {
+        BOOLEAN     ReplaceIfExists;
+        ULONG       Flags;
+    };
+    HANDLE          RootDirectory;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_RENAME_INFORMATION;
+typedef FILE_RENAME_INFORMATION *PFILE_RENAME_INFORMATION;
+typedef struct _FILE_LINK_INFORMATION
+{
+    union
+    {
+        BOOLEAN     ReplaceIfExists;
+        ULONG       Flags;
+    };
+    HANDLE          RootDirectory;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_LINK_INFORMATION;
+typedef FILE_LINK_INFORMATION *PFILE_LINK_INFORMATION;
+typedef struct _FILE_NAMES_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_NAMES_INFORMATION;
+typedef FILE_NAMES_INFORMATION *PFILE_NAMES_INFORMATION;
+typedef struct _FILE_DISPOSITION_INFORMATION
+{
+    BOOLEAN         DeleteFile;
+} FILE_DISPOSITION_INFORMATION;
+typedef FILE_DISPOSITION_INFORMATION *PFILE_DISPOSITION_INFORMATION;
+typedef struct _FILE_POSITION_INFORMATION
+{
+    LARGE_INTEGER   CurrentByteOffset;
+} FILE_POSITION_INFORMATION;
+typedef FILE_POSITION_INFORMATION *PFILE_POSITION_INFORMATION;
+typedef struct _FILE_FULL_EA_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    UCHAR           Flags;
+    UCHAR           EaNameLength;
+    USHORT          EaValueLength;
+    CHAR            EaName[1];
+} FILE_FULL_EA_INFORMATION;
+typedef FILE_FULL_EA_INFORMATION *PFILE_FULL_EA_INFORMATION;
+typedef struct _FILE_MODE_INFORMATION
+{
+    ULONG           Mode;
+} FILE_MODE_INFORMATION;
+typedef FILE_MODE_INFORMATION *PFILE_MODE_INFORMATION;
+typedef struct _FILE_ALIGNMENT_INFORMATION
+{
+    ULONG           AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION;
+typedef FILE_ALIGNMENT_INFORMATION *PFILE_ALIGNMENT_INFORMATION;
+typedef struct _FILE_ALL_INFORMATION
+{
+    FILE_BASIC_INFORMATION      BasicInformation;
+    FILE_STANDARD_INFORMATION   StandardInformation;
+    FILE_INTERNAL_INFORMATION   InternalInformation;
+    FILE_EA_INFORMATION         EaInformation;
+    FILE_ACCESS_INFORMATION     AccessInformation;
+    FILE_POSITION_INFORMATION   PositionInformation;
+    FILE_MODE_INFORMATION       ModeInformation;
+    FILE_ALIGNMENT_INFORMATION  AlignmentInformation;
+    FILE_NAME_INFORMATION       NameInformation;
+} FILE_ALL_INFORMATION;
+typedef FILE_ALL_INFORMATION *PFILE_ALL_INFORMATION;
+typedef struct _FILE_ALLOCATION_INFORMATION
+{
+    LARGE_INTEGER   AllocationSize;
+} FILE_ALLOCATION_INFORMATION;
+typedef FILE_ALLOCATION_INFORMATION *PFILE_ALLOCATION_INFORMATION;
+typedef struct _FILE_END_OF_FILE_INFORMATION
+{
+    LARGE_INTEGER   EndOfFile;
+} FILE_END_OF_FILE_INFORMATION;
+typedef FILE_END_OF_FILE_INFORMATION *PFILE_END_OF_FILE_INFORMATION;
+typedef struct _FILE_STREAM_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           StreamNameLength;
+    LARGE_INTEGER   StreamSize;
+    LARGE_INTEGER   StreamAllocationSize;
+    WCHAR           StreamName[1];
+} FILE_STREAM_INFORMATION;
+typedef FILE_STREAM_INFORMATION *PFILE_STREAM_INFORMATION;
+typedef struct _FILE_PIPE_INFORMATION
+{
+    ULONG           ReadMode;
+    ULONG           CompletionMode;
+} FILE_PIPE_INFORMATION;
+typedef FILE_PIPE_INFORMATION *PFILE_PIPE_INFORMATION;
+
+typedef struct _FILE_PIPE_LOCAL_INFORMATION
+{
+    ULONG           NamedPipeType;
+    ULONG           NamedPipeConfiguration;
+    ULONG           MaximumInstances;
+    ULONG           CurrentInstances;
+    ULONG           InboundQuota;
+    ULONG           ReadDataAvailable;
+    ULONG           OutboundQuota;
+    ULONG           WriteQuotaAvailable;
+    ULONG           NamedPipeState;
+    ULONG           NamedPipeEnd;
+} FILE_PIPE_LOCAL_INFORMATION;
+typedef FILE_PIPE_LOCAL_INFORMATION *PFILE_PIPE_LOCAL_INFORMATION;
+
+typedef struct _FILE_PIPE_REMOTE_INFORMATION
+{
+    LARGE_INTEGER   CollectDataTime;
+    ULONG           MaximumCollectionCount;
+} FILE_PIPE_REMOTE_INFORMATION;
+typedef FILE_PIPE_REMOTE_INFORMATION *PFILE_PIPE_REMOTE_INFORMATION;
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
+{
+    ULONG           MaximumMessageSize;
+    ULONG           MailslotQuota;
+    ULONG           NextMessageSize;
+    ULONG           MessagesAvailable;
+    LARGE_INTEGER   ReadTimeout;
+} FILE_MAILSLOT_QUERY_INFORMATION;
+typedef FILE_MAILSLOT_QUERY_INFORMATION *PFILE_MAILSLOT_QUERY_INFORMATION;
+typedef struct _FILE_MAILSLOT_SET_INFORMATION
+{
+    PLARGE_INTEGER  ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION;
+typedef FILE_MAILSLOT_SET_INFORMATION *PFILE_MAILSLOT_SET_INFORMATION;
+typedef struct _FILE_COMPRESSION_INFORMATION
+{
+    LARGE_INTEGER   CompressedFileSize;
+    USHORT          CompressionFormat;
+    UCHAR           CompressionUnitShift;
+    UCHAR           ChunkShift;
+    UCHAR           ClusterShift;
+    UCHAR           Reserved[3];
+} FILE_COMPRESSION_INFORMATION;
+typedef FILE_COMPRESSION_INFORMATION *PFILE_COMPRESSION_INFORMATION;
+typedef struct _FILE_OBJECTID_INFORMATION
+{
+    LONGLONG        FileReference;
+    UCHAR           ObjectId[16];
+    union
+    {
+        struct
+        {
+            UCHAR   BirthVolumeId[16];
+            UCHAR   BirthObjectId[16];
+            UCHAR   DomainId[16];
+        };
+        UCHAR       ExtendedInfo[48];
+    };
+} FILE_OBJECTID_INFORMATION;
+typedef FILE_OBJECTID_INFORMATION *PFILE_OBJECTID_INFORMATION;
+typedef struct _FILE_COMPLETION_INFORMATION
+{
+    HANDLE          Port;
+    PVOID           Key;
+} FILE_COMPLETION_INFORMATION;
+typedef FILE_COMPLETION_INFORMATION *PFILE_COMPLETION_INFORMATION;
+typedef struct _FILE_MOVE_CLUSTER_INFORMATION
+{
+    ULONG           ClusterCount;
+    HANDLE          RootDirectory;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_MOVE_CLUSTER_INFORMATION;
+typedef FILE_MOVE_CLUSTER_INFORMATION *PFILE_MOVE_CLUSTER_INFORMATION;
+typedef struct _FILE_QUOTA_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           SidLength;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   QuotaUsed;
+    LARGE_INTEGER   QuotaThreshold;
+    LARGE_INTEGER   QuotaLimit;
+    SID             Sid;
+} FILE_QUOTA_INFORMATION;
+typedef FILE_QUOTA_INFORMATION *PFILE_QUOTA_INFORMATION;
+typedef struct _FILE_REPARSE_POINT_INFORMATION
+{
+    LONGLONG        FileReference;
+    ULONG           Tag;
+} FILE_REPARSE_POINT_INFORMATION;
+typedef FILE_REPARSE_POINT_INFORMATION *PFILE_REPARSE_POINT_INFORMATION;
 typedef struct _FILE_NETWORK_OPEN_INFORMATION
 {
@@ -1662,4 +1902,296 @@
 } FILE_NETWORK_OPEN_INFORMATION;
 typedef FILE_NETWORK_OPEN_INFORMATION *PFILE_NETWORK_OPEN_INFORMATION;
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
+{
+    ULONG           FileAttributes;
+    ULONG           ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION;
+typedef FILE_ATTRIBUTE_TAG_INFORMATION *PFILE_ATTRIBUTE_TAG_INFORMATION;
+typedef struct _FILE_TRACKING_INFORMATION
+{
+    HANDLE          DestinationFile;
+    ULONG           ObjectInformationLength;
+    CHAR            ObjectInformation[1];
+} FILE_TRACKING_INFORMATION;
+typedef FILE_TRACKING_INFORMATION *PFILE_TRACKING_INFORMATION;
+typedef struct _FILE_ID_BOTH_DIR_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    ULONG           EaSize;
+    CCHAR           ShortNameLength;
+    WCHAR           ShortName[12];
+    LARGE_INTEGER   FileId;
+    WCHAR           FileName[1];
+} FILE_ID_BOTH_DIR_INFORMATION;
+typedef FILE_ID_BOTH_DIR_INFORMATION *PFILE_ID_BOTH_DIR_INFORMATION;
+typedef struct _FILE_ID_FULL_DIR_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    ULONG           EaSize;
+    LARGE_INTEGER   FileId;
+    WCHAR           FileName[1];
+} FILE_ID_FULL_DIR_INFORMATION;
+typedef FILE_ID_FULL_DIR_INFORMATION *PFILE_ID_FULL_DIR_INFORMATION;
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
+{
+    LARGE_INTEGER   ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION;
+typedef FILE_VALID_DATA_LENGTH_INFORMATION *PFILE_VALID_DATA_LENGTH_INFORMATION;
+typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
+{
+    ULONG           Flags;
+} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
+typedef FILE_IO_COMPLETION_NOTIFICATION_INFORMATION *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
+typedef enum _IO_PRIORITY_HINT
+{
+    IoPriorityVeryLow = 0,
+    IoPriorityLow,
+    IoPriorityNormal,
+    IoPriorityHigh,
+    IoPriorityCritical,
+    MaxIoPriorityTypes
+} IO_PRIORITY_HINT;
+AssertCompileSize(IO_PRIORITY_HINT, sizeof(int));
+typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
+{
+    IO_PRIORITY_HINT    PriorityHint;
+} FILE_IO_PRIORITY_HINT_INFORMATION;
+typedef FILE_IO_PRIORITY_HINT_INFORMATION *PFILE_IO_PRIORITY_HINT_INFORMATION;
+typedef struct _FILE_SFIO_RESERVE_INFORMATION
+{
+    ULONG           RequestsPerPeriod;
+    ULONG           Period;
+    BOOLEAN         RetryFailures;
+    BOOLEAN         Discardable;
+    ULONG           RequestSize;
+    ULONG           NumOutstandingRequests;
+} FILE_SFIO_RESERVE_INFORMATION;
+typedef FILE_SFIO_RESERVE_INFORMATION *PFILE_SFIO_RESERVE_INFORMATION;
+typedef struct _FILE_SFIO_VOLUME_INFORMATION
+{
+    ULONG           MaximumRequestsPerPeriod;
+    ULONG           MinimumPeriod;
+    ULONG           MinimumTransferSize;
+} FILE_SFIO_VOLUME_INFORMATION;
+typedef FILE_SFIO_VOLUME_INFORMATION *PFILE_SFIO_VOLUME_INFORMATION;
+typedef struct _FILE_LINK_ENTRY_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    LONGLONG        ParentFileId;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_LINK_ENTRY_INFORMATION;
+typedef FILE_LINK_ENTRY_INFORMATION *PFILE_LINK_ENTRY_INFORMATION;
+typedef struct _FILE_LINKS_INFORMATION
+{
+    ULONG                       BytesNeeded;
+    ULONG                       EntriesReturned;
+    FILE_LINK_ENTRY_INFORMATION Entry;
+} FILE_LINKS_INFORMATION;
+typedef FILE_LINKS_INFORMATION *PFILE_LINKS_INFORMATION;
+typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
+{
+    ULONG           NumberOfProcessIdsInList;
+    ULONG_PTR       ProcessIdList[1];
+} FILE_PROCESS_IDS_USING_FILE_INFORMATION;
+typedef FILE_PROCESS_IDS_USING_FILE_INFORMATION *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
+typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    LARGE_INTEGER   FileId;
+    GUID            LockingTransactionId;
+    ULONG           TxInfoFlags;
+    WCHAR           FileName[1];
+} FILE_ID_GLOBAL_TX_DIR_INFORMATION;
+typedef FILE_ID_GLOBAL_TX_DIR_INFORMATION *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
+typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
+{
+    BOOLEAN         IsRemote;
+} FILE_IS_REMOTE_DEVICE_INFORMATION;
+typedef FILE_IS_REMOTE_DEVICE_INFORMATION *PFILE_IS_REMOTE_DEVICE_INFORMATION;
+typedef struct _FILE_NUMA_NODE_INFORMATION
+{
+    USHORT          NodeNumber;
+} FILE_NUMA_NODE_INFORMATION;
+typedef FILE_NUMA_NODE_INFORMATION *PFILE_NUMA_NODE_INFORMATION;
+typedef struct _FILE_STANDARD_LINK_INFORMATION
+{
+    ULONG           NumberOfAccessibleLinks;
+    ULONG           TotalNumberOfLinks;
+    BOOLEAN         DeletePending;
+    BOOLEAN         Directory;
+} FILE_STANDARD_LINK_INFORMATION;
+typedef FILE_STANDARD_LINK_INFORMATION *PFILE_STANDARD_LINK_INFORMATION;
+typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
+{
+    USHORT          StructureVersion;
+    USHORT          StructureSize;
+    ULONG           Protocol;
+    USHORT          ProtocolMajorVersion;
+    USHORT          ProtocolMinorVersion;
+    USHORT          ProtocolRevision;
+    USHORT          Reserved;
+    ULONG           Flags;
+    struct
+    {
+        ULONG       Reserved[8];
+    }               GenericReserved;
+    struct
+    {
+        ULONG       Reserved[16];
+    }               ProtocolSpecificReserved;
+} FILE_REMOTE_PROTOCOL_INFORMATION;
+typedef FILE_REMOTE_PROTOCOL_INFORMATION *PFILE_REMOTE_PROTOCOL_INFORMATION;
+typedef struct _FILE_VOLUME_NAME_INFORMATION
+{
+    ULONG           DeviceNameLength;
+    WCHAR           DeviceName[1];
+} FILE_VOLUME_NAME_INFORMATION;
+typedef FILE_VOLUME_NAME_INFORMATION *PFILE_VOLUME_NAME_INFORMATION;
+# ifndef FILE_INVALID_FILE_ID
+typedef struct _FILE_ID_128
+{
+    BYTE            Identifier[16];
+} FILE_ID_128;
+typedef FILE_ID_128 *PFILE_ID_128;
+# endif
+typedef struct _FILE_ID_EXTD_DIR_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    ULONG           EaSize;
+    ULONG           ReparsePointTag;
+    FILE_ID_128     FileId;
+    WCHAR           FileName[1];
+} FILE_ID_EXTD_DIR_INFORMATION;
+typedef FILE_ID_EXTD_DIR_INFORMATION *PFILE_ID_EXTD_DIR_INFORMATION;
+typedef struct _FILE_ID_EXTD_BOTH_DIR_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    ULONG           FileIndex;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   EndOfFile;
+    LARGE_INTEGER   AllocationSize;
+    ULONG           FileAttributes;
+    ULONG           FileNameLength;
+    ULONG           EaSize;
+    ULONG           ReparsePointTag;
+    FILE_ID_128     FileId;
+    CCHAR           ShortNameLength;
+    WCHAR           ShortName[12];
+    WCHAR           FileName[1];
+} FILE_ID_EXTD_BOTH_DIR_INFORMATION;
+typedef FILE_ID_EXTD_BOTH_DIR_INFORMATION *PFILE_ID_EXTD_BOTH_DIR_INFORMATION;
+typedef struct _FILE_ID_INFORMATION
+{
+    ULONGLONG       VolumeSerialNumber;
+    FILE_ID_128     FileId;
+} FILE_ID_INFORMATION;
+typedef FILE_ID_INFORMATION *PFILE_ID_INFORMATION;
+typedef struct _FILE_LINK_ENTRY_FULL_ID_INFORMATION
+{
+    ULONG           NextEntryOffset;
+    FILE_ID_128     ParentFileId;
+    ULONG           FileNameLength;
+    WCHAR           FileName[1];
+} FILE_LINK_ENTRY_FULL_ID_INFORMATION;
+typedef FILE_LINK_ENTRY_FULL_ID_INFORMATION *PFILE_LINK_ENTRY_FULL_ID_INFORMATION;
+typedef struct _FILE_LINKS_FULL_ID_INFORMATION {
+    ULONG                                   BytesNeeded;
+    ULONG                                   EntriesReturned;
+    FILE_LINK_ENTRY_FULL_ID_INFORMATION     Entry;
+} FILE_LINKS_FULL_ID_INFORMATION;
+typedef FILE_LINKS_FULL_ID_INFORMATION *PFILE_LINKS_FULL_ID_INFORMATION;
+typedef struct _FILE_DISPOSITION_INFORMATION_EX
+{
+    ULONG           Flags;
+} FILE_DISPOSITION_INFORMATION_EX;
+typedef FILE_DISPOSITION_INFORMATION_EX *PFILE_DISPOSITION_INFORMATION_EX;
+typedef struct _FILE_DESIRED_STORAGE_CLASS_INFORMATION
+{
+    /*FILE_STORAGE_TIER_CLASS*/ ULONG   Class;
+    ULONG                               Flags;
+} FILE_DESIRED_STORAGE_CLASS_INFORMATION;
+typedef FILE_DESIRED_STORAGE_CLASS_INFORMATION *PFILE_DESIRED_STORAGE_CLASS_INFORMATION;
+typedef struct _FILE_STAT_INFORMATION
+{
+    LARGE_INTEGER   FileId;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   AllocationSize;
+    LARGE_INTEGER   EndOfFile;
+    ULONG           FileAttributes;
+    ULONG           ReparseTag;
+    ULONG           NumberOfLinks;
+    ACCESS_MASK     EffectiveAccess;
+} FILE_STAT_INFORMATION;
+typedef FILE_STAT_INFORMATION *PFILE_STAT_INFORMATION;
+typedef struct _FILE_STAT_LX_INFORMATION
+{
+    LARGE_INTEGER   FileId;
+    LARGE_INTEGER   CreationTime;
+    LARGE_INTEGER   LastAccessTime;
+    LARGE_INTEGER   LastWriteTime;
+    LARGE_INTEGER   ChangeTime;
+    LARGE_INTEGER   AllocationSize;
+    LARGE_INTEGER   EndOfFile;
+    ULONG           FileAttributes;
+    ULONG           ReparseTag;
+    ULONG           NumberOfLinks;
+    ACCESS_MASK     EffectiveAccess;
+    ULONG           LxFlags;
+    ULONG           LxUid;
+    ULONG           LxGid;
+    ULONG           LxMode;
+    ULONG           LxDeviceIdMajor;
+    ULONG           LxDeviceIdMinor;
+} FILE_STAT_LX_INFORMATION;
+typedef FILE_STAT_LX_INFORMATION *PFILE_STAT_LX_INFORMATION;
+typedef struct _FILE_CASE_SENSITIVE_INFORMATION
+{
+    ULONG           Flags;
+} FILE_CASE_SENSITIVE_INFORMATION;
+typedef FILE_CASE_SENSITIVE_INFORMATION *PFILE_CASE_SENSITIVE_INFORMATION;
+
 typedef enum _FILE_INFORMATION_CLASS
 {
Index: /trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp
===================================================================
--- /trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp	(revision 78485)
+++ /trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp	(revision 78486)
@@ -273,4 +273,10 @@
     kCmdOpt_FStat,
     kCmdOpt_NoFStat,
+#ifdef RT_OS_WINDOWS
+    kCmdOpt_NtQueryInfoFile,
+    kCmdOpt_NoNtQueryInfoFile,
+    kCmdOpt_NtQueryVolInfoFile,
+    kCmdOpt_NoNtQueryVolInfoFile,
+#endif
     kCmdOpt_FChMod,
     kCmdOpt_NoFChMod,
@@ -348,89 +354,95 @@
 static const RTGETOPTDEF g_aCmdOptions[] =
 {
-    { "--dir",              'd', RTGETOPT_REQ_STRING  },
-    { "--relative-dir",     'r', RTGETOPT_REQ_NOTHING },
-    { "--comms-dir",        'c', RTGETOPT_REQ_STRING  },
-    { "--comms-slave",      'C', RTGETOPT_REQ_NOTHING },
-    { "--seconds",          's', RTGETOPT_REQ_UINT32  },
-    { "--milliseconds",     'm', RTGETOPT_REQ_UINT64  },
-
-    { "--enable-all",       'e', RTGETOPT_REQ_NOTHING },
-    { "--disable-all",      'z', RTGETOPT_REQ_NOTHING },
-
-    { "--many-files",       kCmdOpt_ManyFiles,              RTGETOPT_REQ_UINT32 },
-    { "--no-many-files",    kCmdOpt_NoManyFiles,            RTGETOPT_REQ_NOTHING },
-    { "--files-per-dir",    kCmdOpt_ManyTreeFilesPerDir,    RTGETOPT_REQ_UINT32 },
-    { "--subdirs-per-dir",  kCmdOpt_ManyTreeSubdirsPerDir,  RTGETOPT_REQ_UINT32 },
-    { "--tree-depth",       kCmdOpt_ManyTreeDepth,          RTGETOPT_REQ_UINT32 },
-
-    { "--open",             kCmdOpt_Open,           RTGETOPT_REQ_NOTHING },
-    { "--no-open",          kCmdOpt_NoOpen,         RTGETOPT_REQ_NOTHING },
-    { "--fstat",            kCmdOpt_FStat,          RTGETOPT_REQ_NOTHING },
-    { "--no-fstat",         kCmdOpt_NoFStat,        RTGETOPT_REQ_NOTHING },
-    { "--fchmod",           kCmdOpt_FChMod,         RTGETOPT_REQ_NOTHING },
-    { "--no-fchmod",        kCmdOpt_NoFChMod,       RTGETOPT_REQ_NOTHING },
-    { "--futimes",          kCmdOpt_FUtimes,        RTGETOPT_REQ_NOTHING },
-    { "--no-futimes",       kCmdOpt_NoFUtimes,      RTGETOPT_REQ_NOTHING },
-    { "--stat",             kCmdOpt_Stat,           RTGETOPT_REQ_NOTHING },
-    { "--no-stat",          kCmdOpt_NoStat,         RTGETOPT_REQ_NOTHING },
-    { "--chmod",            kCmdOpt_ChMod,          RTGETOPT_REQ_NOTHING },
-    { "--no-chmod",         kCmdOpt_NoChMod,        RTGETOPT_REQ_NOTHING },
-    { "--utimes",           kCmdOpt_Utimes,         RTGETOPT_REQ_NOTHING },
-    { "--no-utimes",        kCmdOpt_NoUtimes,       RTGETOPT_REQ_NOTHING },
-    { "--rename",           kCmdOpt_Rename,         RTGETOPT_REQ_NOTHING },
-    { "--no-rename",        kCmdOpt_NoRename,       RTGETOPT_REQ_NOTHING },
-    { "--dir-open",         kCmdOpt_DirOpen,        RTGETOPT_REQ_NOTHING },
-    { "--no-dir-open",      kCmdOpt_NoDirOpen,      RTGETOPT_REQ_NOTHING },
-    { "--dir-enum",         kCmdOpt_DirEnum,        RTGETOPT_REQ_NOTHING },
-    { "--no-dir-enum",      kCmdOpt_NoDirEnum,      RTGETOPT_REQ_NOTHING },
-    { "--mk-rm-dir",        kCmdOpt_MkRmDir,        RTGETOPT_REQ_NOTHING },
-    { "--no-mk-rm-dir",     kCmdOpt_NoMkRmDir,      RTGETOPT_REQ_NOTHING },
-    { "--stat-vfs",         kCmdOpt_StatVfs,        RTGETOPT_REQ_NOTHING },
-    { "--no-stat-vfs",      kCmdOpt_NoStatVfs,      RTGETOPT_REQ_NOTHING },
-    { "--rm",               kCmdOpt_Rm,             RTGETOPT_REQ_NOTHING },
-    { "--no-rm",            kCmdOpt_NoRm,           RTGETOPT_REQ_NOTHING },
-    { "--chsize",           kCmdOpt_ChSize,         RTGETOPT_REQ_NOTHING },
-    { "--no-chsize",        kCmdOpt_NoChSize,       RTGETOPT_REQ_NOTHING },
-    { "--read-tests",       kCmdOpt_ReadTests,      RTGETOPT_REQ_NOTHING },
-    { "--no-read-tests",    kCmdOpt_NoReadTests,    RTGETOPT_REQ_NOTHING },
-    { "--read-perf",        kCmdOpt_ReadPerf,       RTGETOPT_REQ_NOTHING },
-    { "--no-read-perf",     kCmdOpt_NoReadPerf,     RTGETOPT_REQ_NOTHING },
+    { "--dir",                      'd',                            RTGETOPT_REQ_STRING  },
+    { "--relative-dir",             'r',                            RTGETOPT_REQ_NOTHING },
+    { "--comms-dir",                'c',                            RTGETOPT_REQ_STRING  },
+    { "--comms-slave",              'C',                            RTGETOPT_REQ_NOTHING },
+    { "--seconds",                  's',                            RTGETOPT_REQ_UINT32  },
+    { "--milliseconds",             'm',                            RTGETOPT_REQ_UINT64  },
+
+    { "--enable-all",               'e',                            RTGETOPT_REQ_NOTHING },
+    { "--disable-all",              'z',                            RTGETOPT_REQ_NOTHING },
+
+    { "--many-files",               kCmdOpt_ManyFiles,              RTGETOPT_REQ_UINT32 },
+    { "--no-many-files",            kCmdOpt_NoManyFiles,            RTGETOPT_REQ_NOTHING },
+    { "--files-per-dir",            kCmdOpt_ManyTreeFilesPerDir,    RTGETOPT_REQ_UINT32 },
+    { "--subdirs-per-dir",          kCmdOpt_ManyTreeSubdirsPerDir,  RTGETOPT_REQ_UINT32 },
+    { "--tree-depth",               kCmdOpt_ManyTreeDepth,          RTGETOPT_REQ_UINT32 },
+
+    { "--open",                     kCmdOpt_Open,                   RTGETOPT_REQ_NOTHING },
+    { "--no-open",                  kCmdOpt_NoOpen,                 RTGETOPT_REQ_NOTHING },
+    { "--fstat",                    kCmdOpt_FStat,                  RTGETOPT_REQ_NOTHING },
+    { "--no-fstat",                 kCmdOpt_NoFStat,                RTGETOPT_REQ_NOTHING },
+#ifdef RT_OS_WINDOWS
+    { "--nt-query-info-file",       kCmdOpt_NtQueryInfoFile,        RTGETOPT_REQ_NOTHING },
+    { "--no-nt-query-info-file",    kCmdOpt_NoNtQueryInfoFile,      RTGETOPT_REQ_NOTHING },
+    { "--nt-query-vol-info-file",   kCmdOpt_NtQueryVolInfoFile,     RTGETOPT_REQ_NOTHING },
+    { "--no-nt-query-vol-info-file",kCmdOpt_NoNtQueryVolInfoFile,   RTGETOPT_REQ_NOTHING },
+#endif
+    { "--fchmod",                   kCmdOpt_FChMod,                 RTGETOPT_REQ_NOTHING },
+    { "--no-fchmod",                kCmdOpt_NoFChMod,               RTGETOPT_REQ_NOTHING },
+    { "--futimes",                  kCmdOpt_FUtimes,                RTGETOPT_REQ_NOTHING },
+    { "--no-futimes",               kCmdOpt_NoFUtimes,              RTGETOPT_REQ_NOTHING },
+    { "--stat",                     kCmdOpt_Stat,                   RTGETOPT_REQ_NOTHING },
+    { "--no-stat",                  kCmdOpt_NoStat,                 RTGETOPT_REQ_NOTHING },
+    { "--chmod",                    kCmdOpt_ChMod,                  RTGETOPT_REQ_NOTHING },
+    { "--no-chmod",                 kCmdOpt_NoChMod,                RTGETOPT_REQ_NOTHING },
+    { "--utimes",                   kCmdOpt_Utimes,                 RTGETOPT_REQ_NOTHING },
+    { "--no-utimes",                kCmdOpt_NoUtimes,               RTGETOPT_REQ_NOTHING },
+    { "--rename",                   kCmdOpt_Rename,                 RTGETOPT_REQ_NOTHING },
+    { "--no-rename",                kCmdOpt_NoRename,               RTGETOPT_REQ_NOTHING },
+    { "--dir-open",                 kCmdOpt_DirOpen,                RTGETOPT_REQ_NOTHING },
+    { "--no-dir-open",              kCmdOpt_NoDirOpen,              RTGETOPT_REQ_NOTHING },
+    { "--dir-enum",                 kCmdOpt_DirEnum,                RTGETOPT_REQ_NOTHING },
+    { "--no-dir-enum",              kCmdOpt_NoDirEnum,              RTGETOPT_REQ_NOTHING },
+    { "--mk-rm-dir",                kCmdOpt_MkRmDir,                RTGETOPT_REQ_NOTHING },
+    { "--no-mk-rm-dir",             kCmdOpt_NoMkRmDir,              RTGETOPT_REQ_NOTHING },
+    { "--stat-vfs",                 kCmdOpt_StatVfs,                RTGETOPT_REQ_NOTHING },
+    { "--no-stat-vfs",              kCmdOpt_NoStatVfs,              RTGETOPT_REQ_NOTHING },
+    { "--rm",                       kCmdOpt_Rm,                     RTGETOPT_REQ_NOTHING },
+    { "--no-rm",                    kCmdOpt_NoRm,                   RTGETOPT_REQ_NOTHING },
+    { "--chsize",                   kCmdOpt_ChSize,                 RTGETOPT_REQ_NOTHING },
+    { "--no-chsize",                kCmdOpt_NoChSize,               RTGETOPT_REQ_NOTHING },
+    { "--read-tests",               kCmdOpt_ReadTests,              RTGETOPT_REQ_NOTHING },
+    { "--no-read-tests",            kCmdOpt_NoReadTests,            RTGETOPT_REQ_NOTHING },
+    { "--read-perf",                kCmdOpt_ReadPerf,               RTGETOPT_REQ_NOTHING },
+    { "--no-read-perf",             kCmdOpt_NoReadPerf,             RTGETOPT_REQ_NOTHING },
 #ifdef FSPERF_TEST_SENDFILE
-    { "--sendfile",         kCmdOpt_SendFile,       RTGETOPT_REQ_NOTHING },
-    { "--no-sendfile",      kCmdOpt_NoSendFile,     RTGETOPT_REQ_NOTHING },
+    { "--sendfile",                 kCmdOpt_SendFile,               RTGETOPT_REQ_NOTHING },
+    { "--no-sendfile",              kCmdOpt_NoSendFile,             RTGETOPT_REQ_NOTHING },
 #endif
 #ifdef RT_OS_LINUX
-    { "--splice",           kCmdOpt_Splice,         RTGETOPT_REQ_NOTHING },
-    { "--no-splice",        kCmdOpt_NoSplice,       RTGETOPT_REQ_NOTHING },
+    { "--splice",                   kCmdOpt_Splice,                 RTGETOPT_REQ_NOTHING },
+    { "--no-splice",                kCmdOpt_NoSplice,               RTGETOPT_REQ_NOTHING },
 #endif
-    { "--write-tests",      kCmdOpt_WriteTests,     RTGETOPT_REQ_NOTHING },
-    { "--no-write-tests",   kCmdOpt_NoWriteTests,   RTGETOPT_REQ_NOTHING },
-    { "--write-perf",       kCmdOpt_WritePerf,      RTGETOPT_REQ_NOTHING },
-    { "--no-write-perf",    kCmdOpt_NoWritePerf,    RTGETOPT_REQ_NOTHING },
-    { "--seek",             kCmdOpt_Seek,           RTGETOPT_REQ_NOTHING },
-    { "--no-seek",          kCmdOpt_NoSeek,         RTGETOPT_REQ_NOTHING },
-    { "--fsync",            kCmdOpt_FSync,          RTGETOPT_REQ_NOTHING },
-    { "--no-fsync",         kCmdOpt_NoFSync,        RTGETOPT_REQ_NOTHING },
-    { "--mmap",             kCmdOpt_MMap,           RTGETOPT_REQ_NOTHING },
-    { "--no-mmap",          kCmdOpt_NoMMap,         RTGETOPT_REQ_NOTHING },
-    { "--ignore-no-cache",  kCmdOpt_IgnoreNoCache,  RTGETOPT_REQ_NOTHING },
-    { "--no-ignore-no-cache",  kCmdOpt_NoIgnoreNoCache,  RTGETOPT_REQ_NOTHING },
-    { "--io-file-size",     kCmdOpt_IoFileSize,     RTGETOPT_REQ_UINT64 },
-    { "--set-block-size",   kCmdOpt_SetBlockSize,   RTGETOPT_REQ_UINT32 },
-    { "--add-block-size",   kCmdOpt_AddBlockSize,   RTGETOPT_REQ_UINT32 },
-    { "--copy",             kCmdOpt_Copy,           RTGETOPT_REQ_NOTHING },
-    { "--no-copy",          kCmdOpt_NoCopy,         RTGETOPT_REQ_NOTHING },
-    { "--remote",           kCmdOpt_Remote,         RTGETOPT_REQ_NOTHING },
-    { "--no-remote",        kCmdOpt_NoRemote,       RTGETOPT_REQ_NOTHING },
-
-    { "--show-duration",        kCmdOpt_ShowDuration,       RTGETOPT_REQ_NOTHING },
-    { "--no-show-duration",     kCmdOpt_NoShowDuration,     RTGETOPT_REQ_NOTHING },
-    { "--show-iterations",      kCmdOpt_ShowIterations,     RTGETOPT_REQ_NOTHING },
-    { "--no-show-iterations",   kCmdOpt_NoShowIterations,   RTGETOPT_REQ_NOTHING },
-
-    { "--quiet",                'q', RTGETOPT_REQ_NOTHING },
-    { "--verbose",              'v', RTGETOPT_REQ_NOTHING },
-    { "--version",              'V', RTGETOPT_REQ_NOTHING },
-    { "--help",                 'h', RTGETOPT_REQ_NOTHING } /* for Usage() */
+    { "--write-tests",              kCmdOpt_WriteTests,             RTGETOPT_REQ_NOTHING },
+    { "--no-write-tests",           kCmdOpt_NoWriteTests,           RTGETOPT_REQ_NOTHING },
+    { "--write-perf",               kCmdOpt_WritePerf,              RTGETOPT_REQ_NOTHING },
+    { "--no-write-perf",            kCmdOpt_NoWritePerf,            RTGETOPT_REQ_NOTHING },
+    { "--seek",                     kCmdOpt_Seek,                   RTGETOPT_REQ_NOTHING },
+    { "--no-seek",                  kCmdOpt_NoSeek,                 RTGETOPT_REQ_NOTHING },
+    { "--fsync",                    kCmdOpt_FSync,                  RTGETOPT_REQ_NOTHING },
+    { "--no-fsync",                 kCmdOpt_NoFSync,                RTGETOPT_REQ_NOTHING },
+    { "--mmap",                     kCmdOpt_MMap,                   RTGETOPT_REQ_NOTHING },
+    { "--no-mmap",                  kCmdOpt_NoMMap,                 RTGETOPT_REQ_NOTHING },
+    { "--ignore-no-cache",          kCmdOpt_IgnoreNoCache,          RTGETOPT_REQ_NOTHING },
+    { "--no-ignore-no-cache",       kCmdOpt_NoIgnoreNoCache,        RTGETOPT_REQ_NOTHING },
+    { "--io-file-size",             kCmdOpt_IoFileSize,             RTGETOPT_REQ_UINT64 },
+    { "--set-block-size",           kCmdOpt_SetBlockSize,           RTGETOPT_REQ_UINT32 },
+    { "--add-block-size",           kCmdOpt_AddBlockSize,           RTGETOPT_REQ_UINT32 },
+    { "--copy",                     kCmdOpt_Copy,                   RTGETOPT_REQ_NOTHING },
+    { "--no-copy",                  kCmdOpt_NoCopy,                 RTGETOPT_REQ_NOTHING },
+    { "--remote",                   kCmdOpt_Remote,                 RTGETOPT_REQ_NOTHING },
+    { "--no-remote",                kCmdOpt_NoRemote,               RTGETOPT_REQ_NOTHING },
+
+    { "--show-duration",            kCmdOpt_ShowDuration,           RTGETOPT_REQ_NOTHING },
+    { "--no-show-duration",         kCmdOpt_NoShowDuration,         RTGETOPT_REQ_NOTHING },
+    { "--show-iterations",          kCmdOpt_ShowIterations,         RTGETOPT_REQ_NOTHING },
+    { "--no-show-iterations",       kCmdOpt_NoShowIterations,       RTGETOPT_REQ_NOTHING },
+
+    { "--quiet",                    'q',                            RTGETOPT_REQ_NOTHING },
+    { "--verbose",                  'v',                            RTGETOPT_REQ_NOTHING },
+    { "--version",                  'V',                            RTGETOPT_REQ_NOTHING },
+    { "--help",                     'h',                            RTGETOPT_REQ_NOTHING } /* for Usage() */
 };
 
@@ -451,34 +463,38 @@
 /** @name Selected subtest
  * @{ */
-static bool         g_fManyFiles = true;
-static bool         g_fOpen      = true;
-static bool         g_fFStat     = true;
-static bool         g_fFChMod    = true;
-static bool         g_fFUtimes   = true;
-static bool         g_fStat      = true;
-static bool         g_fChMod     = true;
-static bool         g_fUtimes    = true;
-static bool         g_fRename    = true;
-static bool         g_fDirOpen   = true;
-static bool         g_fDirEnum   = true;
-static bool         g_fMkRmDir   = true;
-static bool         g_fStatVfs   = true;
-static bool         g_fRm        = true;
-static bool         g_fChSize    = true;
-static bool         g_fReadTests = true;
-static bool         g_fReadPerf  = true;
+static bool         g_fManyFiles            = true;
+static bool         g_fOpen                 = true;
+static bool         g_fFStat                = true;
+#ifdef RT_OS_WINDOWS
+static bool         g_fNtQueryInfoFile      = true;
+static bool         g_fNtQueryVolInfoFile   = true;
+#endif
+static bool         g_fFChMod               = true;
+static bool         g_fFUtimes              = true;
+static bool         g_fStat                 = true;
+static bool         g_fChMod                = true;
+static bool         g_fUtimes               = true;
+static bool         g_fRename               = true;
+static bool         g_fDirOpen              = true;
+static bool         g_fDirEnum              = true;
+static bool         g_fMkRmDir              = true;
+static bool         g_fStatVfs              = true;
+static bool         g_fRm                   = true;
+static bool         g_fChSize               = true;
+static bool         g_fReadTests            = true;
+static bool         g_fReadPerf             = true;
 #ifdef FSPERF_TEST_SENDFILE
-static bool         g_fSendFile  = true;
+static bool         g_fSendFile             = true;
 #endif
 #ifdef RT_OS_LINUX
-static bool         g_fSplice    = true;
+static bool         g_fSplice               = true;
 #endif
-static bool         g_fWriteTests= true;
-static bool         g_fWritePerf = true;
-static bool         g_fSeek      = true;
-static bool         g_fFSync     = true;
-static bool         g_fMMap      = true;
-static bool         g_fCopy      = true;
-static bool         g_fRemote    = true;
+static bool         g_fWriteTests           = true;
+static bool         g_fWritePerf            = true;
+static bool         g_fSeek                 = true;
+static bool         g_fFSync                = true;
+static bool         g_fMMap                 = true;
+static bool         g_fCopy                 = true;
+static bool         g_fRemote               = true;
 /** @} */
 
@@ -2088,4 +2104,321 @@
 }
 
+#ifdef RT_OS_WINDOWS
+/**
+ * Nt(Query|Set|QueryDir)Information(File|) information class info.
+ */
+static const struct
+{
+    const char *pszName;
+    int         enmValue;
+    bool        fQuery;
+    bool        fSet;
+    bool        fQueryDir;
+    uint8_t     cbMin;
+} g_aNtQueryInfoFileClasses[] =
+{
+#define E(a_enmValue, a_fQuery, a_fSet, a_fQueryDir, a_cbMin) \
+        { #a_enmValue, a_enmValue, a_fQuery, a_fSet, a_fQueryDir, a_cbMin }
+    { "invalid0", 0, false, false, false, 0 },
+    E(FileDirectoryInformation,                      false, false, true,  sizeof(FILE_DIRECTORY_INFORMATION)),                   // 0x00, 0x00, 0x48
+    E(FileFullDirectoryInformation,                  false, false, true,  sizeof(FILE_FULL_DIR_INFORMATION)),                    // 0x00, 0x00, 0x48
+    E(FileBothDirectoryInformation,                  false, false, true,  sizeof(FILE_BOTH_DIR_INFORMATION)),                    // 0x00, 0x00, 0x60
+    E(FileBasicInformation,                          true,  true,  false, sizeof(FILE_BASIC_INFORMATION)),
+    E(FileStandardInformation,                       true,  false, false, sizeof(FILE_STANDARD_INFORMATION)),
+    E(FileInternalInformation,                       true,  false, false, sizeof(FILE_INTERNAL_INFORMATION)),
+    E(FileEaInformation,                             true,  false, false, sizeof(FILE_EA_INFORMATION)),
+    E(FileAccessInformation,                         true,  false, false, sizeof(FILE_ACCESS_INFORMATION)),
+    E(FileNameInformation,                           true,  false, false, sizeof(FILE_NAME_INFORMATION)),
+    E(FileRenameInformation,                         false, true,  false, sizeof(FILE_RENAME_INFORMATION)),
+    E(FileLinkInformation,                           false, true,  false, sizeof(FILE_LINK_INFORMATION)),
+    E(FileNamesInformation,                          false, false, true,  sizeof(FILE_NAMES_INFORMATION)),                       // 0x00, 0x00, 0x10
+    E(FileDispositionInformation,                    false, true,  false, sizeof(FILE_DISPOSITION_INFORMATION)),                 // 0x00, 0x01,
+    E(FilePositionInformation,                       true,  true,  false, sizeof(FILE_POSITION_INFORMATION)),                    // 0x08, 0x08,
+    E(FileFullEaInformation,                         false, false, false, sizeof(FILE_FULL_EA_INFORMATION)),                     // 0x00, 0x00,
+    E(FileModeInformation,                           true,  true,  false, sizeof(FILE_MODE_INFORMATION)),                        // 0x04, 0x04,
+    E(FileAlignmentInformation,                      true,  false, false, sizeof(FILE_ALIGNMENT_INFORMATION)),                   // 0x04, 0x00,
+    E(FileAllInformation,                            true,  false, false, sizeof(FILE_ALL_INFORMATION)),                         // 0x68, 0x00,
+    E(FileAllocationInformation,                     false, true,  false, sizeof(FILE_ALLOCATION_INFORMATION)),                  // 0x00, 0x08,
+    E(FileEndOfFileInformation,                      false, true,  false, sizeof(FILE_END_OF_FILE_INFORMATION)),                 // 0x00, 0x08,
+    E(FileAlternateNameInformation,                  true,  false, false, sizeof(FILE_NAME_INFORMATION)),                        // 0x08, 0x00,
+    E(FileStreamInformation,                         true,  false, false, sizeof(FILE_STREAM_INFORMATION)),                      // 0x20, 0x00,
+    E(FilePipeInformation,                           true,  true,  false, sizeof(FILE_PIPE_INFORMATION)),                        // 0x08, 0x08,
+    E(FilePipeLocalInformation,                      true,  false, false, sizeof(FILE_PIPE_LOCAL_INFORMATION)),                  // 0x28, 0x00,
+    E(FilePipeRemoteInformation,                     true,  true,  false, sizeof(FILE_PIPE_REMOTE_INFORMATION)),                 // 0x10, 0x10,
+    E(FileMailslotQueryInformation,                  true,  false, false, sizeof(FILE_MAILSLOT_QUERY_INFORMATION)),              // 0x18, 0x00,
+    E(FileMailslotSetInformation,                    false, true,  false, sizeof(FILE_MAILSLOT_SET_INFORMATION)),                // 0x00, 0x08,
+    E(FileCompressionInformation,                    true,  false, false, sizeof(FILE_COMPRESSION_INFORMATION)),                 // 0x10, 0x00,
+    E(FileObjectIdInformation,                       true,  true,  true,  sizeof(FILE_OBJECTID_INFORMATION)),                    // 0x48, 0x48,
+    E(FileCompletionInformation,                     false, true,  false, sizeof(FILE_COMPLETION_INFORMATION)),                  // 0x00, 0x10,
+    E(FileMoveClusterInformation,                    false, true,  false, sizeof(FILE_MOVE_CLUSTER_INFORMATION)),                // 0x00, 0x18,
+    E(FileQuotaInformation,                          true,  true,  true,  sizeof(FILE_QUOTA_INFORMATION)),                       // 0x38, 0x38, 0x38
+    E(FileReparsePointInformation,                   true,  false, true,  sizeof(FILE_REPARSE_POINT_INFORMATION)),               // 0x10, 0x00, 0x10
+    E(FileNetworkOpenInformation,                    true,  false, false, sizeof(FILE_NETWORK_OPEN_INFORMATION)),                // 0x38, 0x00,
+    E(FileAttributeTagInformation,                   true,  false, false, sizeof(FILE_ATTRIBUTE_TAG_INFORMATION)),               // 0x08, 0x00,
+    E(FileTrackingInformation,                       false, true,  false, sizeof(FILE_TRACKING_INFORMATION)),                    // 0x00, 0x10,
+    E(FileIdBothDirectoryInformation,                false, false, true,  sizeof(FILE_ID_BOTH_DIR_INFORMATION)),                 // 0x00, 0x00, 0x70
+    E(FileIdFullDirectoryInformation,                false, false, true,  sizeof(FILE_ID_FULL_DIR_INFORMATION)),                 // 0x00, 0x00, 0x58
+    E(FileValidDataLengthInformation,                false, true,  false, sizeof(FILE_VALID_DATA_LENGTH_INFORMATION)),           // 0x00, 0x08,
+    E(FileShortNameInformation,                      false, true,  false, sizeof(FILE_NAME_INFORMATION)),                        // 0x00, 0x08,
+    E(FileIoCompletionNotificationInformation,       true,  true,  false, sizeof(FILE_IO_COMPLETION_NOTIFICATION_INFORMATION)),  // 0x04, 0x04,
+    E(FileIoStatusBlockRangeInformation,             false, true,  false, sizeof(IO_STATUS_BLOCK) /*?*/),                        // 0x00, 0x10,
+    E(FileIoPriorityHintInformation,                 true,  true,  false, sizeof(FILE_IO_PRIORITY_HINT_INFORMATION)),            // 0x04, 0x04,
+    E(FileSfioReserveInformation,                    true,  true,  false, sizeof(FILE_SFIO_RESERVE_INFORMATION)),                // 0x14, 0x14,
+    E(FileSfioVolumeInformation,                     true,  false, false, sizeof(FILE_SFIO_VOLUME_INFORMATION)),                 // 0x0C, 0x00,
+    E(FileHardLinkInformation,                       true,  false, false, sizeof(FILE_LINKS_INFORMATION)),                       // 0x20, 0x00,
+    E(FileProcessIdsUsingFileInformation,            true,  false, false, sizeof(FILE_PROCESS_IDS_USING_FILE_INFORMATION)),      // 0x10, 0x00,
+    E(FileNormalizedNameInformation,                 true,  false, false, sizeof(FILE_NAME_INFORMATION)),                        // 0x08, 0x00,
+    E(FileNetworkPhysicalNameInformation,            true,  false, false, sizeof(FILE_NETWORK_PHYSICAL_NAME_INFORMATION)),       // 0x08, 0x00,
+    E(FileIdGlobalTxDirectoryInformation,            false, false, true,  sizeof(FILE_ID_GLOBAL_TX_DIR_INFORMATION)),            // 0x00, 0x00, 0x60
+    E(FileIsRemoteDeviceInformation,                 true,  false, false, sizeof(FILE_IS_REMOTE_DEVICE_INFORMATION)),            // 0x01, 0x00,
+    E(FileUnusedInformation,                         false, false, false, 0),                                                    // 0x00, 0x00,
+    E(FileNumaNodeInformation,                       true,  false, false, sizeof(FILE_NUMA_NODE_INFORMATION)),                   // 0x02, 0x00,
+    E(FileStandardLinkInformation,                   true,  false, false, sizeof(FILE_STANDARD_LINK_INFORMATION)),               // 0x0C, 0x00,
+    E(FileRemoteProtocolInformation,                 true,  false, false, sizeof(FILE_REMOTE_PROTOCOL_INFORMATION)),             // 0x74, 0x00,
+    E(FileRenameInformationBypassAccessCheck,        false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
+    E(FileLinkInformationBypassAccessCheck,          false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
+    E(FileVolumeNameInformation,                     true,  false, false, sizeof(FILE_VOLUME_NAME_INFORMATION)),                 // 0x08, 0x00,
+    E(FileIdInformation,                             true,  false, false, sizeof(FILE_ID_INFORMATION)),                          // 0x18, 0x00,
+    E(FileIdExtdDirectoryInformation,                false, false, true,  sizeof(FILE_ID_EXTD_DIR_INFORMATION)),                 // 0x00, 0x00, 0x60
+    E(FileReplaceCompletionInformation,              false, true,  false, sizeof(FILE_COMPLETION_INFORMATION)),                  // 0x00, 0x10,
+    E(FileHardLinkFullIdInformation,                 true,  false, false, sizeof(FILE_LINK_ENTRY_FULL_ID_INFORMATION)),          // 0x24, 0x00,
+    E(FileIdExtdBothDirectoryInformation,            false, false, true,  sizeof(FILE_ID_EXTD_BOTH_DIR_INFORMATION)),            // 0x00, 0x00, 0x78
+    E(FileDispositionInformationEx,                  false, true,  false, sizeof(FILE_DISPOSITION_INFORMATION_EX)),              // 0x00, 0x04,
+    E(FileRenameInformationEx,                       false, true,  false, sizeof(FILE_RENAME_INFORMATION)),                      // 0x00, 0x18,
+    E(FileRenameInformationExBypassAccessCheck,      false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
+    E(FileDesiredStorageClassInformation,            true,  true,  false, sizeof(FILE_DESIRED_STORAGE_CLASS_INFORMATION)),       // 0x08, 0x08,
+    E(FileStatInformation,                           true,  false, false, sizeof(FILE_STAT_INFORMATION)),                        // 0x48, 0x00,
+    E(FileMemoryPartitionInformation,                false, true,  false, 0x10),                                                 // 0x00, 0x10,
+    E(FileStatLxInformation,                         true,  false, false, sizeof(FILE_STAT_LX_INFORMATION)),                     // 0x60, 0x00,
+    E(FileCaseSensitiveInformation,                  true,  true,  false, sizeof(FILE_CASE_SENSITIVE_INFORMATION)),              // 0x04, 0x04,
+    E(FileLinkInformationEx,                         false, true,  false, sizeof(FILE_LINK_INFORMATION)),                        // 0x00, 0x18,
+    E(FileLinkInformationExBypassAccessCheck,        false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
+    E(FileStorageReserveIdInformation,               true,  true,  false, 0x04),                                                 // 0x04, 0x04,
+    E(FileCaseSensitiveInformationForceAccessCheck,  true,  true,  false, sizeof(FILE_CASE_SENSITIVE_INFORMATION)),              // 0x04, 0x04,
+#undef E
+};
+
+void fsPerfNtQueryInfoFileWorker(HANDLE hNtFile1)
+{
+    /** @todo may run out of buffer for really long paths? */
+    union
+    {
+        uint8_t                                     ab[4096];
+        FILE_ACCESS_INFORMATION                     Access;
+        FILE_ALIGNMENT_INFORMATION                  Align;
+        FILE_ALL_INFORMATION                        All;
+        FILE_ALLOCATION_INFORMATION                 Alloc;
+        FILE_ATTRIBUTE_TAG_INFORMATION              AttribTag;
+        FILE_BASIC_INFORMATION                      Basic;
+        FILE_BOTH_DIR_INFORMATION                   BothDir;
+        FILE_CASE_SENSITIVE_INFORMATION             CaseSensitivity;
+        FILE_COMPLETION_INFORMATION                 Completion;
+        FILE_COMPRESSION_INFORMATION                Compression;
+        FILE_DESIRED_STORAGE_CLASS_INFORMATION      StorageClass;
+        FILE_DIRECTORY_INFORMATION                  Dir;
+        FILE_DISPOSITION_INFORMATION                Disp;
+        FILE_DISPOSITION_INFORMATION_EX             DispEx;
+        FILE_EA_INFORMATION                         Ea;
+        FILE_END_OF_FILE_INFORMATION                EndOfFile;
+        FILE_FULL_DIR_INFORMATION                   FullDir;
+        FILE_FULL_EA_INFORMATION                    FullEa;
+        FILE_ID_BOTH_DIR_INFORMATION                IdBothDir;
+        FILE_ID_EXTD_BOTH_DIR_INFORMATION           ExtIdBothDir;
+        FILE_ID_EXTD_DIR_INFORMATION                ExtIdDir;
+        FILE_ID_FULL_DIR_INFORMATION                IdFullDir;
+        FILE_ID_GLOBAL_TX_DIR_INFORMATION           IdGlobalTx;
+        FILE_ID_INFORMATION                         IdInfo;
+        FILE_INTERNAL_INFORMATION                   Internal;
+        FILE_IO_COMPLETION_NOTIFICATION_INFORMATION IoCompletion;
+        FILE_IO_PRIORITY_HINT_INFORMATION           IoPrioHint;
+        FILE_IS_REMOTE_DEVICE_INFORMATION           IsRemoteDev;
+        FILE_LINK_ENTRY_FULL_ID_INFORMATION         LinkFullId;
+        FILE_LINK_INFORMATION                       Link;
+        FILE_MAILSLOT_QUERY_INFORMATION             MailslotQuery;
+        FILE_MAILSLOT_SET_INFORMATION               MailslotSet;
+        FILE_MODE_INFORMATION                       Mode;
+        FILE_MOVE_CLUSTER_INFORMATION               MoveCluster;
+        FILE_NAME_INFORMATION                       Name;
+        FILE_NAMES_INFORMATION                      Names;
+        FILE_NETWORK_OPEN_INFORMATION               NetOpen;
+        FILE_NUMA_NODE_INFORMATION                  Numa;
+        FILE_OBJECTID_INFORMATION                   ObjId;
+        FILE_PIPE_INFORMATION                       Pipe;
+        FILE_PIPE_LOCAL_INFORMATION                 PipeLocal;
+        FILE_PIPE_REMOTE_INFORMATION                PipeRemote;
+        FILE_POSITION_INFORMATION                   Pos;
+        FILE_PROCESS_IDS_USING_FILE_INFORMATION     Pids;
+        FILE_QUOTA_INFORMATION                      Quota;
+        FILE_REMOTE_PROTOCOL_INFORMATION            RemoteProt;
+        FILE_RENAME_INFORMATION                     Rename;
+        FILE_REPARSE_POINT_INFORMATION              Reparse;
+        FILE_SFIO_RESERVE_INFORMATION               SfiRes;
+        FILE_SFIO_VOLUME_INFORMATION                SfioVol;
+        FILE_STANDARD_INFORMATION                   Std;
+        FILE_STANDARD_LINK_INFORMATION              StdLink;
+        FILE_STAT_INFORMATION                       Stat;
+        FILE_STAT_LX_INFORMATION                    StatLx;
+        FILE_STREAM_INFORMATION                     Stream;
+        FILE_TRACKING_INFORMATION                   Tracking;
+        FILE_VALID_DATA_LENGTH_INFORMATION          ValidDataLen;
+        FILE_VOLUME_NAME_INFORMATION                VolName;
+    } uBuf;
+
+    IO_STATUS_BLOCK const VirginIos = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+    for (unsigned i = 0; i < RT_ELEMENTS(g_aNtQueryInfoFileClasses); i++)
+    {
+        FILE_INFORMATION_CLASS const enmClass = (FILE_INFORMATION_CLASS)g_aNtQueryInfoFileClasses[i].enmValue;
+        const char * const           pszClass = g_aNtQueryInfoFileClasses[i].pszName;
+
+        memset(&uBuf, 0xff, sizeof(uBuf));
+        IO_STATUS_BLOCK Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+        ULONG           cbBuf = sizeof(uBuf);
+        NTSTATUS rcNt = NtQueryInformationFile(hNtFile1, &Ios, &uBuf, cbBuf, enmClass);
+        if (NT_SUCCESS(rcNt))
+        {
+            if (Ios.Status == VirginIos.Status || Ios.Information == VirginIos.Information)
+                RTTestIFailed("%s/%#x: I/O status block was not modified: %#x %#zx", pszClass, cbBuf, Ios.Status, Ios.Information);
+            else if (!g_aNtQueryInfoFileClasses[i].fQuery)
+                RTTestIFailed("%s/%#x: This isn't supposed to be queriable! (rcNt=%#x)", pszClass, cbBuf, rcNt);
+            else
+            {
+                ULONG const cbActualMin = enmClass != FileStorageReserveIdInformation ? Ios.Information : 4; /* weird */
+
+                switch (enmClass)
+                {
+                    case FileNameInformation:
+                    case FileAlternateNameInformation:
+                    case FileShortNameInformation:
+                    case FileNormalizedNameInformation:
+                    case FileNetworkPhysicalNameInformation:
+                        if (   RT_UOFFSETOF_DYN(FILE_NAME_INFORMATION, FileName[uBuf.Name.FileNameLength / sizeof(WCHAR)])
+                            != cbActualMin)
+                            RTTestIFailed("%s/%#x: Wrong FileNameLength=%#x vs cbActual=%#x",
+                                          pszClass, cbActualMin, uBuf.Name.FileNameLength, cbActualMin);
+                        if (uBuf.Name.FileName[uBuf.Name.FileNameLength  / sizeof(WCHAR) - 1] == '\0')
+                            RTTestIFailed("%s/%#x: Zero terminated name!", pszClass, cbActualMin);
+                        if (g_uVerbosity > 1)
+                            RTTestIPrintf(RTTESTLVL_ALWAYS, "%+34s/%#x: FileNameLength=%#x FileName='%.*ls'\n",
+                                          pszClass, cbActualMin, uBuf.Name.FileNameLength,
+                                          uBuf.Name.FileNameLength  / sizeof(WCHAR), uBuf.Name.FileName);
+                        break;
+
+                    case FileVolumeNameInformation:
+                        if (RT_UOFFSETOF_DYN(FILE_VOLUME_NAME_INFORMATION,
+                                             DeviceName[uBuf.VolName.DeviceNameLength / sizeof(WCHAR)]) != cbActualMin)
+                            RTTestIFailed("%s/%#x: Wrong DeviceNameLength=%#x vs cbActual=%#x",
+                                          pszClass, cbActualMin, uBuf.VolName.DeviceNameLength, cbActualMin);
+                        if (uBuf.VolName.DeviceName[uBuf.VolName.DeviceNameLength  / sizeof(WCHAR) - 1] == '\0')
+                            RTTestIFailed("%s/%#x: Zero terminated name!", pszClass, cbActualMin);
+                        if (g_uVerbosity > 1)
+                            RTTestIPrintf(RTTESTLVL_ALWAYS, "%+34s/%#x: DeviceNameLength=%#x DeviceName='%.*ls'\n",
+                                          pszClass, cbActualMin, uBuf.VolName.DeviceNameLength,
+                                          uBuf.VolName.DeviceNameLength / sizeof(WCHAR), uBuf.VolName.DeviceName);
+                        break;
+                    default:
+                        break;
+                }
+
+                ULONG const cbMin       = g_aNtQueryInfoFileClasses[i].cbMin;
+                ULONG const cbMax       = RT_MIN(cbActualMin + 64, sizeof(uBuf));
+                for (cbBuf = 0; cbBuf < cbMax; cbBuf++)
+                {
+                    memset(&uBuf, 0xfe, sizeof(uBuf));
+                    RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
+                    rcNt = NtQueryInformationFile(hNtFile1, &Ios, &uBuf, cbBuf, enmClass);
+                    if (!ASMMemIsAllU8(&uBuf.ab[cbBuf], sizeof(uBuf) - cbBuf, 0xfe))
+                        RTTestIFailed("%s/%#x: Touched memory beyond end of buffer (rcNt=%#x)", pszClass, cbBuf, rcNt);
+                    if (cbBuf < cbMin)
+                    {
+                        if (rcNt != STATUS_INFO_LENGTH_MISMATCH)
+                            RTTestIFailed("%s/%#x: %#x, expected STATUS_INFO_LENGTH_MISMATCH", pszClass, cbBuf, rcNt);
+                        if (Ios.Status != VirginIos.Status || Ios.Information != VirginIos.Information)
+                            RTTestIFailed("%s/%#x: I/O status block was modified (STATUS_INFO_LENGTH_MISMATCH): %#x %#zx",
+                                          pszClass, cbBuf, Ios.Status, Ios.Information);
+                    }
+                    else if (cbBuf < cbActualMin)
+                    {
+                        if (   rcNt != STATUS_BUFFER_OVERFLOW
+                            /* RDR2/w10 returns success if the buffer can hold exactly the share name: */
+                            && !(   rcNt == STATUS_SUCCESS
+                                 && enmClass == FileNetworkPhysicalNameInformation)
+                            )
+                            RTTestIFailed("%s/%#x: %#x, expected STATUS_BUFFER_OVERFLOW", pszClass, cbBuf, rcNt);
+                    }
+                    else
+                    {
+                        if (   !ASMMemIsAllU8(&uBuf.ab[cbActualMin], sizeof(uBuf) - cbActualMin, 0xfe)
+                            && enmClass != FileStorageReserveIdInformation /* NTFS bug? */ )
+                            RTTestIFailed("%s/%#x: Touched memory beyond returned length (cbActualMin=%#x, rcNt=%#x)",
+                                          pszClass, cbBuf, cbActualMin, rcNt);
+
+                    }
+                }
+            }
+        }
+        else
+        {
+            if (!g_aNtQueryInfoFileClasses[i].fQuery)
+            {
+                if (rcNt != STATUS_INVALID_INFO_CLASS)
+                    RTTestIFailed("%s/%#x: %#x, expected STATUS_INVALID_INFO_CLASS", pszClass, cbBuf, rcNt);
+            }
+            else if (   rcNt != STATUS_INVALID_INFO_CLASS
+                     && rcNt != STATUS_INVALID_PARAMETER
+                     && !(rcNt == STATUS_OBJECT_NAME_NOT_FOUND && enmClass == FileAlternateNameInformation)
+                     && !(   rcNt == STATUS_ACCESS_DENIED
+                          && (   enmClass == FileIoPriorityHintInformation
+                              || enmClass == FileSfioReserveInformation
+                              || enmClass == FileStatLxInformation))
+                     && !(rcNt == STATUS_NO_SUCH_DEVICE && enmClass == FileNumaNodeInformation)
+                     && !(    rcNt == STATUS_NOT_SUPPORTED /* RDR2/W10-17763 */
+                          &&  (   enmClass == FileMailslotQueryInformation
+                               || enmClass == FileObjectIdInformation
+                               || enmClass == FileReparsePointInformation
+                               || enmClass == FileSfioVolumeInformation
+                               || enmClass == FileHardLinkInformation
+                               || enmClass == FileStandardLinkInformation
+                               || enmClass == FileHardLinkFullIdInformation
+                               || enmClass == FileDesiredStorageClassInformation
+                               || enmClass == FileStatInformation
+                               || enmClass == FileCaseSensitiveInformation
+                               || enmClass == FileStorageReserveIdInformation
+                               || enmClass == FileCaseSensitiveInformationForceAccessCheck))
+                    )
+                RTTestIFailed("%s/%#x: %#x", pszClass, cbBuf, rcNt);
+            if (Ios.Status != VirginIos.Status || Ios.Information != VirginIos.Information)
+                RTTestIFailed("%s/%#x: I/O status block was modified: %#x %#zx", pszClass, cbBuf, Ios.Status, Ios.Information);
+            if (!ASMMemIsAllU8(&uBuf, sizeof(uBuf), 0xff))
+                RTTestIFailed("%s/%#x: Buffer was touched in failure case!", pszClass, cbBuf);
+        }
+    }
+}
+
+
+void fsPerfNtQueryInfoFile(void)
+{
+    RTTestISub("NtQueryInformationFile");
+
+    /* On a regular file: */
+    RTFILE hFile1;
+    RTTESTI_CHECK_RC_RETV(RTFileOpen(&hFile1, InDir(RT_STR_TUPLE("file2qif")),
+                                     RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_NONE | RTFILE_O_WRITE), VINF_SUCCESS);
+    fsPerfNtQueryInfoFileWorker((HANDLE)RTFileToNative(hFile1));
+    RTTESTI_CHECK_RC(RTFileClose(hFile1), VINF_SUCCESS);
+
+    /* On a directory: */
+    HANDLE hDir1 = INVALID_HANDLE_VALUE;
+    RTTESTI_CHECK_RC(RTNtPathOpenDir(InDir(RT_STR_TUPLE("")), GENERIC_READ,
+                                     FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                     FILE_OPEN, 0, &hDir1, NULL), VINF_SUCCESS);
+}
+
+
+void fsPerfNtQueryVolInfoFile(void)
+{
+    /** @todo */
+}
+
+#endif /* RT_OS_WINDOWS */
 
 void fsPerfFChMod(void)
@@ -5752,67 +6085,75 @@
 
             case 'e':
-                g_fManyFiles = true;
-                g_fOpen      = true;
-                g_fFStat     = true;
-                g_fFChMod    = true;
-                g_fFUtimes   = true;
-                g_fStat      = true;
-                g_fChMod     = true;
-                g_fUtimes    = true;
-                g_fRename    = true;
-                g_fDirOpen   = true;
-                g_fDirEnum   = true;
-                g_fMkRmDir   = true;
-                g_fStatVfs   = true;
-                g_fRm        = true;
-                g_fChSize    = true;
-                g_fReadTests = true;
-                g_fReadPerf  = true;
+                g_fManyFiles            = true;
+                g_fOpen                 = true;
+                g_fFStat                = true;
+#ifdef RT_OS_WINDOWS
+                g_fNtQueryInfoFile      = true;
+                g_fNtQueryVolInfoFile   = true;
+#endif
+                g_fFChMod               = true;
+                g_fFUtimes              = true;
+                g_fStat                 = true;
+                g_fChMod                = true;
+                g_fUtimes               = true;
+                g_fRename               = true;
+                g_fDirOpen              = true;
+                g_fDirEnum              = true;
+                g_fMkRmDir              = true;
+                g_fStatVfs              = true;
+                g_fRm                   = true;
+                g_fChSize               = true;
+                g_fReadTests            = true;
+                g_fReadPerf             = true;
 #ifdef FSPERF_TEST_SENDFILE
-                g_fSendFile  = true;
+                g_fSendFile             = true;
 #endif
 #ifdef RT_OS_LINUX
-                g_fSplice    = true;
+                g_fSplice               = true;
 #endif
-                g_fWriteTests= true;
-                g_fWritePerf = true;
-                g_fSeek      = true;
-                g_fFSync     = true;
-                g_fMMap      = true;
-                g_fCopy      = true;
-                g_fRemote    = true;
+                g_fWriteTests           = true;
+                g_fWritePerf            = true;
+                g_fSeek                 = true;
+                g_fFSync                = true;
+                g_fMMap                 = true;
+                g_fCopy                 = true;
+                g_fRemote               = true;
                 break;
 
             case 'z':
-                g_fManyFiles = false;
-                g_fOpen      = false;
-                g_fFStat     = false;
-                g_fFChMod    = false;
-                g_fFUtimes   = false;
-                g_fStat      = false;
-                g_fChMod     = false;
-                g_fUtimes    = false;
-                g_fRename    = false;
-                g_fDirOpen   = false;
-                g_fDirEnum   = false;
-                g_fMkRmDir   = false;
-                g_fStatVfs   = false;
-                g_fRm        = false;
-                g_fChSize    = false;
-                g_fReadTests = false;
-                g_fReadPerf  = false;
+                g_fManyFiles            = false;
+                g_fOpen                 = false;
+                g_fFStat                = false;
+#ifdef RT_OS_WINDOWS
+                g_fNtQueryInfoFile      = false;
+                g_fNtQueryVolInfoFile   = false;
+#endif
+                g_fFChMod               = false;
+                g_fFUtimes              = false;
+                g_fStat                 = false;
+                g_fChMod                = false;
+                g_fUtimes               = false;
+                g_fRename               = false;
+                g_fDirOpen              = false;
+                g_fDirEnum              = false;
+                g_fMkRmDir              = false;
+                g_fStatVfs              = false;
+                g_fRm                   = false;
+                g_fChSize               = false;
+                g_fReadTests            = false;
+                g_fReadPerf             = false;
 #ifdef FSPERF_TEST_SENDFILE
-                g_fSendFile  = false;
+                g_fSendFile             = false;
 #endif
 #ifdef RT_OS_LINUX
-                g_fSplice    = false;
+                g_fSplice               = false;
 #endif
-                g_fWriteTests= false;
-                g_fWritePerf = false;
-                g_fSeek      = false;
-                g_fFSync     = false;
-                g_fMMap      = false;
-                g_fCopy      = false;
-                g_fRemote    = false;
+                g_fWriteTests           = false;
+                g_fWritePerf            = false;
+                g_fSeek                 = false;
+                g_fFSync                = false;
+                g_fMMap                 = false;
+                g_fCopy                 = false;
+                g_fRemote               = false;
                 break;
 
@@ -5822,4 +6163,8 @@
             CASE_OPT(Open);
             CASE_OPT(FStat);
+#ifdef RT_OS_WINDOWS
+            CASE_OPT(NtQueryInfoFile);
+            CASE_OPT(NtQueryVolInfoFile);
+#endif
             CASE_OPT(FChMod);
             CASE_OPT(FUtimes);
@@ -6002,4 +6347,10 @@
                 if (g_fFStat)
                     fsPerfFStat();
+#ifdef RT_OS_WINDOWS
+                if (g_fNtQueryInfoFile)
+                    fsPerfNtQueryInfoFile();
+                if (g_fNtQueryVolInfoFile)
+                    fsPerfNtQueryVolInfoFile();
+#endif
                 if (g_fFChMod)
                     fsPerfFChMod();
