認証後に行う通信の安全も確保している点です。データを暗号化することができます。MessageSeqNo);phContextは、コンテキストハンドルを指定します。fQOPは、保護の品質を表す定数を指定します。0を指定しても問題ありません。pMessageは、SecBufferDesc構造体のアドレスを指定します。この構造体には、暗号化したいデータを格納したSecBuffer構造体を関連付けておきます。MessageSeqNoは、0を指定します。この関数に指定するのは暗号化したいデータだけではありません。これら合わせた3つのデータがメッセージと呼ばれています。署名バッファとパディングバッファのサイズは、QueryContextAttributesで取得できます。pBuffer);phContextは、コンテキストハンドルを指定します。ulAttributeは、取得したい情報を表す定数を指定します。pBufferは、情報を受け取るバッファを指定します。今回のクライアントプログラムは、データを暗号化してサーバーに送信します。事前に対応するサーバープログラムを起動しておいてください。TEXT("クレデンシャルハンドルの取得に失敗しました。TEXT("認証に失敗しました。TEXT("認証に成功しました。TEXT("ホスト情報からアドレスの取得に失敗しました。TEXT("サーバーがリッスンしていません。TEXT("サーバーが存在しません。TEXT("サーバーへの接続が失敗しました。soc;}今回は暗号化を行うため、ClientHandshakeのuAttributesにISC_REQ_CONFIDENTIALITYを指定しています。これと各種バッファをEncryptMessageに指定します。暗号化された各種バッファをSendDataでサーバーに送信します。各種処理を順に見ていきます。QueryContextAttributesにSECPKG_ATTR_SIZESを指定することで取得できます。cbBlockSizeにパディングバッファのサイズが格納されます。バッファを確保したら、次にこれらと暗号化したいデータをSecBuffer構造体に指定します。データの総数は3つですから、SecBuffer構造体の配列であるsbの要素数も3となります。一通りの初期化が終われば、これをSecBufferDesc構造体であるsbdに指定します。EncryptMessageを呼び出すことになります。sb[2].cbBuffer);EncryptMessageの第2引数と第4引数は0で問題ありません。これらをSendDataで順に送信します。この順番は、署名バッファ、暗号化されたデータ、パディングバッファにするようにしてください。パディングバッファはデータのサイズが一定値になるようにダミーのバイトを格納しています。