136{
142 ULONG GdiBatchCount = 0;
145
146
148 OldStack = *UserEsp;
149
150
152 {
153
154 NewStack = (OldStack - ArgumentLength) & ~3;
155
156
160
161
163
164
165 NewStack -= 24;
167 *(
PULONG)(NewStack + 4) = RoutineIndex;
168 *(
PULONG)(NewStack + 8) = (NewStack + 24);
169 *(
PULONG)(NewStack + 12) = ArgumentLength;
170
171
174
175
176 *UserEsp = NewStack;
179 {
180
182 }
183 else
184 {
185
186 OldStack = *UserEsp;
187 }
188
189
191 }
193 {
194
196 }
198
199
200 if (GdiBatchCount)
201 {
202 *UserEsp -= 256;
204 }
205
206
207 *UserEsp = OldStack;
209}
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
_In_ FLT_PREOP_CALLBACK_STATUS CallbackStatus
#define KeGetCurrentThread
#define EXCEPTION_EXECUTE_HANDLER
#define KeGetPreviousMode()
FORCEINLINE PULONG_PTR KiGetUserModeStackAddress(void)
PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch
NTSTATUS NTAPI KiCallUserMode(IN PVOID *OutputBuffer, IN PULONG OutputLength)
_Out_ PKAPC_STATE ApcState
#define STATUS_CALLBACK_POP_STACK
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
struct _EXCEPTION_REGISTRATION_RECORD * ExceptionList
#define RtlCopyMemory(Destination, Source, Length)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO