27#define WIN32_NO_STATUS
39#define DIRECTORY_QUERY 0x0001
40#define DIRECTORY_TRAVERSE 0x0002
41#define DIRECTORY_CREATE_OBJECT 0x0004
42#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
43#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
44#define SYMBOLIC_LINK_QUERY 0x0001
45#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
46#define EVENT_QUERY_STATE 0x0001
47#define SEMAPHORE_QUERY_STATE 0x0001
50#define RTL_CONSTANT_STRING(s) { sizeof(s) - sizeof(s[0]), sizeof(s), (void*)s }
51#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
52#define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
103#define KEYEDEVENT_WAIT 0x0001
104#define KEYEDEVENT_WAKE 0x0002
105#define KEYEDEVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x0003)
106#define DESKTOP_ALL_ACCESS 0x01ff
108#define check_unicode_string(a, b) check_unicode_string_(__LINE__, a, b)
114 ok_(__FILE__,
line)(
string->Length ==
len,
"got length %u\n",
string->Length );
115 ok_(__FILE__,
line)(
string->MaximumLength ==
len +
sizeof(
WCHAR),
"got max length %u\n",
string->MaximumLength );
125 pRtlInitUnicodeString(&
str,
L"\\BaseNamedObjects\\test");
133 pRtlInitUnicodeString(&
str,
L"\\BaseNamedObjects\\Test");
138 pRtlInitUnicodeString(&
str,
L"\\BaseNamedObjects\\TEst");
142 "NtOpenMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08lx)\n",
status);
146 pRtlInitUnicodeString(&
str,
L"\\BASENamedObjects\\test");
153 "NtCreateEvent should have failed with STATUS_OBJECT_NAME_COLLISION got(%08lx)\n",
status);
158 "NtCreateMutant should have failed with STATUS_OBJECT_PATH_NOT_FOUND got(%08lx)\n",
status);
174 pRtlInitUnicodeString(&
str,
L"\\??\\PIPE\\test\\pipe");
188 "NtCreateNamedPipeFile should have failed with STATUS_INSTANCE_NOT_AVAILABLE got(%08lx)\n",
status);
191 pRtlInitUnicodeString(&
str,
L"\\??\\PIPE\\TEST\\PIPE");
197 "NtCreateNamedPipeFile should have failed with STATUS_INSTANCE_NOT_AVAILABLE got(%08lx)\n",
status);
205 pRtlInitUnicodeString(&
str,
L"\\??\\pipe\\test\\pipe");
213 "NtOpenFile should have failed with STATUS_OBJECT_PATH_NOT_FOUND got(%08lx)\n",
status);
216 pRtlInitUnicodeString(&
str,
L"\\??\\pipe\\test");
222 "NtOpenFile should have failed with STATUS_OBJECT_NAME_NOT_FOUND got(%08lx)\n",
status);
238#define check_create_open_dir(parent, name, status) check_create_open_dir_(__LINE__, parent, name, status)
267 if (
h) pNtClose(
h );
274 static const WCHAR objname[] =
L"om.c_get_base_dir_obj";
316 "NtCreateMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08lx)\n",
status);
329 "NtCreateMutant should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08lx)\n",
status);
333 "CreateMutexA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%ld)\n", h2, winerr);
342 "NtCreateEvent should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08lx)\n",
status);
346 "CreateEventA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%ld)\n", h2, winerr);
352 ok(
h != 0,
"CreateSemaphoreA failed got ret=%p (%ld)\n",
h,
GetLastError());
355 "NtCreateSemaphore should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08lx)\n",
status);
359 "CreateSemaphoreA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%ld)\n", h2, winerr);
365 ok(
h != 0,
"CreateWaitableTimerA failed got ret=%p (%ld)\n",
h,
GetLastError());
368 "NtCreateTimer should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08lx)\n",
status);
372 "CreateWaitableTimerA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%ld)\n", h2, winerr);
378 ok(
h != 0,
"CreateFileMappingA failed got ret=%p (%ld)\n",
h,
GetLastError());
379 size.u.LowPart = 256;
383 "NtCreateSection should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08lx)\n",
status);
387 "CreateFileMappingA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%ld)\n", h2, winerr);
395 attr.RootDirectory = 0;
469 size.QuadPart = 4096;
475 ok( status2 == open_expect,
"%u: NtOpenMutant failed %lx\n",
line, status2 );
478 "%u: NtCreateMutant handle %p\n",
line,
ret );
479 if (!status2) pNtClose( ret2 );
481 "%u: NtOpenMutant handle %p\n",
line,
ret );
487 ok( status2 == open_expect,
"%u: NtOpenSemaphore failed %lx\n",
line, status2 );
490 "%u: NtCreateSemaphore handle %p\n",
line,
ret );
491 if (!status2) pNtClose( ret2 );
493 "%u: NtOpenSemaphore handle %p\n",
line,
ret );
498 "%u: NtCreateSemaphore failed %lx\n",
line,
status );
500 "%u: NtCreateSemaphore handle %p\n",
line,
ret );
506 ok( status2 == open_expect,
"%u: NtOpenEvent failed %lx\n",
line, status2 );
509 "%u: NtCreateEvent handle %p\n",
line,
ret );
510 if (!status2) pNtClose( ret2 );
512 "%u: NtOpenEvent handle %p\n",
line,
ret );
517 "%u: NtCreateEvent failed %lx\n",
line,
status );
519 "%u: NtCreateEvent handle %p\n",
line,
ret );
525 ok( status2 == open_expect,
"%u: NtOpenKeyedEvent failed %lx\n",
line, status2 );
528 "%u: NtCreateKeyedEvent handle %p\n",
line,
ret );
529 if (!status2) pNtClose( ret2 );
531 "%u: NtOpenKeyedEvent handle %p\n",
line,
ret );
537 ok( status2 == open_expect,
"%u: NtOpenTimer failed %lx\n",
line, status2 );
540 "%u: NtCreateTimer handle %p\n",
line,
ret );
541 if (!status2) pNtClose( ret2 );
543 "%u: NtOpenTimer handle %p\n",
line,
ret );
548 "%u: NtCreateTimer failed %lx\n",
line,
status );
550 "%u: NtCreateTimer handle %p\n",
line,
ret );
556 ok( status2 == open_expect,
"%u: NtOpenIoCompletion failed %lx\n",
line, status2 );
559 "%u: NtCreateIoCompletion handle %p\n",
line,
ret );
560 if (!status2) pNtClose( ret2 );
562 "%u: NtOpenIoCompletion handle %p\n",
line,
ret );
568 ok( status2 == open_expect,
"%u: NtOpenJobObject failed %lx\n",
line, status2 );
571 "%u: NtCreateJobObject handle %p\n",
line,
ret );
572 if (!status2) pNtClose( ret2 );
574 "%u: NtOpenJobObject handle %p\n",
line,
ret );
578 ok(
status == create_expect,
"%u: NtCreateDirectoryObject failed %lx\n",
line,
status );
580 ok( status2 == open_expect,
"%u: NtOpenDirectoryObject failed %lx\n",
line, status2 );
583 "%u: NtCreateDirectoryObject handle %p\n",
line,
ret );
584 if (!status2) pNtClose( ret2 );
586 "%u: NtOpenDirectoryObject handle %p\n",
line,
ret );
590 ok(
status == create_expect,
"%u: NtCreateSymbolicLinkObject failed %lx\n",
line,
status );
592 ok( status2 == open_expect,
"%u: NtOpenSymbolicLinkObject failed %lx\n",
line, status2 );
595 "%u: NtCreateSymbolicLinkObject handle %p\n",
line,
ret );
596 if (!status2) pNtClose( ret2 );
598 "%u: NtOpenSymbolicLinkObject handle %p\n",
line,
ret );
604 "%u: NtCreateSymbolicLinkObject failed %lx\n",
line,
status );
606 "%u: NtCreateSymbolicLinkObject handle %p\n",
line,
ret );
612 ok( status2 == open_expect,
"%u: NtOpenSection failed %lx\n",
line, status2 );
615 "%u: NtCreateSection handle %p\n",
line,
ret );
616 if (!status2) pNtClose( ret2 );
618 "%u: NtOpenSection handle %p\n",
line,
ret );
623 "%u: NtCreateSection failed %lx\n",
line,
status );
625 "%u: NtCreateSection handle %p\n",
line,
ret );
632 "%u: NtCreateDebugObject handle %p\n",
line,
ret );
636 "%u: NtCreateDebugObject failed %lx\n",
line,
status );
638 "%u: NtCreateDebugObject handle %p\n",
line,
ret );
643 static const WCHAR pipeW[] =
L"\\Device\\NamedPipe\\";
644 static const WCHAR mailslotW[] =
L"\\Device\\MailSlot\\";
645 static const WCHAR registryW[] =
L"\\REGISTRY\\Machine\\SOFTWARE\\Microsoft\\";
658 str.MaximumLength = 65534;
659 for (
i = 0;
i < 65536 /
sizeof(
WCHAR);
i++)
str.Buffer[
i] =
'a';
660 size.QuadPart = 4096;
726 if (!
status) pNtClose( ret2 );
777 str2.Buffer = (
WCHAR *)((
char *)pipeW + 1);
787 pRtlInitUnicodeString( &
str2,
L"\\BaseNamedObjects\\Local" );
920 attr.RootDirectory = 0;
944 "%u: NtCreateNamedPipeFile failed %lx\n",
str.Length,
status );
971 for (
i = 0;
i < 65536 /
sizeof(
WCHAR);
i++)
str.Buffer[
i +
wcslen( mailslotW )] =
'a';
990 "%u: NtCreateMailslotFile failed %lx\n",
str.Length,
status );
1025 "%u: NtCreateKey failed %lx\n",
str.Length,
status );
1028 pNtDeleteKey(
ret );
1034 "%u: NtCreateKey failed %lx\n",
str.Length,
status );
1049 pNtDeleteKey(
ret );
1062 pNtDeleteKey(
ret );
1080 "%u: NtCreateKey failed %lx\n",
str.Length,
status );
1083 pNtDeleteKey(
ret );
1090 "%u: NtOpenKey failed %lx\n",
str.Length,
status );
1107 "%u: NtCreateKey failed %lx\n",
str.Length,
status );
1113 "%u: NtOpenKey failed %lx\n",
str.Length,
status );
1114 ok( !
ret,
"handle set %p\n",
ret );
1121 "%u: NtCreateKey failed %lx\n",
str.Length,
status );
1122 ok( !
ret,
"handle set %p\n",
ret );
1128 "%u: NtOpenKey failed %lx\n",
str.Length,
status );
1129 ok( !
ret,
"handle set %p\n",
ret );
1169 "NtOpenDirectoryObject should have failed with STATUS_INVALID_PARAMETER got(%08lx)\n",
status);
1249 full_len =
str.Length +
sizeof(
WCHAR);
1250 ok(
len == full_len,
"bad length %lu/%lu\n",
len, full_len );
1253 str.MaximumLength =
str.Length;
1254 str.Length = 0x4444;
1258 ok(
len == full_len,
"bad length %lu/%lu\n",
len, full_len );
1259 ok(
str.Length == 0x4444,
"len set to %x\n",
str.Length );
1261 str.MaximumLength = 0;
1262 str.Length = 0x4444;
1266 ok(
len == full_len,
"bad length %lu/%lu\n",
len, full_len );
1267 ok(
str.Length == 0x4444,
"len set to %x\n",
str.Length );
1269 str.MaximumLength = full_len;
1270 str.Length = 0x4444;
1274 ok(
len == full_len,
"bad length %lu/%lu\n",
len, full_len );
1275 ok(
str.Length == full_len -
sizeof(
WCHAR),
"len set to %x\n",
str.Length );
1358 "NtCreateMutant should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08lx)\n",
status);
1362 "NtCreateMutant should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08lx)\n",
status);
1367 "NtCreateMutant should have failed with STATUS_OBJECT_PATH_NOT_FOUND got(%08lx)\n",
status);
1395 "NtCreateSymbolicLinkObject should have failed with STATUS_ACCESS_VIOLATION got(%08lx)\n",
status);
1398 "NtOpenSymbolicLinkObject should have failed with STATUS_INVALID_PARAMETER got(%08lx)\n",
status);
1403 "NtCreateSymbolicLinkObject failed(%08lx)\n",
status);
1411 "NtOpenSymbolicLinkObject should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08lx)\n",
status);
1422 "NtOpenSymbolicLinkObject should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08lx)\n",
status);
1429 "NtCreateSymbolicLinkObject should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08lx)\n",
status);
1430 attr.Attributes = 0;
1434 "NtCreateSymbolicLinkObject should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08lx)\n",
status);
1507 "Got unexpected status %#lx.\n",
status);
1509 attr.Attributes = 0;
1559#define test_file_info(a) _test_file_info(__LINE__,a)
1568 "expected STATUS_NOT_IMPLEMENTED, got %lx\n",
status);
1576 "FileIoCompletionNotificationInformation returned %lx\n",
status);
1579#define test_no_file_info(a) _test_no_file_info(__LINE__,a)
1588 "expected STATUS_NOT_IMPLEMENTED, got %lx\n",
status);
1592 "FileAccessInformation returned %lx\n",
status);
1597 "FileIoCompletionNotificationInformation returned %lx\n",
status);
1616 "%u: mismatched mappings %08lx,%08lx,%08lx,%08lx / %08lx,%08lx,%08lx,%08lx\n",
i,
1619 info->GenericMapping.GenericRead,
info->GenericMapping.GenericWrite,
1620 info->GenericMapping.GenericExecute,
info->GenericMapping.GenericAll );
1622 "%u: mismatched access mask %08lx / %08lx\n",
i,
1630 ok(
info->TotalNumberOfObjects <=
info->HighWaterNumberOfObjects,
"%s: wrong object counts %lu/%lu\n",
1632 info->TotalNumberOfObjects,
info->HighWaterNumberOfObjects );
1633 ok(
info->TotalNumberOfHandles <=
info->HighWaterNumberOfHandles,
"%s: wrong handle counts %lu/%lu\n",
1635 info->TotalNumberOfHandles,
info->HighWaterNumberOfHandles );
1644#define test_object_type(a,b) _test_object_type(__LINE__,a,b)
1659 ok_(__FILE__,
line)(
len >=
sizeof(*type) +
type->TypeName.Length,
"unexpected len %lu\n",
len );
1665#define test_object_name(a,b) _test_object_name(__LINE__,a,b)
1685 static const WCHAR name[] =
L"\\BaseNamedObjects\\test_event";
1741 ok(
str->Length >=
sizeof(
name) -
sizeof(
WCHAR),
"unexpected len %u\n",
str->Length );
1771 ok(
str->Length == 0,
"unexpected len %lu\n",
len );
1772 ok(
str->Buffer ==
NULL,
"unexpected ptr %p\n",
str->Buffer );
1785 ok(
len == expected_len,
"unexpected len %lu\n",
len );
1796 ok(
len == expected_len,
"unexpected len %lu\n",
len );
1900 size.u.LowPart = 256;
1901 size.u.HighPart = 0;
1946 1, 1000, 1000, 1000,
NULL );
2022 attr.RootDirectory = 0;
2024 attr.Attributes = 0;
2026 attr.SecurityQualityOfService =
NULL;
2029 ok(!
res,
"can't create event: %lx\n",
res);
2031 res = pNtReleaseSemaphore(
h, 30,
NULL );
2050 memset(&ov, 0,
sizeof(ov));
2057 "expected STATUS_OBJECT_TYPE_MISMATCH, got %08lx\n",
status);
2062 "expected STATUS_SUCCESS, got %08lx\n",
status);
2068 ok(!
ret,
"WriteFile unexpectedly succeeded\n");
2070 "expected ERROR_INVALID_PARAMETER, got %lu\n",
GetLastError());
2074 ok(!
ret,
"ReadFile unexpectedly succeeded\n");
2076 "expected ERROR_INVALID_PARAMETER, got %lu\n",
GetLastError());
2078 num_bytes = 0xdeadbeef;
2082 ok(num_bytes ==
sizeof(
buf),
"expected num_bytes = %lu, got %lu\n",
2085 num_bytes = 0xdeadbeef;
2088 ok(!
ret,
"expected failure\n");
2098 "expected ERROR_FILE_NOT_FOUND, got %lu\n",
GetLastError());
2105 "expected ERROR_PATH_NOT_FOUND, got %lu\n",
GetLastError());
2117 if (!pNtOpenProcess)
2119 win_skip(
"NtOpenProcess not supported, skipping test\n" );
2125 cid.UniqueProcess = 0;
2126 cid.UniqueThread = 0;
2132 cid.UniqueProcess = 0;
2133 cid.UniqueThread = 0;
2145 cid.UniqueThread = 0;
2152 cid.UniqueThread = 0;
2188 pNtClose( handle2 );
2191 handle2 = (
HANDLE)0xdeadbeef;
2194 ok( !handle2 ||
broken(handle2 == (
HANDLE)0xdeadbeef) ,
"handle set %p\n", handle2 );
2198#define DEBUG_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2199#define DEBUG_GENERIC_READ (STANDARD_RIGHTS_READ|DEBUG_READ_EVENT)
2200#define DEBUG_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|DEBUG_PROCESS_ASSIGN)
2201#define DESKTOP_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|DESKTOP_SWITCHDESKTOP)
2202#define DESKTOP_GENERIC_READ (STANDARD_RIGHTS_READ|DESKTOP_ENUMERATE|DESKTOP_READOBJECTS)
2203#define DESKTOP_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|DESKTOP_WRITEOBJECTS|DESKTOP_JOURNALPLAYBACK|\
2204 DESKTOP_JOURNALRECORD|DESKTOP_HOOKCONTROL|DESKTOP_CREATEMENU| \
2205 DESKTOP_CREATEWINDOW)
2206#define DIRECTORY_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|DIRECTORY_TRAVERSE|DIRECTORY_QUERY)
2207#define DIRECTORY_GENERIC_READ (STANDARD_RIGHTS_READ|DIRECTORY_TRAVERSE|DIRECTORY_QUERY)
2208#define DIRECTORY_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|DIRECTORY_CREATE_SUBDIRECTORY|\
2209 DIRECTORY_CREATE_OBJECT)
2210#define EVENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2211#define EVENT_GENERIC_READ (STANDARD_RIGHTS_READ|EVENT_QUERY_STATE)
2212#define EVENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|EVENT_MODIFY_STATE)
2213#define IO_COMPLETION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2214#define IO_COMPLETION_GENERIC_READ (STANDARD_RIGHTS_READ|IO_COMPLETION_QUERY_STATE)
2215#define IO_COMPLETION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|IO_COMPLETION_MODIFY_STATE)
2216#define IO_COMPLETION_RESERVE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
2217#define IO_COMPLETION_RESERVE_GENERIC_READ (STANDARD_RIGHTS_READ|0x1)
2218#define IO_COMPLETION_RESERVE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|0x2)
2219#define IO_COMPLETION_RESERVE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x3)
2220#define JOB_OBJECT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2221#define JOB_OBJECT_GENERIC_READ (STANDARD_RIGHTS_READ|JOB_OBJECT_QUERY)
2222#define JOB_OBJECT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|JOB_OBJECT_TERMINATE|\
2223 JOB_OBJECT_SET_ATTRIBUTES|JOB_OBJECT_ASSIGN_PROCESS)
2224#define KEY_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|KEY_CREATE_LINK|KEY_NOTIFY|\
2225 KEY_ENUMERATE_SUB_KEYS|KEY_QUERY_VALUE)
2226#define KEY_GENERIC_READ (STANDARD_RIGHTS_READ|KEY_NOTIFY|KEY_ENUMERATE_SUB_KEYS|\
2228#define KEY_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|KEY_CREATE_SUB_KEY|KEY_SET_VALUE)
2229#define KEYEDEVENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
2230#define KEYEDEVENT_GENERIC_READ (STANDARD_RIGHTS_READ|KEYEDEVENT_WAIT)
2231#define KEYEDEVENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|KEYEDEVENT_WAKE)
2232#define MUTANT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2233#define MUTANT_GENERIC_READ (STANDARD_RIGHTS_READ|MUTANT_QUERY_STATE)
2234#define MUTANT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE)
2235#define PROCESS_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|\
2236 PROCESS_QUERY_LIMITED_INFORMATION|PROCESS_TERMINATE)
2237#define PROCESS_GENERIC_READ (STANDARD_RIGHTS_READ|PROCESS_VM_READ|PROCESS_QUERY_INFORMATION)
2238#define PROCESS_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|PROCESS_SUSPEND_RESUME|\
2239 PROCESS_SET_INFORMATION|PROCESS_SET_QUOTA|PROCESS_CREATE_PROCESS|\
2240 PROCESS_DUP_HANDLE|PROCESS_VM_WRITE|PROCESS_VM_OPERATION|\
2241 PROCESS_CREATE_THREAD)
2242#define SECTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SECTION_MAP_EXECUTE)
2243#define SECTION_GENERIC_READ (STANDARD_RIGHTS_READ|SECTION_QUERY|SECTION_MAP_READ)
2244#define SECTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|SECTION_MAP_WRITE)
2245#define SEMAPHORE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2246#define SEMAPHORE_GENERIC_READ (STANDARD_RIGHTS_READ|SEMAPHORE_QUERY_STATE)
2247#define SEMAPHORE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|SEMAPHORE_MODIFY_STATE)
2248#define SYMBOLIC_LINK_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYMBOLIC_LINK_QUERY)
2249#define SYMBOLIC_LINK_GENERIC_READ (STANDARD_RIGHTS_READ|SYMBOLIC_LINK_QUERY)
2250#define SYMBOLIC_LINK_GENERIC_WRITE (STANDARD_RIGHTS_WRITE)
2251#define THREAD_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|THREAD_RESUME|\
2252 THREAD_QUERY_LIMITED_INFORMATION)
2253#define THREAD_GENERIC_READ (STANDARD_RIGHTS_READ|THREAD_QUERY_INFORMATION|THREAD_GET_CONTEXT)
2254#define THREAD_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|THREAD_SET_LIMITED_INFORMATION|\
2255 THREAD_SET_INFORMATION|THREAD_SET_CONTEXT|THREAD_SUSPEND_RESUME|\
2256 THREAD_TERMINATE|0x04)
2257#define TIMER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE)
2258#define TIMER_GENERIC_READ (STANDARD_RIGHTS_READ|TIMER_QUERY_STATE)
2259#define TIMER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|TIMER_MODIFY_STATE)
2260#define TOKEN_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|TOKEN_IMPERSONATE|TOKEN_ASSIGN_PRIMARY)
2261#define TOKEN_GENERIC_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY_SOURCE|TOKEN_QUERY|TOKEN_DUPLICATE)
2262#define TOKEN_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|TOKEN_ADJUST_SESSIONID|TOKEN_ADJUST_DEFAULT|\
2263 TOKEN_ADJUST_GROUPS|TOKEN_ADJUST_PRIVILEGES)
2264#define TYPE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
2265#define TYPE_GENERIC_READ (STANDARD_RIGHTS_READ)
2266#define TYPE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE)
2267#define USER_APC_RESERVE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
2268#define USER_APC_RESERVE_GENERIC_READ (STANDARD_RIGHTS_READ|0x1)
2269#define USER_APC_RESERVE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|0x2)
2270#define USER_APC_RESERVE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x3)
2271#define WINSTA_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE|WINSTA_EXITWINDOWS|WINSTA_ACCESSGLOBALATOMS)
2272#define WINSTA_GENERIC_READ (STANDARD_RIGHTS_READ|WINSTA_READSCREEN|WINSTA_ENUMERATE|\
2273 WINSTA_READATTRIBUTES|WINSTA_ENUMDESKTOPS)
2274#define WINSTA_GENERIC_WRITE (STANDARD_RIGHTS_WRITE|WINSTA_WRITEATTRIBUTES|WINSTA_CREATEDESKTOP|\
2275 WINSTA_ACCESSCLIPBOARD)
2277#undef WINSTA_ALL_ACCESS
2278#undef DESKTOP_ALL_ACCESS
2279#define WINSTA_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x37f)
2280#define DESKTOP_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x1ff)
2281#define DEVICE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
2282#define TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x1)
2327#define TYPE(name,gen,extra,broken) { name, { gen ## _GENERIC_READ, gen ## _GENERIC_WRITE, \
2328 gen ## _GENERIC_EXECUTE, gen ## _ALL_ACCESS }, gen ## _ALL_ACCESS | extra, broken }
2332 TYPE(
L"Directory", DIRECTORY, 0, 0 ),
2335 TYPE(
L"IoCompletion", IO_COMPLETION, 0, 0 ),
2336 TYPE(
L"IoCompletionReserve", IO_COMPLETION_RESERVE, 0, 0 ),
2345 TYPE(
L"Mutant", MUTANT, 0, 0 ),
2349 TYPE(
L"Process", PROCESS, 0, 0 ),
2352 TYPE(
L"Semaphore", SEMAPHORE, 0, 0 ),
2353 TYPE(
L"SymbolicLink", SYMBOLIC_LINK, 0, 0xfffe ),
2366 TYPE(
L"UserApcReserve", USER_APC_RESERVE, 0, 0 ),
2367 TYPE(
L"WindowStation", WINSTA, 0, 0 ),
2381 ok(
info->NumberOfTypes < 100 ||
info->NumberOfTypes == 0xcccccccc,
2382 "wrong number of types %lu\n",
info->NumberOfTypes );
2387 ok( retlen <=
len + 16,
"wrong len %lx/%lx\n",
len, retlen );
2389 "wrong len %lx/%lx\n",
len, retlen );
2394 for (
i = 0;
i <
info->NumberOfTypes;
i++)
2422 !((
map.GenericWrite ^
tests[
i].mapping.GenericWrite) & ~
tests[
i].broken) &&
2423 !((
map.GenericExecute ^
tests[
i].mapping.GenericExecute) & ~
tests[
i].broken) &&
2424 !((
map.GenericAll ^
tests[
i].mapping.GenericAll) & ~
tests[
i].broken) ),
2425 "%s: mismatched mappings %08lx,%08lx,%08lx,%08lx / %08lx,%08lx,%08lx,%08lx\n",
2429 tests[
i].mapping.GenericRead,
tests[
i].mapping.GenericWrite,
2430 tests[
i].mapping.GenericExecute,
tests[
i].mapping.GenericAll );
2444 if (tested[
j])
continue;
2465 if (!pNtGetNextThread)
2467 win_skip(
"NtGetNextThread is not available.\n");
2499 ok(found,
"Thread not found.\n");
2533 ok(found,
"Thread not found.\n");
2548 {
L"\\??\\GLOBALROOT",
L"" },
2549 {
L"\\??\\GLOBALROOT\\??\\GLOBALROOT",
L"" },
2550 {
L"\\??\\GLOBALROOT\\??\\GLOBALROOT\\??\\GLOBALROOT",
L"" },
2551 {
L"\\??\\GLOBALROOT\\DosDevices",
L"\\??" },
2552 {
L"\\??\\GLOBALROOT\\BaseNamedObjects\\Global",
NULL },
2557 pRtlInitUnicodeString(&
str, symlinks[
i].
name);
2568 full_len =
str.Length +
sizeof(
WCHAR);
2569 ok(
len == full_len,
"bad length %lu (expected %lu)\n",
len, full_len );
2575 "symlink %s: target expected %s, got %s\n",
2584 pRtlInitUnicodeString(&
str,
L"\\??\\GLOBALROOT\\Device\\Null");
2589 "expected STATUS_SUCCESS, got %08lx\n",
status);
2601 if (!pNtCompareObjects)
2603 win_skip(
"NtCompareObjects is not available.\n");
2634 status = pNtCompareObjects( h1, h2 );
2642 status = pNtCompareObjects( h1, h2 );
2693 ok( !
memcmp( &
info[0], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2703 ok( !
memcmp( &
info[0], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2723 ok(
size == 0xdeadbeef,
"got size %lu\n",
size);
2744 ok( !
memcmp( &
info[1], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2752 ok( !
memcmp( &
info[1], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2766 ok( !
memcmp( &
info[1], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2775 ok(
size == needed_size,
"expected size %lu, got %lu\n", needed_size,
size );
2781 ok(
size == needed_size,
"expected size %lu, got %lu\n", needed_size,
size );
2793 ok( !
memcmp( &
info[1], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2803 ok( !
memcmp( &
info[2], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2815 ok( !
memcmp( &
info[1], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2827 ok( !
memcmp( &
info[0], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2848 ok( !
memcmp( &
info[1], &empty_info,
sizeof(*
info) ),
"entry was not cleared\n" );
2855#define test_object_name_with_null(a,b) _test_object_name_with_null(__LINE__,a,b)
2884 trace(
"running as %d bit\n", (
int)
sizeof(
void *) * 8);
3106 size.QuadPart = 4096;
3132 wcscpy(
name,
L"\\Registry\\Machine\\Software\\wine_test");
3133 wcscpy(
name3,
L"\\Registry\\Machine\\Software\\wine_test");
3144 name2U_exp = name2U;
3148 name_exp = (
WCHAR *)
L"\\Registry\\Machine\\Software\\WOW6432Node\\wine_test";
3149 name3_exp =(
WCHAR *)
L"\\Registry\\Machine\\Software\\WOW6432Node\\wine\0test";
3158 name3U_exp = name2U_exp;
3159 name3U_exp.
Buffer = name3_exp;
3198 skip(
"Limited access to \\Registry\\Machine\\Software key, skipping the tests\n");
3203 static const struct object_permanence_test {
3212 .name =
"permanent object persists",
3217 .
name =
"NtMakeTemporaryObject() succeeds",
3220 .make_temporary =
TRUE,
3224 .
name =
"NtMakeTemporaryObject() fails w/o DELETE access",
3227 .make_temporary =
TRUE,
3231 .
name =
"NtMakePermanentObject() succeeds even if already permanent",
3234 .make_permanent =
TRUE,
3237 .
name =
"NtMakePermanentObject() reverses effect of NtMakeTemporaryObject()",
3240 .make_temporary =
TRUE,
3242 .make_permanent =
TRUE,
3246 .
name =
"temporary object disappears",
3251 .
name =
"NtMakeTemporaryObject() succeeds even if already temporary",
3254 .make_temporary =
TRUE,
3258 .
name =
"NtMakeTemporaryObject() fails w/o DELETE access even if already temporary",
3261 .make_temporary =
TRUE,
3265 .
name =
"NtMakePermanentObject() makes an object persist",
3268 .make_permanent =
TRUE,
3271 .
name =
"NtMakePermanentObject() is not annulled by calling NtMakeTemporaryObject() on an already temporary object",
3274 .make_temporary =
TRUE,
3276 .make_permanent =
TRUE,
3279 const struct object_permanence_test *
test;
3282 .
Length =
sizeof(token_qos),
3288 .
Length =
sizeof(token_attr),
3289 .SecurityQualityOfService = &token_qos,
3319 if (!creatpermapriv)
skip(
"no privileges, tests may be limited\n" );
3340 ok(
status == make_perma_status,
"NtCreateEvent returned %08lx (expected %08lx)\n",
status, make_perma_status );
3358 if (
test->make_temporary)
3366 ok(
status ==
test->make_temp_status,
"NtMakeTemporaryObject returned %08lx\n",
status );
3371 trace(
"NOTE: object still has unclosed handle (%p) and shouldn't be deleted",
handle );
3390 if (
test->make_permanent)
3394 ok(
status == make_perma_status,
"NtMakePermanentObject returned %08lx expected (%08lx)\n",
status, make_perma_status );
3399 trace(
"NOTE: about to close earlier handle (%p) which should be the last",
handle );
3413 ok( obi_new.
Attributes == expect_attr,
"expected attr %08lx, got %08lx\n", expect_attr, obi_new.
Attributes );
3424 thread_token =
NULL;
3446 skip(
"Zero access tests don't work on Windows 2003\n");
3451 size.QuadPart = 4096;
3454 pRtlInitUnicodeString( &
str,
name );
3508 status = pNtCreateSemaphore( &h1, 0, &
attr, 1, 2 );
3518 status = pNtCreateSemaphore( &h2, 0, &
attr, 1, 2 );
3526 status = pNtCreateKeyedEvent( &h1, 0, &
attr, 0 );
3536 status = pNtCreateKeyedEvent( &h2, 0, &
attr, 0 );
3544 status = pNtCreateIoCompletion( &h1, 0, &
attr, 0 );
3547 status = pNtOpenIoCompletion( &h1, 0, &
attr );
3554 status = pNtCreateIoCompletion( &h2, 0, &
attr, 0 );
3557 status = pNtOpenIoCompletion( &h2, 0, &
attr );
3562 status = pNtCreateJobObject( &h1, 0, &
attr );
3573 status = pNtCreateJobObject( &h2, 0, &
attr );
3581 status = pNtCreateDirectoryObject( &h1, 0, &
attr );
3584 status = pNtOpenDirectoryObject( &h1, 0, &
attr );
3591 status = pNtCreateDirectoryObject( &h2, 0, &
attr );
3594 status = pNtOpenDirectoryObject( &h2, 0, &
attr );
3620 status = pNtOpenSymbolicLinkObject( &h1, 0, &
attr );
3631 status = pNtOpenSymbolicLinkObject( &h2, 0, &
attr );
3654 status = pNtCreateDebugObject( &h1, 0, &
attr, 0 );
3662 status = pNtCreateDebugObject( &h2, 0, &
attr, 0 );
3667 pRtlInitUnicodeString( &
str,
L"\\Device\\Null" );
3677 pRtlInitUnicodeString( &
str,
L"\\??\\c:\\windows\\system32\\ntdll.dll" );
3687 pRtlInitUnicodeString( &
str,
L"\\Device\\MailSlot\\abc" );
3699 pRtlInitUnicodeString( &
str,
L"\\??\\PIPE\\test\\pipe" );
3720 pRtlInitUnicodeString( &
str,
L"\\REGISTRY\\Machine" );
3721 status = pNtCreateKey( &h1, 0, &
attr, 0, 0, 0, 0 );
3734 pRtlInitUnicodeString( &
str,
L"\\REGISTRY\\Machine\\Software\\foobar-test" );
3743 status2 = pNtCreateKey( &h1, 0, &
attr, 0, 0, 0, 0 );
3758#if !defined(__REACTOS__) || DLL_EXPORT_VERSION >= 0x600
3766 cid.UniqueThread = 0;
3772 cid.UniqueProcess = 0;
3784 ok( h1 != 0,
"CreateWindowStationA failed err %lu\n",
GetLastError());
3788 todo_wine ok( !h1,
"CreateWindowStationA succeeded\n" );
3795 ok( h1 != 0,
"OpenWindowStation failed\n" );
3799 todo_wine ok( !h1,
"OpenWindowStation succeeeded\n" );
3809 todo_wine ok( !h1,
"CreateDesktopA succeeded\n" );
3857 const WCHAR *type_name;
3865 if (!pNtAllocateReserveObject)
3867 win_skip(
"NtAllocateReserveObject is unavailable.\n");
3959 win_skip(
"test_null_in_object_name() doesn't work on Windows 2003\n");
#define STATUS_PRIVILEGE_NOT_HELD
static GENERIC_MAPPING GenericMapping
#define FILE_DIRECTORY_FILE
EXTERN_C NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG)
#define STATUS_INVALID_HANDLE
#define STATUS_NOT_IMPLEMENTED
#define STATUS_OBJECT_TYPE_MISMATCH
static const WCHAR name3[]
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
#define ERROR_INVALID_PARAMETER
#define ReadFile(a, b, c, d, e)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
@ ThreadImpersonationToken
#define CreateFileA(a, b, c, d, e, f, g)
#define GetCurrentProcess()
#define HeapFree(x, y, z)
#define FILE_ATTRIBUTE_NORMAL
#define ERROR_ACCESS_DENIED
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
HANDLE WINAPI CreateMailslotA(IN LPCSTR lpName, IN DWORD nMaxMessageSize, IN DWORD lReadTimeout, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
UINT WINAPI GetWindowsDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
DWORD WINAPI GetThreadId(IN HANDLE Thread)
#define SYMBOLIC_LINK_QUERY
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
int align(int length, int align)
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
struct _UNICODE_STRING UNICODE_STRING
HANDLE NTAPI CreateFileMappingA(IN HANDLE hFile, IN LPSECURITY_ATTRIBUTES lpFileMappingAttributes, IN DWORD flProtect, IN DWORD dwMaximumSizeHigh, IN DWORD dwMaximumSizeLow, IN LPCSTR lpName)
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
#define STATUS_ACCESS_VIOLATION
@ FileIoCompletionNotificationInformation
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLint GLboolean GLint GLenum access
GLenum GLenum GLenum GLenum mapping
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define PROCESS_TERMINATE
#define JOB_OBJECT_ALL_ACCESS
NTSTATUS NTAPI NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG NumberOfConcurrentThreads)
#define todo_wine_if(is_todo)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
#define ERROR_ALREADY_EXISTS
#define FILE_FLAG_BACKUP_SEMANTICS
#define ERROR_FILE_NOT_FOUND
static struct test_info tests[]
static POBJECTS_AND_NAME_A SE_OBJECT_TYPE LPSTR ObjectTypeName
#define THREAD_QUERY_LIMITED_INFORMATION
#define SE_CREATE_PERMANENT_PRIVILEGE
#define PROCESS_QUERY_LIMITED_INFORMATION
#define IO_COMPLETION_ALL_ACCESS
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
static PIO_STATUS_BLOCK iosb
#define InitializeObjectAttributes(p, n, a, r, s)
NTSTATUS NTAPI NtCreateMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN BOOLEAN InitialOwner)
#define MUTANT_ALL_ACCESS
#define FILE_PIPE_FULL_DUPLEX
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ BOOLEAN EffectiveOnly
HANDLE WINAPI CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
#define SYMBOLIC_LINK_ALL_ACCESS
#define SECTION_MAP_WRITE
#define SECTION_ALL_ACCESS
#define PROCESS_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define DIRECTORY_ALL_ACCESS
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
NTSTATUS NTAPI NtSetInformationThread(_In_ HANDLE ThreadHandle, _In_ THREADINFOCLASS ThreadInformationClass, _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation, _In_ ULONG ThreadInformationLength)
NTSTATUS NTAPI NtOpenProcessToken(IN HANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, OUT PHANDLE TokenHandle)
#define STATUS_PIPE_NOT_AVAILABLE
#define STATUS_INVALID_CID
#define STATUS_INVALID_PARAMETER_MIX
#define STATUS_OBJECT_PATH_SYNTAX_BAD
#define STATUS_NOT_SAME_OBJECT
#define STATUS_OBJECT_NAME_EXISTS
#define STATUS_INVALID_PARAMETER_4
#define STATUS_NOT_ALL_ASSIGNED
#define STATUS_NO_MORE_ENTRIES
#define STATUS_INVALID_PAGE_PROTECTION
#define STATUS_DATATYPE_MISALIGNMENT
#define STATUS_INVALID_INFO_CLASS
#define STATUS_INSTANCE_NOT_AVAILABLE
#define THREAD(work, arg, cleanup)
NTSTATUS NTAPI NtQueryDirectoryObject(IN HANDLE DirectoryHandle, OUT PVOID Buffer, IN ULONG BufferLength, IN BOOLEAN ReturnSingleEntry, IN BOOLEAN RestartScan, IN OUT PULONG Context, OUT PULONG ReturnLength OPTIONAL)
NTSTATUS NTAPI NtMakePermanentObject(IN HANDLE ObjectHandle)
NTSTATUS NTAPI NtMakeTemporaryObject(IN HANDLE ObjectHandle)
static void test_object_types(void)
static const POBJECT_ATTRIBUTES
static void _test_no_file_info(unsigned line, HANDLE handle)
static OBJECT_TYPE_INFORMATION all_types[256]
static void test_name_limits(void)
static void _test_object_name_with_null(unsigned line, HANDLE handle, UNICODE_STRING *expect)
static HANDLE ACCESS_MASK ULONG ULONG HANDLE * handle
static void check_unicode_string_(int line, const UNICODE_STRING *string, const WCHAR *expect)
static void test_globalroot(void)
static void test_directory(void)
static const const HANDLE
#define test_no_file_info(a)
static void test_case_sensitive(void)
#define KEYEDEVENT_ALL_ACCESS
#define check_create_open_dir(parent, name, status)
static void test_type_mismatch(void)
static void test_query_directory(void)
static void _test_object_name(unsigned line, HANDLE handle, const WCHAR *expected_name)
static HANDLE ACCESS_MASK ULONG ULONG flags
static void test_namespace_pipe(void)
static void check_create_open_dir_(int line, HANDLE parent, const WCHAR *name, NTSTATUS expect)
static void test_object_permanence(void)
static void test_symboliclink(void)
static void test_NtAllocateReserveObject(void)
#define WINSTA_ALL_ACCESS
static const OBJECT_ATTRIBUTES MEMORY_RESERVE_OBJECT_TYPE
static void _test_object_type(unsigned line, HANDLE handle, const WCHAR *expected_name)
static HANDLE *static const OBJECT_ATTRIBUTES const CLIENT_ID *static HANDLE *static OBJECT_ATTRIBUTES TOKEN_TYPE
static HANDLE get_base_dir(void)
static void test_zero_access(void)
static void * align_ptr(void *ptr)
static void test_all_kernel_objects(UINT line, OBJECT_ATTRIBUTES *attr, NTSTATUS create_expect, NTSTATUS open_expect)
static HANDLE ACCESS_MASK ULONG attributes
#define test_object_name_with_null(a, b)
#define DESKTOP_ALL_ACCESS
static void add_object_type(OBJECT_TYPE_INFORMATION *info)
static void test_object_identity(void)
static void test_token(void)
static void test_get_next_thread(void)
static void test_null_in_object_name(void)
static void FILE_INFORMATION_CLASS
static void _test_file_info(unsigned line, HANDLE handle)
static OBJECT_INFORMATION_CLASS
static DWORD WINAPI test_get_next_thread_proc(void *arg)
#define check_unicode_string(a, b)
#define test_object_type(a, b)
#define test_object_name(a, b)
static HANDLE ACCESS_MASK access
static BOOL compare_unicode_string(const UNICODE_STRING *string, const WCHAR *expect)
#define test_file_info(a)
static void test_duplicate_object(void)
static void test_name_collisions(void)
static void test_query_object(void)
static BOOL is_correct_dir(HANDLE dir, const WCHAR *name)
static void test_process(void)
static void test_null_device(void)
static const UNICODE_STRING PULONG
#define TYPE(name, gen, extra, broken)
#define OBJ_CASE_INSENSITIVE
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
#define _WIN32_WINNT_WIN7
#define _WIN32_WINNT_VISTA
#define FileAccessInformation
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
ACCESS_MASK GenericExecute
PUNICODE_STRING ObjectName
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCSTR lpName OPTIONAL)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
HANDLE WINAPI CreateWaitableTimerA(IN LPSECURITY_ATTRIBUTES lpTimerAttributes OPTIONAL, IN BOOL bManualReset, IN LPCSTR lpTimerName OPTIONAL)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, IN LONG lInitialCount, IN LONG lMaximumCount, IN LPCSTR lpName OPTIONAL)
_Must_inspect_result_ __kernel_entry NTSTATUS NTAPI NtAdjustPrivilegesToken(_In_ HANDLE TokenHandle, _In_ BOOLEAN DisableAllPrivileges, _In_opt_ PTOKEN_PRIVILEGES NewState, _In_ ULONG BufferLength, _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_PRIVILEGES PreviousState, _When_(PreviousState!=NULL, _Out_) PULONG ReturnLength)
Removes a certain amount of privileges of a token based upon the request by the caller.
_Must_inspect_result_ __kernel_entry NTSTATUS NTAPI NtDuplicateToken(_In_ HANDLE ExistingTokenHandle, _In_ ACCESS_MASK DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ BOOLEAN EffectiveOnly, _In_ TOKEN_TYPE TokenType, _Out_ PHANDLE NewTokenHandle)
Duplicates a token.
#define STATUS_ACCESS_DENIED
#define STATUS_OBJECT_PATH_NOT_FOUND
#define STATUS_INVALID_PARAMETER
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_MORE_ENTRIES
#define STATUS_INFO_LENGTH_MISMATCH
#define STATUS_OBJECT_NAME_INVALID
#define STATUS_OBJECT_NAME_NOT_FOUND
HDESK WINAPI CreateDesktopA(LPCSTR lpszDesktop, LPCSTR lpszDevice, LPDEVMODEA pDevmode, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa)
#define PIPE_READMODE_BYTE
DWORD WINAPI GetLastError(void)
HANDLE WINAPI GetCurrentThread(void)
#define PIPE_ACCESS_DUPLEX
DWORD WINAPI GetCurrentThreadId(void)
DWORD WINAPI GetCurrentProcessId(void)
HWINSTA WINAPI GetProcessWindowStation(void)
#define SEMAPHORE_ALL_ACCESS
@ MemoryReserveObjectTypeIoCompletion
@ MemoryReserveObjectTypeUserApc
NTSYSAPI NTSTATUS WINAPI RtlDuplicateUnicodeString(int, const UNICODE_STRING *, UNICODE_STRING *)
NTSYSAPI NTSTATUS WINAPI NtGetNextThread(HANDLE, HANDLE, ACCESS_MASK, ULONG, ULONG, HANDLE *)
enum _MEMORY_RESERVE_OBJECT_TYPE MEMORY_RESERVE_OBJECT_TYPE
#define ERROR_PATH_NOT_FOUND
#define JOB_OBJECT_IMPERSONATE
HDESK WINAPI GetThreadDesktop(_In_ DWORD)
#define DESKTOP_CREATEWINDOW
HWINSTA WINAPI OpenWindowStationA(_In_ LPCSTR, _In_ BOOL, _In_ DWORD)
HDESK WINAPI OpenInputDesktop(_In_ DWORD, _In_ BOOL, _In_ DWORD)
HDESK WINAPI OpenDesktopA(_In_ LPCSTR, _In_ DWORD, _In_ BOOL, _In_ DWORD)
#define DESKTOP_ENUMERATE
HWINSTA WINAPI CreateWindowStationA(_In_opt_ LPCSTR lpwinsta, _In_ DWORD dwFlags, _In_ ACCESS_MASK dwDesiredAccess, _In_opt_ LPSECURITY_ATTRIBUTES lpsa)
BOOL WINAPI CloseWindowStation(_In_ HWINSTA)
#define DESKTOP_WRITEOBJECTS
#define DESKTOP_READOBJECTS
BOOL WINAPI CloseDesktop(_In_ HDESK)
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
#define DUPLICATE_SAME_ACCESS
_Out_ PBOOLEAN _Out_ PBOOLEAN _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel
#define TOKEN_QUERY_SOURCE
#define TOKEN_ADJUST_PRIVILEGES
#define SECURITY_STATIC_TRACKING
#define TOKEN_ASSIGN_PRIMARY
#define TOKEN_IMPERSONATE
#define SE_PRIVILEGE_ENABLED