次の方法で共有


PFN_WSK_SOCKET_CONNECT コールバック関数 (wsk.h)

WskSocketConnect 関数は、新しい接続指向ソケットを作成し、ローカル トランスポート アドレスにバインドし、指定されたリモート トランスポート アドレスに接続して、関連付けられているソケット オブジェクトへのポインターを返します。

構文

PFN_WSK_SOCKET_CONNECT PfnWskSocketConnect;

NTSTATUS PfnWskSocketConnect(
  [in]           PWSK_CLIENT Client,
  [in]           USHORT SocketType,
  [in]           ULONG Protocol,
  [in]           PSOCKADDR LocalAddress,
  [in]           PSOCKADDR RemoteAddress,
                 ULONG Flags,
  [in, optional] PVOID SocketContext,
  [in, optional] const WSK_CLIENT_CONNECTION_DISPATCH *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] SocketType

作成されるソケットの型。 次のソケットの種類がサポートされています。

SOCK_STREAM

信頼性の高い接続指向のバイト ストリーム通信をサポートします。

SOCK_DGRAM

信頼性の低いコネクションレス データグラム通信をサポートします。

SOCK_RAW

トランスポート プロトコルへの生アクセスをサポートします。

サポートされている各アドレス ファミリでサポートされるソケットの種類の詳細については、次を参照してください。
WSK アドレス ファミリ

[in] Protocol

作成されるソケットのトランスポート プロトコル。 サポートされている各アドレス ファミリでサポートされるプロトコルの詳細については、「WSK アドレス ファミリ を参照してください。

[in] LocalAddress

ソケットをバインドするローカル トランスポート アドレスを指定する構造体へのポインター。 WSK アプリケーションは、作成されるソケットのアドレス ファミリに対応する特定の SOCKADDR 構造体型へのポインターを指定する必要があります。

[in] RemoteAddress

ソケットを接続するリモート トランスポート アドレスを指定する構造体へのポインター。 WSK アプリケーションは、作成されるソケットのアドレス ファミリに対応する特定の SOCKADDR 構造体型へのポインターを指定する必要があります。

Flags

このパラメーターは、システム用に予約されています。 WSK アプリケーションでは、このパラメーターをゼロに設定する必要があります。

[in, optional] SocketContext

作成されるソケットの呼び出し元が指定したコンテキストへのポインター。 WSK サブシステムは、このポインターをソケットのイベント コールバック関数に渡します。 コンテキスト情報は WSK サブシステムに対して不透明であり、非ページ メモリに格納する必要があります。 WSK アプリケーションが新しいソケットでイベント コールバック関数を有効にしない場合は、このポインターを NULLに設定する必要があります。

[in, optional] Dispatch

定数へのポインター WSK_CLIENT_CONNECTION_DISPATCH 構造体。 この構造体は、新しいソケットのイベント コールバック関数へのポインターを含むディスパッチ テーブルです。 WSK アプリケーションが新しいソケットのすべてのイベント コールバック関数を有効にしない場合は、ディスパッチ テーブル内のポインターを、有効にしないイベント コールバック関数の NULL するように設定する必要があります。 WSK アプリケーションが新しいソケットでイベント コールバック関数を有効にしない場合は、このポインターを 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 の使用」を参照してください。

戻り値

WskSocketConnect は、次のいずれかの 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 は、SocketType パラメーターと Protocol パラメーターのすべての有効な組み合わせを含む WSK_TRANSPORT 構造体の一覧を返します。

WSK サブシステムは、LocalAddress パラメーターによって指される SOCKADDR 構造体で指定されたアドレス・ファミリーから、新しいソケットのアドレス・ファミリーを判別します。

WSK アプリケーションでソケット オプションを設定する必要がある場合、またはソケットをバインドまたは接続する前にソケットに対して I/O 制御操作を実行する必要がある場合、WSK アプリケーションは、WskSocketConnect 関数を呼び出す代わりに、wskSocket WskBindを呼び出 し、WskConnect 関数 呼び出す必要があります。

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

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

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
ターゲット プラットフォーム 万国
ヘッダー wsk.h (Wsk.h を含む)
IRQL <= DISPATCH_LEVEL

関連項目

SOCKADDR

WSK_CLIENT

WSK_CLIENT_CONNECTION_DISPATCH

WSK_PROVIDER_DISPATCH

WSK_PROVIDER_NPI

WSK_SOCKET

WskCaptureProviderNPI

WskCloseSocket

WskControlClient

WskSocket