Поделиться через


Функция Icmp6SendEcho2 (icmpapi.h)

Функция Icmp6SendEcho2 отправляет эхо-запрос IPv6 ICMPv6 и возвращает либо немедленно (если event или ApcRoutine не равно NULL), либо возвращается после указанного времени ожидания. ReplyBuffer содержит эхо-ответ IPv6 ICMPv6, если он есть.

Синтаксис

IPHLPAPI_DLL_LINKAGE DWORD Icmp6SendEcho2(
  [in]           HANDLE                 IcmpHandle,
  [in, optional] HANDLE                 Event,
  [in, optional] PIO_APC_ROUTINE        ApcRoutine,
  [in, optional] PVOID                  ApcContext,
  [in]           sockaddr_in6           *SourceAddress,
  [in]           sockaddr_in6           *DestinationAddress,
  [in]           LPVOID                 RequestData,
  [in]           WORD                   RequestSize,
  [in, optional] PIP_OPTION_INFORMATION RequestOptions,
  [out]          LPVOID                 ReplyBuffer,
  [in]           DWORD                  ReplySize,
  [in]           DWORD                  Timeout
);

Параметры

[in] IcmpHandle

Открытый дескриптор, возвращенный Icmp6CreateFile.

[in, optional] Event

Событие, которое должно быть сигнальным при поступлении ответа ICMPv6. Если указан этот параметр, для него требуется дескриптор допустимого объекта события. Используйте функцию CreateEvent или CreateEventEx , чтобы создать этот объект события.

Дополнительные сведения об использовании событий см. в разделе Объекты событий.

[in, optional] ApcRoutine

Подпрограмма, вызываемая, когда вызывающий поток находится в потоке с оповещением и поступает ответ ICMPv6. В Windows Vista и более поздних версиях необходимо определить PIO_APC_ROUTINE_DEFINED , чтобы принудить тип данных для этого параметра PIO_APC_ROUTINE , а не FARPROC.

В Windows Server 2003 и Windows XP не следует определять PIO_APC_ROUTINE_DEFINED для принудительного применения типа данных для этого параметра в FARPROC.

[in, optional] ApcContext

Необязательный параметр, передаваемый в подпрограмму обратного вызова, указанную в параметре ApcRoutine , всякий раз, когда поступает ответ ICMPv6 или возникает ошибка.

[in] SourceAddress

Исходный адрес IPv6, по которому отправляется эхо-запрос, в виде структуры sockaddr .

[in] DestinationAddress

Адрес назначения IPv6 эхо-запроса в виде структуры sockaddr .

[in] RequestData

Указатель на буфер, содержащий данные для отправки в запросе.

[in] RequestSize

Размер (в байтах) буфера данных запроса, на который указывает параметр RequestData .

[in, optional] RequestOptions

Указатель на параметры заголовка IPv6 для запроса в виде структуры IP_OPTION_INFORMATION . На 64-разрядной платформе этот параметр находится в форме для структуры IP_OPTION_INFORMATION32 .

Этот параметр может иметь значение NULL, если не нужно указывать параметры ip-заголовка.

Примечание В Windows Server 2003 и Windows XP параметр RequestOptions не является необязательным и не должен иметь значение NULL и используются только элементы Ttl и Flags .
 

[out] ReplyBuffer

Указатель на буфер для хранения ответов на запрос. После возврата буфер содержит структуру ICMPV6_ECHO_REPLY , за которой следует текст сообщения из данных ответа эха ICMPv6. Буфер должен быть достаточно большим, чтобы вместить по крайней мере одну ICMPV6_ECHO_REPLY структуру, а также количество байтов данных, указанное в параметре RequestSize . Этот буфер также должен быть достаточно большим, чтобы вместить еще 8 байт данных (размер сообщения об ошибке ICMP) и пространство для IO_STATUS_BLOCK структуры.

[in] ReplySize

Размер (в байтах) буфера ответов, на который указывает параметр ReplyBuffer . Этот буфер должен быть достаточно большим, чтобы вместить по крайней мере одну ICMPV6_ECHO_REPLY структуру и байты RequestSize данных. Этот буфер также должен быть достаточно большим, чтобы вместить еще 8 байт данных (размер сообщения об ошибке ICMP) и пространство для IO_STATUS_BLOCK структуры.

[in] Timeout

Время ожидания ответов (в миллисекундах). Этот параметр используется, только если функция Icmp6SendEcho2 вызывается синхронно. Поэтому этот параметр не используется, если параметр ApcRoutine или Event не имеет значения NULL.

Возвращаемое значение

При синхронном вызове возвращает количество ответов, полученных и сохраненных в ReplyBuffer.

При асинхронном вызове указывает, что операция выполняется, возвращая ERROR_IO_PENDING. Результат числа ответов можно получить позже, когда событие, указанное в параметре Event , сигнализирует, или при вызове функции обратного вызова в параметре ApcRoutine .

Если значение (синхронное или асинхронное) число ответов равно нулю, для расширенной информации об ошибке вызовите Метод GetLastError.

Если функция завершается сбоем, расширенный код ошибки, возвращаемый GetLastError , может иметь одно из следующих значений.

Код возврата Описание
ERROR_CALL_NOT_IMPLEMENTED
Эта функция не поддерживается в этой системе.
ERROR_INSUFFICIENT_BUFFER
Область данных, передаваемая в системный вызов, слишком мала. Эта ошибка возвращается, если параметр ReplySize указывает, что буфер, на который указывает параметр ReplyBuffer , слишком мал.
ERROR_INVALID_PARAMETER
Один из параметров недопустим. Эта ошибка возвращается, если параметр IcmpHandle содержит недопустимый дескриптор.
ERROR_IO_PENDING
Операция выполняется. Это значение возвращается при успешном асинхронном вызове Icmp6SendEcho2 и не указывает на ошибку.
ERROR_NOT_ENOUGH_MEMORY
Недостаточно памяти для обработки этой команды.
ERROR_NOT_SUPPORTED
Запрос не поддерживается. Эта ошибка возвращается, если на локальном компьютере нет стека IPv6.
IP_BUF_TOO_SMALL
Размер Объекта ReplyBuffer , указанный в параметре ReplySize , был слишком мал.
Другое
Используйте FormatMessage , чтобы получить строку сообщения для возвращаемой ошибки.

Комментарии

Функция Icmp6SendEcho2 вызывается синхронно, если параметры ApcRoutine или Event имеют значение NULL. При синхронном вызове возвращаемое значение содержит количество ответов, полученных и сохраненных в ReplyBuffer после ожидания времени, указанного в параметре Timeout . Если возвращаемое значение равно нулю, вызовите Метод GetLastError для получения расширенных сведений об ошибке.

Функция Icmp6SendEcho2 вызывается асинхронно при указании параметров ApcRoutine или Event . При асинхронном вызове для принятия ответа требуются параметры ReplyBuffer и ReplySize . Данные ответа ICMP копируются в предоставленный ReplyBuffer , и приложение получает сигнал (при указании параметра Event ) или вызывается функция обратного вызова (при указании параметра ApcRoutine ). Приложение должно проанализировать данные, на которые указывает параметр ReplyBuffer , с помощью функции Icmp6ParseReplies .

Если указан параметр Event , функция Icmp6SendEcho2 вызывается асинхронно. Событие, указанное в параметре Event, получает сигнал при поступлении ответа ICMPv6. Используйте функцию CreateEvent для создания этого объекта события.

Если указан параметр ApcRoutine , функция Icmp6SendEcho2 вызывается асинхронно. Параметр ApcRoutine должен указывать на определяемую пользователем функцию обратного вызова. Функция обратного вызова, указанная в параметре ApcRoutine , вызывается при поступлении ответа ICMPv6. Вызов функции обратного вызова, указанной в параметре ApcRoutine , сериализуется.

Если указаны параметры Event и ApcRoutine , событие, указанное в параметре Event , получает сигнал при поступлении ответа ICMPv6, но функция обратного вызова, указанная в параметре ApcRoutine , игнорируется .

В Windows Vista и более поздних версиях любое приложение, которое асинхронно вызывает функцию Icmp6SendEcho2 с помощью параметра ApcRoutine, должно определять PIO_APC_ROUTINE_DEFINED, чтобы принудительно PIO_APC_ROUTINE, а не FARPROC.

Обратите вниманиеPIO_APC_ROUTINE_DEFINED необходимо определить перед включением файла заголовка Icmpapi.h .

 

В Windows Vista и более поздних версиях функция обратного вызова, на которую указывает ApcRoutine , должна быть определена как функция типа VOID со следующим синтаксисом:

typedef
VOID WINAPI
(*PIO_APC_ROUTINE) (
    IN PVOID ApcContext,
    IN PIO_STATUS_BLOCK IoStatusBlock,
    IN ULONG Reserved
    );

В Windows Vista и более поздних версиях в функцию обратного вызова передаются следующие параметры:

Параметр Описание
IN PVOID ApcContext Параметр ApcContext , передаваемый в функцию Icmp6SendEcho2 . Этот параметр может использоваться приложением для идентификации запроса Icmp6SendEcho2 , на который отвечает функция обратного вызова.
IN PIO_STATUS_BLOCK IoStatusBlock Указатель на IO_STATUS_BLOCK. Эта переменная содержит окончательное состояние завершения и сведения об операции. Число байтов, фактически полученных в ответе, возвращается в элементе Informationструктуры IO_STATUS_BLOCK .

Структура IO_STATUS_BLOCK определяется в файле заголовка Wdm.h .

IN ULONG Reserved Этот параметр зарезервирован.
 

В Windows Server 2003 и Windows XP любое приложение, которое асинхронно вызывает функцию Icmp6SendEcho2 с помощью параметра ApcRoutine , не должно определять PIO_APC_ROUTINE_DEFINED принудительного применения типа данных для параметра ApcRoutine в FARPROC , а не PIO_APC_ROUTINE.

В Windows Server 2003 и Windows XP функция обратного вызова, на которую указывает ApcRoutine , должна быть определена как функция типа VOID со следующим синтаксисом:

typedef
VOID WINAPI
(*FARPROC) (
    IN PVOID ApcContext,
    );

В Windows Server 2003 и Windows XP в функцию обратного вызова передаются следующие параметры:

Параметр Описание
IN PVOID ApcContext Параметр ApcContext , передаваемый в функцию Icmp6SendEcho2 . Этот параметр может использоваться приложением для идентификации запроса Icmp6SendEcho2 , на который отвечает функция обратного вызова.
 

Функция обратного вызова, указанная в параметре ApcRoutine , должна быть реализована в том же процессе, что и приложение, вызывающее функцию Icmp6SendEcho2 . Если функция обратного вызова находится в отдельной библиотеке DLL, ее следует загрузить перед вызовом функции Icmp6SendEcho2 .

Для IPv4 используйте функции IcmpCreateFile, IcmpSendEcho, IcmpSendEcho2, IcmpSendEcho2Ex и IcmpParseReplies .

Обратите внимание, что директива include для файла заголовка Iphlpapi.h должна быть помещена перед файлом заголовка Icmpapi.h .

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header icmpapi.h
Библиотека Iphlpapi.lib
DLL Iphlpapi.dll

См. также раздел

CreateEvent

CreateEventEx

Объекты событий

Getlasterror

ICMPV6_ECHO_REPLY

ICMP_ECHO_REPLY

IP_OPTION_INFORMATION

Icmp6CreateFile

Icmp6ParseReplies

IcmpCloseHandle

IcmpCreateFile

IcmpParseReplies

IcmpSendecho

IcmpSendecho2

IcmpSendecho2Ex

sockaddr