24#define WIN32_NO_STATUS
29#if defined (__REACTOS__) && (DLL_EXPORT_VERSION < 0x601)
33NtRemoveIoCompletionEx_(
42 *NumEntriesRemoved =
Count;
44 &IoCompletionInformation[0].CompletionKey,
45 &IoCompletionInformation[0].CompletionValue,
49#define NtRemoveIoCompletionEx NtRemoveIoCompletionEx_
79static void (
WINAPI *pRtlWakeAddressAll)(
const void * );
80static void (
WINAPI *pRtlWakeAddressSingle)(
const void * );
82#define KEYEDEVENT_WAIT 0x0001
83#define KEYEDEVENT_WAKE 0x0002
84#define KEYEDEVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x0003)
90 LONG prev_state = 0xdeadbeef;
96 pRtlInitUnicodeString( &
str,
L"\\BaseNamedObjects\\testEvent" );
108 "NtQueryEvent failed, expected 0 0, got %d %ld\n",
info.EventType,
info.EventState );
116 ok( !prev_state,
"prev_state = %lx\n", prev_state );
122 "NtQueryEvent failed, expected 1 0, got %d %ld\n",
info.EventType,
info.EventState );
134 "NtQueryEvent failed, expected 1 0, got %d %ld\n",
info.EventType,
info.EventState );
138 ok( !prev_state,
"prev_state = %lx\n", prev_state );
144 "NtQueryEvent failed, expected 1 1, got %d %ld\n",
info.EventType,
info.EventState );
148 ok( prev_state == 1,
"prev_state = %lx\n", prev_state );
152 ok( prev_state == 1,
"prev_state = %lx\n", prev_state );
156 ok( !prev_state,
"prev_state = %lx\n", prev_state );
160 ok( !prev_state,
"prev_state = %lx\n", prev_state );
164 ok( !prev_state,
"prev_state = %lx\n", prev_state );
168 ok( prev_state == 1,
"prev_state = %lx\n", prev_state );
185 attr.RootDirectory = 0;
189 attr.SecurityQualityOfService =
NULL;
195 for (
i = 0;
i < 20;
i++)
227 if (!pNtCreateKeyedEvent)
229 win_skip(
"Keyed events not supported\n" );
234 attr.RootDirectory = 0;
238 attr.SecurityQualityOfService =
NULL;
265 "NtWaitForKeyedEvent %lx\n",
status );
268 "NtReleaseKeyedEvent %lx\n",
status );
281 for (
i = 0;
i < 20;
i++)
353 "CreateEvent %lx\n",
status );
380 ok(
info.CurrentCount == 0,
"expected 0, got %ld\n",
info.CurrentCount );
381 ok(
info.OwnedByCaller ==
TRUE,
"expected TRUE, got %d\n",
info.OwnedByCaller );
382 ok(
info.AbandonedState ==
FALSE,
"expected FALSE, got %d\n",
info.AbandonedState );
400 pRtlInitUnicodeString(&
str,
L"\\BaseNamedObjects\\test_mutant");
408 "Failed to NtQueryMutant, expected STATUS_INFO_LENGTH_MISMATCH, got %08lx\n",
status );
411 "Failed to NtQueryMutant, expected STATUS_INVALID_INFO_CLASS, got %08lx\n",
status );
414 "Failed to NtQueryMutant, expected STATUS_INVALID_HANDLE, got %08lx\n",
status );
421 ok(
info.CurrentCount == 0,
"expected 0, got %ld\n",
info.CurrentCount );
422 ok(
info.OwnedByCaller ==
TRUE,
"expected TRUE, got %d\n",
info.OwnedByCaller );
423 ok(
info.AbandonedState ==
FALSE,
"expected FALSE, got %d\n",
info.AbandonedState );
432 ok(
info.CurrentCount == -1,
"expected -1, got %ld\n",
info.CurrentCount );
433 ok(
info.OwnedByCaller ==
TRUE,
"expected TRUE, got %d\n",
info.OwnedByCaller );
434 ok(
info.AbandonedState ==
FALSE,
"expected FALSE, got %d\n",
info.AbandonedState );
437 status = pNtReleaseMutant(mutant, &prev);
439 ok( prev == -1,
"NtReleaseMutant failed, expected -1, got %ld\n", prev );
442 status = pNtReleaseMutant(mutant, &prev);
444 ok( prev == 0,
"NtReleaseMutant failed, expected 0, got %ld\n", prev );
449 ok(
info.CurrentCount == 1,
"expected 1, got %ld\n",
info.CurrentCount );
450 ok(
info.OwnedByCaller ==
FALSE,
"expected FALSE, got %d\n",
info.OwnedByCaller );
451 ok(
info.AbandonedState ==
FALSE,
"expected FALSE, got %d\n",
info.AbandonedState );
462 ok(
info.CurrentCount == 1,
"expected 0, got %ld\n",
info.CurrentCount );
463 ok(
info.OwnedByCaller ==
FALSE,
"expected FALSE, got %d\n",
info.OwnedByCaller );
464 ok(
info.AbandonedState ==
TRUE,
"expected TRUE, got %d\n",
info.AbandonedState );
472 ok(
info.CurrentCount == 0,
"expected 0, got %ld\n",
info.CurrentCount );
473 ok(
info.OwnedByCaller ==
TRUE,
"expected TRUE, got %d\n",
info.OwnedByCaller );
474 ok(
info.AbandonedState ==
FALSE,
"expected FALSE, got %d\n",
info.AbandonedState );
490 pRtlInitUnicodeString(&
str,
L"\\BaseNamedObjects\\test_semaphore");
501 "Failed to NtQuerySemaphore, expected STATUS_INFO_LENGTH_MISMATCH, got %08lx\n",
status );
504 "Failed to NtQuerySemaphore, expected STATUS_INVALID_INFO_CLASS, got %08lx\n",
status );
507 "Failed to NtQuerySemaphore, expected STATUS_INVALID_HANDLE, got %08lx\n",
status );
513 ok(
info.CurrentCount == 1,
"expected 1, got %ld\n",
info.CurrentCount );
514 ok(
info.MaximumCount == 2,
"expected 2, got %ld\n",
info.MaximumCount );
523 ok(
info.CurrentCount == 0,
"expected 0, got %ld\n",
info.CurrentCount );
524 ok(
info.MaximumCount == 2,
"expected 2, got %ld\n",
info.MaximumCount );
529 ok( prev == 0xdeadbeef,
"NtReleaseSemaphore failed, expected 0xdeadbeef, got %ld\n", prev );
534 ok( prev == 0,
"NtReleaseSemaphore failed, expected 0, got %ld\n", prev );
539 ok( prev == 1,
"NtReleaseSemaphore failed, expected 1, got %ld\n", prev );
544 ok( prev == 0xdeadbeef,
"NtReleaseSemaphore failed, expected 0xdeadbeef, got %ld\n", prev );
549 ok(
info.CurrentCount == 2,
"expected 2, got %ld\n",
info.CurrentCount );
550 ok(
info.MaximumCount == 2,
"expected 2, got %ld\n",
info.MaximumCount );
563 if (!pRtlWaitOnAddress)
565 win_skip(
"RtlWaitOnAddress not supported, skipping test\n");
577 pRtlWakeAddressSingle(
NULL);
578 pRtlWakeAddressAll(
NULL);
589 pNtQuerySystemTime(&
start);
592 pNtQuerySystemTime(&
end);
594 elapsed = (
end.QuadPart -
start.QuadPart) / 10000;
595 ok(90 <= elapsed && elapsed <= 900,
"timed out in %lu ms\n", elapsed);
605 pNtQuerySystemTime(&
start);
606 timeout.QuadPart = -100 * 10000;
608 pNtQuerySystemTime(&
end);
610 elapsed = (
end.QuadPart -
start.QuadPart) / 10000;
611 ok(90 <= elapsed && elapsed <= 900,
"timed out in %lu ms\n", elapsed);
623 pRtlWakeAddressSingle(&
address);
786 ret = pNtAlertThreadByThreadId(
arg );
789 ret = pNtWaitForAlertByThreadId( (
void *)0x123,
NULL );
805 if (!pNtWaitForAlertByThreadId)
807 win_skip(
"NtWaitForAlertByThreadId is not available\n");
811 ret = pNtWaitForAlertByThreadId( (
void *)0x123, &
timeout );
814 ret = pNtAlertThreadByThreadId( 0 );
817 ret = pNtAlertThreadByThreadId( (
HANDLE)0xdeadbeef );
826 ret = pNtWaitForAlertByThreadId( (
void *)0x123, &
timeout );
829 ret = pNtWaitForAlertByThreadId( (
void *)0x123, &
timeout );
832 ret = pNtWaitForAlertByThreadId( (
void *)0x321, &
timeout );
836 timeout.QuadPart = -1000 * 10000;
837 ret = pNtWaitForAlertByThreadId( (
void *)0x123, &
timeout );
909 ok(
key == 3 +
p->index ||
broken(
p->index &&
key == 5 ) ,
"got %Iu, expected %u.\n",
key, 3 +
p->index );
916 skip(
"Handle closed before wait started.\n" );
927 skip(
"Handle closed before wait started.\n" );
939 skip(
"Handle closed before wait started.\n" );
949 ok( !bret,
"got %d.\n", bret );
951 skip(
"Handle closed before wait started.\n" );
955#if !defined (__REACTOS__) || (DLL_EXPORT_VERSION >= 0x601)
962 ok( !bret,
"got %d.\n", bret );
964 skip(
"Handle closed before wait started.\n" );
983#if defined(__REACTOS__)
986 skip(
"Skipping completion port scheduling test, because it hangs on Windows 2003, Vista and ReactOS\n");
991 for (
i = 0;
i < 2; ++
i)
1003 for (
i = 0;
i < 2; ++
i)
1041 for (
i = 0;
i < 4; ++
i)
1045 for (
j = 0;
j < 2; ++
j)
1058 for (
i = 0;
i < 2; ++
i)
1074 if (
argc > 2)
return;
#define STATUS_INVALID_HANDLE
#define STATUS_NOT_IMPLEMENTED
#define STATUS_OBJECT_TYPE_MISMATCH
#define GetProcAddress(x, y)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define ERROR_INVALID_HANDLE
#define ERROR_ACCESS_DENIED
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
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)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(const char *app_name, char *cmd_line, SECURITY_ATTRIBUTES *process_attr, SECURITY_ATTRIBUTES *thread_attr, BOOL inherit, DWORD flags, void *env, const char *cur_dir, STARTUPINFOA *startup_info, PROCESS_INFORMATION *info)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(SECURITY_ATTRIBUTES *sa, BOOL manual_reset, BOOL initial_state, LPCSTR name)
DWORD WINAPI DECLSPEC_HOTPATCH SignalObjectAndWait(HANDLE signal, HANDLE wait, DWORD timeout, BOOL alertable)
void WINAPI DECLSPEC_HOTPATCH Sleep(DWORD timeout)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(HANDLE handle)
BOOL WINAPI DECLSPEC_HOTPATCH GetQueuedCompletionStatusEx(HANDLE port, OVERLAPPED_ENTRY *entries, ULONG count, ULONG *written, DWORD timeout, BOOL alertable)
DWORD WINAPI DECLSPEC_HOTPATCH WaitForMultipleObjects(DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout)
BOOL WINAPI DECLSPEC_HOTPATCH PostQueuedCompletionStatus(HANDLE port, DWORD count, ULONG_PTR key, LPOVERLAPPED overlapped)
DWORD WINAPI DECLSPEC_HOTPATCH WaitForSingleObject(HANDLE handle, DWORD timeout)
BOOL WINAPI DECLSPEC_HOTPATCH GetQueuedCompletionStatus(HANDLE port, LPDWORD count, PULONG_PTR key, LPOVERLAPPED *overlapped, DWORD timeout)
GLuint GLuint GLsizei count
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 const GLfloat const GLdouble const GLfloat GLint GLint GLint j
NTSTATUS NTAPI NtRemoveIoCompletion(IN HANDLE IoCompletionHandle, OUT PVOID *KeyContext, OUT PVOID *ApcContext, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER Timeout OPTIONAL)
NTSTATUS NTAPI NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG NumberOfConcurrentThreads)
DWORD WINAPI thread2(LPVOID crap)
static PROCESS_INFORMATION pi
static HANDLE ULONG_PTR DWORD threads
static void test_semaphore(void)
static void test_event(void)
#define IO_COMPLETION_ALL_ACCESS
static PIO_STATUS_BLOCK iosb
#define InitializeObjectAttributes(p, n, a, r, s)
static const OBJECT_ATTRIBUTES LONG
static HANDLE thread_ready
static const WCHAR keyed_nameW[]
static void test_completion_port_scheduling(void)
static void test_resource(void)
static const OBJECT_ATTRIBUTES *static const OBJECT_ATTRIBUTES *static LONG *static EVENT_INFORMATION_CLASS
static DWORD WINAPI tid_alert_thread(void *arg)
static HANDLE thread_done
#define KEYEDEVENT_ALL_ACCESS
static DWORD WINAPI resource_shared_thread(void *arg)
static const OBJECT_ATTRIBUTES EVENT_TYPE
static void test_tid_alert(char **argv)
static const OBJECT_ATTRIBUTES *static const OBJECT_ATTRIBUTES *static LONG *static void ULONG *static void ULONG *static SEMAPHORE_INFORMATION_CLASS
static void test_mutant(void)
static DWORD WINAPI resource_exclusive_thread(void *arg)
static DWORD WINAPI keyed_event_thread(void *arg)
static const OBJECT_ATTRIBUTES *static const OBJECT_ATTRIBUTES *static LONG *static void ULONG *static MUTANT_INFORMATION_CLASS
static void test_keyed_events(void)
static DWORD WINAPI mutant_thread(void *arg)
static void test_wait_on_address(void)
static DWORD WINAPI test_completion_port_scheduling_thread(void *param)
_In_ PVOID _In_ BOOLEAN Alertable
@ SemaphoreBasicInformation
#define _Out_writes_to_(s, c)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define STATUS_INVALID_CID
#define STATUS_SEMAPHORE_LIMIT_EXCEEDED
#define STATUS_INVALID_INFO_CLASS
#define STATUS_INVALID_PARAMETER_1
#define STATUS_ABANDONED_WAIT_0
int winetest_get_mainargs(char ***pargv)
#define _WIN32_WINNT_WIN7
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED * overlapped
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_INFO_LENGTH_MISMATCH
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetCurrentThreadId(void)
NTSYSAPI NTSTATUS WINAPI NtRemoveIoCompletionEx(HANDLE, FILE_IO_COMPLETION_INFORMATION *, ULONG, ULONG *, LARGE_INTEGER *, BOOLEAN)
#define ERROR_ABANDONED_WAIT_0