+VOID
+NTAPI
+BaseDispatchApc(IN PAPCFUNC ApcRoutine,
+ IN PVOID Data,
+ IN PACTIVATION_CONTEXT ActivationContext)
+{
+ RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME ActivationFrame;
+
+ /* Setup the activation context */
+ ActivationFrame.Size = sizeof(ActivationFrame);
+ ActivationFrame.Format = RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER;
+
+ /* Check if caller wanted one */
+ if (ActivationContext == INVALID_ACTIVATION_CONTEXT)
+ {
+ /* Do the APC directly */
+ ApcRoutine((ULONG_PTR)Data);
+ return;
+ }
+
+ /* Then activate it */
+ RtlActivateActivationContextUnsafeFast(&ActivationFrame, ActivationContext);
+
+ /* Call the routine under SEH */
+ _SEH2_TRY
+ {
+ ApcRoutine((ULONG_PTR)Data);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+
+ }
+ _SEH2_END;
+
+ /* Now de-activate and release the activation context */
+ RtlDeactivateActivationContextUnsafeFast(&ActivationFrame);
+ RtlReleaseActivationContext(ActivationContext);
+}
+
+/* PUBLIC FUNCTIONS ***********************************************************/
+