2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite NPFS volume information test
5 * PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
11 #define MAX_INSTANCES 1
13 #define OUT_QUOTA 4096
18 IN HANDLE ServerHandle
)
21 IO_STATUS_BLOCK IoStatusBlock
;
22 FILE_FS_SIZE_INFORMATION FileFsSizeInfo
;
23 FILE_FS_DEVICE_INFORMATION FileFsDeviceInfo
;
24 FILE_FS_FULL_SIZE_INFORMATION FileFsFullSizeInfo
;
27 FILE_FS_VOLUME_INFORMATION
;
28 WCHAR PartialName
[10];
32 FILE_FS_ATTRIBUTE_INFORMATION
;
36 RtlFillMemory(&VolumeInfo
, sizeof(VolumeInfo
), 0xFF);
37 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
41 FileFsVolumeInformation
);
42 ok_eq_hex(Status
, STATUS_SUCCESS
);
43 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
44 ok_eq_long(VolumeInfo
.VolumeCreationTime
.LowPart
, 0);
45 ok_eq_long(VolumeInfo
.VolumeCreationTime
.HighPart
, 0);
46 ok_eq_ulong(VolumeInfo
.VolumeSerialNumber
, 0);
47 ok_bool_false(VolumeInfo
.SupportsObjects
, "VolumeInfo.SupportsObjects");
48 ok_eq_ulong(VolumeInfo
.VolumeLabelLength
, 18);
49 ok_eq_size(RtlCompareMemory(VolumeInfo
.VolumeLabel
, L
"NamedPipe", 18), 18);
50 ok_eq_wchar(VolumeInfo
.VolumeLabel
[9], 0xFFFF);
51 ok_eq_ulong(IoStatusBlock
.Information
, (FIELD_OFFSET(FILE_FS_VOLUME_INFORMATION
, VolumeLabel
) + 9 * sizeof(WCHAR
)));
53 RtlFillMemory(&VolumeInfo
, sizeof(VolumeInfo
), 0xFF);
54 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
57 sizeof(FILE_FS_VOLUME_INFORMATION
) + 2 * sizeof(WCHAR
),
58 FileFsVolumeInformation
);
59 ok_eq_hex(Status
, STATUS_BUFFER_OVERFLOW
);
60 ok_eq_hex(IoStatusBlock
.Status
, STATUS_BUFFER_OVERFLOW
);
61 ok_eq_long(VolumeInfo
.VolumeCreationTime
.LowPart
, 0);
62 ok_eq_long(VolumeInfo
.VolumeCreationTime
.HighPart
, 0);
63 ok_eq_ulong(VolumeInfo
.VolumeSerialNumber
, 0);
64 ok_bool_false(VolumeInfo
.SupportsObjects
, "VolumeInfo.SupportsObjects");
65 ok_eq_ulong(VolumeInfo
.VolumeLabelLength
, 18);
66 ok_eq_size(RtlCompareMemory(VolumeInfo
.VolumeLabel
, L
"NamedP", 10), 10);
67 ok_eq_wchar(VolumeInfo
.VolumeLabel
[5], 0xFFFF);
68 ok_eq_ulong(IoStatusBlock
.Information
, (FIELD_OFFSET(FILE_FS_VOLUME_INFORMATION
, VolumeLabel
) + 5 * sizeof(WCHAR
)));
70 RtlFillMemory(&FileFsSizeInfo
, sizeof(FileFsSizeInfo
), 0xFF);
71 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
74 sizeof(FileFsSizeInfo
),
75 FileFsSizeInformation
);
76 ok_eq_hex(Status
, STATUS_SUCCESS
);
77 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
78 ok_eq_longlong(FileFsSizeInfo
.TotalAllocationUnits
.QuadPart
, 0);
79 ok_eq_longlong(FileFsSizeInfo
.AvailableAllocationUnits
.QuadPart
, 0);
80 ok_eq_ulong(FileFsSizeInfo
.SectorsPerAllocationUnit
, 1);
81 ok_eq_ulong(FileFsSizeInfo
.BytesPerSector
, 1);
82 ok_eq_ulong(IoStatusBlock
.Information
, sizeof(FileFsSizeInfo
));
84 RtlFillMemory(&FileFsSizeInfo
, sizeof(FileFsSizeInfo
), 0xFF);
85 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
88 sizeof(FileFsSizeInfo
) - 4,
89 FileFsSizeInformation
);
90 ok_eq_hex(Status
, STATUS_SUCCESS
);
91 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
92 ok_eq_longlong(FileFsSizeInfo
.TotalAllocationUnits
.QuadPart
, 0);
93 ok_eq_longlong(FileFsSizeInfo
.AvailableAllocationUnits
.QuadPart
, 0);
94 ok_eq_ulong(FileFsSizeInfo
.SectorsPerAllocationUnit
, 1);
95 ok_eq_ulong(FileFsSizeInfo
.BytesPerSector
, 1);
96 ok_eq_ulong(IoStatusBlock
.Information
, sizeof(FileFsSizeInfo
));
98 RtlFillMemory(&FileFsDeviceInfo
, sizeof(FileFsDeviceInfo
), 0xFF);
99 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
102 sizeof(FileFsDeviceInfo
),
103 FileFsDeviceInformation
);
104 ok_eq_hex(Status
, STATUS_SUCCESS
);
105 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
106 ok_eq_ulong(FileFsDeviceInfo
.Characteristics
, 0);
107 ok_eq_ulong(FileFsDeviceInfo
.DeviceType
, FILE_DEVICE_NAMED_PIPE
);
108 ok_eq_ulong(IoStatusBlock
.Information
, sizeof(FileFsDeviceInfo
));
110 RtlFillMemory(&FileFsDeviceInfo
, sizeof(FileFsDeviceInfo
), 0xFF);
111 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
114 sizeof(FileFsDeviceInfo
) - 4,
115 FileFsDeviceInformation
);
116 ok_eq_hex(Status
, STATUS_SUCCESS
);
117 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
118 ok_eq_ulong(FileFsDeviceInfo
.Characteristics
, 0);
119 ok_eq_ulong(FileFsDeviceInfo
.DeviceType
, FILE_DEVICE_NAMED_PIPE
);
120 ok_eq_ulong(IoStatusBlock
.Information
, sizeof(FileFsDeviceInfo
));
122 RtlFillMemory(&AttributeInfo
, sizeof(AttributeInfo
), 0xFF);
123 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
126 sizeof(AttributeInfo
),
127 FileFsAttributeInformation
);
128 ok_eq_hex(Status
, STATUS_SUCCESS
);
129 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
130 ok_eq_ulong(AttributeInfo
.FileSystemAttributes
, FILE_CASE_PRESERVED_NAMES
);
131 ok_eq_long(AttributeInfo
.MaximumComponentNameLength
, 0xFFFFFFFF);
132 ok_eq_ulong(AttributeInfo
.FileSystemNameLength
, 8);
133 ok_eq_size(RtlCompareMemory(AttributeInfo
.FileSystemName
, L
"NPFS", 8), 8);
134 ok_eq_wchar(AttributeInfo
.FileSystemName
[4], 0xFFFF);
135 ok_eq_ulong(IoStatusBlock
.Information
, 20);
137 RtlFillMemory(&AttributeInfo
, sizeof(AttributeInfo
), 0xFF);
138 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
141 sizeof(FILE_FS_ATTRIBUTE_INFORMATION
) + 2 * sizeof(WCHAR
),
142 FileFsAttributeInformation
);
143 ok_eq_hex(Status
, STATUS_SUCCESS
);
144 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
145 ok_eq_ulong(AttributeInfo
.FileSystemAttributes
, FILE_CASE_PRESERVED_NAMES
);
146 ok_eq_long(AttributeInfo
.MaximumComponentNameLength
, 0xFFFFFFFF);
147 ok_eq_ulong(AttributeInfo
.FileSystemNameLength
, 8);
148 ok_eq_size(RtlCompareMemory(AttributeInfo
.FileSystemName
, L
"NPFS", 8), 8);
149 ok_eq_wchar(AttributeInfo
.FileSystemName
[4], 0xFFFF);
150 ok_eq_ulong(IoStatusBlock
.Information
, 20);
152 RtlFillMemory(&FileFsFullSizeInfo
, sizeof(FileFsFullSizeInfo
), 0xFF);
153 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
156 sizeof(FileFsFullSizeInfo
),
157 FileFsFullSizeInformation
);
158 ok_eq_hex(Status
, STATUS_SUCCESS
);
159 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
160 ok_eq_longlong(FileFsFullSizeInfo
.TotalAllocationUnits
.QuadPart
, 0);
161 ok_eq_longlong(FileFsFullSizeInfo
.CallerAvailableAllocationUnits
.QuadPart
, 0);
162 ok_eq_longlong(FileFsFullSizeInfo
.ActualAvailableAllocationUnits
.QuadPart
, 0);
163 ok_eq_ulong(FileFsFullSizeInfo
.SectorsPerAllocationUnit
, 0);
164 ok_eq_ulong(FileFsFullSizeInfo
.BytesPerSector
, 0);
165 ok_eq_ulong(IoStatusBlock
.Information
, sizeof(FileFsFullSizeInfo
));
167 RtlFillMemory(&FileFsFullSizeInfo
, sizeof(FileFsFullSizeInfo
), 0xFF);
168 Status
= ZwQueryVolumeInformationFile(ServerHandle
,
171 sizeof(FileFsFullSizeInfo
) - 4,
172 FileFsFullSizeInformation
);
173 ok_eq_hex(Status
, STATUS_SUCCESS
);
174 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
175 ok_eq_longlong(FileFsFullSizeInfo
.TotalAllocationUnits
.QuadPart
, 0);
176 ok_eq_longlong(FileFsFullSizeInfo
.CallerAvailableAllocationUnits
.QuadPart
, 0);
177 ok_eq_longlong(FileFsFullSizeInfo
.ActualAvailableAllocationUnits
.QuadPart
, 0);
178 ok_eq_ulong(FileFsFullSizeInfo
.SectorsPerAllocationUnit
, 0);
179 ok_eq_ulong(FileFsFullSizeInfo
.BytesPerSector
, 0);
180 ok_eq_ulong(IoStatusBlock
.Information
, sizeof(FileFsFullSizeInfo
));
183 static KSTART_ROUTINE RunTest
;
193 UNREFERENCED_PARAMETER(Context
);
195 ServerHandle
= INVALID_HANDLE_VALUE
;
196 Status
= NpCreatePipe(&ServerHandle
,
197 DEVICE_NAMED_PIPE L
"\\KmtestNpfsVolumeInfoTestPipe",
198 BYTE_STREAM
, QUEUE
, BYTE_STREAM
, DUPLEX
,
202 ok_eq_hex(Status
, STATUS_SUCCESS
);
203 ok(ServerHandle
!= NULL
&& ServerHandle
!= INVALID_HANDLE_VALUE
, "ServerHandle = %p\n", ServerHandle
);
204 if (!skip(NT_SUCCESS(Status
) && ServerHandle
!= NULL
&& ServerHandle
!= INVALID_HANDLE_VALUE
, "No pipe\n"))
206 TestVolumeInfo(ServerHandle
);
207 ObCloseHandle(ServerHandle
, KernelMode
);
211 START_TEST(NpfsVolumeInfo
)
215 Thread
= KmtStartThread(RunTest
, NULL
);
216 KmtFinishThread(Thread
, NULL
);