+/**\r
+ Set Interrupt Descriptor Table Handler Address.\r
+\r
+ @param Index The Index of the interrupt descriptor table handle.\r
+ @param Handler Handler address.\r
+\r
+**/\r
+VOID\r
+SetInterruptDescriptorTableHandlerAddress (\r
+ IN UINTN Index,\r
+ IN VOID *Handler OPTIONAL\r
+ )\r
+{\r
+ UINTN UintnHandler;\r
+\r
+ if (Handler != NULL) {\r
+ UintnHandler = (UINTN) Handler;\r
+ } else {\r
+ UintnHandler = ((UINTN) AsmIdtVector00) + (8 * Index);\r
+ }\r
+\r
+ gIdtTable[Index].Bits.OffsetLow = (UINT16)UintnHandler;\r
+ gIdtTable[Index].Bits.Reserved_0 = 0;\r
+ gIdtTable[Index].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
+ gIdtTable[Index].Bits.OffsetHigh = (UINT16)(UintnHandler >> 16);\r
+#if defined (MDE_CPU_X64)\r
+ gIdtTable[Index].Bits.OffsetUpper = (UINT32)(UintnHandler >> 32);\r
+ gIdtTable[Index].Bits.Reserved_1 = 0;\r
+#endif\r
+}\r
+\r