HalpBlkPoReadPerfIoPort
NTSTATUS __stdcall HalpBlkPoReadPerfIoPort(ULONG_PTR a1){
__int16 v1;
__int16 v2;
_DWORD *v3;
_DWORD *v4;
void *v5;
__int16 v6;
__int16 v7;
__int64 v8;
unsigned __int64 v9;
int v10;
__int64(__fastcall *v11)(_QWORD, int *, __int128 *, __int64, int *);
NTSTATUS v12;
int v14[2];
int v15[2];
__int128 v16;
__int64 v17;
int v18;
v4 = v3;
v5 = (void *)a1;
v6 = v2;
v7 = v1;
v8 = *(_QWORD *)(*(&CmpDummyThreadEvent + 487) + 8i64 * a1);
v9 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(v8 + 2216));
HalpBlkPoBusyWait(3u, (ULONG_PTR)v5, v8 + 2216);
*(_QWORD *)(v8 + 2240) = 0i64;
*(_QWORD *)(v8 + 2248) = 0i64;
*(_WORD *)(v8 + 2238) = v6;
*(_DWORD *)(v8 + 2228) = 1;
*(_DWORD *)(v8 + 2232) = 2;
*(_WORD *)(v8 + 2236) = v7;
_InterlockedExchange((volatile __int32 *)(v8 + 2224), 1);
v10 = *(_DWORD *)(v8 + 20);
v14[0] = -1;
v17 = 0i64;
v16 = 0i64;
DWORD2(v16) = v10;
LODWORD(v16) = 4;
v14[1] = 1;
v15[1] = *(_DWORD *)(qword_140C50700 + 20);
v15[0] = *(_DWORD *)(qword_140C50700 + 16);
v11 = *(__int64(__fastcall **)(_QWORD, int *, __int128 *, __int64, int *))(Controller + 120);
_disable();
v12 = v11(*(_QWORD *)(Controller + 16), v15, &v16, 225i64, v14);
if( (v18 & 0x200) != 0 )
_enable();
if( v12 < 0 )
KeBugCheckEx(0x1DAu, (PVOID)4, (PVOID)3, v5, (PVOID)(v8 + 2216));
HalpBlkPoBusyWait(3u, (ULONG_PTR)v5, v8 + 2216);
*v4 = *(_DWORD *)(v8 + 2240);
KxReleaseSpinLock((UINT64 *)(v8 + 2216));
__writecr8(v9);
return v12;
}Referenced by:
No references.