SmGetRegistrationInfo

NTSTATUS __stdcall SmGetRegistrationInfo(INT8 RequestorMode, _SM_REGISTRATION_REQUEST *RegRequest){
  _ETHREAD *CurrentThread; 
  int v5; 
  _KPROCESSOR_MODE v6; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx(&BugCheckParameter2, 0i64);
  if( ((unsigned __int8)StoreProcess & 8) != 0 )
  {
    v5 = 0;
  }
  else
  {
    v5 = SmRegistrationCtxStart(&CachesUpdatedEvent);
    if( v5 >= 0 )
      LODWORD(StoreProcess) = (unsigned int)StoreProcess | 8;
  }
  if( (_InterlockedExchangeAdd64(&BugCheckParameter2._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(&BugCheckParameter2);
  KeAbPostRelease(&BugCheckParameter2);
  KeLeaveCriticalRegion();
  if( v5 >= 0 )
  {
    LOBYTE(v6) = RequestorMode;
    v5 = SmRegistrationInfoFill((VOID **)&CachesUpdatedEvent, v6, RegRequest + 2);
    if( v5 >= 0 )
      return 0;
  }
  return v5;
}

Referenced by:

SmProcessRegistrationRequest