SmGetRegistrationInfo

INT64 __fastcall SmGetRegistrationInfo(KPROCESSOR_MODE a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  int v5; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)&BugCheckParameter2, 0i64);
  if( (dword_140D23140 & 8) != 0 )
  {
    v5 = 0;
  }
  else
  {
    v5 = SmRegistrationCtxStart((struct DMA_ADAPTER **)&qword_140D233F0);
    if( v5 >= 0 )
      dword_140D23140 |= 8u;
  }
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&BugCheckParameter2, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)&BugCheckParameter2);
  KeAbPostRelease(&BugCheckParameter2);
  KeLeaveCriticalRegion();
  if( v5 >= 0 )
  {
    v5 = SmRegistrationInfoFill(&qword_140D233F0, a1, (_QWORD *)(a2 + 8));
    if( v5 >= 0 )
      return 0;
  }
  return(unsigned int)v5;
}

Referenced by:

SmProcessRegistrationRequest