我有一个 C++ 程序通过 TPM 基础服务和 Windows 7 SDK 执行基本的 TPM_GetCapabilities。
我已经设置了下面的程序
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 我应该得到以下信息:
查看输出缓冲区,我得到 TPM_TAG_RSP_COMMAND,paramSize 的值为 18,TPM_RESULT 的值为 0,序数的值为 0x...04(不确定这应该是什么意思。)然后是 1,1,0,0我的最后一点。我不知道如何破译这个。