CryptUpdateProtectedState 函数 (dpapi.h)
在用户的安全标识符 (SID) 更改后,CryptUpdateProtectedState 函数会迁移当前用户的主密钥。 此函数可用于在用户从一个域移动到另一个域后保留加密数据。
语法
DPAPI_IMP BOOL CryptUpdateProtectedState(
[in] PSID pOldSid,
[in] LPCWSTR pwszOldPassword,
[in] DWORD dwFlags,
[out] DWORD *pdwSuccessCount,
[out] DWORD *pdwFailureCount
);
参数
[in] pOldSid
包含用户以前的 SID 的 SID 结构的地址。 此 SID 用于查找旧的主密钥。 如果此参数为 NULL,则迁移当前用户 SID 的主密钥。
此参数或 pwszOldPassword 参数可以为 NULL,但不能同时为 NULL。
[in] pwszOldPassword
指向在 SID 更改之前包含用户密码的以 null 结尾的 Unicode 字符串的指针。 此密码用于解密旧主密钥。 如果此参数为 NULL,则将使用当前用户的密码。
此参数或 pOldSid 参数可以为 NULL,但不能同时为 NULL。
[in] dwFlags
未使用。 必须为零。
[out] pdwSuccessCount
接收成功迁移的主密钥数的 DWORD 变量的地址。
[out] pdwFailureCount
接收无法解密的主密钥数的 DWORD 变量的地址。
如果一个或多个主密钥无法解密,则不一定是错误。 某些用户可能拥有停滞的主密钥,并且长时间无法解密。 发生这种情况的一种方式是,本地用户的密码已管理重置。
返回值
如果函数成功,则返回值为 TRUE。
如果函数失败,则返回值为 FALSE。 有关扩展的错误信息,请调用 GetLastError。 一些可能的错误代码包括以下内容。
返回代码 | 说明 |
---|---|
|
其中一个参数包含无效的值。 |
|
内存分配失败。 |
|
无法加密旧密码。 |
注解
此函数使用以前的密码解密旧主密钥目录中的所有用户主密钥,并将其存储在用户的当前主密钥目录中,并使用用户的当前密码进行加密。
必须从密钥迁移到的用户帐户调用此函数。
如果此函数能够成功迁移旧主密钥,则会自动删除旧主密钥。 无法解密的主密钥不会被删除。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | dpapi.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |