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>
8 #define WIN32_NO_STATUS
10 #include <wine/test.h>
11 #include <ndk/ntndk.h>
13 START_TEST(NtQueryVolumeInformationFile
)
15 IO_STATUS_BLOCK IoStatusBlock
;
16 FILE_FS_DEVICE_INFORMATION FileFsDevice
;
17 OBJECT_ATTRIBUTES attr
;
23 /*Store a valid Handle*/
24 GetWindowsDirectoryW(path
, MAX_PATH
);
25 RtlDosPathNameToNtPathName_U(path
, &pathW
, NULL
, NULL
);
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
);
30 RtlFreeUnicodeString(&pathW
);
32 if (!NT_SUCCESS(status
))
34 skip("NtOpenFile failed: 0x%lx\n", status
);
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());
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());
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());
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());
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());
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());
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());
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());