RIORegisterBuffer 関数は、登録されたバッファー記述子であるRIO_BUFFERIDを、Winsock 登録済み I/O 拡張機能で使用するために指定されたバッファーと共に登録します。
構文
LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;
RIO_BUFFERID LpfnRioregisterbuffer(
PCHAR DataBuffer,
DWORD DataLength
)
{...}
パラメーター
DataBuffer
登録するメモリ バッファーの先頭へのポインター。
DataLength
登録するバッファー内の長さ (バイト単位)。
戻り値
エラーが発生しない場合、 RIORegisterBuffer 関数は登録済みのバッファー記述子を返します。 それ以外の場合は、 RIO_INVALID_BUFFERID の値が返され、 WSAGetLastError 関数を呼び出すことで特定のエラー コードを取得できます。
| リターン コード | 説明 |
|---|---|
| 呼び出しでポインター引数を使用しようとしたときに、システムにより、無効なポインター アドレスが検出されました。 このエラーは、無効なバッファー ポインターが DataBuffer パラメーターで渡された場合に返されます。 |
|
| 無効なパラメーターが関数に渡されました。 このエラーは、 DataLength パラメーターが 0 の場合に返されます。 |
注釈
RIORegisterBuffer 関数は、指定されたバッファーの登録済みバッファー識別子を作成します。 バッファーが登録されると、バッファーを含む仮想メモリ ページが物理メモリにロックされます。
複数の小さな連続していないバッファーが登録されている場合、バッファーの物理メモリ 占有領域は、登録ごとにメモリ ページ全体と同じ大きさになる可能性があります。 このような場合は、複数の要求バッファーを一緒に割り当てることが有益な場合があります。
また、バッファー登録自体に使用される物理メモリには、わずかなオーバーヘッドがあります。 そのため、1 つのより大きな割り当てに集計された多数の割り当てがある場合は、バッファーの登録も集計することで、物理メモリのフットプリントがさらに削減される可能性があります。 この場合、アプリケーションでは、バッファーが最終的に登録解除されますが、送信要求または受信要求が未処理である間は登録解除されないように、アプリケーションで細心の注意を払う必要がある場合があります。
登録されたバッファーの一部は、データの送受信のために pData パラメーターの RIOSend、RIOSendEx、RIOReceive、および RIOReceiveEx 関数に渡されます。
バッファー識別子が不要になったら、 RIODeregisterBuffer 関数を呼び出してバッファー識別子を登録解除します。
注意
RIORegisterBuffer 関数への関数ポインターは、実行時に、指定されたSIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTERオペコードを使用して WSAIoctl 関数を呼び出すことによって取得する必要があります。 WSAIoctl 関数に渡される入力バッファーには、Winsock 登録済み I/O 拡張関数を識別する値を持つグローバル一意識別子 (GUID) WSAID_MULTIPLE_RIOが含まれている必要があります。 成功すると、 WSAIoctl 関数によって返される出力には、Winsock に登録されている I/O 拡張関数へのポインターを含む RIO_EXTENSION_FUNCTION_TABLE 構造体へのポインターが含まれます。 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL は、Ws2def.h ヘッダー ファイルで定義されます。 WSAID_MULTIPLE_RIO GUID は、Mswsock.h ヘッダー ファイルで定義されています。
Windows Phone 8: この関数は、Windows Phone 8 以降の Windows Phone ストア アプリでサポートされています。
Windows 8.1とWindows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
要件
| 要件 | 値 |
|---|---|
| Header | mswsock.h |