/*++ Copyright (c) 1991-1999 Microsoft Corporation Module Name: icmpapi.h Abstract: Declarations for the Win32 ICMP Echo request API. Author: Portable Systems Group 30-December-1993 Revision History: Notes: --*/ #ifndef _ICMP_INCLUDED_ #define _ICMP_INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif #ifdef __cplusplus extern "C" { #endif // // Exported Routines. // //++ // // Routine Name: // // IcmpCreateFile // // Routine Description: // // Opens a handle on which ICMP Echo Requests can be issued. // // Arguments: // // None. // // Return Value: // // An open file handle or INVALID_HANDLE_VALUE. Extended error information // is available by calling GetLastError(). // //-- HANDLE WINAPI IcmpCreateFile( VOID ); //++ // // Routine Name: // // Icmp6CreateFile // // Routine Description: // // Opens a handle on which ICMPv6 Echo Requests can be issued. // // Arguments: // // None. // // Return Value: // // An open file handle or INVALID_HANDLE_VALUE. Extended error information // is available by calling GetLastError(). // //-- HANDLE WINAPI Icmp6CreateFile( VOID ); //++ // // Routine Name: // // IcmpCloseHandle // // Routine Description: // // Closes a handle opened by ICMPOpenFile. // // Arguments: // // IcmpHandle - The handle to close. // // Return Value: // // TRUE if the handle was closed successfully, otherwise FALSE. Extended // error information is available by calling GetLastError(). // //-- BOOL WINAPI IcmpCloseHandle( HANDLE IcmpHandle ); //++ // // Routine Name: // // IcmpSendEcho // // Routine Description: // // Sends an ICMP Echo request and returns any replies. The // call returns when the timeout has expired or the reply buffer // is filled. // // Arguments: // // IcmpHandle - An open handle returned by ICMPCreateFile. // // DestinationAddress - The destination of the echo request. // // RequestData - A buffer containing the data to send in the // request. // // RequestSize - The number of bytes in the request data buffer. // // RequestOptions - Pointer to the IP header options for the request. // May be NULL. // // ReplyBuffer - A buffer to hold any replies to the request. // On return, the buffer will contain an array of // ICMP_ECHO_REPLY structures followed by the // options and data for the replies. The buffer // should be large enough to hold at least one // ICMP_ECHO_REPLY structure plus // MAX(RequestSize, 8) bytes of data since an ICMP // error message contains 8 bytes of data. // // ReplySize - The size in bytes of the reply buffer. // // Timeout - The time in milliseconds to wait for replies. // // Return Value: // // Returns the number of ICMP_ECHO_REPLY structures stored in ReplyBuffer. // The status of each reply is contained in the structure. If the return // value is zero, extended error information is available via // GetLastError(). // //-- DWORD WINAPI IcmpSendEcho( HANDLE IcmpHandle, IPAddr DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout ); //++ // // Routine Description: // // Sends an ICMP Echo request and the call returns either immediately // (if Event or ApcRoutine is NonNULL) or returns after the specified // timeout. The ReplyBuffer contains the ICMP responses, if any. // // Arguments: // // IcmpHandle - An open handle returned by ICMPCreateFile. // // Event - This is the event to be signalled whenever an IcmpResponse // comes in. // // ApcRoutine - This routine would be called when the calling thread // is in an alertable thread and an ICMP reply comes in. // // ApcContext - This optional parameter is given to the ApcRoutine when // this call succeeds. // // DestinationAddress - The destination of the echo request. // // RequestData - A buffer containing the data to send in the // request. // // RequestSize - The number of bytes in the request data buffer. // // RequestOptions - Pointer to the IP header options for the request. // May be NULL. // // ReplyBuffer - A buffer to hold any replies to the request. // On return, the buffer will contain an array of // ICMP_ECHO_REPLY structures followed by options // and data. The buffer must be large enough to // hold at least one ICMP_ECHO_REPLY structure. // It should be large enough to also hold // 8 more bytes of data - this is the size of // an ICMP error message. // // ReplySize - The size in bytes of the reply buffer. // // Timeout - The time in milliseconds to wait for replies. // This is NOT used if ApcRoutine is not NULL or if Event // is not NULL. // // Return Value: // // Returns the number of replies received and stored in ReplyBuffer. If // the return value is zero, extended error information is available // via GetLastError(). // // Remarks: // // On NT platforms, // If used Asynchronously (either ApcRoutine or Event is specified), then // ReplyBuffer and ReplySize are still needed. This is where the response // comes in. // ICMP Response data is copied to the ReplyBuffer provided, and the caller of // this function has to parse it asynchronously. The function IcmpParseReply // is provided for this purpose. // // On non-NT platforms, // Event, ApcRoutine and ApcContext are IGNORED. // //-- DWORD WINAPI IcmpSendEcho2( HANDLE IcmpHandle, HANDLE Event, #ifdef PIO_APC_ROUTINE_DEFINED PIO_APC_ROUTINE ApcRoutine, #else FARPROC ApcRoutine, #endif PVOID ApcContext, IPAddr DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout ); DWORD WINAPI Icmp6SendEcho2( HANDLE IcmpHandle, HANDLE Event, #ifdef PIO_APC_ROUTINE_DEFINED PIO_APC_ROUTINE ApcRoutine, #else FARPROC ApcRoutine, #endif PVOID ApcContext, struct sockaddr_in6 *SourceAddress, struct sockaddr_in6 *DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout ); //++ // // Routine Description: // // Parses the reply buffer provided and returns the number of ICMP responses found. // // Arguments: // // ReplyBuffer - This must be the same buffer that was passed to IcmpSendEcho2 // This is rewritten to hold an array of ICMP_ECHO_REPLY structures. // (i.e. the type is PICMP_ECHO_REPLY). // // ReplySize - This must be the size of the above buffer. // // Return Value: // Returns the number of ICMP responses found. If there is an errors, return value is // zero. The error can be determined by a call to GetLastError. // // Remarks: // This function SHOULD NOT BE USED on a reply buffer that was passed to SendIcmpEcho. // SendIcmpEcho actually parses the buffer before returning back to the user. This function // is meant to be used only with SendIcmpEcho2. //-- DWORD IcmpParseReplies( LPVOID ReplyBuffer, DWORD ReplySize ); DWORD Icmp6ParseReplies( LPVOID ReplyBuffer, DWORD ReplySize ); #ifdef __cplusplus } #endif #endif // _ICMP_INCLUDED_