Jacek Caban : ntdll/tests: Test NtQueryVolumeInformationFile calls on named pipe object.

Alexandre Julliard julliard at winehq.org
Mon Sep 25 16:34:32 CDT 2017


Module: wine
Branch: master
Commit: 4df0162caf431d0069371e6c0776b83ed4c35735
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4df0162caf431d0069371e6c0776b83ed4c35735

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Sep 25 16:38:13 2017 +0200

ntdll/tests: Test NtQueryVolumeInformationFile calls on named pipe object.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/tests/pipe.c | 41 +++++++++++++++++++++++++++++++++++++++++
 include/winternl.h      | 24 +++++++++++++++---------
 2 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c
index f567e61..c448526 100644
--- a/dlls/ntdll/tests/pipe.c
+++ b/dlls/ntdll/tests/pipe.c
@@ -73,6 +73,7 @@ static NTSTATUS (WINAPI *pNtCreateNamedPipeFile) (PHANDLE handle, ULONG access,
                                         ULONG inbound_quota, ULONG outbound_quota,
                                         PLARGE_INTEGER timeout);
 static NTSTATUS (WINAPI *pNtQueryInformationFile) (IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInformationClass);
+static NTSTATUS (WINAPI *pNtQueryVolumeInformationFile)(HANDLE handle, PIO_STATUS_BLOCK io, void *buffer, ULONG length, FS_INFORMATION_CLASS info_class);
 static NTSTATUS (WINAPI *pNtSetInformationFile) (HANDLE handle, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS class);
 static NTSTATUS (WINAPI *pNtCancelIoFile) (HANDLE hFile, PIO_STATUS_BLOCK io_status);
 static NTSTATUS (WINAPI *pNtCancelIoFileEx) (HANDLE hFile, IO_STATUS_BLOCK *iosb, IO_STATUS_BLOCK *io_status);
@@ -94,6 +95,7 @@ static BOOL init_func_ptrs(void)
     loadfunc(NtFsControlFile)
     loadfunc(NtCreateNamedPipeFile)
     loadfunc(NtQueryInformationFile)
+    loadfunc(NtQueryVolumeInformationFile)
     loadfunc(NtSetInformationFile)
     loadfunc(NtCancelIoFile)
     loadfunc(NtCancelIoFileEx)
@@ -1100,6 +1102,43 @@ static void read_pipe_test(ULONG pipe_flags, ULONG pipe_type)
     CloseHandle(event);
 }
 
+static void test_volume_info(void)
+{
+    FILE_FS_DEVICE_INFORMATION *device_info;
+    IO_STATUS_BLOCK iosb;
+    HANDLE read, write;
+    char buffer[128];
+    NTSTATUS status;
+
+    if (!create_pipe_pair( &read, &write, FILE_FLAG_OVERLAPPED | PIPE_ACCESS_INBOUND,
+                           PIPE_TYPE_MESSAGE, 4096 )) return;
+
+    memset( buffer, 0xaa, sizeof(buffer) );
+    status = pNtQueryVolumeInformationFile( read, &iosb, buffer, sizeof(buffer), FileFsDeviceInformation );
+    todo_wine {
+    ok( status == STATUS_SUCCESS, "NtQueryVolumeInformationFile failed: %x\n", status );
+    ok( iosb.Information == sizeof(*device_info), "Information = %lu\n", iosb.Information );
+    device_info = (FILE_FS_DEVICE_INFORMATION*)buffer;
+    ok( device_info->DeviceType == FILE_DEVICE_NAMED_PIPE, "DeviceType = %u\n", device_info->DeviceType );
+    ok( !(device_info->Characteristics & ~FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL),
+        "Characteristics = %x\n", device_info->Characteristics );
+    }
+
+    memset( buffer, 0xaa, sizeof(buffer) );
+    status = pNtQueryVolumeInformationFile( write, &iosb, buffer, sizeof(buffer), FileFsDeviceInformation );
+    todo_wine {
+    ok( status == STATUS_SUCCESS, "NtQueryVolumeInformationFile failed: %x\n", status );
+    ok( iosb.Information == sizeof(*device_info), "Information = %lu\n", iosb.Information );
+    device_info = (FILE_FS_DEVICE_INFORMATION*)buffer;
+    ok( device_info->DeviceType == FILE_DEVICE_NAMED_PIPE, "DeviceType = %u\n", device_info->DeviceType );
+    ok( !(device_info->Characteristics & ~FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL),
+        "Characteristics = %x\n", device_info->Characteristics );
+    }
+
+    CloseHandle( read );
+    CloseHandle( write );
+}
+
 START_TEST(pipe)
 {
     if (!init_func_ptrs())
@@ -1141,4 +1180,6 @@ START_TEST(pipe)
     read_pipe_test(PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE);
     trace("starting message read in message mode server -> client\n");
     read_pipe_test(PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE);
+
+    test_volume_info();
 }
diff --git a/include/winternl.h b/include/winternl.h
index df20da5..ec8b387 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -1715,15 +1715,21 @@ typedef struct _RTL_HANDLE_TABLE
 #define FILE_MAXIMUM_DISPOSITION        5
 
 /* Characteristics of a File System */
-#define FILE_REMOVABLE_MEDIA            0x00000001
-#define FILE_READ_ONLY_DEVICE           0x00000002
-#define FILE_FLOPPY_DISKETTE            0x00000004
-#define FILE_WRITE_ONE_MEDIA            0x00000008
-#define FILE_REMOTE_DEVICE              0x00000010
-#define FILE_DEVICE_IS_MOUNTED          0x00000020
-#define FILE_VIRTUAL_VOLUME             0x00000040
-#define FILE_AUTOGENERATED_DEVICE_NAME  0x00000080
-#define FILE_DEVICE_SECURE_OPEN         0x00000100
+#define FILE_REMOVABLE_MEDIA                      0x00000001
+#define FILE_READ_ONLY_DEVICE                     0x00000002
+#define FILE_FLOPPY_DISKETTE                      0x00000004
+#define FILE_WRITE_ONE_MEDIA                      0x00000008
+#define FILE_REMOTE_DEVICE                        0x00000010
+#define FILE_DEVICE_IS_MOUNTED                    0x00000020
+#define FILE_VIRTUAL_VOLUME                       0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME            0x00000080
+#define FILE_DEVICE_SECURE_OPEN                   0x00000100
+#define FILE_CHARACTERISTIC_PNP_DEVICE            0x00000800
+#define FILE_CHARACTERISTIC_TS_DEVICE             0x00001000
+#define FILE_CHARACTERISTIC_WEBDAV_DEVICE         0x00002000
+#define FILE_CHARACTERISTIC_CSV                   0x00010000
+#define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL  0x00020000
+#define FILE_PORTABLE_DEVICE                      0x00040000
 
 /* options for NtCreateNamedPipeFile */
 #define FILE_PIPE_INBOUND               0x00000000




More information about the wine-cvs mailing list