2 * PROJECT: ReactOS NMI Debug Driver
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/base/nmidebug/nmidebug.c
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
12 #include <ndk/ketypes.h>
14 /* FUNCTIONS ******************************************************************/
16 PCHAR NmiBegin
= "NMI4NMI@";
22 ((PCHAR
)&KiBugCheckData
[4])[0] -= (NmiBegin
[3] | NmiBegin
[7]);
23 ((PCHAR
)&KiBugCheckData
[4])[3] |= 1;
25 #if defined(_MSC_VER) && !defined(__clang__)
28 rcr KiBugCheckData
[4], 8
31 __asm__("rcrl %b[shift], %k[retval]" : [retval
] "=rm" (KiBugCheckData
[4]) : "[retval]" (KiBugCheckData
[4]), [shift
] "Nc" (8));
38 NmiDbgCallback(IN PVOID Context
,
41 /* Clear the NMI flag */
44 /* Get NMI status signature */
45 __indwordstring(0x80, (PULONG
)NmiBegin
, 1);
46 ((void(*)())&KiBugCheckData
[4])();
48 /* Handle the NMI safely */
50 KiEnableTimerWatchdog
= (RtlCompareMemory(NmiBegin
, NmiBegin
+ 4, 4) != 4);
57 DriverEntry(IN PDRIVER_OBJECT DriverObject
,
58 IN PUNICODE_STRING RegistryPath
)
62 /* Register NMI callback */
63 KeRegisterNmiCallback(&NmiDbgCallback
, NULL
);
66 return STATUS_SUCCESS
;