Функция CryptUpdateProtectedState (dpapi.h)

Функция CryptUpdateProtectedState переносит ключи master текущего пользователя после изменения идентификатора безопасности (SID) пользователя. Эта функция может использоваться для сохранения зашифрованных данных после перемещения пользователя из одного домена в другой.

Синтаксис

DPAPI_IMP BOOL CryptUpdateProtectedState(
  [in]  PSID    pOldSid,
  [in]  LPCWSTR pwszOldPassword,
  [in]  DWORD   dwFlags,
  [out] DWORD   *pdwSuccessCount,
  [out] DWORD   *pdwFailureCount
);

Параметры

[in] pOldSid

Адрес структуры sid , содержащей предыдущий идентификатор безопасности пользователя. Этот идентификатор безопасности используется для поиска старых ключей master. Если этот параметр имеет значение NULL, переносятся ключи master для текущего идентификатора безопасности пользователя.

Этот параметр или параметр pwszOldPassword может иметь значение NULL, но не оба.

[in] pwszOldPassword

Указатель на строку Юникода, завершающуюся значением NULL, которая содержит пароль пользователя до изменения идентификатора безопасности. Этот пароль используется для расшифровки старых ключей master. Если этот параметр имеет значение NULL, будет использоваться пароль текущего пользователя.

Этот параметр или параметр pOldSid может иметь значение NULL, но не оба.

[in] dwFlags

Не используется. Должен равняться нулю.

[out] pdwSuccessCount

Адрес переменной DWORD, получающей количество ключей master, которые были успешно перенесены.

[out] pdwFailureCount

Адрес переменной DWORD, получающей количество master ключей, которые не удалось расшифровать.

Если не удается расшифровать один или несколько ключей master, это не обязательно является ошибкой. Некоторые пользователи могут обладать master ключами, которые являются застойными и не могут быть расшифрованы в течение длительного времени. Одним из способов этого является административный сброс пароля локального пользователя.

Возвращаемое значение

Если функция выполняется успешно, возвращается значение TRUE.

Если функция завершается сбоем, возвращается значение FALSE. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Ниже приведены некоторые возможные коды ошибок.

Код возврата Описание
ERROR_INVALID_PARAMETER
Один из параметров содержит недопустимое значение.
ERROR_OUTOFMEMORY
Произошел сбой выделения памяти.
ERROR_ENCRYPTION_FAILED
Не удалось зашифровать старый пароль.

Комментарии

Эта функция расшифровывает все ключи master пользователя в старом каталоге ключей master, используя предыдущий пароль, и сохраняет их в текущем каталоге ключа master пользователя, зашифрованном с помощью текущего пароля пользователя.

Эта функция должна вызываться из учетной записи пользователя, в которую переносятся ключи.

Если эта функция может успешно перенести старый ключ master, она автоматически удалит старый ключ master. Главные ключи, которые невозможно расшифровать, не удаляются.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header dpapi.h
Библиотека Crypt32.lib
DLL Crypt32.dll