多重句柄怎么处理_CAD出现“*警告* 多重从属对象,句柄"98"”的问题 |小建人...

ffb2388fb37c6abc3984b6cf5e76495b.gif

点击上方蓝色字体,关注我们

5fa66a5ff9003edba17b8b40ff19459c.gif

引言:cad2014怎么消除*警告* 多重从属对象,句柄“42”

“98”等等的问题,如下:

ctrl+c复制后无法Ctrl+v粘贴,出现:

*警告* 多重从属对象,句柄“42”

 *警告* 多重从属对象,句柄“41”

 *警告* 多重从属对象,句柄“D”

ctrl+s保存后也会出现:

*警告* 多重从属对象,句柄“42”

 *警告* 多重从属对象,句柄“41”

 *警告* 多重从属对象,句柄“D”

怎么解决?

以下是解决办法,亲测能用!

 测试环境:

      Win10 64、cad2014,天正2014

1、在cad命令面板里复制入命令:     (dictremove(namedobjdict)"ACAD_DGNLINESTYLECOMP")   之后,点击空格键。如下图:0f170bc9ba110ba94938a24e53c47f53.png2、然后输入   pu    清理命令,点击空格键:

b3c2eff30364d30c36235c34699bed91.png3、接着会出现一个对话框,我们只需默认,点击全部清理,清理两次即可:92c84cdf12fe5f55630857b9713e1c33.png4、然后我们再去选择我们要复制黏贴的内容,就发现可以复制了,如图所示。c4c305a825c25be62fbca0decc2443a4.png

3f28abf2b5399559ec838b10c3122753.png

 推荐你看 

CAD无法复制到剪贴板,为什么?|小建人

CAD图纸文件不能拖动打开的终极解决办法 |小建人

▽▽▽ 46e5a842edd510969b093bf1f91ee7dd.png

扫一扫
关注我们

<think>好的,我现在需要解释用户提供的这两个TSS2函数:Esys_CreatePrimary和Esys_Sign。首先,我要确定用户的使用场景。他们可能正在开发或使用TPM(可信平台模块)相关的应用程序,需要了解这两个函数的作用、参数以及返回代码。用户可能遇到了问题,或者在设计阶段需要理解如何正确调用这些函数。 首先,我需要回忆TSS(TPM Software Stack)的基本结构。TSS2是第二版的规范,用于与TPM 2.0交互。Esys代表Enhanced System API,这是TSS2中的一个高层API,提供更便捷的访问方式。接下来,针对每个函数,我需要分解参数,解释其用途,并说明可能的返回码。 对于Esys_CreatePrimary,这个函数用于创建主对象,通常是生成一个主密钥。主密钥在TPM中作为其他对象的父对象。参数包括esysContext(上下文句柄),primaryHandle(指定主对象句柄位置),三个shandle(会话句柄),以及各种输入数据如inSensitive(敏感信息)、inPublic(公共模板)等。输出参数有objectHandle(生成的对象句柄)、outPublic(公钥信息)、creationData等。返回类型TSS2_RC是函数执行的结果代码,需要检查是否成功。 然后是Esys_Sign,这个函数用于使用TPM中的密钥对数据进行签名。参数包括keyHandle(签名用的密钥句柄),digest(待签名的摘要),inScheme(签名方案),validation(验证票据),输出signature。同样需要处理三个会话句柄,并返回TSS2_RC。 需要注意用户可能的问题点,比如会话句柄的作用(shandle1-3),这些可能用于授权。不同的句柄对应不同的授权会话,例如,如果密钥需要授权,则需要提供相应的会话。另外,参数类型如TPM2B_结构体,通常是带有大小的缓冲区,需要正确初始化。 用户可能需要了解如何正确初始化这些结构体,如何处理返回的RC,常见的错误码有哪些。例如,TSS2_RC_SUCCESS表示成功,其他如TSS2_ESYS_RC_BAD_REFERENCE可能表示空指针传入。此外,资源管理方面,创建的对象句柄需要正确管理,避免泄漏。 还需要考虑异步操作的可能性,TSS2的函数通常是异步的,但Esys API可能封装了同步调用。另外,创建主对象时,公共模板的构造是否正确,比如密钥类型、算法选择等,都是常见的配置问题。 最后,要确保解释清晰,结构合理,分步骤说明每个函数的用途、参数和注意事项,帮助用户正确使用这两个函数,并诊断可能的问题。</think>以下是关于 TSS2 函数 `Esys_CreatePrimary` 和 `Esys_Sign` 的详细解释: --- ### **1. `Esys_CreatePrimary` 函数** #### **功能** 用于在 TPM(可信平台模块)中创建一个主对象(通常是主密钥),作为其他对象的父对象。主对象存储在 TPM 的层次结构(如存储层次、背书层次等)中,是生成子密钥或数据的基础。 #### **参数解析** | 参数 | 类型 | 说明 | |------------------|--------------------------|----------------------------------------------------------------------| | `esysContext` | `ESYS_CONTEXT *` | TSS2 系统上下文,管理会话、资源等。 | | `primaryHandle` | `ESYS_TR` | 指定 TPM 层次结构的句柄(如 `TPM2_RH_OWNER`)。 | | `shandle1-3` | `ESYS_TR` | 会话句柄,用于授权操作(若需要)。 | | `inSensitive` | `TPM2B_SENSITIVE_CREATE` | 敏感信息(如密钥种子),可为空。 | | `inPublic` | `TPM2B_PUBLIC` |对象的公共模板(算法类型、属性等)。 | | `outsideInfo` | `TPM2B_DATA` | 外部数据(用于派生密钥),通常为空。 | | `creationPCR` | `TPML_PCR_SELECTION` | 关联的 PCR(平台配置寄存器)状态,可为空。 | | `objectHandle` | `ESYS_TR *` | 输出参数,返回新创建主对象句柄| | `outPublic` | `TPM2B_PUBLIC **` | 输出参数,返回主对象的公共部分(如公钥)。 | | `creationData` | `TPM2B_CREATION_DATA **` | 输出参数,返回创建时的关联数据(如时间、PCR 状态)。 | | `creationHash` | `TPM2B_DIGEST **` | 输出参数,返回 `creationData` 的哈希值。 | | `creationTicket` | `TPMT_TK_CREATION **` | 输出参数,返回 TPM 生成的创建凭证(用于后续验证)。 | #### **返回值** - **`TSS2_RC`**: 操作结果码,例如: - `TSS2_RC_SUCCESS`: 成功。 - `TSS2_ESYS_RC_BAD_REFERENCE`: 参数为空指针。 - `TSS2_ESYS_RC_INSUFFICIENT_BUFFER`: 缓冲区不足。 --- ### **2. `Esys_Sign` 函数** #### **功能** 使用 TPM 中的密钥对指定数据的哈希值进行签名。支持多种签名算法(如 RSA、ECC)。 #### **参数解析** | 参数 | 类型 | 说明 | |------------------|--------------------------|----------------------------------------------------------------------| | `esysContext` | `ESYS_CONTEXT *` | TSS2 系统上下文。 | | `keyHandle` | `ESYS_TR` | 签名密钥的句柄(需已加载到 TPM)。 | | `shandle1-3` | `ESYS_TR` | 会话句柄,用于授权操作(若密钥需要授权)。 | | `digest` | `TPM2B_DIGEST *` | 待签名的哈希值(必须是完整的摘要数据)。 | | `inScheme` | `TPMT_SIG_SCHEME *` | 签名方案(如 `TPM2_ALG_RSASSA`),可为空(使用密钥默认方案)。 | | `validation` | `TPMT_TK_HASHCHECK *` | 哈希验证票据(若签名需关联特定状态),通常为空。 | | `signature` | `TPMT_SIGNATURE **` | 输出参数,返回签名结果。 | #### **返回值** - **`TSS2_RC`**: 操作结果码,例如: - `TSS2_RC_SUCCESS`: 成功。 - `TSS2_ESYS_RC_BAD_VALUE`: 无效的签名方案或哈希长度。 - `TSS2_ESYS_RC_KEY_NEEDS_AUTH`: 密钥需要授权但未提供会话。 --- ### **3. 关键注意事项** 1. **会话管理 (`shandle1-3`)**: - 若操作需要授权(如使用受密码保护的密钥),需通过会话句柄提供授权凭证。 - 会话类型可以是密码会话、HMAC 会话或策略会话。 2. **资源句柄 (`ESYS_TR`)**: - 所有句柄需通过 TSS2 API 分配和管理(如 `Esys_Load` 加载密钥后返回句柄)。 3. **数据结构**: - `TPM2B_*` 类型是带长度的缓冲区(如 `TPM2B_DIGEST` 包含 `size` 和 `buffer`)。 - 使用前需正确初始化数据结构(如通过 `Tss2_MU` 编组函数)。 4. **错误处理**: - 始终检查 `TSS2_RC` 返回值,并使用 `Tss2_RC_Decode` 解析错误码。 --- ### **4. 典型调用流程示例** #### **创建主密钥** ```c TSS2_RC rc; ESYS_TR primaryHandle = ESYS_TR_NONE; TPM2B_PUBLIC *outPublic = NULL; rc = Esys_CreatePrimary( esysContext, TPM2_RH_OWNER, // 使用存储层次 ESYS_TR_PASSWORD, // 授权会话 ESYS_TR_NONE, ESYS_TR_NONE, NULL, // 无敏感数据 &templatePublic, // 定义好的公共模板 NULL, NULL, &primaryHandle, &outPublic, NULL, NULL, NULL ); ``` #### **使用密钥签名** ```c TPMT_SIGNATURE *signature = NULL; rc = Esys_Sign( esysContext, keyHandle, // 已加载的密钥句柄 ESYS_TR_PASSWORD, // 授权会话 ESYS_TR_NONE, ESYS_TR_NONE, &digest, // 待签名的哈希 NULL, // 使用默认签名方案 NULL, &signature ); ``` --- ### **5. 总结** - **`Esys_CreatePrimary`** 用于生成 TPM 主密钥,是密钥派生和管理的起点。 - **`Esys_Sign`** 用于对数据进行签名,需确保密钥已加载且授权正确。 - 函数返回码 `TSS2_RC` 需仔细处理,避免资源泄漏或安全漏洞。 如需进一步调试,建议结合 TSS2 日志工具(如 `TSS2_LOG` 环境变量)分析具体错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值