From 023832206627277dda03a210e82fec16cbfaeb2a Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sun, 20 Apr 2014 18:15:41 +0000 Subject: [PATCH] =?UTF-8?q?[NTDLL=5FAPITEST]=20-=20Add=20test=20for=20NtQu?= =?UTF-8?q?eryVolumeInformationFile.=20Patch=20by=20V=C3=ADctor=20Mart?= =?UTF-8?q?=C3=ADnez.=20ROSTESTS-134=20#resolve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=62844 --- rostests/apitests/ntdll/CMakeLists.txt | 1 + .../ntdll/NtQueryVolumeInformationFile.c | 85 +++++++++++++++++++ rostests/apitests/ntdll/testlist.c | 2 + 3 files changed, 88 insertions(+) create mode 100644 rostests/apitests/ntdll/NtQueryVolumeInformationFile.c diff --git a/rostests/apitests/ntdll/CMakeLists.txt b/rostests/apitests/ntdll/CMakeLists.txt index bc6b6be5ee7..12afccf20f6 100644 --- a/rostests/apitests/ntdll/CMakeLists.txt +++ b/rostests/apitests/ntdll/CMakeLists.txt @@ -9,6 +9,7 @@ list(APPEND SOURCE NtMapViewOfSection.c NtProtectVirtualMemory.c NtQuerySystemEnvironmentValue.c + NtQueryVolumeInformationFile.c RtlBitmap.c RtlDetermineDosPathNameType.c RtlDoesFileExists.c diff --git a/rostests/apitests/ntdll/NtQueryVolumeInformationFile.c b/rostests/apitests/ntdll/NtQueryVolumeInformationFile.c new file mode 100644 index 00000000000..6de9859782e --- /dev/null +++ b/rostests/apitests/ntdll/NtQueryVolumeInformationFile.c @@ -0,0 +1,85 @@ +/* + * PROJECT: ReactOS API Tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: NtQueryVolumeInformationFile tests + * PROGRAMMER: Víctor Martínez Calvo + */ + +#define WIN32_NO_STATUS +#include +#include +#include + +START_TEST(NtQueryVolumeInformationFile) +{ + IO_STATUS_BLOCK IoStatusBlock; + FILE_FS_DEVICE_INFORMATION FileFsDevice; + OBJECT_ATTRIBUTES attr; + HANDLE handle; + WCHAR path[MAX_PATH]; + UNICODE_STRING pathW; + NTSTATUS status; + + /*Store a valid Handle*/ + GetWindowsDirectoryW(path, MAX_PATH); + RtlDosPathNameToNtPathName_U(path, &pathW, NULL, NULL); + + InitializeObjectAttributes(&attr, &pathW, OBJ_CASE_INSENSITIVE, NULL, NULL); + status = NtOpenFile(&handle, SYNCHRONIZE|FILE_LIST_DIRECTORY, &attr, &IoStatusBlock, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT); + + RtlFreeUnicodeString(&pathW); + + if (!NT_SUCCESS(status)) + { + skip("NtOpenFile failed: 0x%lx\n", status); + return; + } + + /*Testing VALID handle, with NULL IN parameters*/ + SetLastError(0xdeadb33f); + status = NtQueryVolumeInformationFile(handle, NULL, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation); + ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got 0x%lx\n", status); + ok(GetLastError() == 0xdeadb33f, "Expected 0xdeadb33f, got %lx\n", GetLastError()); + + SetLastError(0xcacacaca); + status = NtQueryVolumeInformationFile(handle, &IoStatusBlock, NULL, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation); + ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got 0x%lx\n", status); + ok(GetLastError() == 0xcacacaca, "Expected 0xcacacaca, got %lx\n", GetLastError()); + + SetLastError(0xdadadada); + status = NtQueryVolumeInformationFile(handle, &IoStatusBlock, &FileFsDevice, 0, FileFsDeviceInformation); + ok(status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got 0x%lx\n", status); + ok(GetLastError() == 0xdadadada, "Expected 0xdadadada, got %lx\n", GetLastError()); + + /*All valid, invalid FsInformationClass value.*/ + SetLastError(0xdeadbeef); + status = NtQueryVolumeInformationFile(handle, &IoStatusBlock, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), 0); + ok(status == STATUS_INVALID_INFO_CLASS, "Expected STATUS_INVALID_INFO_CLASS, got 0x%lx\n", status); + ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %lx\n", GetLastError()); + + /*Testing NULL handle*/ + SetLastError(0xdeadbeef); + status = NtQueryVolumeInformationFile(NULL, &IoStatusBlock, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation); + ok(status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got 0x%lx\n", status); + ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %lx\n", GetLastError()); + + /*Testing INVALID_HANDLE_VALUE*/ + SetLastError(0xdeaddead); + status = NtQueryVolumeInformationFile((HANDLE)(-1), &IoStatusBlock, &FileFsDevice, sizeof(FILE_FS_DEVICE_INFORMATION), FileFsDeviceInformation); + ok(status == STATUS_OBJECT_TYPE_MISMATCH, "Expected STATUS_OBJECT_TYPE_MISMATCH, got 0x%lx\n", status); + ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead, got %lx\n", GetLastError()); + + /*Now all NULL. Priority check: FsInformationClass value!*/ + SetLastError(0xcacacaca); + status = NtQueryVolumeInformationFile(NULL, NULL, NULL, 0, 0); + ok(status == STATUS_INVALID_INFO_CLASS, "Expected STATUS_INVALID_INFO_CLASS, got 0x%lx\n", status); + ok(GetLastError() == 0xcacacaca, "Expected 0xcacacaca, got %lx\n", GetLastError()); + + /*Almost all NULL. Then it checks against the Length!*/ + SetLastError(0xdeadbeef); + status = NtQueryVolumeInformationFile(NULL, NULL, NULL, 0, FileFsDeviceInformation); + ok(status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got 0x%lx\n", status); + ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %lx\n", GetLastError()); + + NtClose(handle); +} diff --git a/rostests/apitests/ntdll/testlist.c b/rostests/apitests/ntdll/testlist.c index 0f45d260e6b..ff74480ea57 100644 --- a/rostests/apitests/ntdll/testlist.c +++ b/rostests/apitests/ntdll/testlist.c @@ -12,6 +12,7 @@ extern void func_NtFreeVirtualMemory(void); extern void func_NtMapViewOfSection(void); extern void func_NtProtectVirtualMemory(void); extern void func_NtQuerySystemEnvironmentValue(void); +extern void func_NtQueryVolumeInformationFile(void); extern void func_NtSystemInformation(void); extern void func_RtlBitmap(void); extern void func_RtlDetermineDosPathNameType(void); @@ -39,6 +40,7 @@ const struct test winetest_testlist[] = { "NtMapViewOfSection", func_NtMapViewOfSection }, { "NtProtectVirtualMemory", func_NtProtectVirtualMemory }, { "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue }, + { "NtQueryVolumeInformationFile", func_NtQueryVolumeInformationFile }, { "NtSystemInformation", func_NtSystemInformation }, { "RtlBitmapApi", func_RtlBitmap }, { "RtlDetermineDosPathNameType", func_RtlDetermineDosPathNameType },