Sebastian Lackner : ntdll/tests: Add tests for accessing \\Device\\Null.

Alexandre Julliard julliard at wine.codeweavers.com
Mon May 18 07:57:33 CDT 2015


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

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Fri May 15 19:57:42 2015 +0200

ntdll/tests: Add tests for accessing \\Device\\Null.

---

 dlls/ntdll/tests/om.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)

diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index 96e1e6e..8939758 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -1032,6 +1032,105 @@ static void test_keyed_events(void)
     NtClose( event );
 }
 
+static void test_null_device(void)
+{
+    OBJECT_ATTRIBUTES attr;
+    IO_STATUS_BLOCK iosb;
+    UNICODE_STRING str;
+    NTSTATUS status;
+    DWORD num_bytes;
+    OVERLAPPED ov;
+    char buf[64];
+    HANDLE null;
+    BOOL ret;
+
+    memset(buf, 0xAA, sizeof(buf));
+    memset(&ov, 0, sizeof(ov));
+    ov.hEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
+
+    pRtlCreateUnicodeStringFromAsciiz(&str, "\\Device\\Null");
+    InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL);
+    status = pNtOpenSymbolicLinkObject(&null, SYMBOLIC_LINK_QUERY, &attr);
+    todo_wine
+    ok(status == STATUS_OBJECT_TYPE_MISMATCH,
+       "expected STATUS_OBJECT_TYPE_MISMATCH, got %08x\n", status);
+
+    status = pNtOpenFile(&null, GENERIC_READ | GENERIC_WRITE, &attr, &iosb,
+                         FILE_SHARE_READ | FILE_SHARE_WRITE, 0);
+    todo_wine
+    ok(status == STATUS_SUCCESS,
+       "expected STATUS_SUCCESS, got %08x\n", status);
+    if (status != STATUS_SUCCESS)
+    {
+        skip("opening \\Device\\Null failed, skipping read/write tests\n");
+        goto out;
+    }
+
+    SetLastError(0xdeadbeef);
+    ret = WriteFile(null, buf, sizeof(buf), &num_bytes, NULL);
+    ok(!ret, "WriteFile unexpectedly succeeded\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER,
+       "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = ReadFile(null, buf, sizeof(buf), &num_bytes, NULL);
+    ok(!ret, "ReadFile unexpectedly succeeded\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER,
+       "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+
+    num_bytes = 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    ret = WriteFile(null, buf, sizeof(buf), &num_bytes, &ov);
+    if (ret || GetLastError() != ERROR_IO_PENDING)
+    {
+        ok(ret, "WriteFile failed with error %u\n", GetLastError());
+    }
+    else
+    {
+        num_bytes = 0xdeadbeef;
+        ret = GetOverlappedResult(null, &ov, &num_bytes, TRUE);
+        ok(ret, "GetOverlappedResult failed with error %u\n", GetLastError());
+    }
+    ok(num_bytes == sizeof(buf), "expected num_bytes = %u, got %u\n",
+       (DWORD)sizeof(buf), num_bytes);
+
+    num_bytes = 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    ret = ReadFile(null, buf, sizeof(buf), &num_bytes, &ov);
+    if (ret || GetLastError() != ERROR_IO_PENDING)
+    {
+        ok(!ret, "ReadFile unexpectedly succeeded\n");
+    }
+    else
+    {
+        num_bytes = 0xdeadbeef;
+        ret = GetOverlappedResult(null, &ov, &num_bytes, TRUE);
+        ok(!ret, "GetOverlappedResult unexpectedly succeeded\n");
+    }
+    ok(GetLastError() == ERROR_HANDLE_EOF,
+       "expected ERROR_HANDLE_EOF, got %u\n", GetLastError());
+
+    pNtClose(null);
+
+out:
+    null = CreateFileA("\\\\.\\Null", GENERIC_READ | GENERIC_WRITE,
+                       FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+    ok(null == INVALID_HANDLE_VALUE, "CreateFileA unexpectedly succeeded\n");
+    ok(GetLastError() == ERROR_FILE_NOT_FOUND,
+       "expected ERROR_FILE_NOT_FOUND, got %u\n", GetLastError());
+
+    null = CreateFileA("\\\\.\\Device\\Null", GENERIC_READ | GENERIC_WRITE,
+                       FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+    ok(null == INVALID_HANDLE_VALUE, "CreateFileA unexpectedly succeeded\n");
+    ok(GetLastError() == ERROR_PATH_NOT_FOUND,
+       "expected ERROR_PATH_NOT_FOUND, got %u\n", GetLastError());
+
+    pRtlFreeUnicodeString(&str);
+    CloseHandle(ov.hEvent);
+}
+
 START_TEST(om)
 {
     HMODULE hntdll = GetModuleHandleA("ntdll.dll");
@@ -1081,4 +1180,5 @@ START_TEST(om)
     test_type_mismatch();
     test_event();
     test_keyed_events();
+    test_null_device();
 }




More information about the wine-cvs mailing list