PFN_WSK_CONTROL_SOCKET コールバック関数 (wsk.h)
WskControlSocket 関数は、ソケットに対して制御操作を実行します。
構文
PFN_WSK_CONTROL_SOCKET PfnWskControlSocket;
NTSTATUS PfnWskControlSocket(
[in] PWSK_SOCKET Socket,
[in] WSK_CONTROL_SOCKET_TYPE RequestType,
[in] ULONG ControlCode,
[in] ULONG Level,
[in] SIZE_T InputSize,
[in, optional] PVOID InputBuffer,
[in] SIZE_T OutputSize,
[out, optional] PVOID OutputBuffer,
[out, optional] SIZE_T *OutputSizeReturned,
[in, out] PIRP Irp
)
{...}
パラメーター
[in] Socket
制御操作を実行するソケットのソケット オブジェクトを指定する WSK_SOCKET 構造体へのポインター。
[in] RequestType
実行される制御操作の種類を指定する値。 WSK アプリケーションは、このパラメーターを次のいずれかの値に設定します。
WskSetOption
ソケット オプションの状態または値を設定します。
WskGetOption
ソケット オプションの状態または値を取得します。
WskIoctl
I/O 制御操作を実行します。
[in] ControlCode
RequestType パラメーターが WskSetOption に設定されている場合、または WskGetOption 場合、ControlCode パラメーターは、値を設定または取得する特定のソケット オプションを指定します。 WSK サブシステムでサポートされるソケット・オプションの詳細については、WSK ソケット・オプション を参照してください。 基になるネットワーク プロトコルでは、追加のソケット オプションがサポートされる場合があります。
RequestType パラメーターが WskIoctl に設定されている場合、ControlCode パラメーターは、実行されている特定の I/O 制御操作を指定します。 WSK サブシステムでサポートされる I/O 制御操作の詳細については、WSK ソケット IOCTL 操作 を参照してください。 基になるネットワーク プロトコルは、追加のソケット I/O 制御操作をサポートする場合があります。
[in] Level
ソケット オプションの値が設定または取得されるネットワーク スタック内のレベル。 WSK サブシステム・レベルのソケット・オプションの場合、WSK アプリケーションはこのパラメーターをSOL_SOCKETに設定する必要があります。 トランスポート プロトコルまたはネットワーク プロトコル レベルのソケット オプションの場合、WSK アプリケーションでは、このパラメーターを基になるトランスポートの適切なレベルに設定する必要があります。
RequestType パラメーターが WskIoctl に設定されている場合、Level パラメーターは無視されます。
[in] InputSize
InputBuffer パラメーターが指すバッファー内のデータのバイト数。
[in, optional] InputBuffer
指定した制御操作を実行するために必要な入力データを提供する、呼び出し元によって割り当てられたバッファー。 指定した制御操作に入力データが必要ない場合、WSK アプリケーションは、このパラメーターを NULL に設定し、InputSize パラメーターを 0 に設定する必要があります。
[in] OutputSize
OutputBuffer パラメーターが指すバッファーのサイズ。
[out, optional] OutputBuffer
指定した制御操作によって返される出力データを受け取る呼び出し元によって割り当てられたバッファー。 指定された制御操作によって出力データが返されない場合、WSK アプリケーションは、このパラメーターを NULL に設定し、OutputSize パラメーターを 0 に設定する必要があります。
[out, optional] OutputSizeReturned
OutputBuffer パラメーターによって指されるバッファーで返されるデータのバイト数を受け取る ULONG 型変数へのポインター。 WSK アプリケーションでは、次のすべてに該当する場合を除き、OutputSizeReturned パラメーターを NULL 設定する必要があります。
- Irp パラメーターは、null に設定されます。
- 実行されている操作は、OutputBuffer パラメーターによって指されているバッファー内の出力データを返します。
- 実行されている操作によって返される出力データのバイト数は不明です。
[in, out] Irp
WSK サブシステムが制御操作を非同期的に完了するために使用する、呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数で IRP を使用する方法の詳細については、「Winsock カーネル関数での IRP の使用」を参照してください。
RequestType パラメーターが WskSetOption または WskGetOption に設定されている場合、Irp パラメーターは必須、省略可能、または設定または取得される特定のソケット オプションに応じて NULL する必要があります。 サポートされている各ソケット オプションの Irp パラメーターの要件の詳細については、「WSK ソケット オプションの を参照してください。
RequestType パラメーターが WskIoctl に設定されている場合、Irp パラメーターは省略可能であるか、実行されている特定の I/O 制御操作に応じて NULL する必要があります。 サポートされている各 I/O 制御操作の Irp パラメーターの要件の詳細については、「WSK ソケット IOCTL 操作 を参照してください。
戻り値
WskControlSocket は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 形容 |
---|---|
|
制御操作が正常に完了しました。 WSK アプリケーションが Irp パラメーターで IRP へのポインターを指定した場合、IRP は成功状態で完了し、OutputBuffer パラメーターが指すバッファーで返されるバイト数は、IRP の IoStatus.Information フィールドに返されます。 |
|
WSK サブシステムは、制御操作を直ちに完了できませんでした。 WSK サブシステムは、制御操作が完了した後に IRP を完了します。 コントロール操作の状態は、IRP の IoStatus.Status フィールドに返されます。 操作が成功した場合、OutputBuffer パラメーターが指すバッファーで返されるバイト数は、IRP の IoStatus.Information フィールドに返されます。 |
|
WSK サブシステムは、制御操作を直ちに完了できませんでした。 この値は、WSK アプリケーションがそのイベント コールバック関数の現在進行中の呼び出しがあり、Irp パラメーターが NULL 場合にのみ、ソケットでイベント コールバック関数を無効にしている場合にのみ返されます。 イベント コールバック関数の無効化の詳細については、SO_WSK_EVENT_CALLBACKを参照してください。 |
|
ソケットは機能しなくなりました。 IRP は失敗状態で完了します。 WSK アプリケーションは、WskCloseSocket 関数を呼び出して、できるだけ早くソケットを閉じる必要があります。 |
|
エラーが発生しました。 IRP は失敗状態で完了します。 |
備考
WSK アプリケーションが wskSetOption 指定するか、RequestType パラメーターで WskGetOption を する場合、各ソケット オプションの入力バッファーと出力バッファーの使用方法の詳細については、「WSK ソケット オプション を参照してください。
WSK アプリケーションが RequestType パラメーター WskIoctl を指定する場合、入出力制御操作ごとに入出力バッファーを使用する方法の詳細については、WSK ソケット IOCTL 操作 を参照してください。
WskControlSocket 関数がSTATUS_PENDINGを返す場合は、IRP が完了するまで、InputBuffer パラメーターまたは OutputBuffer パラメーターが指すバッファーは有効なままである必要があります。 WSK アプリケーションが、ExAllocateXxx 関数のいずれかを使用してバッファーを割り当てた場合、IRP が完了するまで、対応する ExFreeXxx 関数を使用してメモリを解放できません。 WSK アプリケーションがスタック上のバッファーを割り当てた場合、IRP が完了するまで、WskControlSocket 関数を呼び出す関数から戻すことはできません。
WskControlSocket 関数の呼び出し元は、RequestType パラメーターが WskIoctl に設定され、ControlCode パラメーターがSIO_ADDRESS_LIST_QUERY、SIO_ADDRESS_LIST_CHANGE、または SIO_ADDRESS_LIST_SORTに設定されている場合を除き、IRQL <= DISPATCH_LEVEL で実行する必要があります。 このような場合、呼び出し元は IRQL = PASSIVE_LEVELで実行されている必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wsk.h (Wsk.h を含む) |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照) |
関連項目
WSK ソケット IOCTL 操作 の
WSK ソケット オプション の
WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCHWskCloseSocket の
WskSocket の