次の方法で共有


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 オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header wsk.h (Wsk.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

CMSGHDR

Sockaddr

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent