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