Top-Level ポインターと埋め込みポインター
Microsoft RPC でポインターとその関連するデータ要素がどのように割り当てられるかを理解するには、最上位のポインター と埋め込みポインター を区別する必要があります。 また、最上位のポインターではないすべてのポインターのセットを参照する場合にも役立ちます。
最上位レベルのポインター は、関数プロトタイプのパラメーターの名前として指定されるポインターです。 最上位レベルのポインターとその参照先は、常にサーバーに割り当てられます。
埋め込みポインター は、配列、構造体、共用体などのデータ構造に埋め込まれたポインターです。 埋め込みポインターがバッファーに出力のみを書き込み、入力時に null である場合、サーバー アプリケーションは値を null 以外に変更できます。 この場合、クライアント スタブはこのデータに新しいメモリを割り当てます。
呼び出しの前に埋め込みポインターがクライアントで null でない場合、スタブは返されるときにクライアントにメモリを割り当てません。 代わりに、スタブは、埋め込みポインターに関連付けられているメモリを、そのポインターに関連付けられているクライアント上の既存のメモリに書き込もうとし、既に存在するデータを上書きします。
手記
バッファーから読み取られたりバッファーに書き込まれたりするデータで、バッファー サイズを指定しない場合、出力の長さは入力長以下である必要があります。 オーバーフローが検出されると、RPC 例外が発生します。 文字列データの場合、出力長は入力文字列の長さをチェックすることによって決定されます。 そのため、出力文字列は入力文字列の長さを超えることはできません。 ベスト プラクティスのガイダンスは、バッファーのサイズを示すサイズ指定のパラメーターを常に含めることで、これを回避することです。
埋め込み書き込み専用ポインターについては、「ポインターと方向属性の組み合わせ で説明します。
非トップレベル ポインター という用語は、埋め込みポインターと入れ子になったポインターの複数のレベルの両方を含む、関数プロトタイプでパラメーター名として指定されていないすべてのポインターを指します。