次の方法で共有


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 アプリケーションが新しいソケットでイベント コールバック関数を有効にしない場合は、Dispatch ポインターを 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 コードを返します。

リターン コード 形容
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 オペレーティング システムで使用できます。
ターゲット プラットフォーム 万国
ヘッダー 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