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