HalpBlkPoRegisterIdleState

INT64 __fastcall HalpBlkPoRegisterIdleState(UINT64 P3, INT64 a2){
  unsigned int v3; 
  ULONG_PTR v4; 
  __int64 v5; 
  UINT64 *BugCheckParameter4; 
  unsigned __int8 v7; 
  unsigned __int64 v8; 
  int v9; 
  __int64(__fastcall *v10)(_QWORD, int *, __int128 *, __int64, int *); 
  int v11; 
  __int128 v13; 
  __int64 v14; 
  int v15; 
  int v16; 
  int v17; 
  int v18; 
  int v19; 
  v3 = P3;
  v4 = (unsigned int)P3;
  v5 = *(_QWORD *)(HalpBlkPcr + 8i64 * (unsigned int)P3);
  BugCheckParameter4 = (UINT64 *)(v5 + 2216);
  KeAcquireSpinLockRaiseToDpc((UINT64 *)(v5 + 2216), a2);
  v8 = v7;
  HalpBlkPoBusyWait(5ui64, v3, v5 + 2216);
  *(_QWORD *)(v5 + 2232) = 0i64;
  *(_QWORD *)(v5 + 2248) = 0i64;
  *(_QWORD *)(v5 + 2240) = a2;
  *(_DWORD *)(v5 + 2228) = 3;
  _InterlockedExchange((volatile __int32 *)(v5 + 2224), 1);
  v9 = *(_DWORD *)(v5 + 20);
  v16 = -1;
  v13 = 0i64;
  DWORD2(v13) = v9;
  v14 = 0i64;
  LODWORD(v13) = 4;
  v17 = 1;
  v19 = *(_DWORD *)(HalpInterruptIpiLines + 20);
  v18 = *(_DWORD *)(HalpInterruptIpiLines + 16);
  v10 = *(__int64(__fastcall **)(_QWORD, int *, __int128 *, __int64, int *))(HalpInterruptController + 120);
  _disable();
  v11 = v10(*(_QWORD *)(HalpInterruptController + 16), &v18, &v13, 225i64, &v16);
  if( (v15 & 0x200) != 0 )
    _enable();
  if( v11 < 0 )
    KeBugCheckEx(0x1DAu, 4ui64, 5ui64, v4, (ULONG_PTR)BugCheckParameter4);
  KxReleaseSpinLock(BugCheckParameter4);
  __writecr8(v8);
  return(unsigned int)v11;
}

Referenced by:

No references.