TPM_COMM_HANDLE tpm_comm_create()

in src/tpm_comm_win32.c [79:121]


TPM_COMM_HANDLE tpm_comm_create(const char* endpoint)
{
    TPM_COMM_INFO* result;
    (void)endpoint;
    if ((result = malloc(sizeof(TPM_COMM_INFO))) == NULL)
    {
        LogError("Failure: malloc tpm communication info.");
    }
    else
    {
        TBS_RESULT tbs_res;
        TBS_CONTEXT_PARAMS2 parms = { TBS_CONTEXT_VERSION_TWO };
        TPM_DEVICE_INFO device_info = { 1, 0 };

        parms.includeTpm20 = TRUE;

        memset(result, 0, sizeof(TPM_COMM_INFO));
        tbs_res = Tbsi_Context_Create((PCTBS_CONTEXT_PARAMS)&parms, &result->tbs_context);
        if (tbs_res != TBS_SUCCESS)
        {
            LogError("Failure: Tbsi_Context_Create %s.", get_tbsi_error_msg(tbs_res));
            free(result);
            result = NULL;
        }
        else
        {
            tbs_res = Tbsi_GetDeviceInfo(sizeof(device_info), &device_info);
            if (tbs_res != TBS_SUCCESS)
            {
                LogError("Failure getting device tpm information %s.", get_tbsi_error_msg(tbs_res));
                cleanup_memory(result);
                result = NULL;
            }
            else if (device_info.tpmVersion != TPM_VERSION_20)
            {
                LogError("Failure Invalid tpm version specified.  Requires 2.0.");
                cleanup_memory(result);
                result = NULL;
            }
        }
    }
    return result;
}