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.