KeGdiFlushUserBatch = CalloutData->BatchFlushRoutine;
}
-NTSTATUS
-NTAPI
-NtW32Call(IN ULONG RoutineIndex,
- IN PVOID Argument,
- IN ULONG ArgumentLength,
- OUT PVOID* Result,
- OUT PULONG ResultLength)
-{
- PVOID RetResult;
- ULONG RetResultLength;
- NTSTATUS Status;
- ASSERT(KeGetPreviousMode() != KernelMode);
-
- /* Enter SEH for probing */
- _SEH2_TRY
- {
- /* Probe arguments */
- ProbeForWritePointer(Result);
- ProbeForWriteUlong(ResultLength);
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- /* Return the exception code */
- _SEH2_YIELD(return _SEH2_GetExceptionCode());
- }
- _SEH2_END;
-
- /* Call kernel function */
- Status = KeUserModeCallback(RoutineIndex,
- Argument,
- ArgumentLength,
- &RetResult,
- &RetResultLength);
- if (NT_SUCCESS(Status))
- {
- /* Enter SEH for write back */
- _SEH2_TRY
- {
- /* Return results to user mode */
- *Result = RetResult;
- *ResultLength = RetResultLength;
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- /* Get the exception code */
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
- }
-
- /* Return the result */
- return Status;
-}
-
/* EOF */