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;
}