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.