Module: wine Branch: master Commit: af601ff2b592e5f8ce9a4f925b705e5d27d7764a URL: http://source.winehq.org/git/wine.git/?a=commit;h=af601ff2b592e5f8ce9a4f925b...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Nov 11 21:22:35 2008 +0100
ntdll/tests: Fixed more object manager tests on Vista.
---
dlls/ntdll/tests/om.c | 89 +++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 72 insertions(+), 17 deletions(-)
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c index fa2642a..bde6032 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -130,9 +130,9 @@ static void test_namespace_pipe(void) ok(status == STATUS_INSTANCE_NOT_AVAILABLE, "NtCreateNamedPipeFile should have failed with STATUS_INSTANCE_NOT_AVAILABLE got(%08x)\n", status);
- attr.Attributes = OBJ_CASE_INSENSITIVE; - status = pNtOpenFile(&h, GENERIC_READ, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN); - ok(status == STATUS_SUCCESS, "Failed to open NamedPipe(%08x)\n", status); + h = CreateFileA("\\.\pipe\test\pipe", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, 0, 0 ); + ok(h != INVALID_HANDLE_VALUE, "Failed to open NamedPipe (%u)\n", GetLastError()); pNtClose(h);
pRtlInitUnicodeString(&str, buffer3); @@ -178,6 +178,64 @@ static void test_namespace_pipe(void) DIR_TEST_CREATE_SUCCESS(&h) pNtClose(h); DIR_TEST_OPEN_SUCCESS(&h) pNtClose(h); \ pRtlFreeUnicodeString(&str);
+static BOOL is_correct_dir( HANDLE dir, const char *name ) +{ + NTSTATUS status; + UNICODE_STRING str; + OBJECT_ATTRIBUTES attr; + HANDLE h = 0; + + pRtlCreateUnicodeStringFromAsciiz(&str, name); + InitializeObjectAttributes(&attr, &str, OBJ_OPENIF, dir, NULL); + status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); + pRtlFreeUnicodeString(&str); + if (h) pNtClose( h ); + return (status == STATUS_OBJECT_NAME_EXISTS); +} + +/* return a handle to the BaseNamedObjects dir where kernel32 objects get created */ +static HANDLE get_base_dir(void) +{ + static const char objname[] = "om.c_get_base_dir_obj"; + NTSTATUS status; + UNICODE_STRING str; + OBJECT_ATTRIBUTES attr; + HANDLE dir, h; + unsigned int i; + + h = CreateMutexA(NULL, FALSE, objname); + ok(h != 0, "CreateMutexA failed got ret=%p (%d)\n", h, GetLastError()); + InitializeObjectAttributes(&attr, &str, OBJ_OPENIF, 0, NULL); + + pRtlCreateUnicodeStringFromAsciiz(&str, "\BaseNamedObjects\Local"); + status = pNtOpenDirectoryObject(&dir, DIRECTORY_QUERY, &attr); + 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 ); + + for (i = 0; i < 20; i++) + { + char name[40]; + sprintf( name, "\BaseNamedObjects\Session\%u", i ); + pRtlCreateUnicodeStringFromAsciiz(&str, name ); + 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; +} + static void test_name_collisions(void) { NTSTATUS status; @@ -205,12 +263,13 @@ static void test_name_collisions(void) "NtCreateMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08x)\n", status); pRtlFreeUnicodeString(&str);
- - pRtlCreateUnicodeStringFromAsciiz(&str, "\BaseNamedObjects"); - DIR_TEST_OPEN_SUCCESS(&dir) + if (!(dir = get_base_dir())) + { + win_skip( "couldn't find the BaseNamedObjects dir\n" ); + return; + } pRtlCreateUnicodeStringFromAsciiz(&str, "om.c-test"); InitializeObjectAttributes(&attr, &str, OBJ_OPENIF, dir, NULL); - h = CreateMutexA(NULL, FALSE, "om.c-test"); ok(h != 0, "CreateMutexA failed got ret=%p (%d)\n", h, GetLastError()); status = pNtCreateMutant(&h1, GENERIC_ALL, &attr, FALSE); @@ -532,16 +591,12 @@ static void test_symboliclink(void) STATUS_OBJECT_NAME_INVALID, STATUS_OBJECT_PATH_NOT_FOUND)
- /* Compaund test */ - pRtlCreateUnicodeStringFromAsciiz(&str, "\BaseNamedObjects\Local"); - status = pNtOpenDirectoryObject(&dir, DIRECTORY_QUERY, &attr); - if (status == STATUS_OBJECT_NAME_NOT_FOUND) /* nt4 doesn't have Local\ */ + /* Compound test */ + if (!(dir = get_base_dir())) { - pRtlCreateUnicodeStringFromAsciiz(&str, "\BaseNamedObjects"); - status = pNtOpenDirectoryObject(&dir, DIRECTORY_QUERY, &attr); + win_skip( "couldn't find the BaseNamedObjects dir\n" ); + return; } - ok(status == STATUS_SUCCESS, "Failed to open Directory(%08x)\n", status); - pRtlFreeUnicodeString(&str);
InitializeObjectAttributes(&attr, &str, 0, dir, NULL); pRtlCreateUnicodeStringFromAsciiz(&str, "test-link"); @@ -551,9 +606,9 @@ static void test_symboliclink(void) pRtlFreeUnicodeString(&str); pRtlFreeUnicodeString(&target);
- pRtlCreateUnicodeStringFromAsciiz(&str, "test-link\PIPE"); + pRtlCreateUnicodeStringFromAsciiz(&str, "test-link\NUL"); status = pNtOpenFile(&h, GENERIC_READ, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN); - ok(status == STATUS_SUCCESS, "Failed to open NamedPipe(%08x)\n", status); + todo_wine ok(status == STATUS_SUCCESS, "Failed to open NUL device(%08x)\n", status); pRtlFreeUnicodeString(&str);
pNtClose(h);