BOOLEAN NTAPI KiHandleNmi(VOID) { BOOLEAN Handled = FALSE; PKNMI_HANDLER_CALLBACK NmiData; /* Parse the list of callbacks */ NmiData = KiNmiCallbackListHead; while (NmiData) { /* Save if this callback has handled it -- all it takes is one */ Handled |= NmiData->Callback(NmiData->Context, Handled); NmiData = NmiData->Next; } /* Has anyone handled this? */ return Handled; }
BOOLEAN KiHandleNmi ( VOID ) /*++ Routine Description: This routine is called to process the list of registered Non-Maskable- Interrupt (NMI) handlers in the system. This routine is called from the NMI interrupt vector, the IRQL is unknown and must be treated as if at HIGH_LEVEL. Neither this function or any called function can alter system IRQL. The list of handlers must be edited in such a way that it is always valid. This routine cannot acquire a lock before transiting the list. Arguments: None. Return Value: Returns TRUE is any handler on the list claims to have handled the interrupt, FALSE otherwise. --*/ { BOOLEAN Handled; PKNMI_HANDLER_CALLBACK Handler; Handler = KiNmiCallbackListHead; Handled = FALSE; while (Handler != NULL) { Handled |= Handler->Callback(Handler->Context, Handled); Handler = Handler->Next; } return Handled; }