次の方法で共有


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

WskSendTo 関数は、データグラム データをリモート トランスポート アドレスに送信します。

構文

PFN_WSK_SEND_TO PfnWskSendTo;

NTSTATUS PfnWskSendTo(
  [in]           PWSK_SOCKET Socket,
  [in]           PWSK_BUF Buffer,
                 ULONG Flags,
  [in, optional] PSOCKADDR RemoteAddress,
  [in]           ULONG ControlInfoLength,
  [in, optional] PCMSGHDR ControlInfo,
  [in, out]      PIRP Irp
)
{...}

パラメーター

[in] Socket

データグラムを送信するデータグラム ソケットのソケット オブジェクトを指定する WSK_SOCKET 構造体へのポインター。

[in] Buffer

ソケット経由で送信されるデータグラムを含むデータ バッファーを記述する初期化された WSK_BUF 構造体へのポインター。

Flags

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

[in, optional] RemoteAddress

データグラムの送信先となるリモート トランスポート アドレスを指定する構造体へのポインター。 このポインターは、WSK アプリケーションがソケットの作成時に指定したアドレス ファミリに対応する特定の SOCKADDR 構造体型へのポインターである必要があります。

WSK アプリケーションがデータグラム ソケットの固定リモート トランスポート アドレスまたは固定宛先トランスポート アドレスを設定している場合、このポインターは省略可能であり、NULL 可能性があります。 NULL 場合、データグラムは固定リモート トランスポート アドレスまたは固定宛先トランスポート アドレスに送信されます。 以外の NULL場合、データグラムは指定されたリモート トランスポート アドレスに送信されます。

データグラム・ソケットの固定リモート・トランスポート・アドレスの設定の詳細については、以下を参照してください。 SIO_WSK_SET_REMOTE_ADDRESS.

データグラム・ソケットの固定宛先トランスポート・アドレスの設定の詳細については、以下を参照してください。 SIO_WSK_SET_SENDTO_ADDRESS.

[in] ControlInfoLength

ControlInfo パラメーターが指すバッファー内のデータのバイト数。 データグラムに関連する制御情報がない場合、ControlInfoLength・パラメーターはゼロでなければなりません。

[in, optional] ControlInfo

送信されるデータグラムに関連付けられている制御情報を含むバッファーへのポインター。 制御情報データは、1 つ以上の制御データ・オブジェクトで構成され、それぞれが CMSGHDR 構造で始まります。 データグラムに関連付けられている制御情報がない場合、このパラメーターは NULL する必要があります。

[in, out] Irp

WSK サブシステムが非同期的に送信操作を完了するために使用する呼び出し元によって割り当てられた IRP へのポインター。 WSK 関数で IRP を使用する方法の詳細については、「Winsock カーネル関数での IRP の使用」を参照してください。

戻り値

WskSendTo は、次のいずれかの NTSTATUS コードを返します。

リターン コード 形容
STATUS_SUCCESS
データグラムがソケット経由で正常に送信されました。 IRP は成功状態で完了します。 IRP の IoStatus.Information フィールドには、送信されたバイト数が含まれています。
STATUS_PENDING
WSK サブシステムは、すぐにソケット経由でデータグラムを送信できませんでした。 WSK サブシステムは、ソケット経由でデータグラムを送信した後、IRP を完了します。 送信操作の状態は、IRP の IoStatus.Status フィールドに返されます。 操作が成功した場合、IRP の IoStatus.Information フィールドには、送信されたバイト数が含まれます。
STATUS_FILE_FORCED_CLOSED
ソケットは機能しなくなりました。 IRP は失敗状態で完了します。 WSK アプリケーションは、WskCloseSocket 関数を呼び出して、できるだけ早くソケットを閉じる必要があります。
その他の状態コードの
エラーが発生しました。 IRP は失敗状態で完了します。

備考

WskSendTo 関数がSTATUS_PENDINGを返す場合、Buffer パラメーターによって指される WSK_BUF 構造体に記述されている MDL チェーンは、IRP が完了するまでメモリ内でロックされたままにする必要があります。 さらに、ControlInfo パラメーターが指すバッファーも、IRP が完了するまで有効なままである必要があります。 WSK アプリケーションが、ExAllocateXxx 関数のいずれかを使用して MDL チェーンまたはコントロール情報バッファーを割り当てた場合、IRP が完了するまで、対応する ExFreeXxx 関数を使用してメモリを解放することはできません。 WSK アプリケーションがスタックに MDL チェーンまたはコントロール情報バッファーを割り当てた場合、IRP が完了するまで、WskSendTo 関数を呼び出す関数から戻すことはできません。

WSK サブシステムは、ソケット経由でデータグラムを送信するときに、データのバッファリングを実行しません。 したがって、wskSendTo 関数 の呼び出しは、すべてのデータが実際に送信されるまで WSK サブシステムによって完了されません。

必要条件

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

関連項目

CMSGHDR する

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent