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 應用程式必須將此參數設定為零。
[in, optional] RemoteAddress
結構的指標,指定要傳送數據報的遠端傳輸位址。 此指標必須是特定 SOCKADDR 結構類型的指標,其對應至 WSK 應用程式在建立套接字時所指定的位址系列。
如果 WSK 應用程式已設定資料報套接字的固定遠端傳輸位址或固定目的地傳輸位址,則此指標是選擇性的,而且可以是 NULL。 如果 為 NULL,數據報會傳送至固定遠端傳輸位址或固定目的地傳輸位址。 如果為非 NULL,數據報會傳送至指定的遠端傳輸位址。
如需為數據報套接字設定固定遠端傳輸地址的詳細資訊,請參閱 SIO_WSK_SET_REMOTE_ADDRESS。
如需設定數據報套接字之固定目的地傳輸地址的詳細資訊,請參閱 SIO_WSK_SET_SENDTO_ADDRESS。
[in] ControlInfoLength
ControlInfo 參數所指向之緩衝區中的數據位元組數目。 如果沒有與數據報相關聯的控件資訊, ControlInfoLength 參數必須為零。
[in, optional] ControlInfo
緩衝區的指標,其中包含與所傳送之數據報相關聯的控件資訊。 控件信息數據是由一或多個控件數據物件所組成,每個物件都是以 CMSGHDR 結構開頭。 如果沒有與數據報相關聯的控件資訊,此參數應該是 NULL。
[in, out] Irp
WSK 子系統用來以異步方式完成傳送作業的呼叫端配置 IRP 指標。 如需搭配 WSK 函式使用 IRP 的詳細資訊,請參閱 搭配 Winsock 核心函式使用 IRP。
傳回值
WskSendTo 會傳回下列其中一個 NTSTATUS 代碼:
傳回碼 | Description |
---|---|
|
數據報已成功透過套接字傳送。 IRP 將會以成功狀態完成。 IRP 的 [IoStatus.Information] 字段包含已傳送的位元元組數目。 |
|
WSK 子系統無法立即透過套接字傳送數據報。 WSK 子系統會在 IRP 透過套接字傳送數據報之後完成。 傳送作業的狀態將會在 IRP 的 [IoStatus.Status ] 字段中傳回。 如果作業成功,IRP 的 [IoStatus.Information ] 字段將會包含已傳送的位元組數目。 |
|
套接字已不再運作。 IRP 將會以失敗狀態完成。 WSK 應用程式必須呼叫 WskCloseSocket 函式,才能儘快關閉套接字。 |
|
發生錯誤。 IRP 將會以失敗狀態完成。 |
備註
如果 WskSendTo 函式傳回STATUS_PENDING,則 Buffer 參數所指向WSK_BUF結構中所述的 MDL 鏈結必須維持在記憶體中鎖定,直到 IRP 完成為止。 此外, ControlInfo 參數指向的緩衝區也必須保持有效,直到 IRP 完成為止。 如果 WSK 應用程式使用其中一個 ExAllocateXxx 函式設定 MDL 鏈結或控件資訊緩衝區,它就無法釋放具有對應 ExFreeXxx 函式的記憶體,直到 IRP 完成之後。 如果 WSK 應用程式配置了 MDL 鏈結或堆疊上的控件資訊緩衝區,它就無法從呼叫 WskSendTo 函式的函式傳回,直到 IRP 完成之後。
WSK 子系統在透過套接字傳送數據報時,不會執行任何數據緩衝處理。 因此, WSK 子系統將不會完成對 WskSendTo 函式的呼叫,直到實際傳送所有數據為止。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。 |
目標平台 | Universal |
標頭 | wsk.h (包含 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |