25#define WIN32_NO_STATUS
39#define GET_FUNC(name) p##name = (void *)GetProcAddress( hntdll, #name );
60 if (!pNtCreateThreadEx)
62 win_skip(
"NtCreateThreadEx is not available.\n" );
73 ok( !dbg_hidden,
"Got unexpected dbg_hidden %#x.\n", dbg_hidden );
88 ok( dbg_hidden == 1,
"Got unexpected dbg_hidden %#x.\n", dbg_hidden );
100 memset( &ps_attr, 0,
sizeof(ps_attr) );
106#if !defined (__REACTOS__) || (DLL_EXPORT_VERSION >= 0x601)
113 memset( &create_info, 0,
sizeof(create_info) );
114 create_info.
Size =
sizeof(create_info);
119 &create_info, &ps_attr );
123 &create_info, &ps_attr );
153 if (!pNtCreateThreadEx)
155 win_skip(
"NtCreateThreadEx is not available.\n" );
169 &args1, 0, 0, 0, 0,
NULL );
173 &args2, 0, 0, 0, 0,
NULL );
188 ok( args1.
teb != args2.
teb,
"Multiple threads have TEB %p.\n", args1.
teb );
197 win_skip(
"_errno not available\n" );
203 ok(
val == 0xdead,
"wrong value %x\n",
val );
206 ok(
val == 0xbeef,
"wrong value %x\n",
val );
#define GetCurrentProcess()
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
LPVOID WINAPI TlsGetValue(IN DWORD Index)
GLenum const GLfloat * params
static HANDLE ULONG_PTR DWORD threads
static void CALLBACK test_unique_teb_proc(void *param)
static void test_errno(void)
static void init_function_pointers(void)
static void CALLBACK test_NtCreateThreadEx_proc(void *param)
static void test_unique_teb(void)
static void test_dbg_hidden_thread_creation(void)
static OBJECT_ATTRIBUTES void PS_ATTRIBUTE_LIST *static int *CDECL * p_errno(void)
static OBJECT_ATTRIBUTES void SIZE_T
#define THREAD_ALL_ACCESS
#define PROCESS_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtTerminateProcess(HANDLE ProcessHandle, LONG ExitStatus)
NTSTATUS NTAPI NtQueryInformationThread(_In_ HANDLE ThreadHandle, _In_ THREADINFOCLASS ThreadInformationClass, _Out_writes_bytes_to_opt_(ThreadInformationLength, *ReturnLength) PVOID ThreadInformation, _In_ ULONG ThreadInformationLength, _Out_opt_ PULONG ReturnLength)
NTSTATUS NTAPI NtResumeThread(IN HANDLE ThreadHandle, OUT PULONG SuspendCount OPTIONAL)
PS_ATTRIBUTE Attributes[1]
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define STATUS_INVALID_PARAMETER
DWORD WINAPI GetLastError(void)
NTSYSAPI NTSTATUS WINAPI NtCreateUserProcess(HANDLE *, HANDLE *, ACCESS_MASK, ACCESS_MASK, OBJECT_ATTRIBUTES *, OBJECT_ATTRIBUTES *, ULONG, ULONG, RTL_USER_PROCESS_PARAMETERS *, PS_CREATE_INFO *, PS_ATTRIBUTE_LIST *)
#define PS_ATTRIBUTE_IMAGE_NAME
NTSYSAPI NTSTATUS WINAPI RtlCreateProcessParametersEx(RTL_USER_PROCESS_PARAMETERS **, const UNICODE_STRING *, const UNICODE_STRING *, const UNICODE_STRING *, const UNICODE_STRING *, PWSTR, const UNICODE_STRING *, const UNICODE_STRING *, const UNICODE_STRING *, const UNICODE_STRING *, ULONG)
NTSYSAPI NTSTATUS WINAPI NtCreateThreadEx(HANDLE *, ACCESS_MASK, OBJECT_ATTRIBUTES *, HANDLE, PRTL_THREAD_START_ROUTINE, void *, ULONG, ULONG_PTR, SIZE_T, SIZE_T, PS_ATTRIBUTE_LIST *)
#define THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER
void(CALLBACK * PRTL_THREAD_START_ROUTINE)(LPVOID)
#define THREAD_CREATE_FLAGS_CREATE_SUSPENDED
#define PROCESS_PARAMS_FLAG_NORMALIZED