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 アプリケーションでは、このパラメーターを 0 に設定する必要があります。
[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 コードを返します。
リターン コード | 説明 |
---|---|
|
新しいソケットが正常に作成されました。 IRP は成功状態で完了します。 |
|
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 オペレーティング システムで使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wsk.h (Wsk.h を含む) |
IRQL | <= DISPATCH_LEVEL |