VirtualBox

Changeset 78486 in vbox


Ignore:
Timestamp:
May 13, 2019 11:21:46 PM (5 years ago)
Author:
vboxsync
Message:

FsPerf,iprt/nt/nt.h: Buffer size testcase for NtQueryInformationFile. bugref:9172

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/nt/nt.h

    r78303 r78486  
    16091609NTSYSAPI NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FS_INFORMATION_CLASS);
    16101610
     1611typedef struct _FILE_DIRECTORY_INFORMATION
     1612{
     1613    ULONG           NextEntryOffset;
     1614    ULONG           FileIndex;
     1615    LARGE_INTEGER   CreationTime;
     1616    LARGE_INTEGER   LastAccessTime;
     1617    LARGE_INTEGER   LastWriteTime;
     1618    LARGE_INTEGER   ChangeTime;
     1619    LARGE_INTEGER   EndOfFile;
     1620    LARGE_INTEGER   AllocationSize;
     1621    ULONG           FileAttributes;
     1622    ULONG           FileNameLength;
     1623    WCHAR           FileName[1];
     1624} FILE_DIRECTORY_INFORMATION;
     1625typedef FILE_DIRECTORY_INFORMATION *PFILE_DIRECTORY_INFORMATION;
     1626typedef struct _FILE_FULL_DIR_INFORMATION
     1627{
     1628    ULONG           NextEntryOffset;
     1629    ULONG           FileIndex;
     1630    LARGE_INTEGER   CreationTime;
     1631    LARGE_INTEGER   LastAccessTime;
     1632    LARGE_INTEGER   LastWriteTime;
     1633    LARGE_INTEGER   ChangeTime;
     1634    LARGE_INTEGER   EndOfFile;
     1635    LARGE_INTEGER   AllocationSize;
     1636    ULONG           FileAttributes;
     1637    ULONG           FileNameLength;
     1638    ULONG           EaSize;
     1639    WCHAR           FileName[1];
     1640} FILE_FULL_DIR_INFORMATION;
     1641typedef FILE_FULL_DIR_INFORMATION *PFILE_FULL_DIR_INFORMATION;
    16111642typedef struct _FILE_BOTH_DIR_INFORMATION
    16121643{
     
    16511682} FILE_NAME_INFORMATION;
    16521683typedef FILE_NAME_INFORMATION *PFILE_NAME_INFORMATION;
     1684typedef FILE_NAME_INFORMATION FILE_NETWORK_PHYSICAL_NAME_INFORMATION;
     1685typedef FILE_NETWORK_PHYSICAL_NAME_INFORMATION *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
     1686typedef struct _FILE_INTERNAL_INFORMATION
     1687{
     1688    LARGE_INTEGER   IndexNumber;
     1689} FILE_INTERNAL_INFORMATION;
     1690typedef FILE_INTERNAL_INFORMATION *PFILE_INTERNAL_INFORMATION;
     1691typedef struct _FILE_EA_INFORMATION
     1692{
     1693    ULONG           EaSize;
     1694} FILE_EA_INFORMATION;
     1695typedef FILE_EA_INFORMATION *PFILE_EA_INFORMATION;
     1696typedef struct _FILE_ACCESS_INFORMATION
     1697{
     1698    ACCESS_MASK     AccessFlags;
     1699} FILE_ACCESS_INFORMATION;
     1700typedef FILE_ACCESS_INFORMATION *PFILE_ACCESS_INFORMATION;
     1701typedef struct _FILE_RENAME_INFORMATION
     1702{
     1703    union
     1704    {
     1705        BOOLEAN     ReplaceIfExists;
     1706        ULONG       Flags;
     1707    };
     1708    HANDLE          RootDirectory;
     1709    ULONG           FileNameLength;
     1710    WCHAR           FileName[1];
     1711} FILE_RENAME_INFORMATION;
     1712typedef FILE_RENAME_INFORMATION *PFILE_RENAME_INFORMATION;
     1713typedef struct _FILE_LINK_INFORMATION
     1714{
     1715    union
     1716    {
     1717        BOOLEAN     ReplaceIfExists;
     1718        ULONG       Flags;
     1719    };
     1720    HANDLE          RootDirectory;
     1721    ULONG           FileNameLength;
     1722    WCHAR           FileName[1];
     1723} FILE_LINK_INFORMATION;
     1724typedef FILE_LINK_INFORMATION *PFILE_LINK_INFORMATION;
     1725typedef struct _FILE_NAMES_INFORMATION
     1726{
     1727    ULONG           NextEntryOffset;
     1728    ULONG           FileIndex;
     1729    ULONG           FileNameLength;
     1730    WCHAR           FileName[1];
     1731} FILE_NAMES_INFORMATION;
     1732typedef FILE_NAMES_INFORMATION *PFILE_NAMES_INFORMATION;
     1733typedef struct _FILE_DISPOSITION_INFORMATION
     1734{
     1735    BOOLEAN         DeleteFile;
     1736} FILE_DISPOSITION_INFORMATION;
     1737typedef FILE_DISPOSITION_INFORMATION *PFILE_DISPOSITION_INFORMATION;
     1738typedef struct _FILE_POSITION_INFORMATION
     1739{
     1740    LARGE_INTEGER   CurrentByteOffset;
     1741} FILE_POSITION_INFORMATION;
     1742typedef FILE_POSITION_INFORMATION *PFILE_POSITION_INFORMATION;
     1743typedef struct _FILE_FULL_EA_INFORMATION
     1744{
     1745    ULONG           NextEntryOffset;
     1746    UCHAR           Flags;
     1747    UCHAR           EaNameLength;
     1748    USHORT          EaValueLength;
     1749    CHAR            EaName[1];
     1750} FILE_FULL_EA_INFORMATION;
     1751typedef FILE_FULL_EA_INFORMATION *PFILE_FULL_EA_INFORMATION;
     1752typedef struct _FILE_MODE_INFORMATION
     1753{
     1754    ULONG           Mode;
     1755} FILE_MODE_INFORMATION;
     1756typedef FILE_MODE_INFORMATION *PFILE_MODE_INFORMATION;
     1757typedef struct _FILE_ALIGNMENT_INFORMATION
     1758{
     1759    ULONG           AlignmentRequirement;
     1760} FILE_ALIGNMENT_INFORMATION;
     1761typedef FILE_ALIGNMENT_INFORMATION *PFILE_ALIGNMENT_INFORMATION;
     1762typedef struct _FILE_ALL_INFORMATION
     1763{
     1764    FILE_BASIC_INFORMATION      BasicInformation;
     1765    FILE_STANDARD_INFORMATION   StandardInformation;
     1766    FILE_INTERNAL_INFORMATION   InternalInformation;
     1767    FILE_EA_INFORMATION         EaInformation;
     1768    FILE_ACCESS_INFORMATION     AccessInformation;
     1769    FILE_POSITION_INFORMATION   PositionInformation;
     1770    FILE_MODE_INFORMATION       ModeInformation;
     1771    FILE_ALIGNMENT_INFORMATION  AlignmentInformation;
     1772    FILE_NAME_INFORMATION       NameInformation;
     1773} FILE_ALL_INFORMATION;
     1774typedef FILE_ALL_INFORMATION *PFILE_ALL_INFORMATION;
     1775typedef struct _FILE_ALLOCATION_INFORMATION
     1776{
     1777    LARGE_INTEGER   AllocationSize;
     1778} FILE_ALLOCATION_INFORMATION;
     1779typedef FILE_ALLOCATION_INFORMATION *PFILE_ALLOCATION_INFORMATION;
     1780typedef struct _FILE_END_OF_FILE_INFORMATION
     1781{
     1782    LARGE_INTEGER   EndOfFile;
     1783} FILE_END_OF_FILE_INFORMATION;
     1784typedef FILE_END_OF_FILE_INFORMATION *PFILE_END_OF_FILE_INFORMATION;
     1785typedef struct _FILE_STREAM_INFORMATION
     1786{
     1787    ULONG           NextEntryOffset;
     1788    ULONG           StreamNameLength;
     1789    LARGE_INTEGER   StreamSize;
     1790    LARGE_INTEGER   StreamAllocationSize;
     1791    WCHAR           StreamName[1];
     1792} FILE_STREAM_INFORMATION;
     1793typedef FILE_STREAM_INFORMATION *PFILE_STREAM_INFORMATION;
     1794typedef struct _FILE_PIPE_INFORMATION
     1795{
     1796    ULONG           ReadMode;
     1797    ULONG           CompletionMode;
     1798} FILE_PIPE_INFORMATION;
     1799typedef FILE_PIPE_INFORMATION *PFILE_PIPE_INFORMATION;
     1800
     1801typedef struct _FILE_PIPE_LOCAL_INFORMATION
     1802{
     1803    ULONG           NamedPipeType;
     1804    ULONG           NamedPipeConfiguration;
     1805    ULONG           MaximumInstances;
     1806    ULONG           CurrentInstances;
     1807    ULONG           InboundQuota;
     1808    ULONG           ReadDataAvailable;
     1809    ULONG           OutboundQuota;
     1810    ULONG           WriteQuotaAvailable;
     1811    ULONG           NamedPipeState;
     1812    ULONG           NamedPipeEnd;
     1813} FILE_PIPE_LOCAL_INFORMATION;
     1814typedef FILE_PIPE_LOCAL_INFORMATION *PFILE_PIPE_LOCAL_INFORMATION;
     1815
     1816typedef struct _FILE_PIPE_REMOTE_INFORMATION
     1817{
     1818    LARGE_INTEGER   CollectDataTime;
     1819    ULONG           MaximumCollectionCount;
     1820} FILE_PIPE_REMOTE_INFORMATION;
     1821typedef FILE_PIPE_REMOTE_INFORMATION *PFILE_PIPE_REMOTE_INFORMATION;
     1822typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
     1823{
     1824    ULONG           MaximumMessageSize;
     1825    ULONG           MailslotQuota;
     1826    ULONG           NextMessageSize;
     1827    ULONG           MessagesAvailable;
     1828    LARGE_INTEGER   ReadTimeout;
     1829} FILE_MAILSLOT_QUERY_INFORMATION;
     1830typedef FILE_MAILSLOT_QUERY_INFORMATION *PFILE_MAILSLOT_QUERY_INFORMATION;
     1831typedef struct _FILE_MAILSLOT_SET_INFORMATION
     1832{
     1833    PLARGE_INTEGER  ReadTimeout;
     1834} FILE_MAILSLOT_SET_INFORMATION;
     1835typedef FILE_MAILSLOT_SET_INFORMATION *PFILE_MAILSLOT_SET_INFORMATION;
     1836typedef struct _FILE_COMPRESSION_INFORMATION
     1837{
     1838    LARGE_INTEGER   CompressedFileSize;
     1839    USHORT          CompressionFormat;
     1840    UCHAR           CompressionUnitShift;
     1841    UCHAR           ChunkShift;
     1842    UCHAR           ClusterShift;
     1843    UCHAR           Reserved[3];
     1844} FILE_COMPRESSION_INFORMATION;
     1845typedef FILE_COMPRESSION_INFORMATION *PFILE_COMPRESSION_INFORMATION;
     1846typedef struct _FILE_OBJECTID_INFORMATION
     1847{
     1848    LONGLONG        FileReference;
     1849    UCHAR           ObjectId[16];
     1850    union
     1851    {
     1852        struct
     1853        {
     1854            UCHAR   BirthVolumeId[16];
     1855            UCHAR   BirthObjectId[16];
     1856            UCHAR   DomainId[16];
     1857        };
     1858        UCHAR       ExtendedInfo[48];
     1859    };
     1860} FILE_OBJECTID_INFORMATION;
     1861typedef FILE_OBJECTID_INFORMATION *PFILE_OBJECTID_INFORMATION;
     1862typedef struct _FILE_COMPLETION_INFORMATION
     1863{
     1864    HANDLE          Port;
     1865    PVOID           Key;
     1866} FILE_COMPLETION_INFORMATION;
     1867typedef FILE_COMPLETION_INFORMATION *PFILE_COMPLETION_INFORMATION;
     1868typedef struct _FILE_MOVE_CLUSTER_INFORMATION
     1869{
     1870    ULONG           ClusterCount;
     1871    HANDLE          RootDirectory;
     1872    ULONG           FileNameLength;
     1873    WCHAR           FileName[1];
     1874} FILE_MOVE_CLUSTER_INFORMATION;
     1875typedef FILE_MOVE_CLUSTER_INFORMATION *PFILE_MOVE_CLUSTER_INFORMATION;
     1876typedef struct _FILE_QUOTA_INFORMATION
     1877{
     1878    ULONG           NextEntryOffset;
     1879    ULONG           SidLength;
     1880    LARGE_INTEGER   ChangeTime;
     1881    LARGE_INTEGER   QuotaUsed;
     1882    LARGE_INTEGER   QuotaThreshold;
     1883    LARGE_INTEGER   QuotaLimit;
     1884    SID             Sid;
     1885} FILE_QUOTA_INFORMATION;
     1886typedef FILE_QUOTA_INFORMATION *PFILE_QUOTA_INFORMATION;
     1887typedef struct _FILE_REPARSE_POINT_INFORMATION
     1888{
     1889    LONGLONG        FileReference;
     1890    ULONG           Tag;
     1891} FILE_REPARSE_POINT_INFORMATION;
     1892typedef FILE_REPARSE_POINT_INFORMATION *PFILE_REPARSE_POINT_INFORMATION;
    16531893typedef struct _FILE_NETWORK_OPEN_INFORMATION
    16541894{
     
    16621902} FILE_NETWORK_OPEN_INFORMATION;
    16631903typedef FILE_NETWORK_OPEN_INFORMATION *PFILE_NETWORK_OPEN_INFORMATION;
     1904typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
     1905{
     1906    ULONG           FileAttributes;
     1907    ULONG           ReparseTag;
     1908} FILE_ATTRIBUTE_TAG_INFORMATION;
     1909typedef FILE_ATTRIBUTE_TAG_INFORMATION *PFILE_ATTRIBUTE_TAG_INFORMATION;
     1910typedef struct _FILE_TRACKING_INFORMATION
     1911{
     1912    HANDLE          DestinationFile;
     1913    ULONG           ObjectInformationLength;
     1914    CHAR            ObjectInformation[1];
     1915} FILE_TRACKING_INFORMATION;
     1916typedef FILE_TRACKING_INFORMATION *PFILE_TRACKING_INFORMATION;
     1917typedef struct _FILE_ID_BOTH_DIR_INFORMATION
     1918{
     1919    ULONG           NextEntryOffset;
     1920    ULONG           FileIndex;
     1921    LARGE_INTEGER   CreationTime;
     1922    LARGE_INTEGER   LastAccessTime;
     1923    LARGE_INTEGER   LastWriteTime;
     1924    LARGE_INTEGER   ChangeTime;
     1925    LARGE_INTEGER   EndOfFile;
     1926    LARGE_INTEGER   AllocationSize;
     1927    ULONG           FileAttributes;
     1928    ULONG           FileNameLength;
     1929    ULONG           EaSize;
     1930    CCHAR           ShortNameLength;
     1931    WCHAR           ShortName[12];
     1932    LARGE_INTEGER   FileId;
     1933    WCHAR           FileName[1];
     1934} FILE_ID_BOTH_DIR_INFORMATION;
     1935typedef FILE_ID_BOTH_DIR_INFORMATION *PFILE_ID_BOTH_DIR_INFORMATION;
     1936typedef struct _FILE_ID_FULL_DIR_INFORMATION
     1937{
     1938    ULONG           NextEntryOffset;
     1939    ULONG           FileIndex;
     1940    LARGE_INTEGER   CreationTime;
     1941    LARGE_INTEGER   LastAccessTime;
     1942    LARGE_INTEGER   LastWriteTime;
     1943    LARGE_INTEGER   ChangeTime;
     1944    LARGE_INTEGER   EndOfFile;
     1945    LARGE_INTEGER   AllocationSize;
     1946    ULONG           FileAttributes;
     1947    ULONG           FileNameLength;
     1948    ULONG           EaSize;
     1949    LARGE_INTEGER   FileId;
     1950    WCHAR           FileName[1];
     1951} FILE_ID_FULL_DIR_INFORMATION;
     1952typedef FILE_ID_FULL_DIR_INFORMATION *PFILE_ID_FULL_DIR_INFORMATION;
     1953typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
     1954{
     1955    LARGE_INTEGER   ValidDataLength;
     1956} FILE_VALID_DATA_LENGTH_INFORMATION;
     1957typedef FILE_VALID_DATA_LENGTH_INFORMATION *PFILE_VALID_DATA_LENGTH_INFORMATION;
     1958typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION
     1959{
     1960    ULONG           Flags;
     1961} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
     1962typedef FILE_IO_COMPLETION_NOTIFICATION_INFORMATION *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
     1963typedef enum _IO_PRIORITY_HINT
     1964{
     1965    IoPriorityVeryLow = 0,
     1966    IoPriorityLow,
     1967    IoPriorityNormal,
     1968    IoPriorityHigh,
     1969    IoPriorityCritical,
     1970    MaxIoPriorityTypes
     1971} IO_PRIORITY_HINT;
     1972AssertCompileSize(IO_PRIORITY_HINT, sizeof(int));
     1973typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION
     1974{
     1975    IO_PRIORITY_HINT    PriorityHint;
     1976} FILE_IO_PRIORITY_HINT_INFORMATION;
     1977typedef FILE_IO_PRIORITY_HINT_INFORMATION *PFILE_IO_PRIORITY_HINT_INFORMATION;
     1978typedef struct _FILE_SFIO_RESERVE_INFORMATION
     1979{
     1980    ULONG           RequestsPerPeriod;
     1981    ULONG           Period;
     1982    BOOLEAN         RetryFailures;
     1983    BOOLEAN         Discardable;
     1984    ULONG           RequestSize;
     1985    ULONG           NumOutstandingRequests;
     1986} FILE_SFIO_RESERVE_INFORMATION;
     1987typedef FILE_SFIO_RESERVE_INFORMATION *PFILE_SFIO_RESERVE_INFORMATION;
     1988typedef struct _FILE_SFIO_VOLUME_INFORMATION
     1989{
     1990    ULONG           MaximumRequestsPerPeriod;
     1991    ULONG           MinimumPeriod;
     1992    ULONG           MinimumTransferSize;
     1993} FILE_SFIO_VOLUME_INFORMATION;
     1994typedef FILE_SFIO_VOLUME_INFORMATION *PFILE_SFIO_VOLUME_INFORMATION;
     1995typedef struct _FILE_LINK_ENTRY_INFORMATION
     1996{
     1997    ULONG           NextEntryOffset;
     1998    LONGLONG        ParentFileId;
     1999    ULONG           FileNameLength;
     2000    WCHAR           FileName[1];
     2001} FILE_LINK_ENTRY_INFORMATION;
     2002typedef FILE_LINK_ENTRY_INFORMATION *PFILE_LINK_ENTRY_INFORMATION;
     2003typedef struct _FILE_LINKS_INFORMATION
     2004{
     2005    ULONG                       BytesNeeded;
     2006    ULONG                       EntriesReturned;
     2007    FILE_LINK_ENTRY_INFORMATION Entry;
     2008} FILE_LINKS_INFORMATION;
     2009typedef FILE_LINKS_INFORMATION *PFILE_LINKS_INFORMATION;
     2010typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION
     2011{
     2012    ULONG           NumberOfProcessIdsInList;
     2013    ULONG_PTR       ProcessIdList[1];
     2014} FILE_PROCESS_IDS_USING_FILE_INFORMATION;
     2015typedef FILE_PROCESS_IDS_USING_FILE_INFORMATION *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
     2016typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
     2017{
     2018    ULONG           NextEntryOffset;
     2019    ULONG           FileIndex;
     2020    LARGE_INTEGER   CreationTime;
     2021    LARGE_INTEGER   LastAccessTime;
     2022    LARGE_INTEGER   LastWriteTime;
     2023    LARGE_INTEGER   ChangeTime;
     2024    LARGE_INTEGER   EndOfFile;
     2025    LARGE_INTEGER   AllocationSize;
     2026    ULONG           FileAttributes;
     2027    ULONG           FileNameLength;
     2028    LARGE_INTEGER   FileId;
     2029    GUID            LockingTransactionId;
     2030    ULONG           TxInfoFlags;
     2031    WCHAR           FileName[1];
     2032} FILE_ID_GLOBAL_TX_DIR_INFORMATION;
     2033typedef FILE_ID_GLOBAL_TX_DIR_INFORMATION *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
     2034typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION
     2035{
     2036    BOOLEAN         IsRemote;
     2037} FILE_IS_REMOTE_DEVICE_INFORMATION;
     2038typedef FILE_IS_REMOTE_DEVICE_INFORMATION *PFILE_IS_REMOTE_DEVICE_INFORMATION;
     2039typedef struct _FILE_NUMA_NODE_INFORMATION
     2040{
     2041    USHORT          NodeNumber;
     2042} FILE_NUMA_NODE_INFORMATION;
     2043typedef FILE_NUMA_NODE_INFORMATION *PFILE_NUMA_NODE_INFORMATION;
     2044typedef struct _FILE_STANDARD_LINK_INFORMATION
     2045{
     2046    ULONG           NumberOfAccessibleLinks;
     2047    ULONG           TotalNumberOfLinks;
     2048    BOOLEAN         DeletePending;
     2049    BOOLEAN         Directory;
     2050} FILE_STANDARD_LINK_INFORMATION;
     2051typedef FILE_STANDARD_LINK_INFORMATION *PFILE_STANDARD_LINK_INFORMATION;
     2052typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
     2053{
     2054    USHORT          StructureVersion;
     2055    USHORT          StructureSize;
     2056    ULONG           Protocol;
     2057    USHORT          ProtocolMajorVersion;
     2058    USHORT          ProtocolMinorVersion;
     2059    USHORT          ProtocolRevision;
     2060    USHORT          Reserved;
     2061    ULONG           Flags;
     2062    struct
     2063    {
     2064        ULONG       Reserved[8];
     2065    }               GenericReserved;
     2066    struct
     2067    {
     2068        ULONG       Reserved[16];
     2069    }               ProtocolSpecificReserved;
     2070} FILE_REMOTE_PROTOCOL_INFORMATION;
     2071typedef FILE_REMOTE_PROTOCOL_INFORMATION *PFILE_REMOTE_PROTOCOL_INFORMATION;
     2072typedef struct _FILE_VOLUME_NAME_INFORMATION
     2073{
     2074    ULONG           DeviceNameLength;
     2075    WCHAR           DeviceName[1];
     2076} FILE_VOLUME_NAME_INFORMATION;
     2077typedef FILE_VOLUME_NAME_INFORMATION *PFILE_VOLUME_NAME_INFORMATION;
     2078# ifndef FILE_INVALID_FILE_ID
     2079typedef struct _FILE_ID_128
     2080{
     2081    BYTE            Identifier[16];
     2082} FILE_ID_128;
     2083typedef FILE_ID_128 *PFILE_ID_128;
     2084# endif
     2085typedef struct _FILE_ID_EXTD_DIR_INFORMATION
     2086{
     2087    ULONG           NextEntryOffset;
     2088    ULONG           FileIndex;
     2089    LARGE_INTEGER   CreationTime;
     2090    LARGE_INTEGER   LastAccessTime;
     2091    LARGE_INTEGER   LastWriteTime;
     2092    LARGE_INTEGER   ChangeTime;
     2093    LARGE_INTEGER   EndOfFile;
     2094    LARGE_INTEGER   AllocationSize;
     2095    ULONG           FileAttributes;
     2096    ULONG           FileNameLength;
     2097    ULONG           EaSize;
     2098    ULONG           ReparsePointTag;
     2099    FILE_ID_128     FileId;
     2100    WCHAR           FileName[1];
     2101} FILE_ID_EXTD_DIR_INFORMATION;
     2102typedef FILE_ID_EXTD_DIR_INFORMATION *PFILE_ID_EXTD_DIR_INFORMATION;
     2103typedef struct _FILE_ID_EXTD_BOTH_DIR_INFORMATION
     2104{
     2105    ULONG           NextEntryOffset;
     2106    ULONG           FileIndex;
     2107    LARGE_INTEGER   CreationTime;
     2108    LARGE_INTEGER   LastAccessTime;
     2109    LARGE_INTEGER   LastWriteTime;
     2110    LARGE_INTEGER   ChangeTime;
     2111    LARGE_INTEGER   EndOfFile;
     2112    LARGE_INTEGER   AllocationSize;
     2113    ULONG           FileAttributes;
     2114    ULONG           FileNameLength;
     2115    ULONG           EaSize;
     2116    ULONG           ReparsePointTag;
     2117    FILE_ID_128     FileId;
     2118    CCHAR           ShortNameLength;
     2119    WCHAR           ShortName[12];
     2120    WCHAR           FileName[1];
     2121} FILE_ID_EXTD_BOTH_DIR_INFORMATION;
     2122typedef FILE_ID_EXTD_BOTH_DIR_INFORMATION *PFILE_ID_EXTD_BOTH_DIR_INFORMATION;
     2123typedef struct _FILE_ID_INFORMATION
     2124{
     2125    ULONGLONG       VolumeSerialNumber;
     2126    FILE_ID_128     FileId;
     2127} FILE_ID_INFORMATION;
     2128typedef FILE_ID_INFORMATION *PFILE_ID_INFORMATION;
     2129typedef struct _FILE_LINK_ENTRY_FULL_ID_INFORMATION
     2130{
     2131    ULONG           NextEntryOffset;
     2132    FILE_ID_128     ParentFileId;
     2133    ULONG           FileNameLength;
     2134    WCHAR           FileName[1];
     2135} FILE_LINK_ENTRY_FULL_ID_INFORMATION;
     2136typedef FILE_LINK_ENTRY_FULL_ID_INFORMATION *PFILE_LINK_ENTRY_FULL_ID_INFORMATION;
     2137typedef struct _FILE_LINKS_FULL_ID_INFORMATION {
     2138    ULONG                                   BytesNeeded;
     2139    ULONG                                   EntriesReturned;
     2140    FILE_LINK_ENTRY_FULL_ID_INFORMATION     Entry;
     2141} FILE_LINKS_FULL_ID_INFORMATION;
     2142typedef FILE_LINKS_FULL_ID_INFORMATION *PFILE_LINKS_FULL_ID_INFORMATION;
     2143typedef struct _FILE_DISPOSITION_INFORMATION_EX
     2144{
     2145    ULONG           Flags;
     2146} FILE_DISPOSITION_INFORMATION_EX;
     2147typedef FILE_DISPOSITION_INFORMATION_EX *PFILE_DISPOSITION_INFORMATION_EX;
     2148typedef struct _FILE_DESIRED_STORAGE_CLASS_INFORMATION
     2149{
     2150    /*FILE_STORAGE_TIER_CLASS*/ ULONG   Class;
     2151    ULONG                               Flags;
     2152} FILE_DESIRED_STORAGE_CLASS_INFORMATION;
     2153typedef FILE_DESIRED_STORAGE_CLASS_INFORMATION *PFILE_DESIRED_STORAGE_CLASS_INFORMATION;
     2154typedef struct _FILE_STAT_INFORMATION
     2155{
     2156    LARGE_INTEGER   FileId;
     2157    LARGE_INTEGER   CreationTime;
     2158    LARGE_INTEGER   LastAccessTime;
     2159    LARGE_INTEGER   LastWriteTime;
     2160    LARGE_INTEGER   ChangeTime;
     2161    LARGE_INTEGER   AllocationSize;
     2162    LARGE_INTEGER   EndOfFile;
     2163    ULONG           FileAttributes;
     2164    ULONG           ReparseTag;
     2165    ULONG           NumberOfLinks;
     2166    ACCESS_MASK     EffectiveAccess;
     2167} FILE_STAT_INFORMATION;
     2168typedef FILE_STAT_INFORMATION *PFILE_STAT_INFORMATION;
     2169typedef struct _FILE_STAT_LX_INFORMATION
     2170{
     2171    LARGE_INTEGER   FileId;
     2172    LARGE_INTEGER   CreationTime;
     2173    LARGE_INTEGER   LastAccessTime;
     2174    LARGE_INTEGER   LastWriteTime;
     2175    LARGE_INTEGER   ChangeTime;
     2176    LARGE_INTEGER   AllocationSize;
     2177    LARGE_INTEGER   EndOfFile;
     2178    ULONG           FileAttributes;
     2179    ULONG           ReparseTag;
     2180    ULONG           NumberOfLinks;
     2181    ACCESS_MASK     EffectiveAccess;
     2182    ULONG           LxFlags;
     2183    ULONG           LxUid;
     2184    ULONG           LxGid;
     2185    ULONG           LxMode;
     2186    ULONG           LxDeviceIdMajor;
     2187    ULONG           LxDeviceIdMinor;
     2188} FILE_STAT_LX_INFORMATION;
     2189typedef FILE_STAT_LX_INFORMATION *PFILE_STAT_LX_INFORMATION;
     2190typedef struct _FILE_CASE_SENSITIVE_INFORMATION
     2191{
     2192    ULONG           Flags;
     2193} FILE_CASE_SENSITIVE_INFORMATION;
     2194typedef FILE_CASE_SENSITIVE_INFORMATION *PFILE_CASE_SENSITIVE_INFORMATION;
     2195
    16642196typedef enum _FILE_INFORMATION_CLASS
    16652197{
  • trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp

    r78379 r78486  
    273273    kCmdOpt_FStat,
    274274    kCmdOpt_NoFStat,
     275#ifdef RT_OS_WINDOWS
     276    kCmdOpt_NtQueryInfoFile,
     277    kCmdOpt_NoNtQueryInfoFile,
     278    kCmdOpt_NtQueryVolInfoFile,
     279    kCmdOpt_NoNtQueryVolInfoFile,
     280#endif
    275281    kCmdOpt_FChMod,
    276282    kCmdOpt_NoFChMod,
     
    348354static const RTGETOPTDEF g_aCmdOptions[] =
    349355{
    350     { "--dir",              'd', RTGETOPT_REQ_STRING  },
    351     { "--relative-dir",     'r', RTGETOPT_REQ_NOTHING },
    352     { "--comms-dir",        'c', RTGETOPT_REQ_STRING  },
    353     { "--comms-slave",      'C', RTGETOPT_REQ_NOTHING },
    354     { "--seconds",          's', RTGETOPT_REQ_UINT32  },
    355     { "--milliseconds",     'm', RTGETOPT_REQ_UINT64  },
    356 
    357     { "--enable-all",       'e', RTGETOPT_REQ_NOTHING },
    358     { "--disable-all",      'z', RTGETOPT_REQ_NOTHING },
    359 
    360     { "--many-files",       kCmdOpt_ManyFiles,              RTGETOPT_REQ_UINT32 },
    361     { "--no-many-files",    kCmdOpt_NoManyFiles,            RTGETOPT_REQ_NOTHING },
    362     { "--files-per-dir",    kCmdOpt_ManyTreeFilesPerDir,    RTGETOPT_REQ_UINT32 },
    363     { "--subdirs-per-dir",  kCmdOpt_ManyTreeSubdirsPerDir,  RTGETOPT_REQ_UINT32 },
    364     { "--tree-depth",       kCmdOpt_ManyTreeDepth,          RTGETOPT_REQ_UINT32 },
    365 
    366     { "--open",             kCmdOpt_Open,           RTGETOPT_REQ_NOTHING },
    367     { "--no-open",          kCmdOpt_NoOpen,         RTGETOPT_REQ_NOTHING },
    368     { "--fstat",            kCmdOpt_FStat,          RTGETOPT_REQ_NOTHING },
    369     { "--no-fstat",         kCmdOpt_NoFStat,        RTGETOPT_REQ_NOTHING },
    370     { "--fchmod",           kCmdOpt_FChMod,         RTGETOPT_REQ_NOTHING },
    371     { "--no-fchmod",        kCmdOpt_NoFChMod,       RTGETOPT_REQ_NOTHING },
    372     { "--futimes",          kCmdOpt_FUtimes,        RTGETOPT_REQ_NOTHING },
    373     { "--no-futimes",       kCmdOpt_NoFUtimes,      RTGETOPT_REQ_NOTHING },
    374     { "--stat",             kCmdOpt_Stat,           RTGETOPT_REQ_NOTHING },
    375     { "--no-stat",          kCmdOpt_NoStat,         RTGETOPT_REQ_NOTHING },
    376     { "--chmod",            kCmdOpt_ChMod,          RTGETOPT_REQ_NOTHING },
    377     { "--no-chmod",         kCmdOpt_NoChMod,        RTGETOPT_REQ_NOTHING },
    378     { "--utimes",           kCmdOpt_Utimes,         RTGETOPT_REQ_NOTHING },
    379     { "--no-utimes",        kCmdOpt_NoUtimes,       RTGETOPT_REQ_NOTHING },
    380     { "--rename",           kCmdOpt_Rename,         RTGETOPT_REQ_NOTHING },
    381     { "--no-rename",        kCmdOpt_NoRename,       RTGETOPT_REQ_NOTHING },
    382     { "--dir-open",         kCmdOpt_DirOpen,        RTGETOPT_REQ_NOTHING },
    383     { "--no-dir-open",      kCmdOpt_NoDirOpen,      RTGETOPT_REQ_NOTHING },
    384     { "--dir-enum",         kCmdOpt_DirEnum,        RTGETOPT_REQ_NOTHING },
    385     { "--no-dir-enum",      kCmdOpt_NoDirEnum,      RTGETOPT_REQ_NOTHING },
    386     { "--mk-rm-dir",        kCmdOpt_MkRmDir,        RTGETOPT_REQ_NOTHING },
    387     { "--no-mk-rm-dir",     kCmdOpt_NoMkRmDir,      RTGETOPT_REQ_NOTHING },
    388     { "--stat-vfs",         kCmdOpt_StatVfs,        RTGETOPT_REQ_NOTHING },
    389     { "--no-stat-vfs",      kCmdOpt_NoStatVfs,      RTGETOPT_REQ_NOTHING },
    390     { "--rm",               kCmdOpt_Rm,             RTGETOPT_REQ_NOTHING },
    391     { "--no-rm",            kCmdOpt_NoRm,           RTGETOPT_REQ_NOTHING },
    392     { "--chsize",           kCmdOpt_ChSize,         RTGETOPT_REQ_NOTHING },
    393     { "--no-chsize",        kCmdOpt_NoChSize,       RTGETOPT_REQ_NOTHING },
    394     { "--read-tests",       kCmdOpt_ReadTests,      RTGETOPT_REQ_NOTHING },
    395     { "--no-read-tests",    kCmdOpt_NoReadTests,    RTGETOPT_REQ_NOTHING },
    396     { "--read-perf",        kCmdOpt_ReadPerf,       RTGETOPT_REQ_NOTHING },
    397     { "--no-read-perf",     kCmdOpt_NoReadPerf,     RTGETOPT_REQ_NOTHING },
     356    { "--dir",                      'd',                            RTGETOPT_REQ_STRING  },
     357    { "--relative-dir",             'r',                            RTGETOPT_REQ_NOTHING },
     358    { "--comms-dir",                'c',                            RTGETOPT_REQ_STRING  },
     359    { "--comms-slave",              'C',                            RTGETOPT_REQ_NOTHING },
     360    { "--seconds",                  's',                            RTGETOPT_REQ_UINT32  },
     361    { "--milliseconds",             'm',                            RTGETOPT_REQ_UINT64  },
     362
     363    { "--enable-all",               'e',                            RTGETOPT_REQ_NOTHING },
     364    { "--disable-all",              'z',                            RTGETOPT_REQ_NOTHING },
     365
     366    { "--many-files",               kCmdOpt_ManyFiles,              RTGETOPT_REQ_UINT32 },
     367    { "--no-many-files",            kCmdOpt_NoManyFiles,            RTGETOPT_REQ_NOTHING },
     368    { "--files-per-dir",            kCmdOpt_ManyTreeFilesPerDir,    RTGETOPT_REQ_UINT32 },
     369    { "--subdirs-per-dir",          kCmdOpt_ManyTreeSubdirsPerDir,  RTGETOPT_REQ_UINT32 },
     370    { "--tree-depth",               kCmdOpt_ManyTreeDepth,          RTGETOPT_REQ_UINT32 },
     371
     372    { "--open",                     kCmdOpt_Open,                   RTGETOPT_REQ_NOTHING },
     373    { "--no-open",                  kCmdOpt_NoOpen,                 RTGETOPT_REQ_NOTHING },
     374    { "--fstat",                    kCmdOpt_FStat,                  RTGETOPT_REQ_NOTHING },
     375    { "--no-fstat",                 kCmdOpt_NoFStat,                RTGETOPT_REQ_NOTHING },
     376#ifdef RT_OS_WINDOWS
     377    { "--nt-query-info-file",       kCmdOpt_NtQueryInfoFile,        RTGETOPT_REQ_NOTHING },
     378    { "--no-nt-query-info-file",    kCmdOpt_NoNtQueryInfoFile,      RTGETOPT_REQ_NOTHING },
     379    { "--nt-query-vol-info-file",   kCmdOpt_NtQueryVolInfoFile,     RTGETOPT_REQ_NOTHING },
     380    { "--no-nt-query-vol-info-file",kCmdOpt_NoNtQueryVolInfoFile,   RTGETOPT_REQ_NOTHING },
     381#endif
     382    { "--fchmod",                   kCmdOpt_FChMod,                 RTGETOPT_REQ_NOTHING },
     383    { "--no-fchmod",                kCmdOpt_NoFChMod,               RTGETOPT_REQ_NOTHING },
     384    { "--futimes",                  kCmdOpt_FUtimes,                RTGETOPT_REQ_NOTHING },
     385    { "--no-futimes",               kCmdOpt_NoFUtimes,              RTGETOPT_REQ_NOTHING },
     386    { "--stat",                     kCmdOpt_Stat,                   RTGETOPT_REQ_NOTHING },
     387    { "--no-stat",                  kCmdOpt_NoStat,                 RTGETOPT_REQ_NOTHING },
     388    { "--chmod",                    kCmdOpt_ChMod,                  RTGETOPT_REQ_NOTHING },
     389    { "--no-chmod",                 kCmdOpt_NoChMod,                RTGETOPT_REQ_NOTHING },
     390    { "--utimes",                   kCmdOpt_Utimes,                 RTGETOPT_REQ_NOTHING },
     391    { "--no-utimes",                kCmdOpt_NoUtimes,               RTGETOPT_REQ_NOTHING },
     392    { "--rename",                   kCmdOpt_Rename,                 RTGETOPT_REQ_NOTHING },
     393    { "--no-rename",                kCmdOpt_NoRename,               RTGETOPT_REQ_NOTHING },
     394    { "--dir-open",                 kCmdOpt_DirOpen,                RTGETOPT_REQ_NOTHING },
     395    { "--no-dir-open",              kCmdOpt_NoDirOpen,              RTGETOPT_REQ_NOTHING },
     396    { "--dir-enum",                 kCmdOpt_DirEnum,                RTGETOPT_REQ_NOTHING },
     397    { "--no-dir-enum",              kCmdOpt_NoDirEnum,              RTGETOPT_REQ_NOTHING },
     398    { "--mk-rm-dir",                kCmdOpt_MkRmDir,                RTGETOPT_REQ_NOTHING },
     399    { "--no-mk-rm-dir",             kCmdOpt_NoMkRmDir,              RTGETOPT_REQ_NOTHING },
     400    { "--stat-vfs",                 kCmdOpt_StatVfs,                RTGETOPT_REQ_NOTHING },
     401    { "--no-stat-vfs",              kCmdOpt_NoStatVfs,              RTGETOPT_REQ_NOTHING },
     402    { "--rm",                       kCmdOpt_Rm,                     RTGETOPT_REQ_NOTHING },
     403    { "--no-rm",                    kCmdOpt_NoRm,                   RTGETOPT_REQ_NOTHING },
     404    { "--chsize",                   kCmdOpt_ChSize,                 RTGETOPT_REQ_NOTHING },
     405    { "--no-chsize",                kCmdOpt_NoChSize,               RTGETOPT_REQ_NOTHING },
     406    { "--read-tests",               kCmdOpt_ReadTests,              RTGETOPT_REQ_NOTHING },
     407    { "--no-read-tests",            kCmdOpt_NoReadTests,            RTGETOPT_REQ_NOTHING },
     408    { "--read-perf",                kCmdOpt_ReadPerf,               RTGETOPT_REQ_NOTHING },
     409    { "--no-read-perf",             kCmdOpt_NoReadPerf,             RTGETOPT_REQ_NOTHING },
    398410#ifdef FSPERF_TEST_SENDFILE
    399     { "--sendfile",         kCmdOpt_SendFile,       RTGETOPT_REQ_NOTHING },
    400     { "--no-sendfile",      kCmdOpt_NoSendFile,     RTGETOPT_REQ_NOTHING },
     411    { "--sendfile",                 kCmdOpt_SendFile,               RTGETOPT_REQ_NOTHING },
     412    { "--no-sendfile",              kCmdOpt_NoSendFile,             RTGETOPT_REQ_NOTHING },
    401413#endif
    402414#ifdef RT_OS_LINUX
    403     { "--splice",           kCmdOpt_Splice,         RTGETOPT_REQ_NOTHING },
    404     { "--no-splice",        kCmdOpt_NoSplice,       RTGETOPT_REQ_NOTHING },
     415    { "--splice",                   kCmdOpt_Splice,                 RTGETOPT_REQ_NOTHING },
     416    { "--no-splice",                kCmdOpt_NoSplice,               RTGETOPT_REQ_NOTHING },
    405417#endif
    406     { "--write-tests",      kCmdOpt_WriteTests,     RTGETOPT_REQ_NOTHING },
    407     { "--no-write-tests",   kCmdOpt_NoWriteTests,   RTGETOPT_REQ_NOTHING },
    408     { "--write-perf",       kCmdOpt_WritePerf,      RTGETOPT_REQ_NOTHING },
    409     { "--no-write-perf",    kCmdOpt_NoWritePerf,    RTGETOPT_REQ_NOTHING },
    410     { "--seek",             kCmdOpt_Seek,           RTGETOPT_REQ_NOTHING },
    411     { "--no-seek",          kCmdOpt_NoSeek,         RTGETOPT_REQ_NOTHING },
    412     { "--fsync",            kCmdOpt_FSync,          RTGETOPT_REQ_NOTHING },
    413     { "--no-fsync",         kCmdOpt_NoFSync,        RTGETOPT_REQ_NOTHING },
    414     { "--mmap",             kCmdOpt_MMap,           RTGETOPT_REQ_NOTHING },
    415     { "--no-mmap",          kCmdOpt_NoMMap,         RTGETOPT_REQ_NOTHING },
    416     { "--ignore-no-cache",  kCmdOpt_IgnoreNoCache,  RTGETOPT_REQ_NOTHING },
    417     { "--no-ignore-no-cache",  kCmdOpt_NoIgnoreNoCache,  RTGETOPT_REQ_NOTHING },
    418     { "--io-file-size",     kCmdOpt_IoFileSize,     RTGETOPT_REQ_UINT64 },
    419     { "--set-block-size",   kCmdOpt_SetBlockSize,   RTGETOPT_REQ_UINT32 },
    420     { "--add-block-size",   kCmdOpt_AddBlockSize,   RTGETOPT_REQ_UINT32 },
    421     { "--copy",             kCmdOpt_Copy,           RTGETOPT_REQ_NOTHING },
    422     { "--no-copy",          kCmdOpt_NoCopy,         RTGETOPT_REQ_NOTHING },
    423     { "--remote",           kCmdOpt_Remote,         RTGETOPT_REQ_NOTHING },
    424     { "--no-remote",        kCmdOpt_NoRemote,       RTGETOPT_REQ_NOTHING },
    425 
    426     { "--show-duration",        kCmdOpt_ShowDuration,       RTGETOPT_REQ_NOTHING },
    427     { "--no-show-duration",     kCmdOpt_NoShowDuration,     RTGETOPT_REQ_NOTHING },
    428     { "--show-iterations",      kCmdOpt_ShowIterations,     RTGETOPT_REQ_NOTHING },
    429     { "--no-show-iterations",   kCmdOpt_NoShowIterations,   RTGETOPT_REQ_NOTHING },
    430 
    431     { "--quiet",                'q', RTGETOPT_REQ_NOTHING },
    432     { "--verbose",              'v', RTGETOPT_REQ_NOTHING },
    433     { "--version",              'V', RTGETOPT_REQ_NOTHING },
    434     { "--help",                 'h', RTGETOPT_REQ_NOTHING } /* for Usage() */
     418    { "--write-tests",              kCmdOpt_WriteTests,             RTGETOPT_REQ_NOTHING },
     419    { "--no-write-tests",           kCmdOpt_NoWriteTests,           RTGETOPT_REQ_NOTHING },
     420    { "--write-perf",               kCmdOpt_WritePerf,              RTGETOPT_REQ_NOTHING },
     421    { "--no-write-perf",            kCmdOpt_NoWritePerf,            RTGETOPT_REQ_NOTHING },
     422    { "--seek",                     kCmdOpt_Seek,                   RTGETOPT_REQ_NOTHING },
     423    { "--no-seek",                  kCmdOpt_NoSeek,                 RTGETOPT_REQ_NOTHING },
     424    { "--fsync",                    kCmdOpt_FSync,                  RTGETOPT_REQ_NOTHING },
     425    { "--no-fsync",                 kCmdOpt_NoFSync,                RTGETOPT_REQ_NOTHING },
     426    { "--mmap",                     kCmdOpt_MMap,                   RTGETOPT_REQ_NOTHING },
     427    { "--no-mmap",                  kCmdOpt_NoMMap,                 RTGETOPT_REQ_NOTHING },
     428    { "--ignore-no-cache",          kCmdOpt_IgnoreNoCache,          RTGETOPT_REQ_NOTHING },
     429    { "--no-ignore-no-cache",       kCmdOpt_NoIgnoreNoCache,        RTGETOPT_REQ_NOTHING },
     430    { "--io-file-size",             kCmdOpt_IoFileSize,             RTGETOPT_REQ_UINT64 },
     431    { "--set-block-size",           kCmdOpt_SetBlockSize,           RTGETOPT_REQ_UINT32 },
     432    { "--add-block-size",           kCmdOpt_AddBlockSize,           RTGETOPT_REQ_UINT32 },
     433    { "--copy",                     kCmdOpt_Copy,                   RTGETOPT_REQ_NOTHING },
     434    { "--no-copy",                  kCmdOpt_NoCopy,                 RTGETOPT_REQ_NOTHING },
     435    { "--remote",                   kCmdOpt_Remote,                 RTGETOPT_REQ_NOTHING },
     436    { "--no-remote",                kCmdOpt_NoRemote,               RTGETOPT_REQ_NOTHING },
     437
     438    { "--show-duration",            kCmdOpt_ShowDuration,           RTGETOPT_REQ_NOTHING },
     439    { "--no-show-duration",         kCmdOpt_NoShowDuration,         RTGETOPT_REQ_NOTHING },
     440    { "--show-iterations",          kCmdOpt_ShowIterations,         RTGETOPT_REQ_NOTHING },
     441    { "--no-show-iterations",       kCmdOpt_NoShowIterations,       RTGETOPT_REQ_NOTHING },
     442
     443    { "--quiet",                    'q',                            RTGETOPT_REQ_NOTHING },
     444    { "--verbose",                  'v',                            RTGETOPT_REQ_NOTHING },
     445    { "--version",                  'V',                            RTGETOPT_REQ_NOTHING },
     446    { "--help",                     'h',                            RTGETOPT_REQ_NOTHING } /* for Usage() */
    435447};
    436448
     
    451463/** @name Selected subtest
    452464 * @{ */
    453 static bool         g_fManyFiles = true;
    454 static bool         g_fOpen      = true;
    455 static bool         g_fFStat     = true;
    456 static bool         g_fFChMod    = true;
    457 static bool         g_fFUtimes   = true;
    458 static bool         g_fStat      = true;
    459 static bool         g_fChMod     = true;
    460 static bool         g_fUtimes    = true;
    461 static bool         g_fRename    = true;
    462 static bool         g_fDirOpen   = true;
    463 static bool         g_fDirEnum   = true;
    464 static bool         g_fMkRmDir   = true;
    465 static bool         g_fStatVfs   = true;
    466 static bool         g_fRm        = true;
    467 static bool         g_fChSize    = true;
    468 static bool         g_fReadTests = true;
    469 static bool         g_fReadPerf  = true;
     465static bool         g_fManyFiles            = true;
     466static bool         g_fOpen                 = true;
     467static bool         g_fFStat                = true;
     468#ifdef RT_OS_WINDOWS
     469static bool         g_fNtQueryInfoFile      = true;
     470static bool         g_fNtQueryVolInfoFile   = true;
     471#endif
     472static bool         g_fFChMod               = true;
     473static bool         g_fFUtimes              = true;
     474static bool         g_fStat                 = true;
     475static bool         g_fChMod                = true;
     476static bool         g_fUtimes               = true;
     477static bool         g_fRename               = true;
     478static bool         g_fDirOpen              = true;
     479static bool         g_fDirEnum              = true;
     480static bool         g_fMkRmDir              = true;
     481static bool         g_fStatVfs              = true;
     482static bool         g_fRm                   = true;
     483static bool         g_fChSize               = true;
     484static bool         g_fReadTests            = true;
     485static bool         g_fReadPerf             = true;
    470486#ifdef FSPERF_TEST_SENDFILE
    471 static bool         g_fSendFile  = true;
     487static bool         g_fSendFile             = true;
    472488#endif
    473489#ifdef RT_OS_LINUX
    474 static bool         g_fSplice    = true;
     490static bool         g_fSplice               = true;
    475491#endif
    476 static bool         g_fWriteTests= true;
    477 static bool         g_fWritePerf = true;
    478 static bool         g_fSeek      = true;
    479 static bool         g_fFSync     = true;
    480 static bool         g_fMMap      = true;
    481 static bool         g_fCopy      = true;
    482 static bool         g_fRemote    = true;
     492static bool         g_fWriteTests           = true;
     493static bool         g_fWritePerf            = true;
     494static bool         g_fSeek                 = true;
     495static bool         g_fFSync                = true;
     496static bool         g_fMMap                 = true;
     497static bool         g_fCopy                 = true;
     498static bool         g_fRemote               = true;
    483499/** @} */
    484500
     
    20882104}
    20892105
     2106#ifdef RT_OS_WINDOWS
     2107/**
     2108 * Nt(Query|Set|QueryDir)Information(File|) information class info.
     2109 */
     2110static const struct
     2111{
     2112    const char *pszName;
     2113    int         enmValue;
     2114    bool        fQuery;
     2115    bool        fSet;
     2116    bool        fQueryDir;
     2117    uint8_t     cbMin;
     2118} g_aNtQueryInfoFileClasses[] =
     2119{
     2120#define E(a_enmValue, a_fQuery, a_fSet, a_fQueryDir, a_cbMin) \
     2121        { #a_enmValue, a_enmValue, a_fQuery, a_fSet, a_fQueryDir, a_cbMin }
     2122    { "invalid0", 0, false, false, false, 0 },
     2123    E(FileDirectoryInformation,                      false, false, true,  sizeof(FILE_DIRECTORY_INFORMATION)),                   // 0x00, 0x00, 0x48
     2124    E(FileFullDirectoryInformation,                  false, false, true,  sizeof(FILE_FULL_DIR_INFORMATION)),                    // 0x00, 0x00, 0x48
     2125    E(FileBothDirectoryInformation,                  false, false, true,  sizeof(FILE_BOTH_DIR_INFORMATION)),                    // 0x00, 0x00, 0x60
     2126    E(FileBasicInformation,                          true,  true,  false, sizeof(FILE_BASIC_INFORMATION)),
     2127    E(FileStandardInformation,                       true,  false, false, sizeof(FILE_STANDARD_INFORMATION)),
     2128    E(FileInternalInformation,                       true,  false, false, sizeof(FILE_INTERNAL_INFORMATION)),
     2129    E(FileEaInformation,                             true,  false, false, sizeof(FILE_EA_INFORMATION)),
     2130    E(FileAccessInformation,                         true,  false, false, sizeof(FILE_ACCESS_INFORMATION)),
     2131    E(FileNameInformation,                           true,  false, false, sizeof(FILE_NAME_INFORMATION)),
     2132    E(FileRenameInformation,                         false, true,  false, sizeof(FILE_RENAME_INFORMATION)),
     2133    E(FileLinkInformation,                           false, true,  false, sizeof(FILE_LINK_INFORMATION)),
     2134    E(FileNamesInformation,                          false, false, true,  sizeof(FILE_NAMES_INFORMATION)),                       // 0x00, 0x00, 0x10
     2135    E(FileDispositionInformation,                    false, true,  false, sizeof(FILE_DISPOSITION_INFORMATION)),                 // 0x00, 0x01,
     2136    E(FilePositionInformation,                       true,  true,  false, sizeof(FILE_POSITION_INFORMATION)),                    // 0x08, 0x08,
     2137    E(FileFullEaInformation,                         false, false, false, sizeof(FILE_FULL_EA_INFORMATION)),                     // 0x00, 0x00,
     2138    E(FileModeInformation,                           true,  true,  false, sizeof(FILE_MODE_INFORMATION)),                        // 0x04, 0x04,
     2139    E(FileAlignmentInformation,                      true,  false, false, sizeof(FILE_ALIGNMENT_INFORMATION)),                   // 0x04, 0x00,
     2140    E(FileAllInformation,                            true,  false, false, sizeof(FILE_ALL_INFORMATION)),                         // 0x68, 0x00,
     2141    E(FileAllocationInformation,                     false, true,  false, sizeof(FILE_ALLOCATION_INFORMATION)),                  // 0x00, 0x08,
     2142    E(FileEndOfFileInformation,                      false, true,  false, sizeof(FILE_END_OF_FILE_INFORMATION)),                 // 0x00, 0x08,
     2143    E(FileAlternateNameInformation,                  true,  false, false, sizeof(FILE_NAME_INFORMATION)),                        // 0x08, 0x00,
     2144    E(FileStreamInformation,                         true,  false, false, sizeof(FILE_STREAM_INFORMATION)),                      // 0x20, 0x00,
     2145    E(FilePipeInformation,                           true,  true,  false, sizeof(FILE_PIPE_INFORMATION)),                        // 0x08, 0x08,
     2146    E(FilePipeLocalInformation,                      true,  false, false, sizeof(FILE_PIPE_LOCAL_INFORMATION)),                  // 0x28, 0x00,
     2147    E(FilePipeRemoteInformation,                     true,  true,  false, sizeof(FILE_PIPE_REMOTE_INFORMATION)),                 // 0x10, 0x10,
     2148    E(FileMailslotQueryInformation,                  true,  false, false, sizeof(FILE_MAILSLOT_QUERY_INFORMATION)),              // 0x18, 0x00,
     2149    E(FileMailslotSetInformation,                    false, true,  false, sizeof(FILE_MAILSLOT_SET_INFORMATION)),                // 0x00, 0x08,
     2150    E(FileCompressionInformation,                    true,  false, false, sizeof(FILE_COMPRESSION_INFORMATION)),                 // 0x10, 0x00,
     2151    E(FileObjectIdInformation,                       true,  true,  true,  sizeof(FILE_OBJECTID_INFORMATION)),                    // 0x48, 0x48,
     2152    E(FileCompletionInformation,                     false, true,  false, sizeof(FILE_COMPLETION_INFORMATION)),                  // 0x00, 0x10,
     2153    E(FileMoveClusterInformation,                    false, true,  false, sizeof(FILE_MOVE_CLUSTER_INFORMATION)),                // 0x00, 0x18,
     2154    E(FileQuotaInformation,                          true,  true,  true,  sizeof(FILE_QUOTA_INFORMATION)),                       // 0x38, 0x38, 0x38
     2155    E(FileReparsePointInformation,                   true,  false, true,  sizeof(FILE_REPARSE_POINT_INFORMATION)),               // 0x10, 0x00, 0x10
     2156    E(FileNetworkOpenInformation,                    true,  false, false, sizeof(FILE_NETWORK_OPEN_INFORMATION)),                // 0x38, 0x00,
     2157    E(FileAttributeTagInformation,                   true,  false, false, sizeof(FILE_ATTRIBUTE_TAG_INFORMATION)),               // 0x08, 0x00,
     2158    E(FileTrackingInformation,                       false, true,  false, sizeof(FILE_TRACKING_INFORMATION)),                    // 0x00, 0x10,
     2159    E(FileIdBothDirectoryInformation,                false, false, true,  sizeof(FILE_ID_BOTH_DIR_INFORMATION)),                 // 0x00, 0x00, 0x70
     2160    E(FileIdFullDirectoryInformation,                false, false, true,  sizeof(FILE_ID_FULL_DIR_INFORMATION)),                 // 0x00, 0x00, 0x58
     2161    E(FileValidDataLengthInformation,                false, true,  false, sizeof(FILE_VALID_DATA_LENGTH_INFORMATION)),           // 0x00, 0x08,
     2162    E(FileShortNameInformation,                      false, true,  false, sizeof(FILE_NAME_INFORMATION)),                        // 0x00, 0x08,
     2163    E(FileIoCompletionNotificationInformation,       true,  true,  false, sizeof(FILE_IO_COMPLETION_NOTIFICATION_INFORMATION)),  // 0x04, 0x04,
     2164    E(FileIoStatusBlockRangeInformation,             false, true,  false, sizeof(IO_STATUS_BLOCK) /*?*/),                        // 0x00, 0x10,
     2165    E(FileIoPriorityHintInformation,                 true,  true,  false, sizeof(FILE_IO_PRIORITY_HINT_INFORMATION)),            // 0x04, 0x04,
     2166    E(FileSfioReserveInformation,                    true,  true,  false, sizeof(FILE_SFIO_RESERVE_INFORMATION)),                // 0x14, 0x14,
     2167    E(FileSfioVolumeInformation,                     true,  false, false, sizeof(FILE_SFIO_VOLUME_INFORMATION)),                 // 0x0C, 0x00,
     2168    E(FileHardLinkInformation,                       true,  false, false, sizeof(FILE_LINKS_INFORMATION)),                       // 0x20, 0x00,
     2169    E(FileProcessIdsUsingFileInformation,            true,  false, false, sizeof(FILE_PROCESS_IDS_USING_FILE_INFORMATION)),      // 0x10, 0x00,
     2170    E(FileNormalizedNameInformation,                 true,  false, false, sizeof(FILE_NAME_INFORMATION)),                        // 0x08, 0x00,
     2171    E(FileNetworkPhysicalNameInformation,            true,  false, false, sizeof(FILE_NETWORK_PHYSICAL_NAME_INFORMATION)),       // 0x08, 0x00,
     2172    E(FileIdGlobalTxDirectoryInformation,            false, false, true,  sizeof(FILE_ID_GLOBAL_TX_DIR_INFORMATION)),            // 0x00, 0x00, 0x60
     2173    E(FileIsRemoteDeviceInformation,                 true,  false, false, sizeof(FILE_IS_REMOTE_DEVICE_INFORMATION)),            // 0x01, 0x00,
     2174    E(FileUnusedInformation,                         false, false, false, 0),                                                    // 0x00, 0x00,
     2175    E(FileNumaNodeInformation,                       true,  false, false, sizeof(FILE_NUMA_NODE_INFORMATION)),                   // 0x02, 0x00,
     2176    E(FileStandardLinkInformation,                   true,  false, false, sizeof(FILE_STANDARD_LINK_INFORMATION)),               // 0x0C, 0x00,
     2177    E(FileRemoteProtocolInformation,                 true,  false, false, sizeof(FILE_REMOTE_PROTOCOL_INFORMATION)),             // 0x74, 0x00,
     2178    E(FileRenameInformationBypassAccessCheck,        false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
     2179    E(FileLinkInformationBypassAccessCheck,          false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
     2180    E(FileVolumeNameInformation,                     true,  false, false, sizeof(FILE_VOLUME_NAME_INFORMATION)),                 // 0x08, 0x00,
     2181    E(FileIdInformation,                             true,  false, false, sizeof(FILE_ID_INFORMATION)),                          // 0x18, 0x00,
     2182    E(FileIdExtdDirectoryInformation,                false, false, true,  sizeof(FILE_ID_EXTD_DIR_INFORMATION)),                 // 0x00, 0x00, 0x60
     2183    E(FileReplaceCompletionInformation,              false, true,  false, sizeof(FILE_COMPLETION_INFORMATION)),                  // 0x00, 0x10,
     2184    E(FileHardLinkFullIdInformation,                 true,  false, false, sizeof(FILE_LINK_ENTRY_FULL_ID_INFORMATION)),          // 0x24, 0x00,
     2185    E(FileIdExtdBothDirectoryInformation,            false, false, true,  sizeof(FILE_ID_EXTD_BOTH_DIR_INFORMATION)),            // 0x00, 0x00, 0x78
     2186    E(FileDispositionInformationEx,                  false, true,  false, sizeof(FILE_DISPOSITION_INFORMATION_EX)),              // 0x00, 0x04,
     2187    E(FileRenameInformationEx,                       false, true,  false, sizeof(FILE_RENAME_INFORMATION)),                      // 0x00, 0x18,
     2188    E(FileRenameInformationExBypassAccessCheck,      false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
     2189    E(FileDesiredStorageClassInformation,            true,  true,  false, sizeof(FILE_DESIRED_STORAGE_CLASS_INFORMATION)),       // 0x08, 0x08,
     2190    E(FileStatInformation,                           true,  false, false, sizeof(FILE_STAT_INFORMATION)),                        // 0x48, 0x00,
     2191    E(FileMemoryPartitionInformation,                false, true,  false, 0x10),                                                 // 0x00, 0x10,
     2192    E(FileStatLxInformation,                         true,  false, false, sizeof(FILE_STAT_LX_INFORMATION)),                     // 0x60, 0x00,
     2193    E(FileCaseSensitiveInformation,                  true,  true,  false, sizeof(FILE_CASE_SENSITIVE_INFORMATION)),              // 0x04, 0x04,
     2194    E(FileLinkInformationEx,                         false, true,  false, sizeof(FILE_LINK_INFORMATION)),                        // 0x00, 0x18,
     2195    E(FileLinkInformationExBypassAccessCheck,        false, false, false, 0 /*kernel mode only*/),                               // 0x00, 0x00,
     2196    E(FileStorageReserveIdInformation,               true,  true,  false, 0x04),                                                 // 0x04, 0x04,
     2197    E(FileCaseSensitiveInformationForceAccessCheck,  true,  true,  false, sizeof(FILE_CASE_SENSITIVE_INFORMATION)),              // 0x04, 0x04,
     2198#undef E
     2199};
     2200
     2201void fsPerfNtQueryInfoFileWorker(HANDLE hNtFile1)
     2202{
     2203    /** @todo may run out of buffer for really long paths? */
     2204    union
     2205    {
     2206        uint8_t                                     ab[4096];
     2207        FILE_ACCESS_INFORMATION                     Access;
     2208        FILE_ALIGNMENT_INFORMATION                  Align;
     2209        FILE_ALL_INFORMATION                        All;
     2210        FILE_ALLOCATION_INFORMATION                 Alloc;
     2211        FILE_ATTRIBUTE_TAG_INFORMATION              AttribTag;
     2212        FILE_BASIC_INFORMATION                      Basic;
     2213        FILE_BOTH_DIR_INFORMATION                   BothDir;
     2214        FILE_CASE_SENSITIVE_INFORMATION             CaseSensitivity;
     2215        FILE_COMPLETION_INFORMATION                 Completion;
     2216        FILE_COMPRESSION_INFORMATION                Compression;
     2217        FILE_DESIRED_STORAGE_CLASS_INFORMATION      StorageClass;
     2218        FILE_DIRECTORY_INFORMATION                  Dir;
     2219        FILE_DISPOSITION_INFORMATION                Disp;
     2220        FILE_DISPOSITION_INFORMATION_EX             DispEx;
     2221        FILE_EA_INFORMATION                         Ea;
     2222        FILE_END_OF_FILE_INFORMATION                EndOfFile;
     2223        FILE_FULL_DIR_INFORMATION                   FullDir;
     2224        FILE_FULL_EA_INFORMATION                    FullEa;
     2225        FILE_ID_BOTH_DIR_INFORMATION                IdBothDir;
     2226        FILE_ID_EXTD_BOTH_DIR_INFORMATION           ExtIdBothDir;
     2227        FILE_ID_EXTD_DIR_INFORMATION                ExtIdDir;
     2228        FILE_ID_FULL_DIR_INFORMATION                IdFullDir;
     2229        FILE_ID_GLOBAL_TX_DIR_INFORMATION           IdGlobalTx;
     2230        FILE_ID_INFORMATION                         IdInfo;
     2231        FILE_INTERNAL_INFORMATION                   Internal;
     2232        FILE_IO_COMPLETION_NOTIFICATION_INFORMATION IoCompletion;
     2233        FILE_IO_PRIORITY_HINT_INFORMATION           IoPrioHint;
     2234        FILE_IS_REMOTE_DEVICE_INFORMATION           IsRemoteDev;
     2235        FILE_LINK_ENTRY_FULL_ID_INFORMATION         LinkFullId;
     2236        FILE_LINK_INFORMATION                       Link;
     2237        FILE_MAILSLOT_QUERY_INFORMATION             MailslotQuery;
     2238        FILE_MAILSLOT_SET_INFORMATION               MailslotSet;
     2239        FILE_MODE_INFORMATION                       Mode;
     2240        FILE_MOVE_CLUSTER_INFORMATION               MoveCluster;
     2241        FILE_NAME_INFORMATION                       Name;
     2242        FILE_NAMES_INFORMATION                      Names;
     2243        FILE_NETWORK_OPEN_INFORMATION               NetOpen;
     2244        FILE_NUMA_NODE_INFORMATION                  Numa;
     2245        FILE_OBJECTID_INFORMATION                   ObjId;
     2246        FILE_PIPE_INFORMATION                       Pipe;
     2247        FILE_PIPE_LOCAL_INFORMATION                 PipeLocal;
     2248        FILE_PIPE_REMOTE_INFORMATION                PipeRemote;
     2249        FILE_POSITION_INFORMATION                   Pos;
     2250        FILE_PROCESS_IDS_USING_FILE_INFORMATION     Pids;
     2251        FILE_QUOTA_INFORMATION                      Quota;
     2252        FILE_REMOTE_PROTOCOL_INFORMATION            RemoteProt;
     2253        FILE_RENAME_INFORMATION                     Rename;
     2254        FILE_REPARSE_POINT_INFORMATION              Reparse;
     2255        FILE_SFIO_RESERVE_INFORMATION               SfiRes;
     2256        FILE_SFIO_VOLUME_INFORMATION                SfioVol;
     2257        FILE_STANDARD_INFORMATION                   Std;
     2258        FILE_STANDARD_LINK_INFORMATION              StdLink;
     2259        FILE_STAT_INFORMATION                       Stat;
     2260        FILE_STAT_LX_INFORMATION                    StatLx;
     2261        FILE_STREAM_INFORMATION                     Stream;
     2262        FILE_TRACKING_INFORMATION                   Tracking;
     2263        FILE_VALID_DATA_LENGTH_INFORMATION          ValidDataLen;
     2264        FILE_VOLUME_NAME_INFORMATION                VolName;
     2265    } uBuf;
     2266
     2267    IO_STATUS_BLOCK const VirginIos = RTNT_IO_STATUS_BLOCK_INITIALIZER;
     2268    for (unsigned i = 0; i < RT_ELEMENTS(g_aNtQueryInfoFileClasses); i++)
     2269    {
     2270        FILE_INFORMATION_CLASS const enmClass = (FILE_INFORMATION_CLASS)g_aNtQueryInfoFileClasses[i].enmValue;
     2271        const char * const           pszClass = g_aNtQueryInfoFileClasses[i].pszName;
     2272
     2273        memset(&uBuf, 0xff, sizeof(uBuf));
     2274        IO_STATUS_BLOCK Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER;
     2275        ULONG           cbBuf = sizeof(uBuf);
     2276        NTSTATUS rcNt = NtQueryInformationFile(hNtFile1, &Ios, &uBuf, cbBuf, enmClass);
     2277        if (NT_SUCCESS(rcNt))
     2278        {
     2279            if (Ios.Status == VirginIos.Status || Ios.Information == VirginIos.Information)
     2280                RTTestIFailed("%s/%#x: I/O status block was not modified: %#x %#zx", pszClass, cbBuf, Ios.Status, Ios.Information);
     2281            else if (!g_aNtQueryInfoFileClasses[i].fQuery)
     2282                RTTestIFailed("%s/%#x: This isn't supposed to be queriable! (rcNt=%#x)", pszClass, cbBuf, rcNt);
     2283            else
     2284            {
     2285                ULONG const cbActualMin = enmClass != FileStorageReserveIdInformation ? Ios.Information : 4; /* weird */
     2286
     2287                switch (enmClass)
     2288                {
     2289                    case FileNameInformation:
     2290                    case FileAlternateNameInformation:
     2291                    case FileShortNameInformation:
     2292                    case FileNormalizedNameInformation:
     2293                    case FileNetworkPhysicalNameInformation:
     2294                        if (   RT_UOFFSETOF_DYN(FILE_NAME_INFORMATION, FileName[uBuf.Name.FileNameLength / sizeof(WCHAR)])
     2295                            != cbActualMin)
     2296                            RTTestIFailed("%s/%#x: Wrong FileNameLength=%#x vs cbActual=%#x",
     2297                                          pszClass, cbActualMin, uBuf.Name.FileNameLength, cbActualMin);
     2298                        if (uBuf.Name.FileName[uBuf.Name.FileNameLength  / sizeof(WCHAR) - 1] == '\0')
     2299                            RTTestIFailed("%s/%#x: Zero terminated name!", pszClass, cbActualMin);
     2300                        if (g_uVerbosity > 1)
     2301                            RTTestIPrintf(RTTESTLVL_ALWAYS, "%+34s/%#x: FileNameLength=%#x FileName='%.*ls'\n",
     2302                                          pszClass, cbActualMin, uBuf.Name.FileNameLength,
     2303                                          uBuf.Name.FileNameLength  / sizeof(WCHAR), uBuf.Name.FileName);
     2304                        break;
     2305
     2306                    case FileVolumeNameInformation:
     2307                        if (RT_UOFFSETOF_DYN(FILE_VOLUME_NAME_INFORMATION,
     2308                                             DeviceName[uBuf.VolName.DeviceNameLength / sizeof(WCHAR)]) != cbActualMin)
     2309                            RTTestIFailed("%s/%#x: Wrong DeviceNameLength=%#x vs cbActual=%#x",
     2310                                          pszClass, cbActualMin, uBuf.VolName.DeviceNameLength, cbActualMin);
     2311                        if (uBuf.VolName.DeviceName[uBuf.VolName.DeviceNameLength  / sizeof(WCHAR) - 1] == '\0')
     2312                            RTTestIFailed("%s/%#x: Zero terminated name!", pszClass, cbActualMin);
     2313                        if (g_uVerbosity > 1)
     2314                            RTTestIPrintf(RTTESTLVL_ALWAYS, "%+34s/%#x: DeviceNameLength=%#x DeviceName='%.*ls'\n",
     2315                                          pszClass, cbActualMin, uBuf.VolName.DeviceNameLength,
     2316                                          uBuf.VolName.DeviceNameLength / sizeof(WCHAR), uBuf.VolName.DeviceName);
     2317                        break;
     2318                    default:
     2319                        break;
     2320                }
     2321
     2322                ULONG const cbMin       = g_aNtQueryInfoFileClasses[i].cbMin;
     2323                ULONG const cbMax       = RT_MIN(cbActualMin + 64, sizeof(uBuf));
     2324                for (cbBuf = 0; cbBuf < cbMax; cbBuf++)
     2325                {
     2326                    memset(&uBuf, 0xfe, sizeof(uBuf));
     2327                    RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
     2328                    rcNt = NtQueryInformationFile(hNtFile1, &Ios, &uBuf, cbBuf, enmClass);
     2329                    if (!ASMMemIsAllU8(&uBuf.ab[cbBuf], sizeof(uBuf) - cbBuf, 0xfe))
     2330                        RTTestIFailed("%s/%#x: Touched memory beyond end of buffer (rcNt=%#x)", pszClass, cbBuf, rcNt);
     2331                    if (cbBuf < cbMin)
     2332                    {
     2333                        if (rcNt != STATUS_INFO_LENGTH_MISMATCH)
     2334                            RTTestIFailed("%s/%#x: %#x, expected STATUS_INFO_LENGTH_MISMATCH", pszClass, cbBuf, rcNt);
     2335                        if (Ios.Status != VirginIos.Status || Ios.Information != VirginIos.Information)
     2336                            RTTestIFailed("%s/%#x: I/O status block was modified (STATUS_INFO_LENGTH_MISMATCH): %#x %#zx",
     2337                                          pszClass, cbBuf, Ios.Status, Ios.Information);
     2338                    }
     2339                    else if (cbBuf < cbActualMin)
     2340                    {
     2341                        if (   rcNt != STATUS_BUFFER_OVERFLOW
     2342                            /* RDR2/w10 returns success if the buffer can hold exactly the share name: */
     2343                            && !(   rcNt == STATUS_SUCCESS
     2344                                 && enmClass == FileNetworkPhysicalNameInformation)
     2345                            )
     2346                            RTTestIFailed("%s/%#x: %#x, expected STATUS_BUFFER_OVERFLOW", pszClass, cbBuf, rcNt);
     2347                    }
     2348                    else
     2349                    {
     2350                        if (   !ASMMemIsAllU8(&uBuf.ab[cbActualMin], sizeof(uBuf) - cbActualMin, 0xfe)
     2351                            && enmClass != FileStorageReserveIdInformation /* NTFS bug? */ )
     2352                            RTTestIFailed("%s/%#x: Touched memory beyond returned length (cbActualMin=%#x, rcNt=%#x)",
     2353                                          pszClass, cbBuf, cbActualMin, rcNt);
     2354
     2355                    }
     2356                }
     2357            }
     2358        }
     2359        else
     2360        {
     2361            if (!g_aNtQueryInfoFileClasses[i].fQuery)
     2362            {
     2363                if (rcNt != STATUS_INVALID_INFO_CLASS)
     2364                    RTTestIFailed("%s/%#x: %#x, expected STATUS_INVALID_INFO_CLASS", pszClass, cbBuf, rcNt);
     2365            }
     2366            else if (   rcNt != STATUS_INVALID_INFO_CLASS
     2367                     && rcNt != STATUS_INVALID_PARAMETER
     2368                     && !(rcNt == STATUS_OBJECT_NAME_NOT_FOUND && enmClass == FileAlternateNameInformation)
     2369                     && !(   rcNt == STATUS_ACCESS_DENIED
     2370                          && (   enmClass == FileIoPriorityHintInformation
     2371                              || enmClass == FileSfioReserveInformation
     2372                              || enmClass == FileStatLxInformation))
     2373                     && !(rcNt == STATUS_NO_SUCH_DEVICE && enmClass == FileNumaNodeInformation)
     2374                     && !(    rcNt == STATUS_NOT_SUPPORTED /* RDR2/W10-17763 */
     2375                          &&  (   enmClass == FileMailslotQueryInformation
     2376                               || enmClass == FileObjectIdInformation
     2377                               || enmClass == FileReparsePointInformation
     2378                               || enmClass == FileSfioVolumeInformation
     2379                               || enmClass == FileHardLinkInformation
     2380                               || enmClass == FileStandardLinkInformation
     2381                               || enmClass == FileHardLinkFullIdInformation
     2382                               || enmClass == FileDesiredStorageClassInformation
     2383                               || enmClass == FileStatInformation
     2384                               || enmClass == FileCaseSensitiveInformation
     2385                               || enmClass == FileStorageReserveIdInformation
     2386                               || enmClass == FileCaseSensitiveInformationForceAccessCheck))
     2387                    )
     2388                RTTestIFailed("%s/%#x: %#x", pszClass, cbBuf, rcNt);
     2389            if (Ios.Status != VirginIos.Status || Ios.Information != VirginIos.Information)
     2390                RTTestIFailed("%s/%#x: I/O status block was modified: %#x %#zx", pszClass, cbBuf, Ios.Status, Ios.Information);
     2391            if (!ASMMemIsAllU8(&uBuf, sizeof(uBuf), 0xff))
     2392                RTTestIFailed("%s/%#x: Buffer was touched in failure case!", pszClass, cbBuf);
     2393        }
     2394    }
     2395}
     2396
     2397
     2398void fsPerfNtQueryInfoFile(void)
     2399{
     2400    RTTestISub("NtQueryInformationFile");
     2401
     2402    /* On a regular file: */
     2403    RTFILE hFile1;
     2404    RTTESTI_CHECK_RC_RETV(RTFileOpen(&hFile1, InDir(RT_STR_TUPLE("file2qif")),
     2405                                     RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_NONE | RTFILE_O_WRITE), VINF_SUCCESS);
     2406    fsPerfNtQueryInfoFileWorker((HANDLE)RTFileToNative(hFile1));
     2407    RTTESTI_CHECK_RC(RTFileClose(hFile1), VINF_SUCCESS);
     2408
     2409    /* On a directory: */
     2410    HANDLE hDir1 = INVALID_HANDLE_VALUE;
     2411    RTTESTI_CHECK_RC(RTNtPathOpenDir(InDir(RT_STR_TUPLE("")), GENERIC_READ,
     2412                                     FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
     2413                                     FILE_OPEN, 0, &hDir1, NULL), VINF_SUCCESS);
     2414}
     2415
     2416
     2417void fsPerfNtQueryVolInfoFile(void)
     2418{
     2419    /** @todo */
     2420}
     2421
     2422#endif /* RT_OS_WINDOWS */
    20902423
    20912424void fsPerfFChMod(void)
     
    57526085
    57536086            case 'e':
    5754                 g_fManyFiles = true;
    5755                 g_fOpen      = true;
    5756                 g_fFStat     = true;
    5757                 g_fFChMod    = true;
    5758                 g_fFUtimes   = true;
    5759                 g_fStat      = true;
    5760                 g_fChMod     = true;
    5761                 g_fUtimes    = true;
    5762                 g_fRename    = true;
    5763                 g_fDirOpen   = true;
    5764                 g_fDirEnum   = true;
    5765                 g_fMkRmDir   = true;
    5766                 g_fStatVfs   = true;
    5767                 g_fRm        = true;
    5768                 g_fChSize    = true;
    5769                 g_fReadTests = true;
    5770                 g_fReadPerf  = true;
     6087                g_fManyFiles            = true;
     6088                g_fOpen                 = true;
     6089                g_fFStat                = true;
     6090#ifdef RT_OS_WINDOWS
     6091                g_fNtQueryInfoFile      = true;
     6092                g_fNtQueryVolInfoFile   = true;
     6093#endif
     6094                g_fFChMod               = true;
     6095                g_fFUtimes              = true;
     6096                g_fStat                 = true;
     6097                g_fChMod                = true;
     6098                g_fUtimes               = true;
     6099                g_fRename               = true;
     6100                g_fDirOpen              = true;
     6101                g_fDirEnum              = true;
     6102                g_fMkRmDir              = true;
     6103                g_fStatVfs              = true;
     6104                g_fRm                   = true;
     6105                g_fChSize               = true;
     6106                g_fReadTests            = true;
     6107                g_fReadPerf             = true;
    57716108#ifdef FSPERF_TEST_SENDFILE
    5772                 g_fSendFile  = true;
     6109                g_fSendFile             = true;
    57736110#endif
    57746111#ifdef RT_OS_LINUX
    5775                 g_fSplice    = true;
     6112                g_fSplice               = true;
    57766113#endif
    5777                 g_fWriteTests= true;
    5778                 g_fWritePerf = true;
    5779                 g_fSeek      = true;
    5780                 g_fFSync     = true;
    5781                 g_fMMap      = true;
    5782                 g_fCopy      = true;
    5783                 g_fRemote    = true;
     6114                g_fWriteTests           = true;
     6115                g_fWritePerf            = true;
     6116                g_fSeek                 = true;
     6117                g_fFSync                = true;
     6118                g_fMMap                 = true;
     6119                g_fCopy                 = true;
     6120                g_fRemote               = true;
    57846121                break;
    57856122
    57866123            case 'z':
    5787                 g_fManyFiles = false;
    5788                 g_fOpen      = false;
    5789                 g_fFStat     = false;
    5790                 g_fFChMod    = false;
    5791                 g_fFUtimes   = false;
    5792                 g_fStat      = false;
    5793                 g_fChMod     = false;
    5794                 g_fUtimes    = false;
    5795                 g_fRename    = false;
    5796                 g_fDirOpen   = false;
    5797                 g_fDirEnum   = false;
    5798                 g_fMkRmDir   = false;
    5799                 g_fStatVfs   = false;
    5800                 g_fRm        = false;
    5801                 g_fChSize    = false;
    5802                 g_fReadTests = false;
    5803                 g_fReadPerf  = false;
     6124                g_fManyFiles            = false;
     6125                g_fOpen                 = false;
     6126                g_fFStat                = false;
     6127#ifdef RT_OS_WINDOWS
     6128                g_fNtQueryInfoFile      = false;
     6129                g_fNtQueryVolInfoFile   = false;
     6130#endif
     6131                g_fFChMod               = false;
     6132                g_fFUtimes              = false;
     6133                g_fStat                 = false;
     6134                g_fChMod                = false;
     6135                g_fUtimes               = false;
     6136                g_fRename               = false;
     6137                g_fDirOpen              = false;
     6138                g_fDirEnum              = false;
     6139                g_fMkRmDir              = false;
     6140                g_fStatVfs              = false;
     6141                g_fRm                   = false;
     6142                g_fChSize               = false;
     6143                g_fReadTests            = false;
     6144                g_fReadPerf             = false;
    58046145#ifdef FSPERF_TEST_SENDFILE
    5805                 g_fSendFile  = false;
     6146                g_fSendFile             = false;
    58066147#endif
    58076148#ifdef RT_OS_LINUX
    5808                 g_fSplice    = false;
     6149                g_fSplice               = false;
    58096150#endif
    5810                 g_fWriteTests= false;
    5811                 g_fWritePerf = false;
    5812                 g_fSeek      = false;
    5813                 g_fFSync     = false;
    5814                 g_fMMap      = false;
    5815                 g_fCopy      = false;
    5816                 g_fRemote    = false;
     6151                g_fWriteTests           = false;
     6152                g_fWritePerf            = false;
     6153                g_fSeek                 = false;
     6154                g_fFSync                = false;
     6155                g_fMMap                 = false;
     6156                g_fCopy                 = false;
     6157                g_fRemote               = false;
    58176158                break;
    58186159
     
    58226163            CASE_OPT(Open);
    58236164            CASE_OPT(FStat);
     6165#ifdef RT_OS_WINDOWS
     6166            CASE_OPT(NtQueryInfoFile);
     6167            CASE_OPT(NtQueryVolInfoFile);
     6168#endif
    58246169            CASE_OPT(FChMod);
    58256170            CASE_OPT(FUtimes);
     
    60026347                if (g_fFStat)
    60036348                    fsPerfFStat();
     6349#ifdef RT_OS_WINDOWS
     6350                if (g_fNtQueryInfoFile)
     6351                    fsPerfNtQueryInfoFile();
     6352                if (g_fNtQueryVolInfoFile)
     6353                    fsPerfNtQueryVolInfoFile();
     6354#endif
    60046355                if (g_fFChMod)
    60056356                    fsPerfFChMod();
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette