ReactOS 0.4.17-dev-573-g8315b8c
thread.c File Reference
#include <rtl.h>
#include "i386/ketypes.h"
#include <debug.h>
Include dependency graph for thread.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

VOID NTAPI RtlInitializeContext (_In_ HANDLE ProcessHandle, _Out_ PCONTEXT ThreadContext, _In_opt_ PVOID ThreadStartParam, _In_ PTHREAD_START_ROUTINE ThreadStartAddress, _In_ PVOID StackBase)
 
NTSTATUS NTAPI RtlQueueApcWow64Thread (_In_ HANDLE ThreadHandle, _In_ PKNORMAL_ROUTINE ApcRoutine, _In_opt_ PVOID NormalContext, _In_opt_ PVOID SystemArgument1, _In_opt_ PVOID SystemArgument2)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 17 of file thread.c.

Function Documentation

◆ RtlInitializeContext()

VOID NTAPI RtlInitializeContext ( _In_ HANDLE  ProcessHandle,
_Out_ PCONTEXT  ThreadContext,
_In_opt_ PVOID  ThreadStartParam,
_In_ PTHREAD_START_ROUTINE  ThreadStartAddress,
_In_ PVOID  StackBase 
)

Definition at line 27 of file thread.c.

33{
34 DPRINT("RtlInitializeContext: (hProcess: %p, ThreadContext: %p, StackBase: %p\n",
35 ProcessHandle, ThreadContext, StackBase);
36
37 /*
38 * Set the Initial Registers
39 * This is based on NT's default values -- crazy apps might expect this...
40 */
41 ThreadContext->Ebp = 0;
42 ThreadContext->Eax = 0;
43 ThreadContext->Ebx = 1;
44 ThreadContext->Ecx = 2;
45 ThreadContext->Edx = 3;
46 ThreadContext->Esi = 4;
47 ThreadContext->Edi = 5;
48
49 /* Set the Selectors */
50 ThreadContext->SegGs = 0;
51 ThreadContext->SegFs = KGDT_R3_TEB;
52 ThreadContext->SegEs = KGDT_R3_DATA;
53 ThreadContext->SegDs = KGDT_R3_DATA;
54 ThreadContext->SegSs = KGDT_R3_DATA;
55 ThreadContext->SegCs = KGDT_R3_CODE;
56
57 /* Enable Interrupts */
58 ThreadContext->EFlags = EFLAGS_INTERRUPT_MASK;
59
60 /* Settings passed */
61 ThreadContext->Eip = (ULONG)ThreadStartAddress;
62 ThreadContext->Esp = (ULONG)StackBase;
63
64 /* Only the basic Context is initialized */
65 ThreadContext->ContextFlags = CONTEXT_CONTROL |
68
69 /* Set up ESP to the right value */
70 ThreadContext->Esp -= sizeof(PVOID);
72 (PVOID)ThreadContext->Esp,
73 (PVOID)&ThreadStartParam,
74 sizeof(PVOID),
75 NULL);
76
77 /* Push it down one more notch for RETEIP */
78 ThreadContext->Esp -= sizeof(PVOID);
79}
#define EFLAGS_INTERRUPT_MASK
#define KGDT_R3_DATA
#define KGDT_R3_CODE
#define KGDT_R3_TEB
#define NULL
Definition: types.h:112
_In_ HANDLE ProcessHandle
Definition: mmfuncs.h:407
NTSYSAPI NTSTATUS NTAPI ZwWriteVirtualMemory(_In_ HANDLE ProcessHandle, _In_ PVOID BaseAddress, _In_ PVOID Buffer, _In_ SIZE_T NumberOfBytesToWrite, _Out_opt_ PSIZE_T NumberOfBytesWritten)
#define CONTEXT_CONTROL
Definition: nt_native.h:1372
#define CONTEXT_INTEGER
Definition: nt_native.h:1373
#define CONTEXT_SEGMENTS
Definition: nt_native.h:1374
#define DPRINT
Definition: sndvol32.h:73
void * PVOID
Definition: typedefs.h:50
uint32_t ULONG
Definition: typedefs.h:59

Referenced by RtlCreateUserThread(), and START_TEST().

◆ RtlQueueApcWow64Thread()

NTSTATUS NTAPI RtlQueueApcWow64Thread ( _In_ HANDLE  ThreadHandle,
_In_ PKNORMAL_ROUTINE  ApcRoutine,
_In_opt_ PVOID  NormalContext,
_In_opt_ PVOID  SystemArgument1,
_In_opt_ PVOID  SystemArgument2 
)

Definition at line 83 of file thread.c.

89{
90 return NtQueueApcThread(ThreadHandle,
92 NormalContext,
95}
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE ApcRoutine
Definition: iofuncs.h:726
NTSTATUS NTAPI NtQueueApcThread(IN HANDLE ThreadHandle, IN PKNORMAL_ROUTINE ApcRoutine, IN PVOID NormalContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
Definition: state.c:600
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
Definition: ketypes.h:756
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
Definition: ketypes.h:757