in LCM/dsc/engine/ConfigurationManager/LocalConfigManagerHelper.c [172:330]
MI_Result InitHandler(
_In_z_ const MI_Char* methodName,
_Outptr_result_maybenull_ MI_Instance **cimErrorDetails)
{
MI_Uint32 error;
MI_Result result = MI_RESULT_OK;
int initState;
if (cimErrorDetails == NULL)
{
return MI_RESULT_INVALID_PARAMETER;
}
*cimErrorDetails = NULL; // Explicitly set *cimErrorDetails to NULL as _Outptr_ requires setting this at least once.
initState = (int)Atomic_CompareAndSwap(&g_InitializationState, (ptrdiff_t)RUNNING_INITIALIZATION, (ptrdiff_t)NOT_INITIALIZED);
if (initState == INITIALIZED)
{
// already initialized.
return MI_RESULT_OK;
}
else if (initState == RUNNING_INITIALIZATION)
{
// currently going on.
return GetCimMIError3Params(MI_RESULT_FAILED, cimErrorDetails, ID_LCM_MULTIPLE_METHOD_REQUEST, methodName, (const MI_Char*)g_inializingOperationMethodName, methodName);
}
InitLocTable();
g_inializingOperationMethodName = (MI_Char*)methodName;
error = DSC_EventRegister();
if (error != 0)
{
Atomic_Swap(&g_InitializationState, NOT_INITIALIZED);
g_inializingOperationMethodName = NULL;
return GetCimWin32Error(error, cimErrorDetails, ID_LCMHELPER_ETWREGISTREATION_FAILED);
}
result = InitCAHandler(cimErrorDetails);
if (result != MI_RESULT_OK)
{
DSC_EventUnRegister();
Atomic_Swap(&g_InitializationState, NOT_INITIALIZED);
g_inializingOperationMethodName = NULL;
return result;
}
g_PendingConfigFileName = NULL;
g_PendingConfigTmpFileName = NULL;
g_CurrentConfigFileName = NULL;
g_PreviousConfigFileName = NULL;
g_GetConfigFileName = NULL;
g_InventoryFileName = NULL;
g_InventoryReportFileName = NULL;
g_MetaConfigFileName = NULL;
g_MetaConfigTmpFileName = NULL;
g_ConfigChecksumFileName = NULL;
g_PullRunLogFileName = NULL;
g_LCMStatusCodeHistory = NULL;
g_PartialConfigDataStoreName = NULL;
g_PartialConfigBaseDocumentInstanceFileName = NULL;
g_PartialConfigBaseDocumentInstanceTmpFileName = NULL;
result = InitPath(cimErrorDetails);
if (result != MI_RESULT_OK)
{
DSC_EventUnRegister();
DSC_free(g_PendingConfigFileName);
DSC_free(g_CurrentConfigFileName);
DSC_free(g_PreviousConfigFileName);
DSC_free(g_GetConfigFileName);
DSC_free(g_InventoryFileName);
DSC_free(g_InventoryReportFileName);
DSC_free(g_MetaConfigFileName);
DSC_free(g_MetaConfigTmpFileName);
DSC_free(g_ConfigChecksumFileName);
DSC_free(g_PullRunLogFileName);
DSC_free(g_LCMStatusCodeHistory);
g_PendingConfigFileName = NULL;
g_CurrentConfigFileName = NULL;
g_PreviousConfigFileName = NULL;
g_GetConfigFileName = NULL;
g_InventoryFileName = NULL;
g_InventoryReportFileName = NULL;
g_MetaConfigFileName = NULL;
g_MetaConfigTmpFileName = NULL;
g_ConfigChecksumFileName = NULL;
g_PullRunLogFileName = NULL;
g_LCMStatusCodeHistory = NULL;
DSC_free(g_PendingConfigTmpFileName);
DSC_free(g_PartialConfigDataStoreName);
DSC_free(g_PartialConfigBaseDocumentInstanceFileName);
DSC_free(g_PartialConfigBaseDocumentInstanceTmpFileName);
g_PendingConfigTmpFileName = NULL;
g_PartialConfigDataStoreName = NULL;
g_PartialConfigBaseDocumentInstanceFileName = NULL;
g_PartialConfigBaseDocumentInstanceTmpFileName = NULL;
RecursiveLock_Release(&g_cs_CurrentWmiv2Operation);
Sem_Destroy(&g_h_ConfigurationStoppedEvent);
Atomic_Swap(&g_InitializationState, NOT_INITIALIZED);
g_inializingOperationMethodName = NULL;
return result;
}
g_DSCInternalCache = NULL;
result = InitCacheAndMetaConfig(&g_metaConfig, &g_DSCInternalCache, cimErrorDetails);
if (result != MI_RESULT_OK)
{
DSC_EventUnRegister();
DSC_free(g_PendingConfigFileName);
DSC_free(g_CurrentConfigFileName);
DSC_free(g_PreviousConfigFileName);
DSC_free(g_GetConfigFileName);
DSC_free(g_InventoryFileName);
DSC_free(g_InventoryReportFileName);
DSC_free(g_MetaConfigFileName);
DSC_free(g_MetaConfigTmpFileName);
DSC_free(g_ConfigChecksumFileName);
DSC_free(g_PullRunLogFileName);
DSC_free(g_LCMStatusCodeHistory);
g_PendingConfigFileName = NULL;
g_CurrentConfigFileName = NULL;
g_PreviousConfigFileName = NULL;
g_GetConfigFileName = NULL;
g_InventoryFileName = NULL;
g_InventoryReportFileName = NULL;
g_MetaConfigFileName = NULL;
g_MetaConfigTmpFileName = NULL;
g_ConfigChecksumFileName = NULL;
g_PullRunLogFileName = NULL;
g_LCMStatusCodeHistory = NULL;
DSC_free(g_PendingConfigTmpFileName);
DSC_free(g_PartialConfigDataStoreName);
DSC_free(g_PartialConfigBaseDocumentInstanceFileName);
DSC_free(g_PartialConfigBaseDocumentInstanceTmpFileName);
g_PendingConfigTmpFileName = NULL;
g_PartialConfigDataStoreName = NULL;
g_PartialConfigBaseDocumentInstanceFileName = NULL;
g_PartialConfigBaseDocumentInstanceTmpFileName = NULL;
RecursiveLock_Release(&g_cs_CurrentWmiv2Operation);
Sem_Destroy(&g_h_ConfigurationStoppedEvent);
Atomic_Swap(&g_InitializationState, NOT_INITIALIZED);
g_inializingOperationMethodName = NULL;
return result;
}
SetJobDeviceName();
RegistrationManager_New((RegistrationManager**)&(g_registrationManager), cimErrorDetails);
Atomic_Swap(&g_InitializationState, INITIALIZED);
g_inializingOperationMethodName = NULL;
return MI_RESULT_OK;
}