Reactos
1/*
2 * PROJECT: ReactOS PSDK
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: ICMP API definitions
5 * COPYRIGHT: Copyright 2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
6 */
7
8#ifndef _ICMP_INCLUDED_
9#define _ICMP_INCLUDED_
10
11#pragma once
12
13#ifndef IPHLPAPI_DLL_LINKAGE
14#ifdef DECLSPEC_IMPORT
15#define IPHLPAPI_DLL_LINKAGE DECLSPEC_IMPORT
16#else
17#define IPHLPAPI_DLL_LINKAGE
18#endif
19#endif
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25IPHLPAPI_DLL_LINKAGE
26HANDLE
27WINAPI
28IcmpCreateFile(
29 VOID);
30
31#if (NTDDI_VERSION >= NTDDI_WINXP)
32IPHLPAPI_DLL_LINKAGE
33HANDLE
34WINAPI
35Icmp6CreateFile(
36 VOID);
37#endif
38
39IPHLPAPI_DLL_LINKAGE
40BOOL
41WINAPI
42IcmpCloseHandle(
43 _In_ HANDLE IcmpHandle);
44
45IPHLPAPI_DLL_LINKAGE
46DWORD
47WINAPI
48IcmpSendEcho(
49 _In_ HANDLE IcmpHandle,
50 _In_ IPAddr DestinationAddress,
51 _In_reads_bytes_(RequestSize) LPVOID RequestData,
52 _In_ WORD RequestSize,
53 _In_opt_ PIP_OPTION_INFORMATION RequestOptions,
54 _Out_writes_bytes_(ReplySize) LPVOID ReplyBuffer,
55 _In_range_(>=, sizeof(ICMP_ECHO_REPLY) + RequestSize + 8)
56 DWORD ReplySize,
57 _In_ DWORD Timeout);
58
59IPHLPAPI_DLL_LINKAGE
60DWORD
61WINAPI
62IcmpSendEcho2(
63 _In_ HANDLE IcmpHandle,
64 _In_opt_ HANDLE Event,
65#ifdef PIO_APC_ROUTINE_DEFINED
66 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
67#else
68 _In_opt_ FARPROC ApcRoutine,
69#endif
70 _In_opt_ PVOID ApcContext,
71 _In_ IPAddr DestinationAddress,
72 _In_reads_bytes_(RequestSize) LPVOID RequestData,
73 _In_ WORD RequestSize,
74 _In_opt_ PIP_OPTION_INFORMATION RequestOptions,
75 _Out_writes_bytes_(ReplySize) LPVOID ReplyBuffer,
76 _In_range_(>=, sizeof(ICMP_ECHO_REPLY) + RequestSize + 8)
77 DWORD ReplySize,
78 _In_ DWORD Timeout);
79
80#if (NTDDI_VERSION >= NTDDI_VISTASP1)
81IPHLPAPI_DLL_LINKAGE
82DWORD
83WINAPI
84IcmpSendEcho2Ex(
85 _In_ HANDLE IcmpHandle,
86 _In_opt_ HANDLE Event,
87#ifdef PIO_APC_ROUTINE_DEFINED
88 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
89#else
90 _In_opt_ FARPROC ApcRoutine,
91#endif
92 _In_opt_ PVOID ApcContext,
93 _In_ IPAddr SourceAddress,
94 _In_ IPAddr DestinationAddress,
95 _In_reads_bytes_(RequestSize) LPVOID RequestData,
96 _In_ WORD RequestSize,
97 _In_opt_ PIP_OPTION_INFORMATION RequestOptions,
98 _Out_writes_bytes_(ReplySize) LPVOID ReplyBuffer,
99 _In_range_(>=, sizeof(ICMP_ECHO_REPLY) + RequestSize + 8 + sizeof(IO_STATUS_BLOCK))
100 DWORD ReplySize,
101 _In_ DWORD Timeout);
102#endif
103
104#if (NTDDI_VERSION >= NTDDI_WINXP)
105IPHLPAPI_DLL_LINKAGE
106DWORD
107WINAPI
108Icmp6SendEcho2(
109 _In_ HANDLE IcmpHandle,
110 _In_opt_ HANDLE Event,
111#ifdef PIO_APC_ROUTINE_DEFINED
112 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
113#else
114 _In_opt_ FARPROC ApcRoutine,
115#endif
116 _In_opt_ PVOID ApcContext,
117 _In_ struct sockaddr_in6 *SourceAddress,
118 _In_ struct sockaddr_in6 *DestinationAddress,
119 _In_reads_bytes_(RequestSize) LPVOID RequestData,
120 _In_ WORD RequestSize,
121 _In_opt_ PIP_OPTION_INFORMATION RequestOptions,
122 _Out_writes_bytes_(ReplySize) LPVOID ReplyBuffer,
123 _In_range_(>=, sizeof(ICMPV6_ECHO_REPLY) + RequestSize + 8 + sizeof(IO_STATUS_BLOCK))
124 DWORD ReplySize,
125 _In_ DWORD Timeout);
126#endif
127
128IPHLPAPI_DLL_LINKAGE
129DWORD
130WINAPI
131IcmpParseReplies(
132 _Out_writes_bytes_(ReplySize) LPVOID ReplyBuffer,
133 _In_range_(>=, sizeof(ICMP_ECHO_REPLY) + 8)
134 DWORD ReplySize);
135
136#if (NTDDI_VERSION >= NTDDI_WINXP)
137IPHLPAPI_DLL_LINKAGE
138DWORD
139WINAPI
140Icmp6ParseReplies(
141 _Out_writes_bytes_(ReplySize) LPVOID ReplyBuffer,
142 _In_range_(>=, sizeof(ICMPV6_ECHO_REPLY) + 8)
143 DWORD ReplySize);
144#endif
145
146#ifdef __cplusplus
147}
148#endif
149
150#endif /* _ICMP_INCLUDED_ */