функция обратного вызова 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
Указатель на выделенный вызывающим методом IRP, используемый подсистемой WSK для асинхронного выполнения операции извлечения. Дополнительные сведения об использовании irPs с функциями WSK см. в разделе Использование irPs с функциями ядра Winsock.
Возвращаемое значение
WskGetLocalAddress возвращает один из следующих кодов NTSTATUS:
Возвращаемый код | Описание |
---|---|
|
Локальный адрес транспорта для сокета был успешно получен. IRP будет завершен с состоянием успешности. |
|
Подсистема WSK не могла сразу получить локальный адрес транспорта для сокета. Подсистема WSK завершит IRP после получения локального адреса транспорта для сокета. Состояние операции извлечения будет возвращено в поле IoStatus.Status IRP. |
|
Сокет не привязан к локальному адресу транспорта. IRP будет завершен с состоянием сбоя. |
|
Сокет больше не работает. IRP будет завершен с состоянием сбоя. Приложение WSK должно вызвать функцию WskCloseSocket, чтобы закрыть сокет как можно скорее. |
|
Произошла ошибка. IRP будет завершен с состоянием сбоя. |
Замечания
Приложение WSK может вызывать функцию WskGetLocalAddress только в сокете, привязанном к локальному адресу транспорта.
Прослушивание, диаграмма данных или сокет потока привязаны к локальному адресу транспорта, когда приложение WSK вызывает функцию WskBind.
Сокет, ориентированный на подключение, привязан к локальному адресу транспорта одним из следующих способов:
- Приложение WSK вызывает функцию WskBind.
- Приложение WSK создает, привязывает и подключает сокет, вызывая функцию WskSocketConnect.
- Подсистема WSK привязывает сокет, когда приложение WSK принимает входящие запросы на подключение к сокету прослушивания.
Если функция WskGetLocalAddress возвращает STATUS_PENDING, буфер, на который указывает параметр LocalAddress, должен оставаться допустимым до завершения IRP. Если приложение WSK выделило буфер с одной из функций exAllocate Xxx, оно не может освободить память с соответствующей функцией exFreeXxx до завершения IRP. Если приложение WSK выделило буфер в стеке, оно не может вернуться из функции, которая вызывает функцию WskGetLocalAddress до завершения IRP.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Windows Vista и более поздних версиях операционных систем Windows. |
целевая платформа | Всеобщий |
заголовка | wsk.h (include Wsk.h) |
IRQL | <= DISPATCH_LEVEL |