ntdll/tests: Test NtQueryVolumeInformationFile calls on named pipe object.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1b2554c2c3
commit
4df0162caf
|
@ -73,6 +73,7 @@ static NTSTATUS (WINAPI *pNtCreateNamedPipeFile) (PHANDLE handle, ULONG access,
|
||||||
ULONG inbound_quota, ULONG outbound_quota,
|
ULONG inbound_quota, ULONG outbound_quota,
|
||||||
PLARGE_INTEGER timeout);
|
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 *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 *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 *pNtCancelIoFile) (HANDLE hFile, PIO_STATUS_BLOCK io_status);
|
||||||
static NTSTATUS (WINAPI *pNtCancelIoFileEx) (HANDLE hFile, IO_STATUS_BLOCK *iosb, IO_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(NtFsControlFile)
|
||||||
loadfunc(NtCreateNamedPipeFile)
|
loadfunc(NtCreateNamedPipeFile)
|
||||||
loadfunc(NtQueryInformationFile)
|
loadfunc(NtQueryInformationFile)
|
||||||
|
loadfunc(NtQueryVolumeInformationFile)
|
||||||
loadfunc(NtSetInformationFile)
|
loadfunc(NtSetInformationFile)
|
||||||
loadfunc(NtCancelIoFile)
|
loadfunc(NtCancelIoFile)
|
||||||
loadfunc(NtCancelIoFileEx)
|
loadfunc(NtCancelIoFileEx)
|
||||||
|
@ -1100,6 +1102,43 @@ static void read_pipe_test(ULONG pipe_flags, ULONG pipe_type)
|
||||||
CloseHandle(event);
|
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)
|
START_TEST(pipe)
|
||||||
{
|
{
|
||||||
if (!init_func_ptrs())
|
if (!init_func_ptrs())
|
||||||
|
@ -1141,4 +1180,6 @@ START_TEST(pipe)
|
||||||
read_pipe_test(PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE);
|
read_pipe_test(PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE);
|
||||||
trace("starting message read in message mode server -> client\n");
|
trace("starting message read in message mode server -> client\n");
|
||||||
read_pipe_test(PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE);
|
read_pipe_test(PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE);
|
||||||
|
|
||||||
|
test_volume_info();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1715,15 +1715,21 @@ typedef struct _RTL_HANDLE_TABLE
|
||||||
#define FILE_MAXIMUM_DISPOSITION 5
|
#define FILE_MAXIMUM_DISPOSITION 5
|
||||||
|
|
||||||
/* Characteristics of a File System */
|
/* Characteristics of a File System */
|
||||||
#define FILE_REMOVABLE_MEDIA 0x00000001
|
#define FILE_REMOVABLE_MEDIA 0x00000001
|
||||||
#define FILE_READ_ONLY_DEVICE 0x00000002
|
#define FILE_READ_ONLY_DEVICE 0x00000002
|
||||||
#define FILE_FLOPPY_DISKETTE 0x00000004
|
#define FILE_FLOPPY_DISKETTE 0x00000004
|
||||||
#define FILE_WRITE_ONE_MEDIA 0x00000008
|
#define FILE_WRITE_ONE_MEDIA 0x00000008
|
||||||
#define FILE_REMOTE_DEVICE 0x00000010
|
#define FILE_REMOTE_DEVICE 0x00000010
|
||||||
#define FILE_DEVICE_IS_MOUNTED 0x00000020
|
#define FILE_DEVICE_IS_MOUNTED 0x00000020
|
||||||
#define FILE_VIRTUAL_VOLUME 0x00000040
|
#define FILE_VIRTUAL_VOLUME 0x00000040
|
||||||
#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
|
#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
|
||||||
#define FILE_DEVICE_SECURE_OPEN 0x00000100
|
#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 */
|
/* options for NtCreateNamedPipeFile */
|
||||||
#define FILE_PIPE_INBOUND 0x00000000
|
#define FILE_PIPE_INBOUND 0x00000000
|
||||||
|
|
Loading…
Reference in New Issue