DecryptMessage (NTLM) 関数は、メッセージを復号化します。 一部のパッケージでは、メッセージの暗号化と暗号化解除を行うのではなく、整合性 ハッシュを実行して確認します。
注
EncryptMessage (NTLM) と DecryptMessage (NTLM) は、1 つのスレッドが暗号化されていて、もう 1 つのスレッドが暗号化を解除している場合、1 つの セキュリティ サポート プロバイダー インターフェイス (SSPI) コンテキスト内の 2 つの異なるスレッドから同時に呼び出すことができます。 複数のスレッドが暗号化されている場合、または複数のスレッドが復号化している場合、各スレッドは一意のコンテキストを取得する必要があります。
構文
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
パラメーター
phContext [から]
メッセージの暗号化を解除するために使用する セキュリティ コンテキスト へのハンドル。
pMessage [入力、出力]
SecBufferDesc 構造体へのポインター。 入力時に、構造体は 1 つ以上 の SecBuffer 構造体を参照します。 これらの少なくとも 1 つは、SECBUFFER_DATA型である必要があります。 そのバッファーには、暗号化されたメッセージが含まれています。 暗号化されたメッセージは暗号化が解除され、バッファーの元の内容が上書きされます。
MessageSeqNo [から]
トランスポート アプリケーションで予期されるシーケンス番号 (存在する場合)。 トランスポート・アプリケーションがシーケンス番号を保守しない場合は、このパラメーターをゼロに設定する必要があります。
pfQOP [出力]
保護の品質を示すパッケージ固有のフラグを受け取る ULONG 型の変数へのポインター。
このパラメーターには、次のフラグを指定できます。
| 価値 | 意味 |
|---|---|
|
SECQOP_WRAP_NO_ENCRYPT |
メッセージは暗号化されませんでしたが、ヘッダーまたはトレーラーが生成されました。 手記: KERB_WRAP_NO_ENCRYPTには同じ値と同じ意味があります。 |
戻り値
メッセージが正しい順序で受信されたことを関数が確認すると、関数はSEC_E_OKを返します。
関数がメッセージの暗号化解除に失敗した場合は、次のいずれかのエラー コードが返されます。
| リターン コード | 説明 |
|---|---|
| SEC_E_INCOMPLETE_MESSAGE | 入力バッファ内のデータが不完全です。 アプリケーションは、サーバーからさらにデータを読み取り、 DecryptMessage (NTLM) を再度呼び出す必要があります。 |
| SEC_E_OUT_OF_SEQUENCE | メッセージが正しい順序で受信されませんでした。 |
注釈
アプリケーションがリモート パーティからデータを読み取り、 DecryptMessage (NTLM) を使用して復号化を試み、 DecryptMessage (NTLM) が成功したが出力バッファーが空であることを検出することがあります。 これは通常の動作であり、アプリケーションはそれに対処できる必要があります。
Windows XP: この関数は UnsealMessage とも呼ばれます。 アプリケーションでは DecryptMessage (NTLM) のみを使用する必要があります。
必要条件
| 要件 | 価値 |
|---|---|
| サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
| サポートされている最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
| ヘッダ | Sspi.h (Security.h を含む) |
| 図書館 | Secur32.lib |
| [DLL] | Secur32.dll |