From cd4dc08b30eeb66e24bc29a632200604a9af8e70 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 9 Oct 2017 11:48:03 -0500 Subject: [PATCH] ntdll/tests: Don't abort if NtCancelFileIoEx() is missing. Signed-off-by: Zebediah Figura Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/ntdll/tests/pipe.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c index a619fee41ba..acead4e8354 100644 --- a/dlls/ntdll/tests/pipe.c +++ b/dlls/ntdll/tests/pipe.c @@ -98,10 +98,10 @@ static BOOL init_func_ptrs(void) loadfunc(NtQueryVolumeInformationFile) loadfunc(NtSetInformationFile) loadfunc(NtCancelIoFile) - loadfunc(NtCancelIoFileEx) loadfunc(RtlInitUnicodeString) /* not fatal */ + pNtCancelIoFileEx = (void *)GetProcAddress(module, "NtCancelIoFileEx"); module = GetModuleHandleA("kernel32.dll"); pOpenThread = (void *)GetProcAddress(module, "OpenThread"); pQueueUserAPC = (void *)GetProcAddress(module, "QueueUserAPC"); @@ -516,21 +516,27 @@ static void test_cancelio(void) CloseHandle(hPipe); - res = create_pipe(&hPipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */); - ok(!res, "NtCreateNamedPipeFile returned %x\n", res); + if (pNtCancelIoFileEx) + { + res = create_pipe(&hPipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */); + ok(!res, "NtCreateNamedPipeFile returned %x\n", res); - memset(&iosb, 0x55, sizeof(iosb)); - res = listen_pipe(hPipe, hEvent, &iosb, FALSE); - ok(res == STATUS_PENDING, "NtFsControlFile returned %x\n", res); + memset(&iosb, 0x55, sizeof(iosb)); + res = listen_pipe(hPipe, hEvent, &iosb, FALSE); + ok(res == STATUS_PENDING, "NtFsControlFile returned %x\n", res); - res = pNtCancelIoFileEx(hPipe, &iosb, &cancel_sb); - ok(!res, "NtCancelIoFileEx returned %x\n", res); + res = pNtCancelIoFileEx(hPipe, &iosb, &cancel_sb); + ok(!res, "NtCancelIoFileEx returned %x\n", res); - ok(U(iosb).Status == STATUS_CANCELLED, "Wrong iostatus %x\n", U(iosb).Status); - ok(WaitForSingleObject(hEvent, 0) == 0, "hEvent not signaled\n"); + ok(U(iosb).Status == STATUS_CANCELLED, "Wrong iostatus %x\n", U(iosb).Status); + ok(WaitForSingleObject(hEvent, 0) == 0, "hEvent not signaled\n"); + + CloseHandle(hPipe); + } + else + win_skip("NtCancelIoFileEx not available\n"); CloseHandle(hEvent); - CloseHandle(hPipe); } static void _check_pipe_handle_state(int line, HANDLE handle, ULONG read, ULONG completion) @@ -1094,6 +1100,8 @@ static void read_pipe_test(ULONG pipe_flags, ULONG pipe_type) CloseHandle( read ); CloseHandle( write ); } + else + win_skip("NtCancelIoFileEx not available\n"); CloseHandle(event); }