CryptProtectData 関数は、DATA_BLOB構造体内のデータに対して暗号化を実行します。 通常、データを暗号化したユーザーと同じログオン資格情報を持つユーザーのみがデータの暗号化を解除できます。 さらに、暗号化と復号化は通常、同じコンピューターで行う必要があります。 例外の詳細については、「 解説」を参照してください。
構文
DPAPI_IMP BOOL CryptProtectData(
[in] DATA_BLOB *pDataIn,
[in, optional] LPCWSTR szDataDescr,
[in, optional] DATA_BLOB *pOptionalEntropy,
[in] PVOID pvReserved,
[in, optional] CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
[in] DWORD dwFlags,
[out] DATA_BLOB *pDataOut
);
パラメーター
[in] pDataIn
暗号化するプレーンテキストを含むDATA_BLOB構造体へのポインター。
[in, optional] szDataDescr
暗号化するデータの読み取り可能な説明を含む文字列。 この説明文字列は、暗号化されたデータに含まれています。 このパラメーターは省略可能であり、 NULL に設定できます。
[in, optional] pOptionalEntropy
データの暗号化に使用されるパスワードまたはその他の追加エントロピを含む DATA_BLOB 構造体へのポインター。 暗号化フェーズで使用される DATA_BLOB 構造は、暗号化解除フェーズでも使用する必要があります。 追加のエントロピがない場合は、このパラメーターを NULL に設定できます。 パスワードの保護については、「パスワードの 処理」を参照してください。
[in] pvReserved
将来使用するために予約されており、 NULL に設定する必要があります。
[in, optional] pPromptStruct
プロンプトを表示する場所とタイミング、およびプロンプトの内容に関する情報を提供するCRYPTPROTECT_PROMPTSTRUCT構造体へのポインター。 このパラメーターは、暗号化フェーズと復号化フェーズの両方で NULL に設定できます。
[in] dwFlags
このパラメーターには、次のいずれかのフラグを指定できます。 フラグが必要ない場合は、このパラメーターを 0 に設定できます。
| 価値 | Meaning |
|---|---|
| CRYPTPROTECT_LOCAL_MACHINE | このフラグを設定すると、暗号化されたデータが個々のユーザーではなく、現在のコンピューターに関連付けられます。 CryptProtectData が呼び出されるコンピューター上のすべてのユーザーは、CryptUnprotectData を使用してデータの暗号化を解除できます。 |
| CRYPTPROTECT_UI_FORBIDDEN | このフラグは、ユーザー インターフェイス (UI) を表示するオプションではないリモートの状況に使用されます。 このフラグが設定され、保護操作または保護解除操作に UI が指定されている場合、操作は失敗し、GetLastError はERROR_PASSWORD_RESTRICTIONコードを返します。 |
| CRYPTPROTECT_AUDIT | このフラグは、保護操作と保護解除操作に関する監査を生成します。 監査ログ エントリは、szDataDescr が NULL ではなく空でない場合にのみ記録されます。 |
[out] pDataOut
暗号化されたデータを受信する DATA_BLOB 構造体へのポインター。 DATA_BLOB構造体の使用が完了したら、LocalFree 関数を呼び出して pbData メンバーを解放します。
戻り値
関数が成功した場合、関数は TRUE を返します。
関数が失敗すると、 FALSE が返されます。 拡張エラー情報については、 GetLastError を呼び出します。
注釈
通常、データを暗号化したユーザーと一致するログオン 資格情報 を持つユーザーのみがデータの暗号化を解除できます。 さらに、暗号化解除は通常、データが暗号化されたコンピューターでのみ実行できます。 ただし、ローミング プロファイルを持つユーザーは、ネットワーク上の別のコンピューターからデータを復号化できます。
データの暗号化時に CRYPTPROTECT_LOCAL_MACHINE フラグが設定されている場合、暗号化が行われたコンピューター上のユーザーは、データの暗号化を解除できます。
この関数は、暗号化を実行するセッション キーを作成します。 セッション キーは、データの暗号化を解除するときに再度派生します。
また、この関数は、暗号化されたデータに メッセージ認証コード (MAC) (キー付き整合性チェック) を追加して、データの改ざんを防ぐこともできます。
同じプロセスまたはプロセス間で一時的に使用するためにメモリを暗号化するには、 CryptProtectMemory 関数を呼び出します。
例示
次の例は、 DATA_BLOB 構造内のデータの暗号化を示しています。 CryptProtectData 関数は、ユーザーのログオン資格情報を使用して関数が作成するセッション キーを使用して暗号化を行います。 この関数を使用する別の例については、「 C Program の例: CryptProtectData の使用」を参照してください。
// Encrypt data from DATA_BLOB DataIn to DATA_BLOB DataOut.
//--------------------------------------------------------------------
// Declare and initialize variables.
DATA_BLOB DataIn;
DATA_BLOB DataOut;
BYTE *pbDataInput =(BYTE *)"Hello world of data protection.";
DWORD cbDataInput = strlen((char *)pbDataInput)+1;
//--------------------------------------------------------------------
// Initialize the DataIn structure.
DataIn.pbData = pbDataInput;
DataIn.cbData = cbDataInput;
//--------------------------------------------------------------------
// Begin protect phase. Note that the encryption key is created
// by the function and is not passed.
if(CryptProtectData(
&DataIn,
L"This is the description string.", // A description string
// to be included with the
// encrypted data.
NULL, // Optional entropy not used.
NULL, // Reserved.
NULL, // Pass NULL for the
// prompt structure.
0,
&DataOut))
{
printf("The encryption phase worked.\n");
LocalFree(DataOut.pbData);
}
else
{
printf("Encryption error using CryptProtectData.\n");
exit(1);
}
Requirements
| Requirement | 価値 |
|---|---|
| サポートされる最小クライアント | Windows XP [デスクトップ アプリ |UWP アプリ] |
| サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリ |UWP アプリ] |
| ターゲット プラットフォーム の | ウィンドウズ |
| Header | dpapi.h |
| Library | Crypt32.lib |
| DLL | Crypt32.dll |