PFN_WSK_GET_LOCAL_ADDRESS回呼函式 (wsk.h)

WskGetLocalAddress函式會擷取通訊端的本機傳輸位址。

語法

PFN_WSK_GET_LOCAL_ADDRESS PfnWskGetLocalAddress;

NTSTATUS PfnWskGetLocalAddress(
  [in]      PWSK_SOCKET Socket,
  [out]     PSOCKADDR LocalAddress,
  [in, out] PIRP Irp
)
{...}

參數

[in] Socket

WSK_SOCKET結構的指標,指定所要查詢之通訊端的通訊端物件。

[out] LocalAddress

呼叫端配置的緩衝區指標,可接收通訊端的本機傳輸位址。 緩衝區必須位於非分頁式記憶體中。 緩衝區也必須夠大,才能包含特定的 SOCKADDR 結構類型,該類型對應于建立通訊端時所指定的 WSK 應用程式所指定的位址系列。

針對 WSK 應用程式在接聽通訊端上接受的連線導向通訊端,位址系列與建立接聽通訊端時所指定的 WSK 應用程式位址系列相同。

[in, out] Irp

WSK 子系統用來非同步完成擷取作業的呼叫端配置 IRP 指標。 如需搭配 WSK 函式使用 IRP 的詳細資訊,請參閱 搭配 Winsock 核心函式使用 IRP

傳回值

WskGetLocalAddress 會傳回下列其中一個 NTSTATUS 代碼:

傳回碼 描述
STATUS_SUCCESS
已成功擷取通訊端的本機傳輸位址。 IRP 將會以成功狀態完成。
STATUS_PENDING
WSK 子系統無法立即擷取通訊端的本機傳輸位址。 WSK 子系統會在擷取通訊端的本機傳輸位址之後完成 IRP。 擷取作業的狀態將會在 IRP 的 [IoStatus.Status ] 欄位中傳回。
STATUS_INVALID_DEVICE_STATE
通訊端未系結至本機傳輸位址。 IRP 將會以失敗狀態完成。
STATUS_FILE_FORCED_CLOSED
通訊端已不再運作。 IRP 將會以失敗狀態完成。 WSK 應用程式必須呼叫 WskCloseSocket 函式,才能儘快關閉通訊端。
其他狀態碼
發生錯誤。 IRP 將會以失敗狀態完成。

備註

WSK 應用程式只能在已系結至本機傳輸位址的通訊端上呼叫 WskGetLocalAddress 函式。

當 WSK 應用程式呼叫 WskBind 函式時,接聽、資料包或資料流程通訊端會系結至本機傳輸位址。

連線導向通訊端會以下列其中一種方式系結至本機傳輸位址:

  • WSK 應用程式會呼叫 WskBind 函式。
  • WSK 應用程式會藉由呼叫 WskSocketConnect 函式來建立、系結及連接通訊端。
  • 當 WSK 應用程式接受接聽通訊端上的連入連線要求時,WSK 子系統會系結通訊端。
WskGetLocalAddress函式特別適用于判斷通訊端系結至本機萬用字元位址時,由傳輸通訊協定指派給通訊端的特定本機傳輸位址。 如果是系結至本機萬用字元位址的連線導向通訊端,在通訊端連線到遠端傳輸位址之前,本機傳輸位址可能不會由傳輸通訊協定指派給通訊端。 指派給通訊端的本機傳輸位址與傳輸通訊協定相依的步驟。 針對 TCP,通訊埠號碼會在連接導向通訊端系結時指派,但 IP 位址在連線之前不會指派。

如果 WskGetLocalAddress 函式傳回STATUS_PENDING, LocalAddress 參數所指向的緩衝區必須維持有效狀態,直到 IRP 完成為止。 如果 WSK 應用程式已使用其中一個ExAllocateXxx函式配置緩衝區,則在 IRP 完成之後,才能釋放具有對應ExFreeXxx函式的記憶體。 如果 WSK 應用程式在堆疊上配置緩衝區,它就無法從呼叫 WskGetLocalAddress 函式的函式傳回,直到 IRP 完成之後為止。

需求

   
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。
目標平臺 環球
標頭 wsk.h (包含 Wsk.h)
IRQL <= DISPATCH_LEVEL

另請參閱

SOCKADDR

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskAccept

WskAcceptEvent

WskBind

WskCloseSocket

WskConnect

WskGetRemoteAddress

WskSocketConnect