WPUModifyIFSHandle 函式 (ws2spi.h)

WPUModifyIFSHandle 函式會從 Ws2_32.dll 接收可能) 修改的 IFS 句柄 (。

語法

SOCKET WPUModifyIFSHandle(
  [in]  DWORD  dwCatalogEntryId,
  [in]  SOCKET ProposedHandle,
  [out] LPINT  lpErrno
);

參數

[in] dwCatalogEntryId

識別呼叫服務提供者的描述項。

[in] ProposedHandle

提供者所配置的 IFS 句柄。

[out] lpErrno

錯誤碼的指標。

傳回值

如果沒有發生錯誤, WPUModifyIFSHandle 會傳回修改的套接字句柄。 否則,它會傳回INVALID_SOCKET,而且 lpErrno 中提供特定的錯誤碼。

錯誤碼 意義
WSAEINVAL
建議的句柄無效。
 
 

備註

WPUModifyIFSHandle 句柄可讓 WS2_32.dll 傳回可能修改過的 IFS 句柄版本,以簡化其內部作業。 根據所建議的句柄,傳回的句柄保證與建議的句柄不區分。 IFS 提供者必須先呼叫此函式,才能將任何新建立的套接字描述元傳回服務提供者。 服務提供者只會針對任何後續的套接字作業使用修改的句柄。 此例程僅供套接字描述項為實際 IFS 句柄的 IFS 提供者使用。

 
**分層服務提供者考慮**

此程式也可以由分層在基底 IFS 提供者之上的分層提供者使用,而且想要公開基底提供者的套接字句柄作為自己的句柄,而不是使用 WPUCreateSocketHandle 呼叫建立它們。 想要「傳遞」IFS 套接字的分層提供者會處理它從鏈結中的下一層接收的階層提供者,可以呼叫 WPUModifyIFSHandle,並將它自己的類別目錄專案標識符傳遞為 dwCatalogEntryId。 這會通知 Windows Sockets DLL 這個層,而不是下一層,應該是涉及該套接字句柄的 SPI 呼叫目標。

分層提供者有數項限制,如果採用此方法,則應該觀察其限制。

  • 提供者應該在 WSPStartup 時傳回的程式分派數據表中公開 LPWSPSendLPWSPRecv 的基底提供者進入點,以確保 Windows Sockets SPI 用戶端對這些函式的存取盡可能有效率。
  • 提供者無法依賴其 LPWSPSendLPWSPRecv 函式來叫用所有 I/O,特別是在 I/O 系統函式 ReadFileWriteFile 的情況下。 這些函式會略過分層提供者,並直接叫用基底 IFS 提供者的實作,即使分層提供者將這些函式自己的進入點放入程式分派數據表中也一樣。
  • 提供者無法依賴使用 LPWSPSend、LPWSPSendToLPWSPRecv、LPWSPRecvLPWSPRecvFromLPWSPIoctl 的後置處理重疊 I/O。 後續處理通知可能會透過完成埠進行,並完全略過分層提供者。 分層提供者無法判斷已使用完成埠,或判斷它是什麼埠。 分層提供者無法自行插入通知序列。
  • 提供者應該使用原始重疊 (的參數直接傳遞所有重疊 I/O 要求給基底提供者,例如 WSAOVERLAPPED 結構和完成例程指標) 。 提供者應該公開 WSPGetOverlappedResult 的基底提供者進入點。 由於某些重疊的 I/O 要求可以完全略過分層提供者,因此分層提供者無法可靠地標記 WSAOVERLAPPED 結構,以判斷可報告結果的專案,以及哪些要求必須傳遞至基礎提供者的 WSPGetOverlappedResult。 這實際上表示 LPWSPIoctl 必須是基礎提供者的傳遞作業。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 ws2spi.h

另請參閱

WPUCreateSocketHandle

WSAOVERLAPPED

WSPGetOverlappedResult

LPWSPIoctl

LPWSPRecv

LPWSPSend