[PATCH 1/4] ntdll/tests: Remove some workarounds for no longer supported versions of Windows.

Zebediah Figura z.figura12 at gmail.com
Thu Jul 16 20:00:34 CDT 2020


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/ntdll/tests/om.c | 387 ++++++++++++++++--------------------------
 1 file changed, 149 insertions(+), 238 deletions(-)

diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index c17b6ffa8db..5d7e4007853 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -25,7 +25,6 @@
 #include "winnt.h"
 #include "stdlib.h"
 
-static HANDLE   (WINAPI *pCreateWaitableTimerA)(SECURITY_ATTRIBUTES*, BOOL, LPCSTR);
 static BOOLEAN  (WINAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, LPCSTR);
 static VOID     (WINAPI *pRtlInitUnicodeString)( PUNICODE_STRING, LPCWSTR );
 static VOID     (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);
@@ -98,8 +97,7 @@ static void test_case_sensitive (void)
     ok(status == STATUS_SUCCESS, "Failed to create Mutant(%08x)\n", status);
 
     status = pNtCreateEvent(&Event, GENERIC_ALL, &attr, FALSE, FALSE);
-    ok(status == STATUS_OBJECT_NAME_COLLISION || status == STATUS_OBJECT_TYPE_MISMATCH,
-        "NtCreateEvent should have failed with STATUS_OBJECT_NAME_COLLISION or STATUS_OBJECT_TYPE_MISMATCH got (%08x)\n", status);
+    ok(status == STATUS_OBJECT_NAME_COLLISION || status == STATUS_OBJECT_TYPE_MISMATCH /* Vista+ */, "got %#x\n", status);
 
     pRtlInitUnicodeString(&str, buffer2);
     InitializeObjectAttributes(&attr, &str, 0, 0, NULL);
@@ -117,8 +115,7 @@ static void test_case_sensitive (void)
     pRtlInitUnicodeString(&str, buffer4);
     InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL);
     status = pNtCreateMutant(&Mutant, GENERIC_ALL, &attr, FALSE);
-    ok(status == STATUS_OBJECT_NAME_COLLISION || status == STATUS_OBJECT_TYPE_MISMATCH,
-        "NtCreateMutant should have failed with STATUS_OBJECT_NAME_COLLISION or STATUS_OBJECT_TYPE_MISMATCH got (%08x)\n", status);
+    ok(status == STATUS_OBJECT_NAME_COLLISION || status == STATUS_OBJECT_TYPE_MISMATCH /* Vista+ */, "got %#x\n", status);
 
     status = pNtCreateEvent(&h, GENERIC_ALL, &attr, FALSE, FALSE);
     ok(status == STATUS_OBJECT_NAME_COLLISION,
@@ -247,19 +244,10 @@ static HANDLE get_base_dir(void)
     sprintf( name, "\\BaseNamedObjects\\Session\\%u", NtCurrentTeb()->Peb->SessionId );
     pRtlCreateUnicodeStringFromAsciiz(&str, name );
     status = pNtOpenDirectoryObject(&dir, DIRECTORY_QUERY, &attr);
+    ok(!status, "got %#x\n", status);
+    ok(is_correct_dir( dir, objname ), "wrong dir\n");
     pRtlFreeUnicodeString(&str);
-    if (!status && is_correct_dir( dir, objname )) goto done;
-    if (!status) pNtClose( dir );
 
-    pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects");
-    status = pNtOpenDirectoryObject(&dir, DIRECTORY_QUERY, &attr);
-    pRtlFreeUnicodeString(&str);
-    if (!status && is_correct_dir( dir, objname )) goto done;
-    if (!status) pNtClose( dir );
-
-    dir = 0;
-
-done:
     pNtClose( h );
     return dir;
 }
@@ -289,15 +277,10 @@ static void test_name_collisions(void)
 
     pRtlCreateUnicodeStringFromAsciiz(&str, "\\??\\PIPE\\om.c-mutant");
     status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE);
-    ok(status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_OBJECT_PATH_NOT_FOUND,
-        "NtCreateMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08x)\n", status);
+    todo_wine ok(status == STATUS_OBJECT_PATH_NOT_FOUND, "got %#x\n", status);
     pRtlFreeUnicodeString(&str);
 
-    if (!(dir = get_base_dir()))
-    {
-        win_skip( "couldn't find the BaseNamedObjects dir\n" );
-        return;
-    }
+    dir = get_base_dir();
     pRtlCreateUnicodeStringFromAsciiz(&str, "om.c-test");
     InitializeObjectAttributes(&attr, &str, OBJ_OPENIF, dir, NULL);
     h = CreateMutexA(NULL, FALSE, "om.c-test");
@@ -339,12 +322,12 @@ static void test_name_collisions(void)
     pNtClose(h1);
     pNtClose(h2);
     
-    h = pCreateWaitableTimerA(NULL, TRUE, "om.c-test");
+    h = CreateWaitableTimerA(NULL, TRUE, "om.c-test");
     ok(h != 0, "CreateWaitableTimerA failed got ret=%p (%d)\n", h, GetLastError());
     status = pNtCreateTimer(&h1, GENERIC_ALL, &attr, NotificationTimer);
     ok(status == STATUS_OBJECT_NAME_EXISTS && h1 != NULL,
         "NtCreateTimer should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08x)\n", status);
-    h2 = pCreateWaitableTimerA(NULL, TRUE, "om.c-test");
+    h2 = CreateWaitableTimerA(NULL, TRUE, "om.c-test");
     winerr = GetLastError();
     ok(h2 != 0 && winerr == ERROR_ALREADY_EXISTS,
         "CreateWaitableTimerA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%d)\n", h2, winerr);
@@ -468,12 +451,7 @@ static void test_name_limits(void)
     size.QuadPart = 4096;
     pRtlCreateUnicodeStringFromAsciiz( &target, "\\DosDevices" );
 
-    if (!(attr.RootDirectory = get_base_dir()))
-    {
-        win_skip( "couldn't find the BaseNamedObjects dir\n" );
-        return;
-    }
-
+    attr.RootDirectory = get_base_dir();
     str.Length = 0;
     status = pNtCreateMutant( &ret, GENERIC_ALL, &attr2, FALSE );
     ok( status == STATUS_SUCCESS, "%u: NtCreateMutant failed %x\n", str.Length, status );
@@ -481,7 +459,7 @@ static void test_name_limits(void)
     status = pNtOpenMutant( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenMutant failed %x\n", str.Length, status );
     status = pNtOpenMutant( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenMutant failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateSemaphore( &ret, GENERIC_ALL, &attr2, 1, 2 );
@@ -490,7 +468,7 @@ static void test_name_limits(void)
     status = pNtOpenSemaphore( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenSemaphore failed %x\n", str.Length, status );
     status = pNtOpenSemaphore( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenSemaphore failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateEvent( &ret, GENERIC_ALL, &attr2, 1, 0 );
@@ -499,7 +477,7 @@ static void test_name_limits(void)
     status = pNtOpenEvent( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenEvent failed %x\n", str.Length, status );
     status = pNtOpenEvent( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenEvent failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateKeyedEvent( &ret, GENERIC_ALL, &attr2, 0 );
@@ -508,7 +486,7 @@ static void test_name_limits(void)
     status = pNtOpenKeyedEvent( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenKeyedEvent failed %x\n", str.Length, status );
     status = pNtOpenKeyedEvent( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenKeyedEvent failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateTimer( &ret, GENERIC_ALL, &attr2, NotificationTimer );
@@ -517,7 +495,7 @@ static void test_name_limits(void)
     status = pNtOpenTimer( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenTimer failed %x\n", str.Length, status );
     status = pNtOpenTimer( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenTimer failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateIoCompletion( &ret, GENERIC_ALL, &attr2, 0 );
@@ -526,7 +504,7 @@ static void test_name_limits(void)
     status = pNtOpenIoCompletion( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenCompletion failed %x\n", str.Length, status );
     status = pNtOpenIoCompletion( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenCompletion failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateJobObject( &ret, GENERIC_ALL, &attr2 );
@@ -535,7 +513,7 @@ static void test_name_limits(void)
     status = pNtOpenJobObject( &ret2, GENERIC_ALL, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenJobObject failed %x\n", str.Length, status );
     status = pNtOpenJobObject( &ret2, GENERIC_ALL, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenJobObject failed %x\n", str.Length, status );
     pNtClose( ret );
     status = pNtCreateDirectoryObject( &ret, GENERIC_ALL, &attr2 );
@@ -564,7 +542,7 @@ static void test_name_limits(void)
     status = pNtOpenSection( &ret2, SECTION_MAP_WRITE, &attr );
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "%u: NtOpenSection failed %x\n", str.Length, status );
     status = pNtOpenSection( &ret2, SECTION_MAP_WRITE, &attr3 );
-    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_INVALID_HANDLE /* < 7 */,
         "%u: NtOpenSection failed %x\n", str.Length, status );
     pNtClose( ret );
 
@@ -868,7 +846,7 @@ static void test_name_limits(void)
     attr2.ObjectName = attr3.ObjectName = NULL;
     status = pNtCreateKey( &ret, GENERIC_ALL, &attr2, 0, NULL, 0, NULL );
     todo_wine
-    ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE /* vista wow64 */,
         "NULL: NtCreateKey failed %x\n", status );
     status = pNtCreateKey( &ret, GENERIC_ALL, &attr3, 0, NULL, 0, NULL );
     todo_wine
@@ -876,7 +854,7 @@ static void test_name_limits(void)
     status = pNtCreateKey( &ret, GENERIC_ALL, NULL, 0, NULL, 0, NULL );
     ok( status == STATUS_ACCESS_VIOLATION, "NULL: NtCreateKey failed %x\n", status );
     status = pNtOpenKey( &ret, GENERIC_ALL, &attr2 );
-    ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE,
+    ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE /* vista wow64 */,
         "NULL: NtOpenKey failed %x\n", status );
     status = pNtOpenKey( &ret, GENERIC_ALL, &attr3 );
     ok( status == STATUS_ACCESS_VIOLATION, "NULL: NtOpenKey failed %x\n", status );
@@ -894,15 +872,14 @@ static void test_directory(void)
     UNICODE_STRING str;
     OBJECT_ATTRIBUTES attr;
     HANDLE dir, dir1, h, h2;
-    BOOL is_nt4;
+    WCHAR buffer[256];
+    ULONG len, full_len;
 
     /* No name and/or no attributes */
     status = pNtCreateDirectoryObject(NULL, DIRECTORY_QUERY, &attr);
-    ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER,
-        "NtCreateDirectoryObject should have failed with STATUS_ACCESS_VIOLATION got(%08x)\n", status);
+    ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER /* wow64 */, "got %#x\n", status);
     status = pNtOpenDirectoryObject(NULL, DIRECTORY_QUERY, &attr);
-    ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER,
-        "NtOpenDirectoryObject should have failed with STATUS_ACCESS_VIOLATION got(%08x)\n", status);
+    ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER /* wow64 */, "got %#x\n", status);
 
     status = pNtCreateDirectoryObject(&h, DIRECTORY_QUERY, NULL);
     ok(status == STATUS_SUCCESS, "Failed to create Directory without attributes(%08x)\n", status);
@@ -951,87 +928,76 @@ static void test_directory(void)
     pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Local");
     InitializeObjectAttributes(&attr, &str, 0, 0, NULL);
     status = pNtOpenSymbolicLinkObject(&dir, SYMBOLIC_LINK_QUERY, &attr);
-    is_nt4 = (status == STATUS_OBJECT_NAME_NOT_FOUND);  /* nt4 doesn't have Local\\ symlink */
-    if (!is_nt4)
-    {
-        WCHAR buffer[256];
-        ULONG len, full_len;
-
-        ok(status == STATUS_SUCCESS, "Failed to open SymbolicLink(%08x)\n", status);
-        pRtlFreeUnicodeString(&str);
-        InitializeObjectAttributes(&attr, &str, 0, dir, NULL);
-        pRtlCreateUnicodeStringFromAsciiz(&str, "one more level");
-        status = pNtCreateDirectoryObject( &h, DIRECTORY_QUERY, &attr );
-        ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtCreateDirectoryObject got %08x\n", status );
-        pRtlFreeUnicodeString(&str);
-
-        pRtlCreateUnicodeStringFromAsciiz( &str, "\\BaseNamedObjects\\Local\\om.c-test" );
-        InitializeObjectAttributes( &attr, &str, 0, 0, NULL );
-        status = pNtCreateDirectoryObject( &dir1, DIRECTORY_QUERY, &attr );
-        ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
-        pRtlFreeUnicodeString( &str );
-        pRtlCreateUnicodeStringFromAsciiz( &str, "om.c-test" );
-        InitializeObjectAttributes( &attr, &str, 0, dir, NULL );
-        status = pNtOpenDirectoryObject( &h, DIRECTORY_QUERY, &attr );
-        ok( status == STATUS_OBJECT_TYPE_MISMATCH, "Failed to open directory %08x\n", status );
-        if (!status) pNtClose(h);
-        pRtlFreeUnicodeString( &str );
-
-        pRtlCreateUnicodeStringFromAsciiz( &str, "om.c-event" );
-        InitializeObjectAttributes( &attr, &str, 0, dir1, NULL );
-        status = pNtCreateEvent( &h, GENERIC_ALL, &attr, 1, 0 );
-        ok( status == STATUS_SUCCESS, "NtCreateEvent failed %x\n", status );
-        status = pNtOpenEvent( &h2, GENERIC_ALL, &attr );
-        ok( status == STATUS_SUCCESS, "NtOpenEvent failed %x\n", status );
-        pNtClose( h2 );
-        pRtlFreeUnicodeString( &str );
-        pRtlCreateUnicodeStringFromAsciiz( &str, "om.c-test\\om.c-event" );
-        InitializeObjectAttributes( &attr, &str, 0, dir, NULL );
-        status = pNtOpenEvent( &h2, GENERIC_ALL, &attr );
-        ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtOpenEvent failed %x\n", status );
-        pRtlFreeUnicodeString( &str );
-        pRtlCreateUnicodeStringFromAsciiz( &str, "\\BasedNamedObjects\\Local\\om.c-test\\om.c-event" );
-        InitializeObjectAttributes( &attr, &str, 0, 0, NULL );
-        status = pNtOpenEvent( &h2, GENERIC_ALL, &attr );
-        ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtOpenEvent failed %x\n", status );
-        pRtlFreeUnicodeString( &str );
-        pNtClose( h );
-        pNtClose( dir1 );
-
-        str.Buffer = buffer;
-        str.MaximumLength = sizeof(buffer);
-        len = 0xdeadbeef;
-        memset( buffer, 0xaa, sizeof(buffer) );
-        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
-        ok( status == STATUS_SUCCESS, "NtQuerySymbolicLinkObject failed %08x\n", status );
-        if (status != STATUS_SUCCESS)
-            goto error;
-        full_len = str.Length + sizeof(WCHAR);
-        ok( len == full_len, "bad length %u/%u\n", len, full_len );
-        if (len == full_len)
-            ok( buffer[len / sizeof(WCHAR) - 1] == 0, "no terminating null\n" );
-
-        str.MaximumLength = str.Length;
-        len = 0xdeadbeef;
-        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
-        ok( status == STATUS_BUFFER_TOO_SMALL, "NtQuerySymbolicLinkObject failed %08x\n", status );
-        ok( len == full_len, "bad length %u/%u\n", len, full_len );
-
-        str.MaximumLength = 0;
-        len = 0xdeadbeef;
-        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
-        ok( status == STATUS_BUFFER_TOO_SMALL, "NtQuerySymbolicLinkObject failed %08x\n", status );
-        ok( len == full_len, "bad length %u/%u\n", len, full_len );
-
-        str.MaximumLength = str.Length + sizeof(WCHAR);
-        len = 0xdeadbeef;
-        status = pNtQuerySymbolicLinkObject( dir, &str, &len );
-        ok( status == STATUS_SUCCESS, "NtQuerySymbolicLinkObject failed %08x\n", status );
-        ok( len == full_len, "bad length %u/%u\n", len, full_len );
-
-error:
-        pNtClose(dir);
-    }
+
+    ok(status == STATUS_SUCCESS, "Failed to open SymbolicLink(%08x)\n", status);
+    pRtlFreeUnicodeString(&str);
+    InitializeObjectAttributes(&attr, &str, 0, dir, NULL);
+    pRtlCreateUnicodeStringFromAsciiz(&str, "one more level");
+    status = pNtCreateDirectoryObject( &h, DIRECTORY_QUERY, &attr );
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtCreateDirectoryObject got %08x\n", status );
+    pRtlFreeUnicodeString(&str);
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\BaseNamedObjects\\Local\\om.c-test" );
+    InitializeObjectAttributes( &attr, &str, 0, 0, NULL );
+    status = pNtCreateDirectoryObject( &dir1, DIRECTORY_QUERY, &attr );
+    ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
+    pRtlFreeUnicodeString( &str );
+    pRtlCreateUnicodeStringFromAsciiz( &str, "om.c-test" );
+    InitializeObjectAttributes( &attr, &str, 0, dir, NULL );
+    status = pNtOpenDirectoryObject( &h, DIRECTORY_QUERY, &attr );
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "Failed to open directory %08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "om.c-event" );
+    InitializeObjectAttributes( &attr, &str, 0, dir1, NULL );
+    status = pNtCreateEvent( &h, GENERIC_ALL, &attr, 1, 0 );
+    ok( status == STATUS_SUCCESS, "NtCreateEvent failed %x\n", status );
+    status = pNtOpenEvent( &h2, GENERIC_ALL, &attr );
+    ok( status == STATUS_SUCCESS, "NtOpenEvent failed %x\n", status );
+    pNtClose( h2 );
+    pRtlFreeUnicodeString( &str );
+    pRtlCreateUnicodeStringFromAsciiz( &str, "om.c-test\\om.c-event" );
+    InitializeObjectAttributes( &attr, &str, 0, dir, NULL );
+    status = pNtOpenEvent( &h2, GENERIC_ALL, &attr );
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtOpenEvent failed %x\n", status );
+    pRtlFreeUnicodeString( &str );
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\BasedNamedObjects\\Local\\om.c-test\\om.c-event" );
+    InitializeObjectAttributes( &attr, &str, 0, 0, NULL );
+    status = pNtOpenEvent( &h2, GENERIC_ALL, &attr );
+    ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtOpenEvent failed %x\n", status );
+    pRtlFreeUnicodeString( &str );
+    pNtClose( h );
+    pNtClose( dir1 );
+
+    str.Buffer = buffer;
+    str.MaximumLength = sizeof(buffer);
+    len = 0xdeadbeef;
+    memset( buffer, 0xaa, sizeof(buffer) );
+    status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+    ok( status == STATUS_SUCCESS, "NtQuerySymbolicLinkObject failed %08x\n", status );
+    full_len = str.Length + sizeof(WCHAR);
+    ok( len == full_len, "bad length %u/%u\n", len, full_len );
+    ok( buffer[len / sizeof(WCHAR) - 1] == 0, "no terminating null\n" );
+
+    str.MaximumLength = str.Length;
+    len = 0xdeadbeef;
+    status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+    ok( status == STATUS_BUFFER_TOO_SMALL, "NtQuerySymbolicLinkObject failed %08x\n", status );
+    ok( len == full_len, "bad length %u/%u\n", len, full_len );
+
+    str.MaximumLength = 0;
+    len = 0xdeadbeef;
+    status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+    ok( status == STATUS_BUFFER_TOO_SMALL, "NtQuerySymbolicLinkObject failed %08x\n", status );
+    ok( len == full_len, "bad length %u/%u\n", len, full_len );
+
+    str.MaximumLength = str.Length + sizeof(WCHAR);
+    len = 0xdeadbeef;
+    status = pNtQuerySymbolicLinkObject( dir, &str, &len );
+    ok( status == STATUS_SUCCESS, "NtQuerySymbolicLinkObject failed %08x\n", status );
+    ok( len == full_len, "bad length %u/%u\n", len, full_len );
+
+    pNtClose(dir);
 
     pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects");
     InitializeObjectAttributes(&attr, &str, 0, 0, NULL);
@@ -1091,26 +1057,23 @@ error:
 
     pNtClose(dir);
 
-    if (!is_nt4)
-    {
-        InitializeObjectAttributes(&attr, &str, 0, 0, NULL);
-        pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Global\\om.c-test");
-        status = pNtCreateDirectoryObject( &dir, DIRECTORY_QUERY, &attr );
-        ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
-        pRtlFreeUnicodeString(&str);
-        pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Local\\om.c-test\\one more level");
-        status = pNtCreateDirectoryObject( &h, DIRECTORY_QUERY, &attr );
-        ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
-        pRtlFreeUnicodeString(&str);
-        pNtClose(h);
-        InitializeObjectAttributes(&attr, &str, 0, dir, NULL);
-        pRtlCreateUnicodeStringFromAsciiz(&str, "one more level");
-        status = pNtCreateDirectoryObject( &dir, DIRECTORY_QUERY, &attr );
-        ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
-        pRtlFreeUnicodeString(&str);
-        pNtClose(h);
-        pNtClose(dir);
-    }
+    InitializeObjectAttributes(&attr, &str, 0, 0, NULL);
+    pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Global\\om.c-test");
+    status = pNtCreateDirectoryObject( &dir, DIRECTORY_QUERY, &attr );
+    ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
+    pRtlFreeUnicodeString(&str);
+    pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Local\\om.c-test\\one more level");
+    status = pNtCreateDirectoryObject( &h, DIRECTORY_QUERY, &attr );
+    ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
+    pRtlFreeUnicodeString(&str);
+    pNtClose(h);
+    InitializeObjectAttributes(&attr, &str, 0, dir, NULL);
+    pRtlCreateUnicodeStringFromAsciiz(&str, "one more level");
+    status = pNtCreateDirectoryObject( &dir, DIRECTORY_QUERY, &attr );
+    ok( status == STATUS_SUCCESS, "Failed to create directory %08x\n", status );
+    pRtlFreeUnicodeString(&str);
+    pNtClose(h);
+    pNtClose(dir);
 
     /* Create other objects using RootDirectory */
 
@@ -1160,11 +1123,9 @@ static void test_symboliclink(void)
     InitializeObjectAttributes(&attr, NULL, 0, 0, NULL);
     pRtlCreateUnicodeStringFromAsciiz(&target, "\\DosDevices");
     status = pNtCreateSymbolicLinkObject( NULL, SYMBOLIC_LINK_QUERY, &attr, &target );
-    ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER,
-       "NtCreateSymbolicLinkObject got %08x\n", status );
+    ok(status == STATUS_ACCESS_VIOLATION, "got %#x\n", status);
     status = pNtOpenSymbolicLinkObject( NULL, SYMBOLIC_LINK_QUERY, &attr );
-    ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER,
-       "NtOpenSymbolicLinkObject got %08x\n", status );
+    ok(status == STATUS_ACCESS_VIOLATION, "got %#x\n", status);
 
     status = pNtCreateSymbolicLinkObject(&h, SYMBOLIC_LINK_QUERY, NULL, NULL);
     ok(status == STATUS_ACCESS_VIOLATION,
@@ -1178,14 +1139,10 @@ static void test_symboliclink(void)
     ok(status == STATUS_SUCCESS || status == STATUS_ACCESS_VIOLATION, /* nt4 */
        "NtCreateSymbolicLinkObject failed(%08x)\n", status);
     pRtlFreeUnicodeString(&target);
-    if (!status) pNtClose(h);
 
     InitializeObjectAttributes(&attr, NULL, 0, 0, NULL);
     status = pNtCreateSymbolicLinkObject(&link, SYMBOLIC_LINK_QUERY, &attr, &target);
-    ok(status == STATUS_INVALID_PARAMETER ||
-       broken(status == STATUS_SUCCESS),  /* nt4 */
-       "NtCreateSymbolicLinkObject should have failed with STATUS_INVALID_PARAMETER got(%08x)\n", status);
-    if (!status) pNtClose(h);
+    ok(status == STATUS_INVALID_PARAMETER, "got %#x\n", status);
     status = pNtOpenSymbolicLinkObject(&h, SYMBOLIC_LINK_QUERY, &attr);
     ok(status == STATUS_OBJECT_PATH_SYNTAX_BAD,
        "NtOpenSymbolicLinkObject should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08x)\n", status);
@@ -1242,21 +1199,14 @@ static void test_symboliclink(void)
 
     pRtlCreateUnicodeStringFromAsciiz( &str, "\\BaseNamedObjects\\om.c-test\\" );
     status = pNtCreateSymbolicLinkObject( &h, SYMBOLIC_LINK_QUERY, &attr, &target );
-    ok( status == STATUS_OBJECT_NAME_INVALID || status == STATUS_OBJECT_PATH_NOT_FOUND,
-        "NtCreateSymbolicLinkObject got %08x\n", status );
+    ok( status == STATUS_OBJECT_NAME_INVALID, "got %#x\n", status );
     status = pNtOpenSymbolicLinkObject( &h, SYMBOLIC_LINK_QUERY, &attr );
-    ok( status == STATUS_OBJECT_NAME_INVALID || status == STATUS_OBJECT_PATH_NOT_FOUND,
-        "NtOpenSymbolicLinkObject got %08x\n", status );
+    ok( status == STATUS_OBJECT_NAME_INVALID, "got %#x\n", status );
     pRtlFreeUnicodeString( &str );
     pRtlFreeUnicodeString(&target);
 
     /* Compound test */
-    if (!(dir = get_base_dir()))
-    {
-        win_skip( "couldn't find the BaseNamedObjects dir\n" );
-        return;
-    }
-
+    dir = get_base_dir();
     InitializeObjectAttributes(&attr, &str, 0, dir, NULL);
     pRtlCreateUnicodeStringFromAsciiz(&str, "test-link");
     pRtlCreateUnicodeStringFromAsciiz(&target, "\\DosDevices");
@@ -1285,7 +1235,7 @@ static void _test_file_info(unsigned line, HANDLE handle)
     NTSTATUS status;
 
     status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), 0xdeadbeef);
-    ok_(__FILE__,line)(status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED,
+    ok_(__FILE__,line)(status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED /* Vista+ */,
                        "expected STATUS_NOT_IMPLEMENTED, got %x\n", status);
 
     status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), FileAccessInformation);
@@ -1293,7 +1243,7 @@ static void _test_file_info(unsigned line, HANDLE handle)
 
     status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf),
                                     FileIoCompletionNotificationInformation);
-    ok_(__FILE__,line)(status == STATUS_SUCCESS || broken(status == STATUS_INVALID_INFO_CLASS),
+    ok_(__FILE__,line)(status == STATUS_SUCCESS || broken(status == STATUS_INVALID_INFO_CLASS) /* XP */,
                        "FileIoCompletionNotificationInformation returned %x\n", status);
 }
 
@@ -1305,7 +1255,7 @@ static void _test_no_file_info(unsigned line, HANDLE handle)
     NTSTATUS status;
 
     status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), 0xdeadbeef);
-    ok_(__FILE__,line)(status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED,
+    ok_(__FILE__,line)(status == STATUS_INVALID_INFO_CLASS || status == STATUS_NOT_IMPLEMENTED /* Vista+ */,
                        "expected STATUS_NOT_IMPLEMENTED, got %x\n", status);
 
     status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf), FileAccessInformation);
@@ -1314,7 +1264,7 @@ static void _test_no_file_info(unsigned line, HANDLE handle)
 
     status = pNtQueryInformationFile(handle, &io, buf, sizeof(buf),
                                     FileIoCompletionNotificationInformation);
-    ok_(__FILE__,line)(status == STATUS_OBJECT_TYPE_MISMATCH || broken(status == STATUS_INVALID_INFO_CLASS),
+    ok_(__FILE__,line)(status == STATUS_OBJECT_TYPE_MISMATCH || broken(status == STATUS_INVALID_INFO_CLASS) /* XP */,
                        "FileIoCompletionNotificationInformation returned %x\n", status);
 }
 
@@ -1432,24 +1382,19 @@ static void test_query_object(void)
     ok( len > sizeof(UNICODE_STRING), "unexpected len %u\n", len );
     str = (UNICODE_STRING *)buffer;
     expected_len = sizeof(UNICODE_STRING) + str->Length + sizeof(WCHAR);
-    ok( len == expected_len || broken(len == expected_len - sizeof(WCHAR)), /* NT4 */
-        "unexpected len %u\n", len );
+    ok( len == expected_len, "unexpected len %u\n", len );
     trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
 
     len = 0;
     status = pNtQueryObject( handle, ObjectNameInformation, buffer, 0, &len );
-    ok( status == STATUS_INFO_LENGTH_MISMATCH || broken(status == STATUS_INSUFFICIENT_RESOURCES),
-        "NtQueryObject failed %x\n", status );
-    ok( len == expected_len || broken(!len || len == sizeof(UNICODE_STRING)),
+    ok( status == STATUS_INFO_LENGTH_MISMATCH, "got %#x\n", status );
+    ok( len == expected_len || broken(!len /* XP */ || len == sizeof(UNICODE_STRING) /* 2003 */),
         "unexpected len %u\n", len );
 
     len = 0;
     status = pNtQueryObject( handle, ObjectNameInformation, buffer, sizeof(UNICODE_STRING), &len );
-    ok( status == STATUS_BUFFER_OVERFLOW || broken(status == STATUS_INSUFFICIENT_RESOURCES
-            || status == STATUS_INFO_LENGTH_MISMATCH),
-        "NtQueryObject failed %x\n", status );
-    ok( len == expected_len || broken(!len),
-        "unexpected len %u\n", len );
+    ok( status == STATUS_BUFFER_OVERFLOW, "got %#x\n", status);
+    ok( len == expected_len, "unexpected len %u\n", len );
 
     test_object_type( handle, "File" );
 
@@ -1498,8 +1443,7 @@ static void test_query_object(void)
     ok( len > sizeof(UNICODE_STRING), "unexpected len %u\n", len );
     str = (UNICODE_STRING *)buffer;
     expected_len = sizeof(UNICODE_STRING) + str->Length + sizeof(WCHAR);
-    ok( len == expected_len || broken(len == expected_len - sizeof(WCHAR)), /* NT4 */
-        "unexpected len %u\n", len );
+    ok( len == expected_len, "unexpected len %u\n", len );
     ok( len > sizeof(UNICODE_STRING) + sizeof("\\test_mailslot") * sizeof(WCHAR),
         "name too short %s\n", wine_dbgstr_w(str->Buffer) );
     trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
@@ -1521,8 +1465,7 @@ static void test_query_object(void)
     str = (UNICODE_STRING *)buffer;
     expected_len = sizeof(UNICODE_STRING) + str->Length + sizeof(WCHAR);
     todo_wine
-    ok( len == expected_len || broken(len == expected_len - sizeof(WCHAR)), /* NT4 */
-        "unexpected len %u\n", len );
+    ok( len == expected_len, "unexpected len %u\n", len );
     todo_wine
     ok( len > sizeof(UNICODE_STRING) + sizeof("\\test_pipe") * sizeof(WCHAR),
         "name too short %s\n", wine_dbgstr_w(str->Buffer) );
@@ -1542,29 +1485,25 @@ static void test_query_object(void)
     pNtClose( handle );
 
     pRtlCreateUnicodeStringFromAsciiz( &path, "\\REGISTRY\\Machine\\Software\\Classes" );
-    status = pNtCreateKey( &handle, KEY_ALL_ACCESS, &attr, 0, 0, 0, 0 );
-    ok( status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
-        "NtCreateKey failed status %x\n", status );
+    status = pNtCreateKey( &handle, KEY_READ, &attr, 0, 0, 0, 0 );
+    ok( status == STATUS_SUCCESS, "NtCreateKey failed status %x\n", status );
     pRtlFreeUnicodeString( &path );
-    if (status == STATUS_SUCCESS)
-    {
-        len = 0;
-        status = pNtQueryObject( handle, ObjectNameInformation, buffer, sizeof(buffer), &len );
-        ok( status == STATUS_SUCCESS , "NtQueryObject returned %x\n", status );
-        str = (UNICODE_STRING *)buffer;
-        todo_wine
-        ok( len > sizeof(UNICODE_STRING), "unexpected len %u\n", len );
-        str = (UNICODE_STRING *)buffer;
-        expected_len = sizeof(UNICODE_STRING) + str->Length + sizeof(WCHAR);
-        todo_wine
-        ok( len == expected_len || broken(len == expected_len - sizeof(WCHAR)), /* NT4 */
-            "unexpected len %u\n", len );
-        todo_wine
-        ok( len > sizeof(UNICODE_STRING) + sizeof("\\Classes") * sizeof(WCHAR),
-            "name too short %s\n", wine_dbgstr_w(str->Buffer) );
-        trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
-        pNtClose( handle );
-    }
+
+    len = 0;
+    status = pNtQueryObject( handle, ObjectNameInformation, buffer, sizeof(buffer), &len );
+    ok( status == STATUS_SUCCESS , "NtQueryObject returned %x\n", status );
+    str = (UNICODE_STRING *)buffer;
+    todo_wine
+    ok( len > sizeof(UNICODE_STRING), "unexpected len %u\n", len );
+    str = (UNICODE_STRING *)buffer;
+    expected_len = sizeof(UNICODE_STRING) + str->Length + sizeof(WCHAR);
+    ok( len == expected_len || len == expected_len - sizeof(WCHAR) /* wow64 */, "unexpected len %u\n", len );
+    todo_wine
+    ok( len > sizeof(UNICODE_STRING) + sizeof("\\Classes") * sizeof(WCHAR),
+        "name too short %s\n", wine_dbgstr_w(str->Buffer) );
+    trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
+    pNtClose( handle );
+
     pRtlFreeUnicodeString( &session );
 
     test_object_type( GetCurrentProcess(), "Process" );
@@ -1853,7 +1792,7 @@ static void test_keyed_events(void)
     ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtPulseEvent %x\n", status );
 
     status = pNtCreateEvent( &event, GENERIC_ALL, &attr, FALSE, FALSE );
-    ok( status == STATUS_OBJECT_NAME_COLLISION || status == STATUS_OBJECT_TYPE_MISMATCH,
+    ok( status == STATUS_OBJECT_NAME_COLLISION || status == STATUS_OBJECT_TYPE_MISMATCH /* 7+ */,
         "CreateEvent %x\n", status );
 
     NtClose( handle );
@@ -1911,34 +1850,15 @@ static void test_null_device(void)
     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(ret, "got 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());
+    ok(!ret, "expected failure\n");
+    ok(GetLastError() == ERROR_HANDLE_EOF, "got error %u\n", GetLastError());
 
     pNtClose(null);
 
@@ -2151,15 +2071,6 @@ static void test_wait_on_address(void)
 START_TEST(om)
 {
     HMODULE hntdll = GetModuleHandleA("ntdll.dll");
-    HMODULE hkernel32 = GetModuleHandleA("kernel32.dll");
-
-    if (!hntdll)
-    {
-        skip("not running on NT, skipping test\n");
-        return;
-    }
-
-    pCreateWaitableTimerA = (void *)GetProcAddress(hkernel32, "CreateWaitableTimerA");
 
     pRtlCreateUnicodeStringFromAsciiz = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeStringFromAsciiz");
     pRtlFreeUnicodeString   = (void *)GetProcAddress(hntdll, "RtlFreeUnicodeString");
-- 
2.27.0




More information about the wine-devel mailing list