发信人: wenbobo(灌了拂衣去) 
整理人: wenbobo(2002-12-06 23:32:55), 站内信件
 | 
 
 
//函数在ICMP.DLL里面,大家可以自己构造.lib来用
 
 #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:
 //
 //     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
     );
 
 
 //++
 //
 // 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
     );
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif // _ICMP_INCLUDED_
 
 
  ---- 
 太阳当头照,花儿对我笑,小鸟说早早早,你为什么背个炸药包?
 我去炸学校,谁也不知道,一拉线儿,我就跑,轰隆一声学校不见了。
 
           | 
 
 
 |