次の方法で共有


DecryptMessage (NTLM) 関数

DecryptMessage (NTLM) 関数は、メッセージの暗号化を解除します。 一部のパッケージでは、メッセージの暗号化と暗号化解除ではなく、整合性ハッシュの実行とチェックが行われます。

注意

EncryptMessage (NTLM)DecryptMessage (NTLM) は、1 つの セキュリティ サポート プロバイダー インターフェイス (SSPI) コンテキスト内の 2 つの異なるスレッドから同時に呼び出すことができます(一方のスレッドが暗号化されていて、もう一方が暗号化解除している場合)。 複数のスレッドが暗号化されている場合、または複数のスレッドが暗号化を解除している場合、各スレッドは一意のコンテキストを取得する必要があります。

構文

SECURITY_STATUS SEC_Entry DecryptMessage(
  _In_    PCtxtHandle    phContext,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo,
  _Out_   PULONG         pfQOP
);

パラメーター

phContext [in]

メッセージの暗号化を解除するために使用される セキュリティ コンテキスト へのハンドル。

pMessage [in, out]

SecBufferDesc 構造体へのポインター。 入力時に、構造体は 1 つ以上の SecBuffer 構造体を参照します。 これらの少なくとも 1 つは、SECBUFFER_DATA型である必要があります。 そのバッファーには、暗号化されたメッセージが含まれています。 暗号化されたメッセージは暗号化解除され、バッファーの元の内容が上書きされます。

MessageSeqNo [in]

トランスポート アプリケーションで予期されるシーケンス番号 (存在する場合)。 トランスポート・アプリケーションがシーケンス番号を保守しない場合は、このパラメーターをゼロに設定する必要があります。

pfQOP [out]

保護の品質を示すパッケージ固有のフラグを受け取る 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

関連項目