在Windows SDK(Vista及以上版本)中,存在tbs.h / dll / lib以与TPM基本服务进行交互。 我想要执行一些TPM命令,并参阅下面的MSDN参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa446799(v=vs.85).aspx
我不知道如何构build我的“命令缓冲区”,并通过任何特定的命令。 我找不到任何具体的例子。
我想使用TPM_Seal,但是没有丝毫的关于如何设置命令。
我设置了一个基本的C ++应用程序来创build下面的TBS环境,这是成功的。
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[10] = {0,0xc0,0,0,0,0x0a,0,0,0,0x50}; BYTE buf[512]; UINT32 buf_len = 512; rv = Tbsip_Submit_Command(hContext,0,TBS_COMMAND_PRIORITY_NORMAL,data,10,buf,&buf_len); printf("\n2 RESULT : %x STATUS : %x", rv, hContext); rv = Tbsip_Context_Close(hContext); printf("\n3 RESULT : %x STATUS : %x", rv, hContext);
这个例子的工作,似乎正确地传递命令 – 我只需要find一些信息如何获得“正确的”命令序列到命令缓冲区。
函数引用在这里: http : //msdn.microsoft.com/en-us/library/windows/desktop/aa446799(v=vs.85).aspx
而tbs.h不包含任何与命令有关的结构。 我看到的大部分示例都使用TSS API(我不认为我可以在Windows上使用)。
迄今为止收集的信息:
TPM数据结构在此列出: http : //www.trustedcomputinggroup.org/files/static_page_files/E55A303C-1A4B-B294-D066E66A82DAE27D/TPM%20Main-Part%202%20TPM%20Structures_v1.2_rev116_01032011.pdf
TrouSerS( http://trousers.sourceforge.net/ )有一组包含文件,它们精心定义了上面定义的所有各种字节码。
这些命令在规范的第2部分中没有描述,而是在第3部分 – 命令中描述 。
TPM_seal
命令在第72页的10.1节中定义TPM_seal
行显示了命令的外观。
另请注意,返回值rv
不会告诉您该命令是否在TPM上成功执行。 它只是告诉你TBS是否能够发送命令并接收响应。 你必须解码pabResult
缓冲区。
你也应该看看我对你的另一个问题的回答 。