HalpBlkPoWritePerfIoPort
NTSTATUS __stdcall HalpBlkPoWritePerfIoPort(UINT64 P3, INT16 a2, INT16 a3, INT64 a4, INT64 a5){
int v5;
ULONG_PTR v6;
unsigned __int64 v8;
__int64 v10;
unsigned __int64 v11;
int v12;
__int64(__fastcall *v13)(_QWORD, int *, __int128 *, __int64, int *);
NTSTATUS v14;
int v16[2];
int v17[2];
__int128 v18;
__int64 v19;
int v20;
v5 = a4;
v6 = P3;
v8 = (unsigned int)P3;
v10 = *(_QWORD *)(*(&CmpDummyThreadEvent + 487) + 8i64 * (unsigned int)P3);
v11 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(v10 + 2216));
HalpBlkPoBusyWait(4u, 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);
v12 = *(_DWORD *)(v10 + 20);
v16[0] = -1;
v19 = 0i64;
v18 = 0i64;
DWORD2(v18) = v12;
LODWORD(v18) = 4;
v16[1] = 1;
v17[1] = *(_DWORD *)(qword_140C50700 + 20);
v17[0] = *(_DWORD *)(qword_140C50700 + 16);
v13 = *(__int64(__fastcall **)(_QWORD, int *, __int128 *, __int64, int *))(Controller + 120);
_disable();
v14 = v13(*(_QWORD *)(Controller + 16), v17, &v18, 225i64, v16);
if( (v20 & 0x200) != 0 )
_enable();
if( v14 < 0 )
KeBugCheckEx(0x1DAu, (PVOID)4, (PVOID)4, (PVOID)v8, (PVOID)(v10 + 2216));
KxReleaseSpinLock((UINT64 *)(v10 + 2216));
__writecr8(v11);
return v14;
}Referenced by:
No references.