次の方法で共有


仮想チャネル クライアント DLL

仮想チャネル アプリケーションのクライアントは、クライアント コンピューター上のリモート デスクトップ サービスの初期化中に読み込まれる DLL です。 DLL はクライアント コンピューターに登録する必要があります。 詳細については、「仮想チャネル クライアント登録 を参照してください。

クライアント DLL は、初期化中にリモート デスクトップ サービスが呼び出す VirtualChannelEntry 関数をエクスポートする必要があります。 VirtualChannelEntry エントリ ポイントは、CHANNEL_ENTRY_POINTS 構造体へのポインターを受け取ります。 この構造体には、クライアント DLL が仮想チャネルにアクセスするために呼び出す関数へのポインターが含まれています。

機能 形容
VirtualChannelInit
クライアントが使用する仮想チャネルの名前を登録し、クライアント接続に影響を与えるイベントについてリモート デスクトップ サービスがクライアントに通知する virtualChannelInitEventコールバック関数をします。
VirtualChannelOpen
指定した仮想チャネルのクライアント側を開き、仮想チャネルに影響を与えるイベントについてリモート デスクトップ サービスがクライアントに通知する、VirtualChannelOpenEvent コールバック関数を提供します。
VirtualChannelWrite
仮想チャネルにデータを書き込みます。 リモート デスクトップ サービスは、このデータを仮想チャネルのサーバー側に送信します。 サーバーエンドは、WTSVirtualChannelRead 関数を呼び出してデータを読み取ります。
VirtualChannelClose
仮想チャネルを閉じます。

DLL の VirtualChannelEntry 関数は、仮想チャネルへのアクセスを初期化するために、VirtualChannelInit 関数を呼び出す必要があります。 VirtualChannelInit 呼び出すときは、VirtualChannelInitEvent コールバック関数へのポインターを渡す必要があります。 リモート デスクトップ サービスは、初期化が完了したときと、リモート デスクトップ セッション ホスト (RD セッション ホスト) サーバーとの接続が確立されたときに、このコールバック関数を再度呼び出します。

接続が確立されたら、VirtualChannelOpen 関数を呼び出して、VirtualChannelInit 呼び出しによって登録された仮想チャネルを開くことができます。 VirtualChannelOpen 呼び出しは、VirtualChannelOpenEvent コールバック関数へのポインターを指定します。

VirtualChannelOpen 呼び出しが返された後、仮想チャネルに書き込む VirtualChannelWrite 関数を呼び出すことができます。 書き込み操作は非同期であるため、リモート デスクトップ サービスが VirtualChannelOpenEvent 関数を呼び出して書き込み操作が完了したことを示すまで、VirtualChannelWrite に渡されたバッファーを解放または再利用することはできません。 VirtualChannelWrite 呼び出すと、書き込み操作を識別するユーザー データを渡すことができます。 リモート デスクトップ サービスは、操作が完了したことを通知するために VirtualChannelOpenEvent 呼び出すと、このユーザー データを返します。 サーバー アドインは、仮想チャネルのサーバー側で、WTSVirtualChannelRead 関数を呼び出してデータを読み取ります。

リモート デスクトップ サービスは、サーバー モジュールによって仮想チャネルにデータが書き込まれるときに、VirtualChannelOpenEvent 関数も呼び出します。 サーバー モジュールは、WTSVirtualChannelWrite 関数を呼び出して、仮想チャネルのサーバー側にデータを書き込みます。

クライアント モジュールとサーバー モジュールは、任意のサイズのデータ ブロックを仮想チャネルに書き込むことができます。 ただし、データを送信する前に、リモート デスクトップ サービスはデータを CHANNEL_CHUNK_LENGTH バイトのチャンクに分割します。 リモート デスクトップ サービスは、データを元のサイズのブロックに再構築するのではなく、データのチャンクごとに VirtualChannelOpenEvent 関数を 1 回呼び出します。 VirtualChannelOpenEvent 呼び出すたびに、チャンクのサイズ、サーバーによって書き込まれた合計サイズ、およびデータがサーバーによって書き込まれたブロックの先頭、中央、または末尾を構成しているかどうかを示します。

VirtualChannelClose 関数を呼び出して、チャネルを閉じます。 ただし、リモート デスクトップ サービスは、クライアントがサーバーから切断されたときにすべてのチャネルを自動的に閉じるので、呼び出す必要はありません。