Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPWPUMODIFYIFSHANDLE

LPWPUMODIFYIFSHANDLE

コールバック

シグネチャ

SOCKET LPWPUMODIFYIFSHANDLE(
    DWORD dwCatalogEntryId,
    SOCKET ProposedHandle,
    INT* lpErrno
);

パラメーター

フィールド型説明
dwCatalogEntryIdDWORD呼び出し元のサービスプロバイダーを識別する記述子です。
ProposedHandleSOCKETプロバイダーが割り当てた IFS ハンドルです。
lpErrnoINT*エラーコードへのポインターです。

公式ドキュメント

WPUModifyIFSHandle 関数は、Ws2_32.dll から(場合によっては)変更された IFS ハンドルを受け取ります。

戻り値

エラーが発生しなかった場合、 WPUModifyIFSHandle は変更されたソケットハンドルを返します。それ以外の場合は INVALID_SOCKET を返し、具体的なエラーコードは lpErrno で取得できます。

エラーコード 意味
WSAEINVAL
提案されたハンドルが無効です。

解説(Remarks)

WPUModifyIFSHandle ハンドルにより、WS2_32.dll は、渡された IFS ハンドルを場合によっては変更したものを返すことで、内部処理を効率化できます。返されるハンドルは、オペレーティングシステムから見て、提案されたハンドルと区別が付かないことが保証されます。IFS プロバイダーは、新しく作成したソケット記述子をサービスプロバイダーに返す前に、必ずこの関数を呼び出す必要があります。サービスプロバイダーは、以降のソケット操作では変更後のハンドルのみを使用します。このルーチンは、ソケット記述子が実際の IFS ハンドルであるIFS プロバイダーだけが使用します。

**階層化サービスプロバイダーに関する考慮事項**

このプロシージャは、ベースとなる IFS プロバイダーの上に階層化されたプロバイダーが、 WPUCreateSocketHandle の呼び出しでハンドルを作成する代わりに、ベースプロバイダーのソケットハンドルを自身のものとして公開したい場合にも使用できます。チェーン内の次の層から受け取った IFS ソケットハンドルを「パススルー」したい階層化プロバイダーは、自身のカタログエントリ ID を dwCatalogEntryId として渡して WPUModifyIFSHandle を呼び出せます。これにより、そのソケットハンドルに関わる SPI 呼び出しの対象が、次の層ではなくこの層であることが Windows Sockets DLL に通知されます。

この方法を採用する場合、階層化プロバイダーが守るべきいくつかの制限があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)