SIO_QUERY_TRANSPORT_SETTING コントロール コード
説明
SIO_QUERY_TRANSPORT_SETTINGコントロール コードは、ソケットのトランスポート設定に対してクエリを実行します。
この操作を実行するには、次のパラメーターを使用して WSAIoctl または WSPIoctl 関数を呼び出します。
int WSAIoctl(
(socket) s, // descriptor identifying a socket
SIO_QUERY_TRANSPORT_SETTING, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to the input buffer
(DWORD) cbInBuffer, // size, in bytes, of the input buffer
(LPVOID) lpvOutBuffer, // pointer to the output buffer
(DWORD) cbOutBuffer, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
);
int WSPIoctl(
(socket) s, // descriptor identifying a socket
SIO_QUERY_TRANSPORT_SETTING, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to the input buffer
(DWORD) cbInBuffer, // size, in bytes, of the input buffer
(LPVOID) lpvOutBuffer, // pointer to the output buffer
(DWORD) cbOutBuffer, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
(LPWSATHREADID) lpThreadId, // a WSATHREADID structure
(LPINT) lpErrno // a pointer to the error code.
);
パラメーター
s
ソケットを識別する記述子。
dwIoControlCode
操作の制御コード。 この操作 にはSIO_QUERY_TRANSPORT_SETTING を使用します。
lpvInBuffer
入力バッファーへのポインター。 このパラメーターには、構造体の最初のメンバーがクエリ対象のトランスポート設定を決定する TRANSPORT_SETTING_ID 構造体である構造体へのポインターが含まれています。
cbInBuffer
入力バッファーのサイズ (バイト単位)。 このパラメーターは、照会されるトランスポート設定によって異なります。
lpvOutBuffer
出力バッファーへのポインター。 このパラメーターは、 lpOverlapped パラメーターと lpCompletionRoutine パラメーターが NULL の場合に照会されるトランスポート設定によって異なります。
cbOutBuffer
出力バッファーのサイズ (バイト単位)。
lpcbBytesReturned
出力バッファーに格納されているデータのサイズをバイト単位で受け取る変数へのポインター。
出力バッファーが小さすぎると、呼び出しは失敗し、 WSAGetLastError はWSAEINVAL を返し、 lpcbBytesReturned パラメーターはDWORD 値 0 を指します。
lpOverlapped が NULL の場合、正常な呼び出しで返される lpcbBytesReturned パラメーターが指す DWORD 値を 0 にすることはできません。
重複するソケットに 対して lpOverlapped パラメーターが NULL でない場合、すぐに完了できない操作が開始され、完了は後で示されます。 返される lpcbBytesReturned パラメーターが指す DWORD 値は、重複する操作が完了するまで格納されているデータのサイズを決定できないため、0 になる場合があります。 最終的な完了状態は、操作が完了したときに適切な完了メソッドが通知されたときに取得できます。
lpvOverlapped
WSAOVERLAPPED 構造体へのポインター。
重複する属性なしでソケット s が作成された場合、 lpOverlapped パラメーターは無視されます。
重複した属性を使用して s を開き、 lpOverlapped パラメーターが NULL でない場合、操作は重複 (非同期) 操作として実行されます。 この場合、 lpOverlapped パラメーターは有効な WSAOVERLAPPED 構造体を指している必要があります。
重複する操作の場合、 WSAIoctl または WSPIoctl 関数は直ちにを返し、操作が完了すると適切な完了メソッドが通知されます。 それ以外の場合、操作が完了するかエラーが発生するまで、関数は を返しません。
lpCompletionRoutine
種類: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
操作が完了したときに呼び出される完了ルーチンへのポインター (重複していないソケットの場合は無視されます)。
lpThreadId
WPUQueueApc への後続の呼び出しでプロバイダーによって使用される WSATHREADID 構造体へのポインター。 プロバイダーは、WPUQueueApc 関数が返されるまで、参照先の WSATHREADID 構造体 (同じへのポインターではない) を格納する必要があります。
メモ このパラメーターは 、WSPIoctl 関数にのみ適用されます。
lpErrno
エラー コードへのポインター。
メモ このパラメーターは 、WSPIoctl 関数にのみ適用されます。
戻り値
操作が正常に完了すると、 WSAIoctl または WSPIoctl 関数は 0 を返します。
操作が失敗した場合、または保留中の場合、 WSAIoctl または WSPIoctl 関数は SOCKET_ERRORを返します。 拡張エラー情報を取得するには、 WSAGetLastError を呼び出します。
エラー コード | 意味 |
---|---|
ERROR_INSUFFICIENT_BUFFER | システム呼び出しに渡されるデータ域が小さすぎます。 このエラーは、cbOutBuffer パラメーターで渡されたバッファー サイズが lpvOutBuffer パラメーターによって指されているバッファーが小さすぎる場合に返されます。 必要なバッファー サイズは、 lpcbBytesReturned パラメーターで返されます。 |
WSA_IO_PENDING | 重複した操作が正常に開始され、完了は後で示されます。 |
WSA_OPERATION_ABORTED | ソケットのクローズまたは SIO_FLUSH IOCTL コマンドの実行により、重複した操作が取り消されました。 |
WSAEFAULT | lpvOutBuffer、lpcbBytesReturned、lpOverlapped、または lpCompletionRoutine パラメーターは、ユーザー アドレス空間の有効な部分に完全に含まれていません。 |
WSAEINPROGRESS | 関数は、コールバックが進行中のときに呼び出されます。 |
WSAEINTR | ブロック操作が中断されました。 |
WSAEINVAL | dwIoControlCode パラメーターが有効なコマンドではないか、指定された入力パラメーターが受け入れられないか、指定されたソケットの種類にコマンドが適用されません。 |
WSAENETDOWN | ネットワーク サブシステムが失敗しました。 |
WSAENOPROTOOPT | ソケット オプションは、指定されたプロトコルではサポートされていません。 |
WSAENOTCONN | ソケット s が接続されていません。 |
WSAENOTSOCK | 記述子 s はソケットではありません。 |
WSAEOPNOTSUPP | 指定された IOCTL コマンドはサポートされていません。 このエラーは、 SIO_QUERY_TRANSPORT_SETTING IOCTL がトランスポート プロバイダーでサポートされていない場合に返されます。 |
注釈
SIO_QUERY_TRANSPORT_SETTING IOCTL は、Windows 8およびWindows Server 2012以降のバージョンのオペレーティング システムでサポートされています。
SIO_QUERY_TRANSPORT_SETTING IOCTL は、ソケットのトランスポート設定のクエリに使用される汎用 IOCTL です。 照会されるトランスポート設定は、lpvInBuffer パラメーターで渡されたTRANSPORT_SETTING_IDに基づいています。
現在定義されているトランスポート設定は、TCP ソケットの REAL_TIME_NOTIFICATION_CAPABILITY 機能のみです。
lpvInBuffer パラメーターで渡されたTRANSPORT_SETTING_IDに Guid メンバーがREAL_TIME_NOTIFICATION_CAPABILITYに設定されている場合、これは ControlChannelTrigger で使用される TCP ソケットのリアルタイム通知設定を照会して、Windows ストア アプリでバックグラウンド ネットワーク通知を受信する要求です。 lpvInBuffer パラメーターは、TRANSPORT_SETTING_ID構造体を指している必要があります。 lpvOutBuffer パラメーターは、REAL_TIME_NOTIFICATION_SETTING_OUTPUT構造体を指している必要があります。 このトランスポート設定は、TCP ソケットにのみ適用されます。 このトランスポート設定は、WinInet または同様のネットワーク サービスが、特定の TCP ソケットに対してクエリを実行して ControlChannelTrigger の状態を判断する方法を提供します。 Windows ストア アプリは、この IOCTL を直接呼び出しません。 WSAIoctl または WSPIoctl 呼び出しが成功した場合、この IOCTL は現在の状態のREAL_TIME_NOTIFICATION_SETTING_OUTPUT構造体を返します。
SIO_QUERY_TRANSPORT_SETTING IOCTL は、WinInet または同様のネットワーク サービスが、特定の TCP ソケットのトランスポート設定の状態を照会して、ソケットで ControlChannelTrigger が有効になっているかどうかを判断する方法を提供します。 Windows ストア アプリは、この IOCTL を直接呼び出しません。
この IOCTL は TCP ソケットにのみ適用されます。
こちらもご覧ください
CONTROL_CHANNEL_TRIGGER_STATUS