ntdll/tests: Remove some workarounds for no longer supported versions of Windows.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2020-07-16 20:00:34 -05:00 committed by Alexandre Julliard
parent 9415667cdf
commit d7e12831b0
1 changed files with 141 additions and 230 deletions

View File

@ -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);
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, "\\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 );
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.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 = 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 = 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 );
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);
}
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");