CmpStartSiloRegistryNamespace

INT64 __fastcall CmpStartSiloRegistryNamespace(INT64 a1){
  _ADAPTER_OBJECT *v2; 
  volatile INT64 **v3; 
  int KeyBody; 
  signed __int64 v5; 
  INT64 a8; 
  _BYTE a6[40]; 
  INT64 a3[38]; 

  LOBYTE(a8) = 0;
  memset(&a6[8], 0, 32);
  *(_WORD *)&a6[10] = -1;
  memset(a3, 0i64, 0x128u);
  LODWORD(a3[12]) = -1;
  a3[19] = (INT64)&a3[18];
  a3[18] = (INT64)&a3[18];
  memset(&a3[27], 0i64, 0x50u);
  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)a3, 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 = (_ADAPTER_OBJECT *)(*(_QWORD *)a6 & -(__int64)(v5 != 0));
LABEL_4:
    KeyBody = 0;
    goto LABEL_5;
  }
  CmpUnlockKcbStack((INT64)&a6[8]);
  CmpUnlockRegistry();
  v2 = *(_ADAPTER_OBJECT **)a6;
LABEL_5:
  CmpCleanupKcbStack((INT64)&a6[8]);
  CmpCleanupParseContext((INT64)a3, 0);
  if( v2 )
    HalPutDmaAdapter(v2);
  return(unsigned int)KeyBody;
}

Referenced by:

CmInitServerSiloState
VrpHandleIoctlInitializeJobForVreg