/*Function to return agentId value from registry 
If registration has never been attempted on this machine, then this function returns an empty string and returns TRUE for shouldGenerateAgentId*/
MI_Result GetAgentIdFromRegistry(
    _Outptr_result_maybenull_z_ MI_Char** agentId, 
    _Inout_ MI_Boolean *shouldGenerateAgentId)
{    
    if (File_ExistT(AGENTID_FILE_PATH) != 0)
    {
        // We are not able to get the agent Id. 
        // We should generate a new agentId.
        *shouldGenerateAgentId = MI_TRUE ;
        return MI_RESULT_OK;        
    }
    
    /* inhale contents fails into agentId */
    *agentId = InhaleTextFile(AGENTID_FILE_PATH);

    if (Tcscasecmp(MI_T(" "), *agentId) == 0 || Tcscasecmp(MI_T(""), *agentId) == 0)
    {
        // We are not able to get the agent Id. 
        // We should generate a new agentId.
        *shouldGenerateAgentId = MI_TRUE;
        return MI_RESULT_OK;
    } 
    *shouldGenerateAgentId = MI_FALSE;    

    (*agentId)[36] = '\0';

    return MI_RESULT_OK;
}
Ejemplo n.º 2
0
void MI_CALL VicePresident_EnumerateInstances(
    VicePresident_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    /* Adams */
    {
        VicePresident inst;
        VicePresident_Construct(&inst, context);
        VicePresident_Set_Key(&inst, 1);
        VicePresident_Set_First(&inst, MI_T("John"));
        VicePresident_Set_Last(&inst, MI_T("Adams"));
        VicePresident_Post(&inst, context);
        VicePresident_Destruct(&inst);
    }

    /* Jefferson */
    {
        VicePresident inst;
        VicePresident_Construct(&inst, context);
        VicePresident_Set_Key(&inst, 2);
        VicePresident_Set_First(&inst, MI_T("Thomas"));
        VicePresident_Set_Last(&inst, MI_T("Jefferson"));
        VicePresident_Post(&inst, context);
        VicePresident_Destruct(&inst);
    }

    MI_PostResult(context, MI_RESULT_OK);
}
Ejemplo n.º 3
0
void MI_CALL TEST_Stop_Invoke_SetTargetResource(
    _In_opt_ TEST_Stop_Self* self,
    _In_ MI_Context* context,
    _In_opt_z_ const MI_Char* nameSpace,
    _In_opt_z_ const MI_Char* className,
    _In_opt_z_ const MI_Char* methodName,
    _In_ const TEST_Stop* instanceName,
    _In_opt_ const TEST_Stop_SetTargetResource* in)
{
    TEST_Stop_SetTargetResource out; 

    MI_UNREFERENCED_PARAMETER(self);
    MI_UNREFERENCED_PARAMETER(nameSpace);
    MI_UNREFERENCED_PARAMETER(className);
    MI_UNREFERENCED_PARAMETER(methodName);
    MI_UNREFERENCED_PARAMETER(instanceName);
    MI_UNREFERENCED_PARAMETER(in);

    TEST_Stop_SetTargetResource_Construct(&out, context);    
    MI_Context_WriteMessage(context, MI_WRITEMESSAGE_CHANNEL_VERBOSE, MI_T("Executing Set for Class TEST_Stop"));    
    TEST_Stop_SetTargetResource_Set_MIReturn(&out, 0 );
    MI_Context_PostInstance(context, &(out.__instance));
    TEST_Stop_SetTargetResource_Destruct(&out);    

    MI_Context_PostResult(context, MI_RESULT_OK);
}
Ejemplo n.º 4
0
void MI_CALL L_LifecycleC1_Load(
    L_LifecycleC1_Self** self,
    MI_Module_Self* selfModule,
    MI_Context* context)
{
    MI_Result r;
    *self = NULL;    
    {
        // Save lifecycle instance to config
        L_LifecycleC1 lifecycle;
        cfgL_LifecycleC1.lifecycleInstance = NULL;
        r = L_LifecycleC1_Construct(&lifecycle, context);
        CHKMIRESULTPOST(r,"L_LifecycleC1_Construct");
        CHKMIRESULTPOST(L_LifecycleC1_Set_key(&lifecycle, MI_T("L_LifecycleC1")), "L_LifecycleC1_Set_key");
        CHKMIRESULTPOST(L_LifecycleC1_Set_value(&lifecycle, 0), "L_LifecycleC1_Set_value");

        cfgL_LifecycleC1.supportedSubscriptionTypes = (MI_LIFECYCLE_INDICATION_CREATE | MI_LIFECYCLE_INDICATION_MODIFY | MI_LIFECYCLE_INDICATION_DELETE); 

        // Lifecycle indication load
        r = lifecycle_Load(&cfgL_LifecycleC1, (MI_Instance*)&lifecycle, _L_LifecycleC1_Callback, context);
        CHKMIRESULTPOST(r, "lifecycle_Load");

        // Regular class load
        r = class_Load((void**)self, &cfgL_LifecycleC1, NULL);
        CHKMIRESULTPOST(r, "class_Load");

        r = L_LifecycleC1_Destruct(&lifecycle);
        CHKMIRESULTPOST(r, "L_LifecycleC1_Destruct");
    }

    MI_PostResult(context, MI_RESULT_OK);
}
static MI_Result WriteError(_In_ MI_Context* context, MI_Uint32 resultCode, _In_z_ const MI_Char* resultType, _In_z_ const MI_Char* errorMessage, _Out_ MI_Boolean *flag)
{
    MI_Result returnValue = MI_RESULT_OK;
    MI_Instance* extendedError = NULL;

    NativeResourceProvider* nativeResourceProvider = (NativeResourceProvider*)context;

    if (!nativeResourceProvider->_private.resourceProviderClassLoaded) {
        DSC_EventUnSupportedHostMethodCalled(MI_T("PostIndication"));
        return MI_RESULT_NOT_SUPPORTED;
    }

    *flag = MI_TRUE; // TRUE indicates the provider can continue (this is a non-terminating error)

    returnValue = MI_Utilities_CimErrorFromErrorCode(resultCode, resultType, errorMessage, &extendedError);
    EH_CheckResult(returnValue);

    DoWriteError(NULL, nativeResourceProvider->_private.callbackContext, extendedError, NULL);

EH_UNWIND;
    if (extendedError != NULL)
        MI_Instance_Delete(extendedError);

    return returnValue;
}
Ejemplo n.º 6
0
const MI_Char* SubscribeStatusName(SubscribeStatus status)
{
    if ((MI_Uint32)status <= (MI_Uint32) SUBSCRIBE_SUB_CANCELLED)
    {
        return _SubscribeStatusNames[(MI_Uint32)status];
    }
    return MI_T("UNKNOWN Status");
}
MI_Result GetThumbprintForRegisteredServerURL(
    _In_ RegistrationManager* self,
    _In_ MI_Instance* registrationData,
    _Outptr_result_maybenull_z_ MI_Char** thumbprint,
    _Outptr_result_maybenull_ MI_Instance **cimErrorDetails)
{
    size_t dwSize;
    MI_Value value;
    int retValue;
    MI_Uint32 i = 0;
    MI_Result result = MI_RESULT_OK;

    if (cimErrorDetails)
    {
        *cimErrorDetails = NULL;
    }

    *thumbprint = 0;

    if (self->serverURLs == NULL)
    {
        InitializeServerURLs(self, cimErrorDetails);
    }

    if (self->serverURLs != NULL)
    {
        result = MI_Instance_GetElement(registrationData, MSFT_ServerURL_Name, &value, NULL, NULL, NULL);
        EH_CheckResult(result);

        for (i = 0; i < self->numberOfServerURLs; i++)
        {
            if (self->serverURLs[i] != NULL && Tcscasecmp(self->serverURLs[i], value.string) == 0)
            {
                dwSize = Tcslen(self->serverCertificateThumbprints[i]) + 1;
                *thumbprint = (MI_Char*)DSC_malloc(dwSize*sizeof(MI_Char), NitsHere());
                if (*thumbprint == NULL)
                {
                    EH_Fail_(GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, cimErrorDetails, ID_LCMHELPER_MEMORY_ERROR));
                }

                retValue = Stprintf(*thumbprint, dwSize, MI_T("%T"), self->serverCertificateThumbprints[i]);
                if (retValue == -1 || NitsShouldFault(NitsHere(), NitsAutomatic))
                {
                    DSC_free(*thumbprint);
                    EH_Fail_(GetCimMIError(MI_RESULT_FAILED, cimErrorDetails, ID_LCMHELPER_PRINTF_ERROR));
                }

                result = MI_RESULT_OK;
                break;
            }
        }
    }

EH_UNWIND:

    return result;
}
Ejemplo n.º 8
0
void SetJobDeviceName()
{
    if (GetComputerHostName(g_JobInformation.deviceName, (int)DEVICE_NAME_SIZE) != 0)
    {
        Stprintf(g_JobInformation.deviceName, DEVICE_NAME_SIZE, MI_T("%T"), EMPTY_STRING);
        return;
    }

}
Ejemplo n.º 9
0
const MI_Char * GetErrorDetail( _In_ MI_Instance *inst)
{
    MI_Result r = MI_RESULT_OK;
    MI_Value value;
    r = MI_Instance_GetElement(inst, MI_T("Message"), &value, NULL, NULL, NULL);
    if( r != MI_RESULT_OK)
    {
        return NULL;
    }
    return (const MI_Char*)value.string;
}
MI_Result WriteServerURLToCache(
    _In_ RegistrationManager* self,
    _In_z_ MI_Char* serverURL,
    _In_z_ MI_Char* thumbprint,
    _Outptr_result_maybenull_ MI_Instance **cimErrorDetails)
{
    size_t dwSize;
    int retValue;
    MI_Result result = MI_RESULT_OK;

    if (cimErrorDetails)
    {
        *cimErrorDetails = NULL;
    }

    if (self->serverURLs == NULL)
    {
        result = InitializeServerURLs(self, cimErrorDetails);
        EH_CheckResult(result);
    }
    
    dwSize = Tcslen(serverURL) + 1;
    self->serverURLs[self->numberOfServerURLs] = (MI_Char*)DSC_malloc(dwSize* sizeof(MI_Char), NitsHere());
    if (self->serverURLs[self->numberOfServerURLs] == NULL)
    {
        EH_Fail_(GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, cimErrorDetails, ID_LCMHELPER_MEMORY_ERROR));
    }
    retValue = Stprintf(self->serverURLs[self->numberOfServerURLs], dwSize, MI_T("%T"), serverURL);
    if (retValue == -1 || NitsShouldFault(NitsHere(), NitsAutomatic))
    {
        DSC_free(self->serverURLs[self->numberOfServerURLs]);
        EH_Fail_(GetCimMIError(MI_RESULT_FAILED, cimErrorDetails, ID_LCMHELPER_PRINTF_ERROR));
    }

    dwSize = Tcslen(thumbprint) + 1;
    self->serverCertificateThumbprints[self->numberOfServerURLs] = (MI_Char*)DSC_malloc(dwSize* sizeof(MI_Char), NitsHere());
    if (self->serverCertificateThumbprints[self->numberOfServerURLs] == NULL)
    {
        EH_Fail_(GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, cimErrorDetails, ID_LCMHELPER_MEMORY_ERROR));
    }
    retValue = Stprintf(self->serverCertificateThumbprints[self->numberOfServerURLs], dwSize, MI_T("%T"), thumbprint);
    if (retValue == -1 || NitsShouldFault(NitsHere(), NitsAutomatic))
    {
        DSC_free(self->serverCertificateThumbprints[self->numberOfServerURLs]);
        EH_Fail_(GetCimMIError(MI_RESULT_FAILED, cimErrorDetails, ID_LCMHELPER_PRINTF_ERROR));
    }

    self->numberOfServerURLs++;

    EH_UNWIND:

        return result;
}
static MI_Result WriteStreamParameter(_In_ MI_Context* context, const MI_Char* name, _In_ const MI_Value* value, _In_ MI_Type type, _In_ MI_Uint32 flags)
{
    NativeResourceProvider* nativeResourceProvider = (NativeResourceProvider*)context;

    if (!nativeResourceProvider->_private.resourceProviderClassLoaded) {
        DSC_EventUnSupportedHostMethodCalled(MI_T("PostIndication"));
        return MI_RESULT_NOT_SUPPORTED;
    }

    LCM_WriteStreamParameter(nativeResourceProvider->_private.callbackContext->lcmProviderContext, name, value, type, flags);

    return MI_RESULT_OK;
}
Ejemplo n.º 12
0
void MI_CALL MSFT_Friends_AssociatorInstances(
    MSFT_Friends_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MI_Instance* instanceName,
    const MI_Char* resultClass,
    const MI_Char* role,
    const MI_Char* resultRole,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    if (MSFT_Person_IsA(instanceName))
    {
        if (_Match(role, MI_T("Left")) && 
            _Match(resultRole, MI_T("Right")))
        {
    if (((MSFT_Person*)instanceName)->Key.exists && ((MSFT_Person*)instanceName)->Key.value == 1)
    {
        MSFT_Person inst;
        MSFT_Person_Construct(&inst, context);
        MSFT_Person_Set_Key(&inst, 2);
        MSFT_Person_Set_First(&inst, MI_T("John"));
        MSFT_Person_Set_Last(&inst, MI_T("Adams"));
        MSFT_Person_Post(&inst, context);
        MSFT_Person_Destruct(&inst);
    }
}}

    if (MSFT_Person_IsA(instanceName))
    {
        if (_Match(role, MI_T("Right")) && 
            _Match(resultRole, MI_T("Left")))
        {
    if (((MSFT_Person*)instanceName)->Key.exists && ((MSFT_Person*)instanceName)->Key.value == 2)
    {
        MSFT_Person inst;
        MSFT_Person_Construct(&inst, context);
        MSFT_Person_Set_Key(&inst, 1);
        MSFT_Person_Set_First(&inst, MI_T("George"));
        MSFT_Person_Set_Last(&inst, MI_T("Washington"));
        MSFT_Person_Post(&inst, context);
        MSFT_Person_Destruct(&inst);
    }
}}
    MI_PostResult(context, MI_RESULT_OK);
}
static MI_Result WriteCimError(_In_ MI_Context* context, _In_ const MI_Instance *error, _Out_ MI_Boolean*flag)
{
    NativeResourceProvider* nativeResourceProvider = (NativeResourceProvider*)context;

    if (!nativeResourceProvider->_private.resourceProviderClassLoaded) {
        DSC_EventUnSupportedHostMethodCalled(MI_T("PostIndication"));
        return MI_RESULT_NOT_SUPPORTED;
    }

    *flag = MI_TRUE; // TRUE indicates the provider can continue (this is a non-terminating error)

    DoWriteError(NULL, nativeResourceProvider->_private.callbackContext, /* const cast */ (MI_Instance *) error, NULL);

    return MI_RESULT_OK;
}
/*Function to return true if registration needs to be done*/
MI_Boolean ShouldDoRegistration(
    _In_ RegistrationManager* self,
    _In_ RegistrationRequest* request,
    _Outptr_result_maybenull_ MI_Instance **cimErrorDetails)
{   
    MI_Result result = MI_RESULT_OK;
    MI_Uint32 i = 0;
    MI_Value value;
    MI_Char* url = NULL;    
    MI_Type type;
    MI_Uint32 flags;

    if (cimErrorDetails)
    {
        *cimErrorDetails = NULL;
    }

    MI_Instance *registrationDataInstance = request->registrationData;

    result = MI_Instance_GetElement(registrationDataInstance, MSFT_ServerURL_Name, &value, NULL, NULL, NULL);
    EH_CheckResult(result);
    url = value.string;
    
    result = DSC_MI_Instance_GetElement(registrationDataInstance, MSFT_RegistrationKey_Name, &value, &type, &flags, NULL);
    if (result == MI_RESULT_OK && type == MI_STRING && (!(flags & MI_FLAG_NULL)))
    {
        if (Tcscasecmp(value.string, MI_T("")) != 0)
        {
            // This means that a non-empty RegistrationKey is specified. Then, we always do registration. 
            // If RegistrationKey is not specified, then we check the cache and do/skip registration based on ServerURL
            DSC_EventWriteLCMAgentAttemptRegistration(g_ConfigurationDetails.jobGuidString, self->agentId, url);
            return MI_TRUE;
        }
    }

    for (i = 0; i < self->numberOfServerURLs; i++)
    {
        if (Tcscasecmp(self->serverURLs[i], url) == 0)
        {
            DSC_EventWriteLCMServerURLRegistered(g_ConfigurationDetails.jobGuidString, self->agentId, url);
            return MI_FALSE;
        }
    }
    
    EH_UNWIND:

    return MI_TRUE;
}
Ejemplo n.º 15
0
MI_Result AppendWMIError1ParamID(
    _Inout_ MI_Instance *cimErrorDetails,
    _In_ MI_Uint32 errorStringId
)
{
    MI_Result r = MI_RESULT_OK;
    Intlstr intlstr = Intlstr_Null;
    GetResourceString(errorStringId, &intlstr);
    if( intlstr.str )
    {
        r = AppendWMIError1Param(cimErrorDetails, MI_T("%s %s"), intlstr.str);
        Intlstr_Free(intlstr);
    }

    return r;
}
static MI_Result PostInstance(_In_ MI_Context* context, _In_ const MI_Instance * instance)
{
    if (instance == NULL)
    {
        return MI_RESULT_INVALID_PARAMETER;
    }

    NativeResourceProvider* nativeResourceProvider = (NativeResourceProvider*)context;

    if (!nativeResourceProvider->_private.resourceProviderClassLoaded) {
        DSC_EventUnSupportedHostMethodCalled(MI_T("PostIndication"));
        return MI_RESULT_NOT_SUPPORTED;
    }

    return MI_Instance_Clone(instance, &nativeResourceProvider->_private.outputResource);
}
MI_Result GetRegisteredServerURLsFromCache(
    _Outptr_result_maybenull_z_ MI_Char** registeredServerURLs,
    _Outptr_result_maybenull_ MI_Instance **cimErrorDetails)
{
    MI_Value value;
    MI_Type  type;
    MI_Uint32 flags;
    size_t dwSize;
    int retValue;

    if (cimErrorDetails)
    {
        *cimErrorDetails = NULL;
    }

    memset(registeredServerURLs, 0, sizeof(MI_Char));

    if (g_DSCInternalCache)
    {
        if (DSC_MI_Instance_GetElement(g_DSCInternalCache, DSC_InternalStateCache_RegisteredServerURLs, &value, &type, &flags, NULL) == MI_RESULT_OK)
        {
            dwSize = Tcslen(value.string) + 1;
            *registeredServerURLs = (MI_Char*)DSC_malloc(dwSize*sizeof(MI_Char), NitsHere());
            if (*registeredServerURLs == NULL)
            {
                EH_Fail_(GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, cimErrorDetails, ID_LCMHELPER_MEMORY_ERROR));
            }
            memset(*registeredServerURLs, 0, dwSize);

            retValue = Stprintf(*registeredServerURLs, dwSize, MI_T("%T"), value.string);
            if (retValue == -1 || NitsShouldFault(NitsHere(), NitsAutomatic))
            {
                DSC_free(*registeredServerURLs);
                EH_Fail_(GetCimMIError(MI_RESULT_FAILED, cimErrorDetails, ID_LCMHELPER_PRINTF_ERROR));
            }
        }
    }

    EH_UNWIND:
        return MI_RESULT_OK;
}
Ejemplo n.º 18
0
static MI_Result MI_CALL _SetIndicationProperties_Impl(
    _In_ void* cfg,
    _Outptr_ MI_Instance** indication)
{
    MI_Result r = MI_RESULT_OK;
    Config* config = (Config*)cfg;
    DEBUG_ASSERT (indication);
    *indication = NULL;
    {
        MI_Boolean match;
        R_IndicationC1* inst;

        MI_Context* context = config->postctx;
        r = MI_Context_NewInstance(context, &R_IndicationC1_rtti, indication);
        CHKMIRESULTRETURN(r, "MI_Context_NewInstance failed");

        L_Indication_SetIndicationProperties(cfg, *indication);
        CHKSETPROPERTY(r, "L_Indication Properties");

        inst = (R_IndicationC1*) (*indication);
        r = R_IndicationC1_Set_message(inst, MI_T("test indication message"));
        CHKSETPROPERTY(r, "message");
        r = R_IndicationC1_Set_id(inst, config->count);
        CHKSETPROPERTY(r, "id");
        r = R_IndicationC1_Set_rcode1(inst, config->count);
        CHKSETPROPERTY(r, "rcode1");

        r = class_TestFilter(config, &inst->__instance, &match);
        if (r == MI_RESULT_OK)
        {
            if (match == MI_FALSE)
            {
                LOGMSG(("Indication does not match filter"));
            }
        }
    }
    return r;
}
Ejemplo n.º 19
0
*/

/*
**==============================================================================
**
** Dog
**
**==============================================================================
*/

/* property Dog.Key */
static MI_CONST MI_PropertyDecl Dog_Key_prop =
{
    MI_FLAG_PROPERTY|MI_FLAG_KEY, /* flags */
    0x006B7903, /* code */
    MI_T("Key"), /* name */
    NULL, /* qualifiers */
    0, /* numQualifiers */
    MI_STRING, /* type */
    NULL, /* className */
    0, /* subscript */
    offsetof(Dog, Key), /* offset */
    MI_T("XYZ_Dog"), /* origin */
    MI_T("XYZ_Dog"), /* propagator */
    NULL,
};

/* property Dog.Array1 */
static MI_CONST MI_PropertyDecl Dog_Array1_prop =
{
    MI_FLAG_PROPERTY, /* flags */
MI_Result UpdateTask(
    _In_z_ MI_Char* taskName,
    _In_z_ MI_Char* taskTime,
    _In_ MI_Uint32 refreshFrequencyInSeconds,
    _Outptr_result_maybenull_ MI_Instance **extendedError)
{
    int retValue = -1;
    ssize_t read = 0;
    size_t readLength = 0, writeLength = 0;
	MI_Char *line = NULL, *lineToWrite = NULL, *taskInCrontab = NULL;
	FILE *cronFile = NULL, *cronFileTmp = NULL;
	MI_Uint32 errorCode = 0;

	if (extendedError == NULL)
	{
		return MI_RESULT_INVALID_PARAMETER;
	}
	*extendedError = NULL;


    // Preparation
    if (refreshFrequencyInSeconds > THIRTY_ONE_DAYS_IN_SECONDS)
    {
		refreshFrequencyInSeconds = THIRTY_ONE_DAYS_IN_SECONDS;
    }
    if (refreshFrequencyInSeconds < FIFTEEN_MINUTES_IN_SECONDS)
    {
		refreshFrequencyInSeconds = FIFTEEN_MINUTES_IN_SECONDS;
    }

    // PLAN 1 -- process each line of crontab file to a tmp file and then copy tmp file back
    // taskTime string is not used in Linux since we can simply register a task with frequency

	// Allocate memory
	line = (MI_Char *)DSC_malloc(UNIT_LINE_SIZE * sizeof(MI_Char), NitsHere());
	if (line == NULL)
	{
		errorCode = ID_LCMHELPER_MEMORY_ERROR;
		goto ExitWithError;
	}
    lineToWrite = (MI_Char *)DSC_malloc(UNIT_LINE_SIZE * sizeof(MI_Char), NitsHere());
	if (lineToWrite == NULL)
	{
		errorCode = ID_LCMHELPER_MEMORY_ERROR;
		goto ExitWithError;
	}
	taskInCrontab = (MI_Char *)DSC_malloc(UNIT_LINE_SIZE * sizeof(MI_Char), NitsHere());
	if (taskInCrontab == NULL)
	{
		errorCode = ID_LCMHELPER_MEMORY_ERROR;
		goto ExitWithError;
	}

	// Open files
	if (File_ExistT(CRON_FILE) != -1)
	{
		cronFile = File_OpenT(CRON_FILE, MI_T("r"));
		if (cronFile == NULL)
		{
			// Fail to open existing cron file should lead to error exit
			errorCode = ID_ENGINEHELPER_OPENFILE_ERROR;
			goto ExitWithError;
		}
	}
    cronFileTmp = File_OpenT(CRON_FILE_TMP, MI_T("w"));
    if (cronFileTmp == NULL)
	{
		// Fail to create tmp file should lead to error exit
		errorCode = ID_LCMHELPER_CREATEFILE_ERROR;
		goto ExitWithError;
    }

	// Read and process crontab file if it exists and opens appropriately
    while (cronFile != NULL && (read = readline(&line, &readLength, cronFile)) != -1)
    {
        retValue = TcsStrlcpy(lineToWrite, line, Tcslen(line)+1);
		retValue = sscanf(line, MI_T("%*s %*s %*s %*s %*s %*s %s"), taskInCrontab);
		if (retValue == 0)
		{
			// Ignore the bad line that does not comply with crontab file format
			continue;
		}
		else
		{
			if (Tcsncasecmp(taskName, taskInCrontab, Tcslen(taskName)) == 0)
			{
				// Ignore entry that duplicates registration of task
				continue;
			}
			else
			{
				// Write the entry to tmp file
				writeLength = fwrite(lineToWrite, 1, Tcslen(lineToWrite), cronFileTmp);
				if (writeLength != read)
				{
					errorCode = ID_LCMHELPER_WRITEFILE_ERROR;
					goto ExitWithError;
				}
			}
		}
    }
    if (readLength == -1)
	{
		// Deal memory failure in readline function
		errorCode = ID_ENGINEHELPER_READFILE_ERROR;
		goto ExitWithError;
	}

    // Add the task entry
    retValue = Stprintf(lineToWrite, UNIT_LINE_SIZE, MI_T("*/%d * * * * root %T\n"), refreshFrequencyInSeconds / 60, taskName);
	if (retValue == -1)
	{
		errorCode = ID_LCMHELPER_PRINTF_ERROR;
		goto ExitWithError;
	}
    writeLength = fwrite(lineToWrite, 1, Tcslen(lineToWrite), cronFileTmp);
	if (writeLength != Tcslen(lineToWrite))
	{
		errorCode = ID_LCMHELPER_WRITEFILE_ERROR;
		goto ExitWithError;
	}

	if (cronFile != NULL)
		File_Close(cronFile);
    File_Close(cronFileTmp);

    File_CopyT(CRON_FILE_TMP, CRON_FILE);
    File_RemoveT(CRON_FILE_TMP);    
    
    DSC_free(line);
    DSC_free(lineToWrite);
	DSC_free(taskInCrontab);

    return MI_RESULT_OK;

ExitWithError:
	// Close files and remove temp file if it exists
	if (cronFile)
		File_Close(cronFile);
	if (cronFileTmp)
		File_Close(cronFileTmp);
    if (File_ExistT(CRON_FILE_TMP) != -1)
        File_RemoveT(CRON_FILE_TMP);
	
	// Free memory allocations
	if (line != NULL)
		DSC_free(line);
	if (lineToWrite != NULL)
		DSC_free(lineToWrite);
	if (taskInCrontab != NULL)
		DSC_free(taskInCrontab);

	// Form rich CIM error
	if (errorCode != 0)
		return GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, extendedError, errorCode);
	else
		return MI_RESULT_FAILED;
}
Ejemplo n.º 21
0
/* Get config from instance */
_Use_decl_annotations_
MI_Result Config_FromInstance(
    Batch* batch,
    const MI_Instance *instance,
    Config* config)
{
    MI_Value v;
    MI_Type t;
    MI_Uint32 f;
    MI_Result r;
    memset((void*)config, 0, sizeof(Config));
    r = MI_Instance_GetElement(instance, MI_T("className"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (v.string)
        config->className = (const char*)Batch_ZStrdup(batch, v.string);
    
    r = MI_Instance_GetElement(instance, MI_T("configFilepath"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (v.string)
        config->configFilepath = (const char*)Batch_ZStrdup(batch, v.string);
    
    r = MI_Instance_GetElement(instance, MI_T("testGroup"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->testGroup = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("testGroup"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->testGroup = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("intervalMS"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->intervalMS = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("failAfterCount"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->failAfterCount = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("failResult"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->failResult = (MI_Result)v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("initBehavior"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->initBehavior = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("initResultCode"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->initResultCode = (MI_Result)v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("initTimeoutMS"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->initTimeoutMS = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("finalizeBehavior"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->finalizeBehavior = v.uint32;
    
    r = MI_Instance_GetElement(instance, MI_T("finalizeResultCode"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->finalizeResultCode = (MI_Result)v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("postBehavior"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->postBehavior = v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("miscTestSubGroup"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->miscTestSubGroup = v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("subscribeBookmark"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (v.string)
        config->subscribeBookmark = Batch_ZStrdup(batch, v.string);

    r = MI_Instance_GetElement(instance, MI_T("providerBookmark"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (v.string)
        config->providerBookmark = Batch_ZStrdup(batch, v.string);

    r = MI_Instance_GetElement(instance, MI_T("dialect"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (v.string)
        config->dialect = Batch_ZStrdup(batch, v.string);

    r = MI_Instance_GetElement(instance, MI_T("expression"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (v.string)
        config->expression = Batch_ZStrdup(batch, v.string);

    r = MI_Instance_GetElement(instance, MI_T("evalResult"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->evalResult = v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("logLoadUnloadCall"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->logLoadUnloadCall = v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("currentSubscriptionTypes"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->currentSubscriptionTypes = v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("supportedSubscriptionTypes"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    config->supportedSubscriptionTypes = v.uint32;

    r = MI_Instance_GetElement(instance, MI_T("apicallseq"), &v, &t, &f, NULL);
    if (r != MI_RESULT_OK)
        return r;
    if (t != MI_STRINGA)
        return MI_RESULT_INVALID_PARAMETER;

    {
        MI_Uint32 count = MAXLOGENTRY;
        MI_Uint32 i;
        if (v.stringa.size < count)
            count =v.stringa.size;
        if (v.stringa.data)
        {
            for (i = 0; i < count; i++)
            {
                if (v.stringa.data[i])
                {
                    char *str = Batch_ZStrdup(batch, v.stringa.data[i]);
                    if (!str)
                        return MI_RESULT_SERVER_LIMITS_EXCEEDED;
                    config->apicallseq[i] = str;
                }
            }
        }
        config->apicallseqcount = count;
    }
    return r;
}
Ejemplo n.º 22
0
/* Convert config to instance */
_Use_decl_annotations_
MI_Result Config_ToInstance(
    Batch* batch,
    const Config* config,
    MI_Instance **instanceOut)
{
    MI_Instance *instance;
    MI_Result r;
    MI_Value value;

    MI_Char* className = Batch_StrTcsdup(batch, config->className);
    r = Instance_NewDynamic(&instance, CONFIG_CLASSNAME, MI_FLAG_CLASS, batch);
    if (r != MI_RESULT_OK)
        return r;
    value.string = className;
    r = MI_Instance_AddElement(instance, MI_T("className"), &value, MI_STRING, MI_FLAG_KEY);
    if (r != MI_RESULT_OK)
        return r;

    /*
    value.string = Batch_StrTcsdup(batch, config->configFilepath);
    r = MI_Instance_AddElement(instance, MI_T("configFilepath"), &value, MI_STRING, 0);
    if (r != MI_RESULT_OK)
        return r;
    */

    value.uint32 = config->testGroup;
    r = MI_Instance_AddElement(instance, MI_T("testGroup"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->intervalMS;
    r = MI_Instance_AddElement(instance, MI_T("intervalMS"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->failAfterCount;
    r = MI_Instance_AddElement(instance, MI_T("failAfterCount"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->failResult;
    r = MI_Instance_AddElement(instance, MI_T("failResult"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->initBehavior;
    r = MI_Instance_AddElement(instance, MI_T("initBehavior"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->initResultCode;
    r = MI_Instance_AddElement(instance, MI_T("initResultCode"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->initTimeoutMS;
    r = MI_Instance_AddElement(instance, MI_T("initTimeoutMS"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->finalizeBehavior;
    r = MI_Instance_AddElement(instance, MI_T("finalizeBehavior"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->finalizeResultCode;
    r = MI_Instance_AddElement(instance, MI_T("finalizeResultCode"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->postBehavior;
    r = MI_Instance_AddElement(instance, MI_T("postBehavior"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->miscTestSubGroup;
    r = MI_Instance_AddElement(instance, MI_T("miscTestSubGroup"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    if (config->subscribeBookmark)
    {
        value.string = Batch_StrTcsdup(batch, config->subscribeBookmark);
        r = MI_Instance_AddElement(instance, MI_T("subscribeBookmark"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    if (config->providerBookmark)
    {
        value.string = Batch_StrTcsdup(batch, config->providerBookmark);
        r = MI_Instance_AddElement(instance, MI_T("providerBookmark"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    if (config->dialect)
    {
        value.string = Batch_StrTcsdup(batch, config->dialect);
        r = MI_Instance_AddElement(instance, MI_T("dialect"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    if (config->expression)
    {
        value.string = Batch_StrTcsdup(batch, config->expression);
        r = MI_Instance_AddElement(instance, MI_T("expression"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    value.uint32 = config->evalResult;
    r = MI_Instance_AddElement(instance, MI_T("evalResult"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->logLoadUnloadCall;
    r = MI_Instance_AddElement(instance, MI_T("logLoadUnloadCall"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->currentSubscriptionTypes;
    r = MI_Instance_AddElement(instance, MI_T("currentSubscriptionTypes"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->supportedSubscriptionTypes;
    r = MI_Instance_AddElement(instance, MI_T("supportedSubscriptionTypes"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    *instanceOut = instance;
    return MI_RESULT_OK;
}
Ejemplo n.º 23
0
static MI_Result MI_CALL CreateOMIError_FromMiResult_shared(
    MI_Result miResult,
    const MI_ClassDecl *classDecl,
    _Outptr_ MI_Instance **omiError)
{
    const MI_Char* message;
    MI_Uint16 errorCategory; 

    /* The code to do error category conversion is already present in 
        wmi\WmiV2\Common\ErrorCodesConversion.cpp
        but we need a standalone copy under wmi\winomi */

    /* TODO/FIXME: need to use localized strings (once the localization story is figured out) 

       (BTW: I am not sure where WMIv2 is taking its error messages from.  
        Some (but not all) are in here:
        SD://depot/fbl_srv2_ci/admin/wmi/wbem/common/WMIUTILS/msgtable.mc#2) */
    switch (miResult)
    {
    case MI_RESULT_OK: 
        assert(0 && "Why would one call CreateOMIError_FromMiResult(MI_RESULT_OK)?");
        message = MI_T("MI_RESULT_OK");
        errorCategory = MI_ERRORCATEGORY_NOT_SPECIFIED;
        break;
    case MI_RESULT_FAILED : 
        message = MI_T("MI_RESULT_FAILED");
        errorCategory = MI_ERRORCATEGORY_NOT_SPECIFIED;
        break;
    case MI_RESULT_ACCESS_DENIED : 
        message = MI_T("MI_RESULT_ACCESS_DENIED");
        errorCategory = MI_ERRORCATEGORY_ACCESS_DENIED;
        break;
    case MI_RESULT_INVALID_NAMESPACE : 
        message = MI_T("MI_RESULT_INVALID_NAMESPACE");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_INVALID_PARAMETER : 
        message = MI_T("MI_RESULT_INVALID_PARAMETER");
        errorCategory = MI_ERRORCATEGORY_INVALID_ARGUMENT;
        break;
    case MI_RESULT_INVALID_CLASS : 
        message = MI_T("MI_RESULT_INVALID_CLASS");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_NOT_FOUND : 
        message = MI_T("MI_RESULT_NOT_FOUND");
        errorCategory = MI_ERRORCATEGORY_OBJECT_NOT_FOUND;
        break;
    case MI_RESULT_NOT_SUPPORTED : 
        message = MI_T("MI_RESULT_NOT_SUPPORTED");
        errorCategory = MI_ERRORCATEGORY_NOT_IMPLEMENTED;
        break;
    case MI_RESULT_CLASS_HAS_CHILDREN : 
        message = MI_T("MI_RESULT_CLASS_HAS_CHILDREN");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;        
    case MI_RESULT_CLASS_HAS_INSTANCES : 
        message = MI_T("MI_RESULT_CLASS_HAS_INSTANCES");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_INVALID_SUPERCLASS : 
        message = MI_T("MI_RESULT_INVALID_SUPERCLASS");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_ALREADY_EXISTS : 
        message = MI_T("MI_RESULT_ALREADY_EXISTS");
        errorCategory = MI_ERRORCATEGORY_RESOURCE_EXISTS;
        break;
    case MI_RESULT_NO_SUCH_PROPERTY : 
        message = MI_T("MI_RESULT_NO_SUCH_PROPERTY");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_TYPE_MISMATCH : 
        message = MI_T("MI_RESULT_TYPE_MISMATCH");
        errorCategory = MI_ERRORCATEGORY_INVALID_TYPE;
        break;
    case MI_RESULT_QUERY_LANGUAGE_NOT_SUPPORTED : 
        message = MI_T("MI_RESULT_QUERY_LANGUAGE_NOT_SUPPORTED");
        errorCategory = MI_ERRORCATEGORY_NOT_IMPLEMENTED;
        break;
    case MI_RESULT_INVALID_QUERY : 
        message = MI_T("MI_RESULT_INVALID_QUERY");
        errorCategory = MI_ERRORCATEGORY_INVALID_ARGUMENT;
        break;
    case MI_RESULT_METHOD_NOT_AVAILABLE : 
        message = MI_T("MI_RESULT_METHOD_NOT_AVAILABLE");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_METHOD_NOT_FOUND : 
        message = MI_T("MI_RESULT_METHOD_NOT_FOUND");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_NAMESPACE_NOT_EMPTY : 
        message = MI_T("MI_RESULT_NAMESPACE_NOT_EMPTY");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_INVALID_ENUMERATION_CONTEXT : 
        message = MI_T("MI_RESULT_INVALID_ENUMERATION_CONTEXT");
        errorCategory = MI_ERRORCATEGORY_METADATA_ERROR;
        break;
    case MI_RESULT_INVALID_OPERATION_TIMEOUT : 
        message = MI_T("MI_RESULT_INVALID_OPERATION_TIMEOUT");
        errorCategory = MI_ERRORCATEGORY_INVALID_ARGUMENT;
        break;
    case MI_RESULT_PULL_HAS_BEEN_ABANDONED : 
        message = MI_T("MI_RESULT_PULL_HAS_BEEN_ABANDONED");
        errorCategory = MI_ERRORCATEGORY_OPERATION_STOPPED;
        break;
    case MI_RESULT_PULL_CANNOT_BE_ABANDONED : 
        message = MI_T("MI_RESULT_PULL_CANNOT_BE_ABANDONED");
        errorCategory = MI_ERRORCATEGORY_CLOS_EERROR;
        break;
    case MI_RESULT_FILTERED_ENUMERATION_NOT_SUPPORTED : 
        message = MI_T("MI_RESULT_FILTERED_ENUMERATION_NOT_SUPPORTED");
        errorCategory = MI_ERRORCATEGORY_NOT_IMPLEMENTED;
        break;
    case MI_RESULT_CONTINUATION_ON_ERROR_NOT_SUPPORTED : 
        message = MI_T("MI_RESULT_CONTINUATION_ON_ERROR_NOT_SUPPORTED");
        errorCategory = MI_ERRORCATEGORY_NOT_IMPLEMENTED;
        break;
    case MI_RESULT_SERVER_LIMITS_EXCEEDED : 
        message = MI_T("MI_RESULT_SERVER_LIMITS_EXCEEDED");
        errorCategory = MI_ERRORCATEGORY_RESOURCE_BUSY;
        break;
    case MI_RESULT_SERVER_IS_SHUTTING_DOWN : 
        message = MI_T("MI_RESULT_SERVER_IS_SHUTTING_DOWN");
        errorCategory = MI_ERRORCATEGORY_RESOURCE_UNAVAILABLE;
        break;        
    default:
        errorCategory = MI_ERRORCATEGORY_NOT_SPECIFIED;
        message = MI_T("Unrecognized MI_Result");
        break;        
    }

    return CreateOMIError_shared(message, miResult, MI_RESULT_TYPE_MI, errorCategory, classDecl, omiError);
}
Ejemplo n.º 24
0
#include "omiutils.h"
#include <strings.h>
#include "OMI_Error.h"
#include "OMI_DebugError.h"

#if defined(_MSC_VER)
#ifdef _PREFAST_
#pragma warning(pop)
#endif 
#endif
#include <assert.h>


static struct { const MI_Char *name; MI_Uint64 id; } 
DeclIdMap[] = {
    { MI_T("MSFT_GUID"), 1 },
    { MI_T("MSFT_ETWEventHeader"), 2 },
    { MI_T("MSFT_ETWEventPayload"), 3 },
    { MI_T("MSFT_ETWExtendedData"), 4 },
    { MI_T("MSFT_ETWEvent"), 5 },
    { MI_T("CIM_Error"), 6 },
    { MI_T("OMI_Error"), 7 },
    { MI_T("OMI_DebugError"), 8 },
    { MI_T("MSFT_CounterValue"), 9 },
    { MI_T("MSFT_FormattedCounterValueReal64"), 10 },
    { MI_T("MSFT_FormattedCounterValueUint32"), 11 },
    { MI_T("MSFT_FormattedCounterValueUint64"), 12 },
    { MI_T("MSFT_RawCounterValue"), 13 },
    { NULL }
};
Ejemplo n.º 25
0
*/

/*
**==============================================================================
**
** ABC_Widget
**
**==============================================================================
*/

/* property ABC_Widget.Key */
static MI_CONST MI_PropertyDecl ABC_Widget_Key_prop =
{
    MI_FLAG_PROPERTY|MI_FLAG_KEY, /* flags */
    0x006B7903, /* code */
    MI_T("Key"), /* name */
    NULL, /* qualifiers */
    0, /* numQualifiers */
    MI_STRING, /* type */
    NULL, /* className */
    0, /* subscript */
    offsetof(ABC_Widget, Key), /* offset */
    MI_T("ABC_Widget"), /* origin */
    MI_T("ABC_Widget"), /* propagator */
    NULL,
};

/* property ABC_Widget.Color */
static MI_CONST MI_PropertyDecl ABC_Widget_Color_prop =
{
    MI_FLAG_PROPERTY, /* flags */
Ejemplo n.º 26
0
MI_EXTERN_C MI_SchemaDecl schemaDecl;

/*
**==============================================================================
**
** Qualifier declarations
**
**==============================================================================
*/

static MI_CONST MI_Boolean Abstract_qual_decl_value = 0;

static MI_CONST MI_QualifierDecl Abstract_qual_decl =
{
    MI_T("Abstract"), /* name */
    MI_BOOLEAN, /* type */
    MI_FLAG_ASSOCIATION|MI_FLAG_CLASS|MI_FLAG_INDICATION, /* scope */
    MI_FLAG_ENABLEOVERRIDE|MI_FLAG_RESTRICTED, /* flavor */
    0, /* subscript */
    &Abstract_qual_decl_value, /* value */
};

static MI_CONST MI_Boolean Aggregate_qual_decl_value = 0;

static MI_CONST MI_QualifierDecl Aggregate_qual_decl =
{
    MI_T("Aggregate"), /* name */
    MI_BOOLEAN, /* type */
    MI_FLAG_REFERENCE, /* scope */
    MI_FLAG_DISABLEOVERRIDE|MI_FLAG_TOSUBCLASS, /* flavor */
Ejemplo n.º 27
0
MI_Boolean IsMatchedKeyProperties(
    _In_ MI_Instance* instance0,
    _In_ MI_Instance* instance1,
    _Outptr_result_maybenull_z_ MI_Char** keywords,
    _Out_ MI_Result* miResult,
    _Outptr_result_maybenull_ MI_Instance **extendedError)
{
    MI_Uint32 i, j;
    MI_Result result0, result1;
    MI_Value value0, value1;
    MI_Type type0, type1;
    Intlstr intlstr = Intlstr_Null;
    MI_Char* tempKeywords = NULL;
    MI_Char* tempKeywordsBackup = NULL;
    size_t length;
    MI_PropertyDecl** properties;

    if (extendedError == NULL)
    {        
        return MI_RESULT_INVALID_PARAMETER; 
    }
    *extendedError = NULL;	// Explicitly set *extendedError to NULL as _Outptr_ requires setting this at least once.	

    *miResult = MI_RESULT_OK;
    *keywords = NULL;
    properties = (MI_PropertyDecl**)instance0->classDecl->properties;
    for (i = 0; i < instance0->classDecl->numProperties; i++)
    {
        for (j = 0; j < properties[i]->numQualifiers; j++)
        {
            if (Tcscasecmp(properties[i]->qualifiers[j]->name, MI_T("Key")) == 0)
            {
                result0 = DSC_MI_Instance_GetElement(instance0, properties[i]->name, &value0, &type0, NULL, NULL);
                result1 = DSC_MI_Instance_GetElement(instance1, properties[i]->name, &value1, &type1, NULL, NULL);
                if (result0 == MI_RESULT_OK
                    && result1 == MI_RESULT_OK
                    && type0 == type1
                    && IsSameMiValue(&value0, &value1, type0))
                {
                    // key is the same, building keywords list.
                    length = Tcslen(properties[i]->name) + 1;
                    if (tempKeywords == NULL)
                    {
                        // the first keyword.
                        tempKeywords = (MI_Char*)DSC_malloc(length * sizeof (MI_Char), NitsHere());
                        if (tempKeywords == NULL)
                        {
                            *miResult = CreateMemoryError(extendedError);
                            return MI_TRUE;
                        }

                        memcpy(tempKeywords, properties[i]->name, length * sizeof(MI_Char) );
                    }
                    else
                    {
                        // the second or more keywords.
                        if (intlstr.str == NULL)
                        {
                            // create separator string once.
                            GetResourceString(ID_CA_COMMA_SEPARATOR, &intlstr);
                            if (intlstr.str == NULL)
                            {
                                *miResult = CreateMemoryError(extendedError);
                                DSC_free(tempKeywords);
                                return MI_TRUE;
                            }
                        }

                        length += Tcslen(tempKeywords) + Tcslen(intlstr.str);
                        tempKeywordsBackup = tempKeywords;
                        tempKeywords = (MI_Char*)DSC_realloc(tempKeywordsBackup, length * sizeof (MI_Char), NitsHere());
                        if (tempKeywords == NULL)
                        {
                            *miResult = CreateMemoryError(extendedError);
                            DSC_free(tempKeywordsBackup);
                            Intlstr_Free(intlstr);
                            return MI_TRUE;
                        }
                        Stprintf(tempKeywords, length, MI_T("%T%T"), intlstr.str, properties[i]->name);
                    }
                }
                else
                {
                    if (tempKeywords)
                    {
                        DSC_free(tempKeywords);
                    }
                    
                    if (intlstr.str)
                    {
                        Intlstr_Free(intlstr);
                    }
                    
                    if(result0 != MI_RESULT_OK)
                    {
                        *miResult = result0;
                    }
                    else if(result1 != MI_RESULT_OK)
                    {
                        *miResult = result1;
                    }

                    return MI_FALSE;
                }

                break;
            }
        }
    }

    if (intlstr.str)
    {
        Intlstr_Free(intlstr);
    }

    // at least one key was found, and all matched.
    if (tempKeywords)
    {
        *keywords = tempKeywords;
        return MI_TRUE;
    }

    return MI_FALSE;
}
Ejemplo n.º 28
0
MI_Result ResolvePath(_Outptr_opt_result_maybenull_z_ MI_Char **envResolvedPath,
                      _Outptr_opt_result_maybenull_z_ MI_Char **searchPath,
                      _In_z_ const MI_Char *envPath,
                      _In_z_ const MI_Char *searchPattern,
                      _Outptr_result_maybenull_ MI_Instance **extendedError)
{
    MI_Uint32 dwReturnSizeInitial = 0, dwReturnSize = (MI_Uint32) (Tcslen(envPath)+1);
    int result = 0;
    const MI_Char *pathToUse = envPath;

    if (extendedError == NULL)
    {
        return MI_RESULT_INVALID_PARAMETER;
    }
    *extendedError = NULL;  // Explicitly set *extendedError to NULL as _Outptr_ requires setting this at least once.

    if( searchPath)
    {
        *searchPath = NULL;
    }

    if( envResolvedPath != NULL )
    {
#if defined(_MSC_VER)
        dwReturnSizeInitial = ExpandEnvironmentStrings(envPath, NULL, 0);
#else
        dwReturnSizeInitial = Tcslen(envPath) + 1;
#endif

        *envResolvedPath = (MI_Char*)DSC_malloc(dwReturnSizeInitial* sizeof(MI_Char), NitsHere());
        if( *envResolvedPath == NULL)
        {
            return GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, extendedError, ID_LCMHELPER_MEMORY_ERROR);
        }

#if defined(_MSC_VER)
        dwReturnSize = ExpandEnvironmentStrings(envPath, *envResolvedPath, dwReturnSizeInitial);
        if( dwReturnSize == 0 || (dwReturnSize >  dwReturnSizeInitial ) || NitsShouldFault(NitsHere(), NitsAutomatic))
        {
            //memory error
            DSC_free(*envResolvedPath);
            *envResolvedPath = NULL;
            return GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, extendedError, ID_LCMHELPER_EXPANDENV_FAILED);
        }
#else
        memcpy(*envResolvedPath, envPath, dwReturnSizeInitial * sizeof(MI_Char));
#endif
        pathToUse = *envResolvedPath;
    }

    if( searchPath != NULL)
    {

        dwReturnSize += (MI_Uint32) (Tcslen(searchPattern) + 1);// %s\\%s

        /* Create Search Path*/
        *searchPath = (MI_Char*)DSC_malloc(dwReturnSize* sizeof(MI_Char), NitsHere()); // %s\\%s
        if( *searchPath == NULL)
        {
            if( envResolvedPath != NULL )
            {
                DSC_free(*envResolvedPath);
                *envResolvedPath = NULL;
            }
            return GetCimMIError(MI_RESULT_SERVER_LIMITS_EXCEEDED, extendedError, ID_LCMHELPER_MEMORY_ERROR);
        }
#if defined(_MSC_VER)
        result = Stprintf(*searchPath, dwReturnSize, MI_T("%T\\%T"), pathToUse, searchPattern);
#else
        result = Stprintf(*searchPath, dwReturnSize, MI_T("%T/%T"), pathToUse, searchPattern);
#endif

        if( result <= 0 || NitsShouldFault(NitsHere(), NitsAutomatic))
        {
            if( envResolvedPath != NULL )
            {
                DSC_free(*envResolvedPath);
                *envResolvedPath = NULL;
            }

            DSC_free(*searchPath);
            return GetCimMIError(MI_RESULT_FAILED, extendedError, ID_LCMHELPER_PRINTF_ERROR);
        }
    }
    return MI_RESULT_OK;
}
Ejemplo n.º 29
0
*/

/*
**==============================================================================
**
** XYZ_Frog
**
**==============================================================================
*/

/* property XYZ_Frog.Name */
static MI_CONST MI_PropertyDecl XYZ_Frog_Name_prop =
{
    MI_FLAG_PROPERTY|MI_FLAG_KEY, /* flags */
    0x006E6504, /* code */
    MI_T("Name"), /* name */
    NULL, /* qualifiers */
    0, /* numQualifiers */
    MI_STRING, /* type */
    NULL, /* className */
    0, /* subscript */
    offsetof(XYZ_Frog, Name), /* offset */
    MI_T("XYZ_Frog"), /* origin */
    MI_T("XYZ_Frog"), /* propagator */
    NULL,
};

/* property XYZ_Frog.Weight */
static MI_CONST MI_PropertyDecl XYZ_Frog_Weight_prop =
{
    MI_FLAG_PROPERTY, /* flags */
Ejemplo n.º 30
0
#include <windows.h>
#include "Win32_EngineHelper.h"
#include <objbase.h>
#include <winsqm.h>
#endif

extern Loc_Mapping g_LocMappingTable[];
extern MI_Uint32 g_LocMappingTableSize;
void *g_registrationManager;
char g_currentError[5001];
StatusReport_ResourceNotInDesiredState * g_rnids = NULL;


BaseResourceConfiguration g_BaseResourceConfiguration[] =
{
    {MI_T("ResourceId"),         MI_STRING},
    {MI_T("SourceInfo"),         MI_STRING},
    {MI_T("DependsOn"),          MI_STRINGA},
    {MI_T("ModuleName"),         MI_STRING},
    {MI_T("ModuleVersion"),      MI_STRING},
    {MI_T("ConfigurationName"), MI_STRING},
    {NULL,                  0}
};


const MI_Char * GetSchemaSearchPath()
{
    return CONFIGURATION_SCHEMA_SEARCH_PATH;
}
const MI_Char * GetSchemaSearchPathProgFiles()
{