HalpBlkPoWritePerfIoPort
INT64 __fastcall HalpBlkPoWritePerfIoPort(UINT64 P3, INT16 a2, INT16 a3, INT64 a4, INT64 a5){
int v5;
unsigned int v6;
ULONG_PTR v8;
__int64 v10;
unsigned __int8 v11;
unsigned __int64 v12;
int v13;
__int64(__fastcall *v14)(_QWORD, int *, __int128 *, __int64, int *);
int v15;
int v17[2];
int v18[2];
__int128 v19;
__int64 v20;
int v21;
v5 = a4;
v6 = P3;
v8 = (unsigned int)P3;
v10 = *(_QWORD *)(HalpBlkPcr + 8i64 * (unsigned int)P3);
KeAcquireSpinLockRaiseToDpc((UINT64 *)(v10 + 2216), a2);
v12 = v11;
HalpBlkPoBusyWait(4ui64, v6, v10 + 2216);
*(_QWORD *)(v10 + 2248) = 0i64;
*(_DWORD *)(v10 + 2228) = 2;
*(_DWORD *)(v10 + 2232) = 2;
*(_DWORD *)(v10 + 2244) = a5;
*(_WORD *)(v10 + 2236) = a2;
*(_WORD *)(v10 + 2238) = a3;
*(_DWORD *)(v10 + 2240) = v5;
_InterlockedExchange((volatile __int32 *)(v10 + 2224), 1);
v13 = *(_DWORD *)(v10 + 20);
v17[0] = -1;
v20 = 0i64;
v19 = 0i64;
DWORD2(v19) = v13;
LODWORD(v19) = 4;
v17[1] = 1;
v18[1] = *(_DWORD *)(HalpInterruptIpiLines + 20);
v18[0] = *(_DWORD *)(HalpInterruptIpiLines + 16);
v14 = *(__int64(__fastcall **)(_QWORD, int *, __int128 *, __int64, int *))(HalpInterruptController + 120);
_disable();
v15 = v14(*(_QWORD *)(HalpInterruptController + 16), v18, &v19, 225i64, v17);
if( (v21 & 0x200) != 0 )
_enable();
if( v15 < 0 )
KeBugCheckEx(0x1DAu, 4ui64, 4ui64, v8, v10 + 2216);
KxReleaseSpinLock((UINT64 *)(v10 + 2216));
__writecr8(v12);
return(unsigned int)v15;
}Referenced by:
No references.