Changeset 78486 in vbox
- Timestamp:
- May 13, 2019 11:21:46 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
include/iprt/nt/nt.h (modified) (3 diffs)
-
src/VBox/ValidationKit/utils/fs/FsPerf.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/nt/nt.h
r78303 r78486 1609 1609 NTSYSAPI NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FS_INFORMATION_CLASS); 1610 1610 1611 typedef 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; 1625 typedef FILE_DIRECTORY_INFORMATION *PFILE_DIRECTORY_INFORMATION; 1626 typedef 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; 1641 typedef FILE_FULL_DIR_INFORMATION *PFILE_FULL_DIR_INFORMATION; 1611 1642 typedef struct _FILE_BOTH_DIR_INFORMATION 1612 1643 { … … 1651 1682 } FILE_NAME_INFORMATION; 1652 1683 typedef FILE_NAME_INFORMATION *PFILE_NAME_INFORMATION; 1684 typedef FILE_NAME_INFORMATION FILE_NETWORK_PHYSICAL_NAME_INFORMATION; 1685 typedef FILE_NETWORK_PHYSICAL_NAME_INFORMATION *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION; 1686 typedef struct _FILE_INTERNAL_INFORMATION 1687 { 1688 LARGE_INTEGER IndexNumber; 1689 } FILE_INTERNAL_INFORMATION; 1690 typedef FILE_INTERNAL_INFORMATION *PFILE_INTERNAL_INFORMATION; 1691 typedef struct _FILE_EA_INFORMATION 1692 { 1693 ULONG EaSize; 1694 } FILE_EA_INFORMATION; 1695 typedef FILE_EA_INFORMATION *PFILE_EA_INFORMATION; 1696 typedef struct _FILE_ACCESS_INFORMATION 1697 { 1698 ACCESS_MASK AccessFlags; 1699 } FILE_ACCESS_INFORMATION; 1700 typedef FILE_ACCESS_INFORMATION *PFILE_ACCESS_INFORMATION; 1701 typedef 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; 1712 typedef FILE_RENAME_INFORMATION *PFILE_RENAME_INFORMATION; 1713 typedef 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; 1724 typedef FILE_LINK_INFORMATION *PFILE_LINK_INFORMATION; 1725 typedef struct _FILE_NAMES_INFORMATION 1726 { 1727 ULONG NextEntryOffset; 1728 ULONG FileIndex; 1729 ULONG FileNameLength; 1730 WCHAR FileName[1]; 1731 } FILE_NAMES_INFORMATION; 1732 typedef FILE_NAMES_INFORMATION *PFILE_NAMES_INFORMATION; 1733 typedef struct _FILE_DISPOSITION_INFORMATION 1734 { 1735 BOOLEAN DeleteFile; 1736 } FILE_DISPOSITION_INFORMATION; 1737 typedef FILE_DISPOSITION_INFORMATION *PFILE_DISPOSITION_INFORMATION; 1738 typedef struct _FILE_POSITION_INFORMATION 1739 { 1740 LARGE_INTEGER CurrentByteOffset; 1741 } FILE_POSITION_INFORMATION; 1742 typedef FILE_POSITION_INFORMATION *PFILE_POSITION_INFORMATION; 1743 typedef 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; 1751 typedef FILE_FULL_EA_INFORMATION *PFILE_FULL_EA_INFORMATION; 1752 typedef struct _FILE_MODE_INFORMATION 1753 { 1754 ULONG Mode; 1755 } FILE_MODE_INFORMATION; 1756 typedef FILE_MODE_INFORMATION *PFILE_MODE_INFORMATION; 1757 typedef struct _FILE_ALIGNMENT_INFORMATION 1758 { 1759 ULONG AlignmentRequirement; 1760 } FILE_ALIGNMENT_INFORMATION; 1761 typedef FILE_ALIGNMENT_INFORMATION *PFILE_ALIGNMENT_INFORMATION; 1762 typedef 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; 1774 typedef FILE_ALL_INFORMATION *PFILE_ALL_INFORMATION; 1775 typedef struct _FILE_ALLOCATION_INFORMATION 1776 { 1777 LARGE_INTEGER AllocationSize; 1778 } FILE_ALLOCATION_INFORMATION; 1779 typedef FILE_ALLOCATION_INFORMATION *PFILE_ALLOCATION_INFORMATION; 1780 typedef struct _FILE_END_OF_FILE_INFORMATION 1781 { 1782 LARGE_INTEGER EndOfFile; 1783 } FILE_END_OF_FILE_INFORMATION; 1784 typedef FILE_END_OF_FILE_INFORMATION *PFILE_END_OF_FILE_INFORMATION; 1785 typedef 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; 1793 typedef FILE_STREAM_INFORMATION *PFILE_STREAM_INFORMATION; 1794 typedef struct _FILE_PIPE_INFORMATION 1795 { 1796 ULONG ReadMode; 1797 ULONG CompletionMode; 1798 } FILE_PIPE_INFORMATION; 1799 typedef FILE_PIPE_INFORMATION *PFILE_PIPE_INFORMATION; 1800 1801 typedef 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; 1814 typedef FILE_PIPE_LOCAL_INFORMATION *PFILE_PIPE_LOCAL_INFORMATION; 1815 1816 typedef struct _FILE_PIPE_REMOTE_INFORMATION 1817 { 1818 LARGE_INTEGER CollectDataTime; 1819 ULONG MaximumCollectionCount; 1820 } FILE_PIPE_REMOTE_INFORMATION; 1821 typedef FILE_PIPE_REMOTE_INFORMATION *PFILE_PIPE_REMOTE_INFORMATION; 1822 typedef 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; 1830 typedef FILE_MAILSLOT_QUERY_INFORMATION *PFILE_MAILSLOT_QUERY_INFORMATION; 1831 typedef struct _FILE_MAILSLOT_SET_INFORMATION 1832 { 1833 PLARGE_INTEGER ReadTimeout; 1834 } FILE_MAILSLOT_SET_INFORMATION; 1835 typedef FILE_MAILSLOT_SET_INFORMATION *PFILE_MAILSLOT_SET_INFORMATION; 1836 typedef 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; 1845 typedef FILE_COMPRESSION_INFORMATION *PFILE_COMPRESSION_INFORMATION; 1846 typedef 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; 1861 typedef FILE_OBJECTID_INFORMATION *PFILE_OBJECTID_INFORMATION; 1862 typedef struct _FILE_COMPLETION_INFORMATION 1863 { 1864 HANDLE Port; 1865 PVOID Key; 1866 } FILE_COMPLETION_INFORMATION; 1867 typedef FILE_COMPLETION_INFORMATION *PFILE_COMPLETION_INFORMATION; 1868 typedef struct _FILE_MOVE_CLUSTER_INFORMATION 1869 { 1870 ULONG ClusterCount; 1871 HANDLE RootDirectory; 1872 ULONG FileNameLength; 1873 WCHAR FileName[1]; 1874 } FILE_MOVE_CLUSTER_INFORMATION; 1875 typedef FILE_MOVE_CLUSTER_INFORMATION *PFILE_MOVE_CLUSTER_INFORMATION; 1876 typedef 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; 1886 typedef FILE_QUOTA_INFORMATION *PFILE_QUOTA_INFORMATION; 1887 typedef struct _FILE_REPARSE_POINT_INFORMATION 1888 { 1889 LONGLONG FileReference; 1890 ULONG Tag; 1891 } FILE_REPARSE_POINT_INFORMATION; 1892 typedef FILE_REPARSE_POINT_INFORMATION *PFILE_REPARSE_POINT_INFORMATION; 1653 1893 typedef struct _FILE_NETWORK_OPEN_INFORMATION 1654 1894 { … … 1662 1902 } FILE_NETWORK_OPEN_INFORMATION; 1663 1903 typedef FILE_NETWORK_OPEN_INFORMATION *PFILE_NETWORK_OPEN_INFORMATION; 1904 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION 1905 { 1906 ULONG FileAttributes; 1907 ULONG ReparseTag; 1908 } FILE_ATTRIBUTE_TAG_INFORMATION; 1909 typedef FILE_ATTRIBUTE_TAG_INFORMATION *PFILE_ATTRIBUTE_TAG_INFORMATION; 1910 typedef struct _FILE_TRACKING_INFORMATION 1911 { 1912 HANDLE DestinationFile; 1913 ULONG ObjectInformationLength; 1914 CHAR ObjectInformation[1]; 1915 } FILE_TRACKING_INFORMATION; 1916 typedef FILE_TRACKING_INFORMATION *PFILE_TRACKING_INFORMATION; 1917 typedef 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; 1935 typedef FILE_ID_BOTH_DIR_INFORMATION *PFILE_ID_BOTH_DIR_INFORMATION; 1936 typedef 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; 1952 typedef FILE_ID_FULL_DIR_INFORMATION *PFILE_ID_FULL_DIR_INFORMATION; 1953 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION 1954 { 1955 LARGE_INTEGER ValidDataLength; 1956 } FILE_VALID_DATA_LENGTH_INFORMATION; 1957 typedef FILE_VALID_DATA_LENGTH_INFORMATION *PFILE_VALID_DATA_LENGTH_INFORMATION; 1958 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION 1959 { 1960 ULONG Flags; 1961 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION; 1962 typedef FILE_IO_COMPLETION_NOTIFICATION_INFORMATION *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; 1963 typedef enum _IO_PRIORITY_HINT 1964 { 1965 IoPriorityVeryLow = 0, 1966 IoPriorityLow, 1967 IoPriorityNormal, 1968 IoPriorityHigh, 1969 IoPriorityCritical, 1970 MaxIoPriorityTypes 1971 } IO_PRIORITY_HINT; 1972 AssertCompileSize(IO_PRIORITY_HINT, sizeof(int)); 1973 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION 1974 { 1975 IO_PRIORITY_HINT PriorityHint; 1976 } FILE_IO_PRIORITY_HINT_INFORMATION; 1977 typedef FILE_IO_PRIORITY_HINT_INFORMATION *PFILE_IO_PRIORITY_HINT_INFORMATION; 1978 typedef 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; 1987 typedef FILE_SFIO_RESERVE_INFORMATION *PFILE_SFIO_RESERVE_INFORMATION; 1988 typedef struct _FILE_SFIO_VOLUME_INFORMATION 1989 { 1990 ULONG MaximumRequestsPerPeriod; 1991 ULONG MinimumPeriod; 1992 ULONG MinimumTransferSize; 1993 } FILE_SFIO_VOLUME_INFORMATION; 1994 typedef FILE_SFIO_VOLUME_INFORMATION *PFILE_SFIO_VOLUME_INFORMATION; 1995 typedef struct _FILE_LINK_ENTRY_INFORMATION 1996 { 1997 ULONG NextEntryOffset; 1998 LONGLONG ParentFileId; 1999 ULONG FileNameLength; 2000 WCHAR FileName[1]; 2001 } FILE_LINK_ENTRY_INFORMATION; 2002 typedef FILE_LINK_ENTRY_INFORMATION *PFILE_LINK_ENTRY_INFORMATION; 2003 typedef struct _FILE_LINKS_INFORMATION 2004 { 2005 ULONG BytesNeeded; 2006 ULONG EntriesReturned; 2007 FILE_LINK_ENTRY_INFORMATION Entry; 2008 } FILE_LINKS_INFORMATION; 2009 typedef FILE_LINKS_INFORMATION *PFILE_LINKS_INFORMATION; 2010 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION 2011 { 2012 ULONG NumberOfProcessIdsInList; 2013 ULONG_PTR ProcessIdList[1]; 2014 } FILE_PROCESS_IDS_USING_FILE_INFORMATION; 2015 typedef FILE_PROCESS_IDS_USING_FILE_INFORMATION *PFILE_PROCESS_IDS_USING_FILE_INFORMATION; 2016 typedef 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; 2033 typedef FILE_ID_GLOBAL_TX_DIR_INFORMATION *PFILE_ID_GLOBAL_TX_DIR_INFORMATION; 2034 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION 2035 { 2036 BOOLEAN IsRemote; 2037 } FILE_IS_REMOTE_DEVICE_INFORMATION; 2038 typedef FILE_IS_REMOTE_DEVICE_INFORMATION *PFILE_IS_REMOTE_DEVICE_INFORMATION; 2039 typedef struct _FILE_NUMA_NODE_INFORMATION 2040 { 2041 USHORT NodeNumber; 2042 } FILE_NUMA_NODE_INFORMATION; 2043 typedef FILE_NUMA_NODE_INFORMATION *PFILE_NUMA_NODE_INFORMATION; 2044 typedef struct _FILE_STANDARD_LINK_INFORMATION 2045 { 2046 ULONG NumberOfAccessibleLinks; 2047 ULONG TotalNumberOfLinks; 2048 BOOLEAN DeletePending; 2049 BOOLEAN Directory; 2050 } FILE_STANDARD_LINK_INFORMATION; 2051 typedef FILE_STANDARD_LINK_INFORMATION *PFILE_STANDARD_LINK_INFORMATION; 2052 typedef 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; 2071 typedef FILE_REMOTE_PROTOCOL_INFORMATION *PFILE_REMOTE_PROTOCOL_INFORMATION; 2072 typedef struct _FILE_VOLUME_NAME_INFORMATION 2073 { 2074 ULONG DeviceNameLength; 2075 WCHAR DeviceName[1]; 2076 } FILE_VOLUME_NAME_INFORMATION; 2077 typedef FILE_VOLUME_NAME_INFORMATION *PFILE_VOLUME_NAME_INFORMATION; 2078 # ifndef FILE_INVALID_FILE_ID 2079 typedef struct _FILE_ID_128 2080 { 2081 BYTE Identifier[16]; 2082 } FILE_ID_128; 2083 typedef FILE_ID_128 *PFILE_ID_128; 2084 # endif 2085 typedef 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; 2102 typedef FILE_ID_EXTD_DIR_INFORMATION *PFILE_ID_EXTD_DIR_INFORMATION; 2103 typedef 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; 2122 typedef FILE_ID_EXTD_BOTH_DIR_INFORMATION *PFILE_ID_EXTD_BOTH_DIR_INFORMATION; 2123 typedef struct _FILE_ID_INFORMATION 2124 { 2125 ULONGLONG VolumeSerialNumber; 2126 FILE_ID_128 FileId; 2127 } FILE_ID_INFORMATION; 2128 typedef FILE_ID_INFORMATION *PFILE_ID_INFORMATION; 2129 typedef 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; 2136 typedef FILE_LINK_ENTRY_FULL_ID_INFORMATION *PFILE_LINK_ENTRY_FULL_ID_INFORMATION; 2137 typedef 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; 2142 typedef FILE_LINKS_FULL_ID_INFORMATION *PFILE_LINKS_FULL_ID_INFORMATION; 2143 typedef struct _FILE_DISPOSITION_INFORMATION_EX 2144 { 2145 ULONG Flags; 2146 } FILE_DISPOSITION_INFORMATION_EX; 2147 typedef FILE_DISPOSITION_INFORMATION_EX *PFILE_DISPOSITION_INFORMATION_EX; 2148 typedef struct _FILE_DESIRED_STORAGE_CLASS_INFORMATION 2149 { 2150 /*FILE_STORAGE_TIER_CLASS*/ ULONG Class; 2151 ULONG Flags; 2152 } FILE_DESIRED_STORAGE_CLASS_INFORMATION; 2153 typedef FILE_DESIRED_STORAGE_CLASS_INFORMATION *PFILE_DESIRED_STORAGE_CLASS_INFORMATION; 2154 typedef 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; 2168 typedef FILE_STAT_INFORMATION *PFILE_STAT_INFORMATION; 2169 typedef 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; 2189 typedef FILE_STAT_LX_INFORMATION *PFILE_STAT_LX_INFORMATION; 2190 typedef struct _FILE_CASE_SENSITIVE_INFORMATION 2191 { 2192 ULONG Flags; 2193 } FILE_CASE_SENSITIVE_INFORMATION; 2194 typedef FILE_CASE_SENSITIVE_INFORMATION *PFILE_CASE_SENSITIVE_INFORMATION; 2195 1664 2196 typedef enum _FILE_INFORMATION_CLASS 1665 2197 { -
trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp
r78379 r78486 273 273 kCmdOpt_FStat, 274 274 kCmdOpt_NoFStat, 275 #ifdef RT_OS_WINDOWS 276 kCmdOpt_NtQueryInfoFile, 277 kCmdOpt_NoNtQueryInfoFile, 278 kCmdOpt_NtQueryVolInfoFile, 279 kCmdOpt_NoNtQueryVolInfoFile, 280 #endif 275 281 kCmdOpt_FChMod, 276 282 kCmdOpt_NoFChMod, … … 348 354 static const RTGETOPTDEF g_aCmdOptions[] = 349 355 { 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 }, 398 410 #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 }, 401 413 #endif 402 414 #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 }, 405 417 #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() */ 435 447 }; 436 448 … … 451 463 /** @name Selected subtest 452 464 * @{ */ 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; 465 static bool g_fManyFiles = true; 466 static bool g_fOpen = true; 467 static bool g_fFStat = true; 468 #ifdef RT_OS_WINDOWS 469 static bool g_fNtQueryInfoFile = true; 470 static bool g_fNtQueryVolInfoFile = true; 471 #endif 472 static bool g_fFChMod = true; 473 static bool g_fFUtimes = true; 474 static bool g_fStat = true; 475 static bool g_fChMod = true; 476 static bool g_fUtimes = true; 477 static bool g_fRename = true; 478 static bool g_fDirOpen = true; 479 static bool g_fDirEnum = true; 480 static bool g_fMkRmDir = true; 481 static bool g_fStatVfs = true; 482 static bool g_fRm = true; 483 static bool g_fChSize = true; 484 static bool g_fReadTests = true; 485 static bool g_fReadPerf = true; 470 486 #ifdef FSPERF_TEST_SENDFILE 471 static bool g_fSendFile = true;487 static bool g_fSendFile = true; 472 488 #endif 473 489 #ifdef RT_OS_LINUX 474 static bool g_fSplice = true;490 static bool g_fSplice = true; 475 491 #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;492 static bool g_fWriteTests = true; 493 static bool g_fWritePerf = true; 494 static bool g_fSeek = true; 495 static bool g_fFSync = true; 496 static bool g_fMMap = true; 497 static bool g_fCopy = true; 498 static bool g_fRemote = true; 483 499 /** @} */ 484 500 … … 2088 2104 } 2089 2105 2106 #ifdef RT_OS_WINDOWS 2107 /** 2108 * Nt(Query|Set|QueryDir)Information(File|) information class info. 2109 */ 2110 static 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 2201 void 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 2398 void 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 2417 void fsPerfNtQueryVolInfoFile(void) 2418 { 2419 /** @todo */ 2420 } 2421 2422 #endif /* RT_OS_WINDOWS */ 2090 2423 2091 2424 void fsPerfFChMod(void) … … 5752 6085 5753 6086 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; 5771 6108 #ifdef FSPERF_TEST_SENDFILE 5772 g_fSendFile = true;6109 g_fSendFile = true; 5773 6110 #endif 5774 6111 #ifdef RT_OS_LINUX 5775 g_fSplice = true;6112 g_fSplice = true; 5776 6113 #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; 5784 6121 break; 5785 6122 5786 6123 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; 5804 6145 #ifdef FSPERF_TEST_SENDFILE 5805 g_fSendFile = false;6146 g_fSendFile = false; 5806 6147 #endif 5807 6148 #ifdef RT_OS_LINUX 5808 g_fSplice = false;6149 g_fSplice = false; 5809 6150 #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; 5817 6158 break; 5818 6159 … … 5822 6163 CASE_OPT(Open); 5823 6164 CASE_OPT(FStat); 6165 #ifdef RT_OS_WINDOWS 6166 CASE_OPT(NtQueryInfoFile); 6167 CASE_OPT(NtQueryVolInfoFile); 6168 #endif 5824 6169 CASE_OPT(FChMod); 5825 6170 CASE_OPT(FUtimes); … … 6002 6347 if (g_fFStat) 6003 6348 fsPerfFStat(); 6349 #ifdef RT_OS_WINDOWS 6350 if (g_fNtQueryInfoFile) 6351 fsPerfNtQueryInfoFile(); 6352 if (g_fNtQueryVolInfoFile) 6353 fsPerfNtQueryVolInfoFile(); 6354 #endif 6004 6355 if (g_fFChMod) 6005 6356 fsPerfFChMod();
Note:
See TracChangeset
for help on using the changeset viewer.

