プロシージャ ヘッダー記述子
ヘッダーは、NDR エンジンの有効期間中に数回拡張されています。 現在のコンパイラでは、コンパイラのモードに応じて異なるヘッダーが生成されます。 ただし、より新しいヘッダーは、古いヘッダーのスーパーセットです。
古い –Oi ヘッダー
ヘッダーの形式は次のとおりです。
handle_type<1>
Oi_flags<1>
[rpc_flags<4>]
proc_num<2>
stack_size<2>
[explicit_handle_description<>]
ここで、handle_type<1> には、次の表に示す値のいずれかを指定できます。
Hex | Handle |
---|---|
31 | FC_BIND_GENERIC |
32 | FC_BIND_PRIMITIVE |
33 | FC_AUTO_HANDLE |
34 | FC_CALLBACK_HANDLE |
0 | (明示的なハンドル) |
handle_type<1> フィールドが 0 以外の場合、プロシージャは指定された種類の暗黙的なハンドルを使用します。 詳細については、 ハンドル に関するトピックを参照してください。 handle_type<1> フィールドが 0 の場合、バインディングに使用されるハンドルはプロシージャのパラメーターの 1 つです。
明示的なハンドルには、プリミティブ、ジェネリック、およびコンテキストを指定できます。最後の 1 つは次の FC トークンを持っています。
Hex | Handle |
---|---|
30 | FC_BIND_CONTEXT |
慣例により、DCOM インターフェイスのハンドルの種類はFC_AUTO_HANDLE。
Oi_flags<1> フィールドは、次のフラグの 8 ビット マスクです。
Hex | フラグ | 説明 |
---|---|---|
01 | Oi_FULL_PTR_USED | 完全なポインター パッケージを使用します。 |
02 | Oi_RPCSS_ALLOC_USED | RpcSs メモリ パッケージを使用します。 |
04 | Oi_OBJECT_PROC | オブジェクト インターフェイス内のプロシージャ。 |
08 | Oi_HAS_RPCFLAGS | プロシージャには 0 以外の Rpc フラグがあります。 |
10 | 大井_* | オーバーロードされます。 |
20 | 大井_* | オーバーロードされます。 |
40 | Oi_USE_NEW_INIT_ROUTINES | Windows NT3.5 Beta2+ init ルーチンを使用します。 |
80 | 未使用。 |
次のフラグがオーバーロードされています。
Hex | フラグ | 説明 |
---|---|---|
10 | ENCODE_IS_USED | 酸洗でのみ使用されます。 |
20 | DECODE_IS_USED | 酸洗でのみ使用されます。 |
10 | Oi_IGNORE_OBJECT_EXCEPTION_HANDLING | 使用されなくなった (古い OLE)。 |
20 | Oi_HAS_COMM_OR_FAULT | 生 RPC のみでは、[comm _, fault_status]。 |
20 | Oi_OBJ_USE_V2_INTERPRETER | DCOM でのみ、 –Oif インタープリターを使用します。 |
rpc_flags<4> フィールドでは、RPC_MESSAGE構造体の RpcFlags フィールドを設定する方法について説明します。 このフィールドは、Oi_flags<1> フィールドがOi_HAD_RPCFLAGS設定されている場合にのみ存在します。 このフィールドが存在しない場合、リモート プロシージャの RPC フラグは 0 になります。
注意
パフォーマンスのために、非同期インタープリターには常に rpc_flags<4> フィールドが存在します。
proc_num<2> フィールドには、プロシージャのプロシージャ番号が表示されます。
stack_size<2> は、このポインターや戻り値を含め、スタック上のすべてのパラメーターの合計サイズを提供します。
explicit_handle_description<> フィールドについては、このドキュメントで後述します。 プロシージャが暗黙的なハンドルを使用している場合、このフィールドは存在しません。