3

在 Windows SDK(Vista 及以上)中,存在 tbs.h/dll/lib 与 TPM 基础服务交互。我想执行一些 TPM 命令,并查看 MSDN 参考以下 http://msdn.microsoft.com/en-us/library/windows/desktop/aa446799(v=vs.85).aspx

我不确定如何构建我的“命令缓冲区”并传递任何特定命令。我在任何地方都找不到任何具体的例子。

我想使用 TPM_Seal,但对如何设置命令一无所知。

我设置了一个基本的 C++ 应用程序,它在下面创建 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);

这个例子有效并且似乎正确地传递了命令——我只需要找到一些关于如何将“正确”命令序列放入命令缓冲区的信息。

函数参考在这里: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/ ) 有一组包含文件,它们煞费苦心地定义了上面定义的所有各种字节码。

4

1 回答 1

1

这些命令没有在规范的第 2 部分中描述,而是在第 3 部分 - 命令中描述。

TPM_seal命令在第 72 页的 10.1 节中定义。第 1331 行向您展示了该命令的外观。

另请注意,返回值rv不会告诉您命令是否在 TPM 上成功执行。它只是告诉您 TBS 是否能够发送命令并接收响应。您必须解码pabResult缓冲区。

你也应该看看我对你其他问题的回答。

于 2014-06-13T10:38:26.600 回答