为什么我通过TBS从TPM获得非标准响应? 我有一个C++程序,通过TPM基本服务和Windows 7 SDK。
我已经在下面设置了程序为什么我通过TBS从TPM获得非标准响应? 我有一个C++程序,通过TPM基本服务和Windows 7 SDK。,tpm,trusted-computing,Tpm,Trusted Computing,我已经在下面设置了程序 int _tmain(int argc, _TCHAR* argv[]) { TBS_CONTEXT_PARAMS pContextParams; TBS_HCONTEXT hContext; TBS_RESULT rv; pContextParams.version = TBS_CONTEXT_VERSION_ONE; rv = Tbsi_Context_Create(&am
int _tmain(int argc, _TCHAR* argv[])
{
TBS_CONTEXT_PARAMS pContextParams;
TBS_HCONTEXT hContext;
TBS_RESULT rv;
pContextParams.version = TBS_CONTEXT_VERSION_ONE;
rv = Tbsi_Context_Create(&pContextParams, &hContext);
printf("\n1 RESULT : %x STATUS : %x", rv, hContext);
BYTE data[200] =
{0,0xc1, /* TPM_TAG_RQU_COMMAND */
0,0,0,18, /* blob length, bytes */
0,0,0,0x65, /* TPM_ORD_GetCapability */
0,0,0,0x06, /* TPM_CAP_VERSION */
0,0,0,0}; /* 0 bytes subcap */
BYTE buf[4000];
UINT32 len = 4000;
rv = Tbsip_Submit_Command(hContext,0,TBS_COMMAND_PRIORITY_NORMAL,data,18,buf,&len);
//CAPABILITY_RETURN* retVal = new CAPABILITY_RETURN(buf);
//printf("\n2 Response Tag: %x Output Bytes: %x",tag,);
printf("\n2 RESULT : %x STATUS : %x\n", rv, hContext);
printBuf(buf,len);
rv = Tbsip_Context_Close(hContext);
printf("\n3 RESULT : %x STATUS : %x", rv, hContext);
我的返回缓冲区如下所示:
00:C4:00:00:00:12:00:00:00:00:00:00:00:04:01:01:00:00
根据本文件,第7.1节TPM_GetCapability I应获得以下信息:
查看我的输出缓冲区,我得到了TPM_TAG_RSP_命令,paramSize的值为18,TPM_结果的值为0,序数的值为0x…04(不确定这是什么意思),然后我的最后一位的值为1,1,0,0。我不知道如何破译这个。你问题的答案是:
你不会得到不标准的答复
resp
也是预期的结果。当要求TPM\u CAP\u版本
时,符合标准的TPM必须回答01 01 00
TPM_COMMAND_code ordinal
的行是而不是响应的一部分。
它没有PARAM#
和PARAM SZ
。它仅与计算响应的HMAC相关
因此,回应如下:
00 C4 tag
00 00 00 12 paramSize
00 00 00 00 returnCode
00 00 00 04 respSize
01 01 00 00 resp
typedef struct tdTPM_STRUCT_VER {
BYTE major; // ==> 1
BYTE minor; // ==> 1
BYTE revMajor; // ==> 0
BYTE revMinor; // ==> 0
} TPM_STRUCT_VER;
您要求提供功能TPM\u CAP\u版本
。以下是规格说明:
Value: 0x00000006
Capability Name: TPM_CAP_VERSION
Sub cap: Ignored
TPM_STRUCT_VER structure.
The major and minor version MUST indicate 1.1.
The firmware revision MUST indicate 0.0.
The use of this value is deprecated, new software SHOULD
use TPM_CAP_VERSION_VAL to obtain version and revision information
regarding the TPM.
因此,当您解码resp
,这是一个TPM结构版本
,您会得到以下信息:
00 C4 tag
00 00 00 12 paramSize
00 00 00 00 returnCode
00 00 00 04 respSize
01 01 00 00 resp
typedef struct tdTPM_STRUCT_VER {
BYTE major; // ==> 1
BYTE minor; // ==> 1
BYTE revMajor; // ==> 0
BYTE revMinor; // ==> 0
} TPM_STRUCT_VER;
SO 1.1和0,严格按照规范。
嗯,考虑我受过教育。谢谢