[SPIDER]
[reactos.git] / rostests / apitests / ntdll / NtQueryVolumeInformationFile.c
1 /*
2 * PROJECT: ReactOS API Tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: NtQueryVolumeInformationFile tests
5 * PROGRAMMER: Víctor Martínez Calvo <vicmarcal@gmail.com>
6 */
7
8 #define WIN32_NO_STATUS
9 #include <stdio.h>
10 #include <wine/test.h>
11 #include <ndk/ntndk.h>
12
13 START_TEST(NtQueryVolumeInformationFile)
14 {
15 IO_STATUS_BLOCK IoStatusBlock;
16 FILE_FS_DEVICE_INFORMATION FileFsDevice;
17 OBJECT_ATTRIBUTES attr;
18 HANDLE handle;
19 WCHAR path[MAX_PATH];
20 UNICODE_STRING pathW;
21 NTSTATUS status;
22
23 /*Store a valid Handle*/
24 GetWindowsDirectoryW(path, MAX_PATH);
25 RtlDosPathNameToNtPathName_U(path, &pathW, NULL, NULL);
26
27 InitializeObjectAttributes(&attr, &pathW, OBJ_CASE_INSENSITIVE, NULL, NULL);
28 status = NtOpenFile(&handle, SYNCHRONIZE|FILE_LIST_DIRECTORY, &attr, &IoStatusBlock, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT);
29
30 RtlFreeUnicodeString(&pathW);
31
32 if (!NT_SUCCESS(status))
33 {
34 skip("NtOpenFile failed: 0x%lx\n", status);
35 return;
36 }
37
38 /*Testing VALID handle, with NULL IN parameters*/
39 SetLastError(0xdeadb33f);
40 status = NtQueryVolumeInformationFile(handle, NULL, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation);
41 ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got 0x%lx\n", status);
42 ok(GetLastError() == 0xdeadb33f, "Expected 0xdeadb33f, got %lx\n", GetLastError());
43
44 SetLastError(0xcacacaca);
45 status = NtQueryVolumeInformationFile(handle, &IoStatusBlock, NULL, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation);
46 ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got 0x%lx\n", status);
47 ok(GetLastError() == 0xcacacaca, "Expected 0xcacacaca, got %lx\n", GetLastError());
48
49 SetLastError(0xdadadada);
50 status = NtQueryVolumeInformationFile(handle, &IoStatusBlock, &FileFsDevice, 0, FileFsDeviceInformation);
51 ok(status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got 0x%lx\n", status);
52 ok(GetLastError() == 0xdadadada, "Expected 0xdadadada, got %lx\n", GetLastError());
53
54 /*All valid, invalid FsInformationClass value.*/
55 SetLastError(0xdeadbeef);
56 status = NtQueryVolumeInformationFile(handle, &IoStatusBlock, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), 0);
57 ok(status == STATUS_INVALID_INFO_CLASS, "Expected STATUS_INVALID_INFO_CLASS, got 0x%lx\n", status);
58 ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %lx\n", GetLastError());
59
60 /*Testing NULL handle*/
61 SetLastError(0xdeadbeef);
62 status = NtQueryVolumeInformationFile(NULL, &IoStatusBlock, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation);
63 ok(status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got 0x%lx\n", status);
64 ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %lx\n", GetLastError());
65
66 /*Testing INVALID_HANDLE_VALUE*/
67 SetLastError(0xdeaddead);
68 status = NtQueryVolumeInformationFile((HANDLE)(-1), &IoStatusBlock, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation);
69 ok(status == STATUS_OBJECT_TYPE_MISMATCH, "Expected STATUS_OBJECT_TYPE_MISMATCH, got 0x%lx\n", status);
70 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead, got %lx\n", GetLastError());
71
72 /*Now all NULL. Priority check: FsInformationClass value!*/
73 SetLastError(0xcacacaca);
74 status = NtQueryVolumeInformationFile(NULL, NULL, NULL, 0, 0);
75 ok(status == STATUS_INVALID_INFO_CLASS, "Expected STATUS_INVALID_INFO_CLASS, got 0x%lx\n", status);
76 ok(GetLastError() == 0xcacacaca, "Expected 0xcacacaca, got %lx\n", GetLastError());
77
78 /*Almost all NULL. Then it checks against the Length!*/
79 SetLastError(0xdeadbeef);
80 status = NtQueryVolumeInformationFile(NULL, NULL, NULL, 0, FileFsDeviceInformation);
81 ok(status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got 0x%lx\n", status);
82 ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %lx\n", GetLastError());
83
84 NtClose(handle);
85 }