次の方法で共有


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_CLIENT_LISTEN_DISPATCH

WSK_FLAG_DATAGRAM_SOCKET WSK_CLIENT_DATAGRAM_DISPATCH
WSK_FLAG_CONNECTION_SOCKET WSK_CLIENT_CONNECTION_DISPATCH
WSK_FLAG_STREAM_SOCKET

WSK_CLIENT_STREAM_DISPATCH

 

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 アプリケーションは SecurityDescriptorNULL に設定します。

SECURITY_DESCRIPTOR構造の詳細については、Microsoft Windows SDKドキュメントのSECURITY_DESCRIPTORのリファレンス ページを参照してください。

[in, out] Irp

WSK サブシステムが新しいソケットの作成を非同期的に完了するために使用する、呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数で IRP を使用する方法の詳細については、「 Winsock カーネル関数での IRP の使用」を参照してください。

戻り値

WskSocket は、次のいずれかの NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS
新しいソケットが正常に作成されました。 IRP は成功状態で完了します。
STATUS_PENDING
WSK サブシステムでソケットをすぐに作成できませんでした。 WSK サブシステムは、新しいソケットを作成した後に IRP を完了します。 ソケットの作成の状態は、IRP の IoStatus.Status フィールドに返されます。
その他の状態コード
エラーが発生しました。 IRP は失敗状態で完了します。

注釈

IRP が成功状態で完了した場合、IRP の IoStatus.Information フィールドには、新しいソケットのソケット オブジェクト構造 ( WSK_SOCKET) へのポインターが含まれます。

WSK アプリケーションは、WSK_TRANSPORT_LIST_QUERYコントロール コードを使用して WskControlClient 関数を呼び出すことによって、使用可能なトランスポート プロトコルの一覧を取得できます。 WskControlClient はAddressFamilySocketTypeおよび Protocol パラメーターのすべての有効な組み合わせを含む、WSK_TRANSPORT構造体の一覧を返します。

WSK アプリケーションが新しいソケットを正常に作成すると、新しいソケット上のすべてのイベント コールバック関数が既定で無効になります。 新しいソケットのイベント コールバック関数を有効にする方法の詳細については、「イベント コールバック関数 の有効化と無効化」を参照してください。

WSK アプリケーションが SecurityDescriptor パラメーターに NULL 以外のポインターを指定する場合、IRP が完了するまで、キャッシュされたセキュリティ記述子を解放することはできません。

WSK サブシステムは、WSK アプリケーションに代わって、新しいソケットのソケット オブジェクト構造 (WSK_SOCKET) にメモリを割り当てます。 WSK サブシステムは、ソケットが閉じられると、このメモリの割り当てを解除します。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header wsk.h (Wsk.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

WSK_CLIENT

WSK_CLIENT_CONNECTION_DISPATCH

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_CLIENT_LISTEN_DISPATCH

WSK_CLIENT_STREAM_DISPATCH

WSK_PROVIDER_DISPATCH

WSK_PROVIDER_NPI

WSK_SOCKET

WskCaptureProviderNPI

WskCloseSocket

WskControlClient

WskSocketConnect