HalpInterruptSetLineSpecificOverride

NTSTATUS __stdcall HalpInterruptSetLineSpecificOverride(UINT64 a1){
  _HALP_ALLOC_CONTEXT *v1; 
  int v2; 
  UINT8 *v3; 
  UINT8 *v4; 
  _INTERRUPT_LINE v6; 
  char v7; 
  UINT8 **v8; 
  char *v9; 
  _INTERRUPT_LINE Line; 

  Line = 0i64;
  v2 = HalpInterruptGsiToLine(a1, &Line);
  if( v2 >= 0 )
  {
    v3 = HalpMmAllocCtxAlloc(v1, 0x28ui64);
    v4 = v3;
    if( !v3 )
      return -1073741670;
    *(_QWORD *)v3 = 0i64;
    *((_QWORD *)v3 + 1) = 0i64;
    v6 = Line;
    *((_INTERRUPT_LINE *)v4 + 2) = Line;
    *((_INTERRUPT_LINE *)v4 + 3) = v6;
    *((_DWORD *)v4 + 9) = 2;
    *((_DWORD *)v4 + 8) = 1;
    v7 = HalpAcquireHighLevelLock((UINT64 *)&CmpDummyThreadEvent + 891);
    v8 = (UINT8 **)*(&CmpDummyThreadEvent + 889);
    v9 = (char *)&CmpDummyThreadEvent + 7104;
    if( (_UNKNOWN *)**(&CmpDummyThreadEvent + 889) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 7104) )
      __fastfail(3u);
    *(_QWORD *)v4 = (char *)&CmpDummyThreadEvent + 7104;
    LOBYTE(v9) = v7;
    *((_QWORD *)v4 + 1) = v8;
    *v8 = v4;
    *(&CmpDummyThreadEvent + 889) = v4;
    HalpReleaseHighLevelLock((UINT64 *)&CmpDummyThreadEvent + 891, (UINT64)v9);
  }
  return v2;
}

Referenced by:

HalpPiix4Detect