ntdll/tests: Don't abort if NtCancelFileIoEx() is missing. Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
diff --git a/dlls/ntdll/tests/pipe.c b/dlls/ntdll/tests/pipe.c index a619fee..acead4e 100644 --- a/dlls/ntdll/tests/pipe.c +++ b/dlls/ntdll/tests/pipe.c
@@ -98,10 +98,10 @@ 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 @@ 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 @@ CloseHandle( read ); CloseHandle( write ); } + else + win_skip("NtCancelIoFileEx not available\n"); CloseHandle(event); }