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.