CmpStartSiloRegistryNamespace

INT64 __fastcall CmpStartSiloRegistryNamespace(INT64 a1){
  struct _DMA_ADAPTER *v2; 
  volatile INT64 **v3; 
  int KeyBody; 
  signed __int64 v5; 
  INT64 a8; 
  _BYTE a6[40]; 
  INT64 result[12]; 
  int v10; 
  _QWORD v11[9]; 
  INT64 v12[11]; 
  LOBYTE(a8) = 0;
  memset(&a6[8], 0, 32);
  *(_WORD *)&a6[10] = -1;
  memset((INT64)result, 0i64);
  v10 = -1;
  v11[1] = v11;
  v11[0] = v11;
  memset((INT64)v12, 0i64);
  v2 = 0i64;
  *(_QWORD *)a6 = 0i64;
  if( *(_QWORD *)(a1 + 32) )
    goto LABEL_4;
  CmpLockRegistry();
  v3 = (volatile INT64 **)CmpRegistryRootObject;
  CmpStartKcbStackForTopLayerKcb((INT64)&a6[8], *((_QWORD *)CmpRegistryRootObject + 1));
  CmpLockKcbStackExclusive((INT64)&a6[8]);
  KeyBody = CmpCreateKeyBody(v3[1], 0, (INT64)result, 0i64, 1, (INT64)&a6[8], (INT64)a6, (INT64)&a8);
  if( KeyBody >= 0 )
  {
    CmpUnlockKcbStack((__int64)&a6[8]);
    CmpUnlockRegistry();
    v5 = -_InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 32), *(signed __int64 *)a6, 0i64);
    v2 = (struct _DMA_ADAPTER *)(*(_QWORD *)a6 & -(__int64)(v5 != 0));
LABEL_4:
    KeyBody = 0;
    goto LABEL_5;
  }
  CmpUnlockKcbStack((__int64)&a6[8]);
  CmpUnlockRegistry();
  v2 = *(struct _DMA_ADAPTER **)a6;
LABEL_5:
  CmpCleanupKcbStack((INT64)&a6[8]);
  CmpCleanupParseContext((__int64)result, 0);
  if( v2 )
    HalPutDmaAdapter(v2);
  return(unsigned int)KeyBody;
}

Referenced by:

CmInitServerSiloState
VrpHandleIoctlInitializeJobForVreg