EnclaveUnsealData 函式 (winenclaveapi.h)

將加密的二進位大型物件解密 (blob) 。

語法

HRESULT EnclaveUnsealData(
  [in]            const VOID       *ProtectedBlob,
  [in]            UINT32           ProtectedBlobSize,
  [out]           PVOID            DecryptedData,
  [in]            UINT32           BufferSize,
  [out]           UINT32           *DecryptedDataSize,
  [out, optional] ENCLAVE_IDENTITY *SealingIdentity,
  [out, optional] UINT32           *UnsealingFlags
);

參數

[in] ProtectedBlob

要解除密封之密封數據的指標。 此數據可以儲存在記憶體保護區的位址範圍或主機進程的位址空間內

[in] ProtectedBlobSize

要解除密封之密封數據的大小,以位元組為單位。

[out] DecryptedData

緩衝區的指標,其中應該放置未加密的數據。 此數據可以儲存在記憶體保護區的位址範圍內,或儲存在主機進程的位址空間內。 如果此參數為 NULL,則只會計算解密數據的大小。

[in] BufferSize

DecryptedData 參數指向的緩衝區大小,以位元組為單位。 如果 DecryptedDataNULLBufferSize 必須是零。 如果 DecryptedData 不是 NULL,而且解密數據的大小大於此值,則會傳回錯誤。

[out] DecryptedDataSize

接收解密數據實際大小的變數指標,以位元組為單位。

[out, optional] SealingIdentity

緩衝區的選擇性指標,應填入密封數據之內存保護區的身分識別。 如果這個指標是 NULL,則不會傳回密封記憶體保護區的身分識別。

[out, optional] UnsealingFlags

變數的選擇性指標,可接收下列描述加密二進位大型物件的零個或多個旗標。

意義
ENCLAVE_UNSEAL_FLAG_STALE_KEY
1
數據已使用過時金鑰加密。 當安全性需要時會輪替密封密鑰,而且系統只能維護固定數目的最近已知密鑰。 記憶體保護區,決定使用過時金鑰加密的數據應該使用目前金鑰重新加密數據,以將用來加密資料的密鑰不再保留在金鑰清單中的機會降到最低。

傳回值

如果此函式成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。

備註

呼叫 EnclaveUnsealData 的記憶體保護區必須符合與記憶體保護區所指定之內存保護區所指定 之ENCLAVE_SEALING_IDENTITY_POLICY 值,方法是呼叫 EnclaveSealData 來密封數據的準則。

EnclaveUnsealData 必須從記憶體保護區內呼叫,而且只有在記憶體保護區類型 為 ENCLAVE_TYPE_VBS 記憶體保護區的記憶體保護區內才支援。

規格需求

需求
最低支援的用戶端 Windows 10 1709 版 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2016 [僅限傳統型應用程式]
目標平台 Windows
標頭 winenclaveapi.h
程式庫 Vertdll.lib
Dll Vertdll.dll

另請參閱

記憶體保護區函式

ENCLAVE_SEALING_IDENTITY_POLICY

EnclaveSealData

VBS 記憶體保護區中可用的 Vertdll API