次の方法で共有


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

ソケットのローカル トランスポート アドレスを受け取る呼び出し元によって割り当てられたバッファーへのポインター。 バッファーは、ページ以外のメモリに配置する必要があります。 また、バッファーは、WSK アプリケーションがソケットの作成時に指定したアドレス ファミリに対応する特定の SOCKADDR 構造体型を格納するのに十分な大きさにする必要があります。

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を返す場合は、IRP が完了するまで、LocalAddress パラメーターが指すバッファーは有効なままである必要があります。 WSK アプリケーションが、ExAllocateXxx 関数のいずれかを使用してバッファーを割り当てた場合、IRP が完了するまで、対応する ExFreeXxx 関数を使用してメモリを解放することはできません。 WSK アプリケーションがスタック上のバッファーを割り当てた場合、IRP が完了するまで、WskGetLocalAddress 関数を呼び出す関数から戻ることはできません。

必要条件

要件 価値
サポートされる最小クライアント 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