HalpInterruptCreateGdtEntry32
NTSTATUS __stdcall HalpInterruptCreateGdtEntry32(INT64 a1, INT64 a2, INT64 a3, UINT64 a4, INT16 a5, CHAR a6){
__int64 v6;
int v8;
unsigned int v9;
NTSTATUS result;
v6 = (unsigned int)a2 & 0xFFFFFFF0;
*(_QWORD *)(v6 + a1) = 0i64;
v8 = *(_DWORD *)(v6 + a1 + 4);
if( (unsigned int)a4 > 0xFFFFF )
{
LODWORD(a4) = (unsigned int)a4 >> 12;
v8 |= 0x800000u;
}
*(_WORD *)(v6 + a1) = a4;
*(_DWORD *)(v6 + a1 + 4) = v8 ^ (a4 ^ v8) & 0xF0000;
*(_BYTE *)(v6 + a1 + 4) = 0;
*(_BYTE *)(v6 + a1 + 7) = 0;
v9 = *(_DWORD *)(v6 + a1 + 4) & 0xFFFF1FFF | 0x8000;
if( !a6 )
v9 = *(_DWORD *)(v6 + a1 + 4) & 0xFFBF1FFF | 0x408000;
result = v9 ^ ((unsigned __int16)v9 ^ (unsigned __int16)(a5 << 8)) & 0x1F00;
*(_DWORD *)(v6 + a1 + 4) = result;
if( a6 )
{
result |= 0x200000u;
*(_DWORD *)(v6 + a1 + 4) = result;
}
return result;
}Referenced by:
HalpInterruptBuildStartupStub