PFN_WSK_SOCKET コールバック関数 (wsk.h)
WskSocket 関数は、新しいソケットを作成し、関連付けられているソケット オブジェクトへのポインターを返します。
構文
PFN_WSK_SOCKET PfnWskSocket;
NTSTATUS PfnWskSocket(
[in] PWSK_CLIENT Client,
[in] ADDRESS_FAMILY AddressFamily,
[in] USHORT SocketType,
[in] ULONG Protocol,
[in] ULONG Flags,
[in, optional] PVOID SocketContext,
[in, optional] const VOID *Dispatch,
[in, optional] PEPROCESS OwningProcess,
[in, optional] PETHREAD OwningThread,
[in, optional] PSECURITY_DESCRIPTOR SecurityDescriptor,
[in, out] PIRP Irp
)
{...}
パラメーター
[in] Client
の WskProviderNpi パラメーターを介して返されたWSK_CLIENT構造体へのポインター WskCaptureProviderNPI 関数。
[in] AddressFamily
作成されるソケットのアドレス ファミリ。 サポートされているアドレス ファミリの詳細については、「 WSK アドレス ファミリ」を参照してください。
[in] SocketType
作成されるソケットの種類。 次のソケットの種類がサポートされています。
Sock_stream
信頼性の高い接続指向のバイト ストリーム通信をサポートします。
SOCK_DGRAM
信頼性の低いコネクションレス データグラム通信をサポートします。
SOCK_RAW
トランスポート プロトコルへの生アクセスをサポートします。
サポートされている各アドレス ファミリでサポートされるソケットの種類の詳細については、次を参照してください。
WSK アドレス ファミリ。
[in] Protocol
作成されるソケットのトランスポート プロトコル。 サポートされている各アドレス ファミリでサポートされるプロトコルの詳細については、「 WSK アドレス ファミリ」を参照してください。
[in] Flags
作成されるソケットの WSK ソケット カテゴリ を指定するフラグ。 このパラメーターには、次のいずれかのフラグを指定できます。
WSK_FLAG_BASIC_SOCKET
トランスポート スタック ソケット オプションの取得と設定、またはソケット I/O 制御操作の実行にのみ使用できる基本的なソケットが作成されます。
WSK_FLAG_LISTEN_SOCKET
リモート トランスポート アドレスからの受信接続をリッスンするために使用できるリッスン ソケットが作成されます。
WSK_FLAG_DATAGRAM_SOCKET
データグラムの送受信に使用できるデータグラム ソケットが作成されます。
WSK_FLAG_CONNECTION_SOCKET
接続を介したネットワーク データの送受信に使用できる接続指向のソケットが作成されます。
WSK_FLAG_STREAM_SOCKET
リモート トランスポート アドレスからの受信接続をリッスンしたり、接続経由でネットワーク データを送受信したりするために使用できるストリーム ソケットが作成されます。
WSK アプリケーションで上記のフラグが指定されていない場合、 WskSocket は基本的なソケットを作成します。
[in, optional] SocketContext
作成されるソケットの呼び出し元が指定したコンテキストへのポインター。 WSK サブシステムは、このポインターをソケットのイベント コールバック関数に渡します。 コンテキスト情報は WSK サブシステムに対して不透明であり、非ページ メモリに格納する必要があります。 WSK アプリケーションが新しいソケットでイベント コールバック関数を有効にしない場合は、このポインターを NULL に設定する必要があります。 基本的なソケットの場合、このポインターは常に NULL である必要があります。
[in, optional] Dispatch
定数クライアント ディスパッチ構造体へのポインター。 この構造体は、新しいソケットのイベント コールバック関数へのポインターを含むディスパッチ テーブルです。 ソケットの WSK ソケット カテゴリ ( Flags パラメーターで指定) に応じて、このパラメーターは次のいずれかの構造体へのポインターです。
フラグ | ディスパッチ テーブルの構造 |
---|---|
WSK_FLAG_LISTEN_SOCKET | |
WSK_FLAG_DATAGRAM_SOCKET | WSK_CLIENT_DATAGRAM_DISPATCH |
WSK_FLAG_CONNECTION_SOCKET | WSK_CLIENT_CONNECTION_DISPATCH |
WSK_FLAG_STREAM_SOCKET |
WSK アプリケーションが新しいソケットのすべてのイベント コールバック関数を有効にしない場合は、ディスパッチ テーブル内のポインターを、有効にしないイベント コールバック関数の NULL に設定する必要があります。 WSK アプリケーションが新しいソケットでイベント コールバック関数を有効にしない場合は、 ディスパッチ ポインターを NULL に設定する必要があります。 基本的なソケットの場合、このポインターは常に NULL である必要があります。
[in, optional] OwningProcess
WSK サブシステムがソケットをバインドするときに使用するセキュリティ コンテキストを取得するプロセスへのポインター。 WSK サブシステムは、セキュリティ コンテキストを使用して、そのアドレスが既に使用されている場合にローカル トランスポート アドレスを共有できるかどうかを判断します。 現在のプロセスを指定するために、WSK アプリケーションはこのポインターを NULL に設定 します。
[in, optional] OwningThread
WSK サブシステムがソケットをバインドするときに使用するセキュリティ コンテキストを取得する特定のスレッドへのポインター。 WSK サブシステムは、セキュリティ コンテキストを使用して、そのアドレスが既に使用されている場合にローカル トランスポート アドレスを共有できるかどうかを判断します。 WSK アプリケーションで特定のスレッドを指定する必要がない場合は、このポインターを NULL に設定します。
[in, optional] SecurityDescriptor
作成されるソケットに適用するセキュリティ記述子を指定するSECURITY_DESCRIPTOR構造体へのポインター。 セキュリティ記述子は、ソケットがバインドされているローカル トランスポート アドレスの共有を制御します。 WSK アプリケーションで NULL 以外のポインターを指定する場合は、WSK_CACHE_SDコントロール コードを使用して WskControlClient 関数を呼び出すことによって取得されたセキュリティ記述子のキャッシュされたコピーへのポインターを指定 する 必要があります。 ローカル トランスポート アドレスの共有を許可しない既定のセキュリティ記述子を指定するために、WSK アプリケーションは SecurityDescriptor を NULL に設定します。
SECURITY_DESCRIPTOR構造の詳細については、Microsoft Windows SDKドキュメントのSECURITY_DESCRIPTORのリファレンス ページを参照してください。
[in, out] Irp
WSK サブシステムが新しいソケットの作成を非同期的に完了するために使用する、呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数で IRP を使用する方法の詳細については、「 Winsock カーネル関数での IRP の使用」を参照してください。
戻り値
WskSocket は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
新しいソケットが正常に作成されました。 IRP は成功状態で完了します。 |
|
WSK サブシステムでソケットをすぐに作成できませんでした。 WSK サブシステムは、新しいソケットを作成した後に IRP を完了します。 ソケットの作成の状態は、IRP の IoStatus.Status フィールドに返されます。 |
|
エラーが発生しました。 IRP は失敗状態で完了します。 |
注釈
IRP が成功状態で完了した場合、IRP の IoStatus.Information フィールドには、新しいソケットのソケット オブジェクト構造 ( WSK_SOCKET) へのポインターが含まれます。
WSK アプリケーションは、WSK_TRANSPORT_LIST_QUERYコントロール コードを使用して WskControlClient 関数を呼び出すことによって、使用可能なトランスポート プロトコルの一覧を取得できます。 WskControlClient は、AddressFamily、SocketType、および Protocol パラメーターのすべての有効な組み合わせを含む、WSK_TRANSPORT構造体の一覧を返します。
WSK アプリケーションが新しいソケットを正常に作成すると、新しいソケット上のすべてのイベント コールバック関数が既定で無効になります。 新しいソケットのイベント コールバック関数を有効にする方法の詳細については、「イベント コールバック関数 の有効化と無効化」を参照してください。
WSK アプリケーションが SecurityDescriptor パラメーターに NULL 以外のポインターを指定する場合、IRP が完了するまで、キャッシュされたセキュリティ記述子を解放することはできません。
WSK サブシステムは、WSK アプリケーションに代わって、新しいソケットのソケット オブジェクト構造 (WSK_SOCKET) にメモリを割り当てます。 WSK サブシステムは、ソケットが閉じられると、このメモリの割り当てを解除します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wsk.h (Wsk.h を含む) |
IRQL | <= DISPATCH_LEVEL |