From 2775db3b79c818780711f4aa7d23266c4619d3f6 Mon Sep 17 00:00:00 2001 From: Jeff Latimer Date: Tue, 27 Feb 2007 23:41:55 +1100 Subject: [PATCH] ntdll: Framework for NtCreateMailslotFile tests. --- dlls/ntdll/tests/Makefile.in | 1 + dlls/ntdll/tests/file.c | 92 ++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 dlls/ntdll/tests/file.c diff --git a/dlls/ntdll/tests/Makefile.in b/dlls/ntdll/tests/Makefile.in index cccc4c59be8..3425b5c209e 100644 --- a/dlls/ntdll/tests/Makefile.in +++ b/dlls/ntdll/tests/Makefile.in @@ -14,6 +14,7 @@ CTESTS = \ generated.c \ info.c \ large_int.c \ + file.c \ om.c \ path.c \ port.c \ diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c new file mode 100644 index 00000000000..15ed4dc3491 --- /dev/null +++ b/dlls/ntdll/tests/file.c @@ -0,0 +1,92 @@ +/* Unit test suite for Ntdll file functions + * + * Copyright 2007 Jeff Latimer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES + * We use function pointers here as there is no import library for NTDLL on + * windows. + */ + +#include +#include + +#include "ntstatus.h" +/* Define WIN32_NO_STATUS so MSVC does not give us duplicate macro + * definition errors when we get to winnt.h + */ +#define WIN32_NO_STATUS + +#include "wine/test.h" +#include "winternl.h" + +static VOID (WINAPI *pRtlInitUnicodeString)( PUNICODE_STRING, LPCWSTR ); +static VOID (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING); +static NTSTATUS (WINAPI *pNtCreateMailslotFile)( PHANDLE, ULONG, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, + ULONG, ULONG, ULONG, PLARGE_INTEGER ); +static NTSTATUS (WINAPI *pNtClose)( PHANDLE ); + +static void nt_mailslot_test(void) +{ + HANDLE hslot; + ACCESS_MASK DesiredAccess; + OBJECT_ATTRIBUTES attr; + + ULONG CreateOptions; + ULONG MailslotQuota; + ULONG MaxMessageSize; + LARGE_INTEGER TimeOut; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS rc; + UNICODE_STRING str; + WCHAR buffer1[] = { '\\','?','?','\\','M','A','I','L','S','L','O','T','\\', + 'R',':','\\','F','R','E','D','\0' }; + + + pRtlInitUnicodeString(&str, buffer1); + InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); + DesiredAccess = CreateOptions = MailslotQuota = MaxMessageSize = 0; + TimeOut.QuadPart = -1; + + /* + * Test a valid call + */ + rc = pNtCreateMailslotFile(&hslot, DesiredAccess, + &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, + &TimeOut); + ok( rc == STATUS_SUCCESS, "Create MailslotFile failed rc = %x %u\n", rc, GetLastError()); + ok( hslot != 0, "Handle is invalid\n"); + + rc = pNtClose(hslot); + ok( rc == STATUS_SUCCESS, "NtClose failed\n"); + + pRtlFreeUnicodeString(&str); +} + +START_TEST(file) +{ + HMODULE hntdll = GetModuleHandleA("ntdll.dll"); + + if (hntdll) + { + pRtlFreeUnicodeString = (void *)GetProcAddress(hntdll, "RtlFreeUnicodeString"); + pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString"); + pNtCreateMailslotFile = (void *)GetProcAddress(hntdll, "NtCreateMailslotFile"); + pNtClose = (void *)GetProcAddress(hntdll, "NtClose"); + + nt_mailslot_test(); + } +}