LPFN_RIOREGISTERBUFFER回呼函式 (mswsock.h)
RIORegisterBuffer 函式會註冊RIO_BUFFERID、已註冊的緩衝區描述元,以及指定的緩衝區,以搭配 Winsock 已註冊的 I/O 擴充功能使用。
語法
LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;
RIO_BUFFERID LpfnRioregisterbuffer(
PCHAR DataBuffer,
DWORD DataLength
)
{...}
參數
DataBuffer
要註冊之內存緩衝區開頭的指標。
DataLength
要註冊之緩衝區中的長度,以位元組為單位。
傳回值
如果未發生任何錯誤, 則RIORegisterBuffer 函 式會傳回已註冊的緩衝區描述項。 否則,會傳回 RIO_INVALID_BUFFERID 的值,並呼叫 WSAGetLastError 函 式來擷取特定的錯誤碼。
傳回碼 | Description |
---|---|
系統在嘗試在呼叫中使用指標自變數時偵測到無效的指標位址。 如果在 DataBuffer 參數中傳遞無效的緩衝區指標,就會傳回此錯誤。 |
|
無效的參數已傳遞至 函式。 如果 DataLength 參數為零,則會傳回此錯誤。 |
備註
RIORegisterBuffer 函式會為指定的緩衝區建立已註冊的緩衝區標識碼。 註冊緩衝區時,包含緩衝區的虛擬記憶體分頁將會鎖定到物理記憶體中。
如果註冊數個小型的非連續緩衝區,則緩衝區的實體記憶體使用量可能會與每個註冊的整個記憶體頁面一樣大。 在這些情況下,將多個要求緩衝區配置在一起可能會很有説明。
在用於緩衝區註冊本身的實體記憶體中,也有少量的額外負荷。 因此,如果有許多配置匯總成單一較大的配置,實體記憶體使用量也可以藉由匯總緩衝區註冊來進一步減少。 在此情況下,應用程式可能需要特別小心,以確保緩衝區最終會取消註冊,但不會取消註冊任何傳送或接收要求。
已註冊緩衝區的一部分會傳遞至 pData 參數中用於傳送或接收資料的RIOSend、RIOSendEx、RIOReceive 和RIOReceiveEx 函式。
當不再需要緩衝區標識符時,請呼叫 RIODeregisterBuffer 函 式來取消註冊緩衝區標識符。
注意
在運行時間必須呼叫 WSAIoctl 函式並指定 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode,以在運行時間取得RIORegisterBuffer 函式的函式指標。 傳遞至 WSAIoctl 函式的輸入緩衝區必須包含 WSAID_MULTIPLE_RIO,這是全域唯一標識碼 (GUID) ,其值可識別 Winsock 已註冊的 I/O 延伸模組函式。 成功時, WSAIoctl 函式所傳回的輸出會包含 指向RIO_EXTENSION_FUNCTION_TABLE 結構的指標,其中包含 Winsock 已註冊 I/O 延伸模組函式的指標。 SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL 定義於 Ws2def.h 頭檔中。 WSAID_MULTIPLE_RIO GUID 定義於 Mswsock.h 頭檔中。
Windows Phone 8:Windows Phone 8 和更新版本上 Windows Phone 市集應用程式支援此函式。
Windows 8.1 和 Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更新版本上的 Windows 市集應用程式支援此函式。
規格需求
需求 | 值 |
---|---|
標頭 | mswsock.h |
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應