kmc-func-107
vb.net吧
全部回复
仅看楼主
level 2
{
WSEC_INT32 nIndex = -1;
WSEC_BOOL bNtf = WSEC_FALSE;
KMC_MEM_MK_STRU* pMk = WSEC_NULL_PTR;
WSEC_ERR_T nErrCode = WSEC_SUCCESS;
WSEC_UINT8 tempStatus = 0;
KMC_MK_INFO_STRU stNtfMkInfo = {0};
return_err_if_nolock;
return_err_if_kmc_not_master;
return_err_if_para_invalid("KMC_SetMkStatus", WSEC_IS3(ucStatus, KMC_KEY_STATUS_ACTIVE, KMC_KEY_STATUS_INACTIVE, KMC_KEY_STATUS_TOBEACTIVE));
KMC_PRI_Lock(KMC_LOCK_KEYSTORE);
do
{
break_oper_if(g_KmcSys.eState != WSEC_RUNNING , WSEC_LOG_E("KMC not running."),nErrCode = WSEC_ERR_KMC_CBB_NOT_INIT);
break_oper_if(!g_pKeystore, WSEC_LOG_E("KeyStore memory do not exist."), nErrCode = WSEC_ERR_KMC_KEYSTOREMEM_NOTEXIST);
nIndex = KMC_PRI_SearchMkByKeyId(g_pKeystore, ulDomainId, ulKeyId);
break_oper_if(nIndex < 0, WSEC_LOG_E2("Cannot find MK(DomainId=%u, KeyId=%u)", ulDomainId, ulKeyId), nErrCode = WSEC_ERR_KMC_MK_MISS);
pMk = (KMC_MEM_MK_STRU*)WSEC_ARR_GetAt(g_pKeystore->arrMk, nIndex);
break_oper_if(!pMk, WSEC_LOG_E("memory access fail."), nErrCode = WSEC_ERR_OPER_ARRAY_FAIL);
tempStatus = pMk->stMkInfo.ucStatus ; /*记录原来的状态*/
if (pMk->stMkInfo.ucStatus != ucStatus) /* 状态不同才需要修改 */
{
pMk->stMkInfo.ucStatus = ucStatus;
WSEC_ARR_QuickSort(g_pKeystore->arrMk); /* 确保MK数组排序, 以便'对半查找' */
nErrCode = KMC_PRI_WriteKsfSafety(g_pKeystore, WSEC_NULL_PTR);
if(nErrCode != WSEC_SUCCESS) /*回滚的操作,文件不用重写了,因为写失败会回滚*/
{
pMk->stMkInfo.ucStatus = tempStatus;
WSEC_ARR_QuickSort(g_pKeystore->arrMk); /* 重新排序为原来的状态 */
break;
}
break_operex_if(WSEC_MEMCPY(&stNtfMkInfo, sizeof(KMC_MK_INFO_STRU), &pMk->stMkInfo, sizeof(KMC_MK_INFO_STRU)) != EOK, WSEC_LOG_E4MEMCPY);
bNtf = WSEC_TRUE;
}
}do_end;
KMC_PRI_Unlock(KMC_LOCK_KEYSTORE);
2016年08月02日 09点08分 1
1