IA32_DESCRIPTOR *IdtPtr;\r
UINTN Index;\r
UINTN CurrentHandler;\r
+ BOOLEAN InterruptState;\r
\r
SetMem (ExternalVectorTable, sizeof(ExternalVectorTable), 0);\r
\r
IdtPtr = ALIGN_POINTER (IdtPtrAlignmentBuffer, 16);\r
IdtPtr->Base = (UINT32)(((UINTN)(VOID*) gIdtTable) & (BASE_4GB-1));\r
IdtPtr->Limit = sizeof (gIdtTable) - 1;\r
+\r
+ //\r
+ // Disable interrupts and save the current interrupt state\r
+ //\r
+ InterruptState = SaveAndDisableInterrupts ();\r
+\r
AsmWriteIdtr (IdtPtr);\r
+\r
+ //\r
+ // Restore the interrupt state\r
+ //\r
+ SetInterruptState (InterruptState);\r
+\r
FreePool (IdtPtrAlignmentBuffer);\r
\r
//\r