KiInitializeIdt
VOID __stdcall KiInitializeIdt(UINT32 Number, PKPCR Pcr){
__int64 *v2;
unsigned __int64 v3;
__int64 v4;
char v5;
char *v6;
unsigned __int64 v7;
__int16 v8;
unsigned __int64 v9;
unsigned __int64 v10;
__int64 v11;
__int16 v12;
__int16 v13;
int v14;
__int16 v15;
__int64 v16;
KiDebugTrapIndex = 0;
v2 = &KiInterruptInitTable;
v3 = 0i64;
v4 = *(_QWORD *)&Number + 4i64;
v5 = (char)Pcr;
do
{
if( !KiBootDebuggerActive || (unsigned int)v3 > 0x2D || (v16 = 0x30000000600Ai64, !_bittest64(&v16, v3)) )
{
v6 = (char *)KiIsrThunkShadow;
if( !v5 )
v6 = (char *)KxUnexpectedInterrupt0;
v7 = (unsigned __int64)&v6[8 * v3];
if( (_DWORD)v3 == 46 && KiSystemCallSelector != 1 )
{
v15 = *(_WORD *)v4 & 0xF8;
*(_WORD *)(v4 - 4) = v7;
*(_WORD *)v4 = v15 | 0x8E00;
v9 = v7 >> 16;
v10 = HIDWORD(v7);
v2 += 3;
goto LABEL_8;
}
if( (_DWORD)v3 != *(unsigned __int8 *)v2 )
{
v8 = *(_WORD *)v4 & 0xF8;
*(_WORD *)(v4 - 4) = v7;
*(_WORD *)v4 = v8 | 0x8E00;
v9 = v7 >> 16;
v10 = HIDWORD(v7);
LABEL_8:
*(_DWORD *)(v4 + 4) = v10;
*(_WORD *)(v4 + 2) = v9;
*(_WORD *)(v4 - 2) = 16;
goto LABEL_9;
}
if( v5 )
v11 = v2[2];
else
v11 = v2[1];
*(_WORD *)(v4 - 4) = v11;
*(_WORD *)(v4 - 2) = 16;
v12 = *(_WORD *)v4 & 0xEEF8 | *((_BYTE *)v2 + 2) & 7 | 0xE00;
*(_WORD *)v4 = v12;
v13 = v12 & 0x1FFF | ((*((_BYTE *)v2 + 1) & 3 | 4) << 13);
*(_WORD *)(v4 + 2) = WORD1(v11);
*(_DWORD *)(v4 + 4) = HIDWORD(v11);
*(_WORD *)v4 = v13;
if( *((_BYTE *)v2 + 1) )
{
v14 = KiDebugTrapIndex;
KiDebugTraps[KiDebugTrapIndex] = v11;
KiDebugTrapIndex = v14 + 1;
}
LABEL_15:
v2 += 3;
goto LABEL_9;
}
if( (_DWORD)v3 == *(unsigned __int8 *)v2 )
goto LABEL_15;
LABEL_9:
v3 = (unsigned int)(v3 + 1);
v4 += 16i64;
}
while( (unsigned int)v3 <= 0xFF );
}Referenced by:
KiEnableKvaShadowing
KiInitializeBootStructures