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