|
|
1.1 root 1: /*++
2:
3: Copyright (c) Microsoft Corporation. All rights reserved.
4:
5: Module Name:
6:
7: iphlpapi.h
8:
9: Abstract:
10: Header file for functions to interact with the IP Stack for MIB-II and
11: related functionality
12:
13: --*/
14:
15: #ifndef __IPHLPAPI_H__
16: #define __IPHLPAPI_H__
17:
18: #if _MSC_VER > 1000
19: #pragma once
20: #endif
21:
22: #ifdef __cplusplus
23: extern "C" {
24: #endif
25:
26: //////////////////////////////////////////////////////////////////////////////
27: // //
28: // IPRTRMIB.H has the definitions of the strcutures used to set and get //
29: // information //
30: // //
31: //////////////////////////////////////////////////////////////////////////////
32:
33: #include <iprtrmib.h>
34: #include <ipexport.h>
35: #include <iptypes.h>
36:
37: //////////////////////////////////////////////////////////////////////////////
38: // //
39: // The GetXXXTable APIs take a buffer and a size of buffer. If the buffer //
40: // is not large enough, the APIs return ERROR_INSUFFICIENT_BUFFER and //
41: // *pdwSize is the required buffer size //
42: // The bOrder is a BOOLEAN, which if TRUE sorts the table according to //
43: // MIB-II (RFC XXXX) //
44: // //
45: //////////////////////////////////////////////////////////////////////////////
46:
47:
48: //////////////////////////////////////////////////////////////////////////////
49: // //
50: // Retrieves the number of interfaces in the system. These include LAN and //
51: // WAN interfaces //
52: // //
53: //////////////////////////////////////////////////////////////////////////////
54:
55:
56: DWORD
57: WINAPI
58: GetNumberOfInterfaces(
59: OUT PDWORD pdwNumIf
60: );
61:
62: //////////////////////////////////////////////////////////////////////////////
63: // //
64: // Gets the MIB-II ifEntry //
65: // The dwIndex field of the MIB_IFROW should be set to the index of the //
66: // interface being queried //
67: // //
68: //////////////////////////////////////////////////////////////////////////////
69:
70: DWORD
71: WINAPI
72: GetIfEntry(
73: IN OUT PMIB_IFROW pIfRow
74: );
75:
76: //////////////////////////////////////////////////////////////////////////////
77: // //
78: // Gets the MIB-II IfTable //
79: // //
80: //////////////////////////////////////////////////////////////////////////////
81:
82: DWORD
83: WINAPI
84: GetIfTable(
85: OUT PMIB_IFTABLE pIfTable,
86: IN OUT PULONG pdwSize,
87: IN BOOL bOrder
88: );
89:
90: //////////////////////////////////////////////////////////////////////////////
91: // //
92: // Gets the Interface to IP Address mapping //
93: // //
94: //////////////////////////////////////////////////////////////////////////////
95:
96: DWORD
97: WINAPI
98: GetIpAddrTable(
99: OUT PMIB_IPADDRTABLE pIpAddrTable,
100: IN OUT PULONG pdwSize,
101: IN BOOL bOrder
102: );
103:
104: //////////////////////////////////////////////////////////////////////////////
105: // //
106: // Gets the current IP Address to Physical Address (ARP) mapping //
107: // //
108: //////////////////////////////////////////////////////////////////////////////
109:
110: DWORD
111: WINAPI
112: GetIpNetTable(
113: OUT PMIB_IPNETTABLE pIpNetTable,
114: IN OUT PULONG pdwSize,
115: IN BOOL bOrder
116: );
117:
118: //////////////////////////////////////////////////////////////////////////////
119: // //
120: // Gets the IP Routing Table (RFX XXXX) //
121: // //
122: //////////////////////////////////////////////////////////////////////////////
123:
124: DWORD
125: WINAPI
126: GetIpForwardTable(
127: OUT PMIB_IPFORWARDTABLE pIpForwardTable,
128: IN OUT PULONG pdwSize,
129: IN BOOL bOrder
130: );
131:
132: //////////////////////////////////////////////////////////////////////////////
133: // //
134: // Gets TCP Connection/UDP Listener Table //
135: // //
136: //////////////////////////////////////////////////////////////////////////////
137:
138: DWORD
139: WINAPI
140: GetTcpTable(
141: OUT PMIB_TCPTABLE pTcpTable,
142: IN OUT PDWORD pdwSize,
143: IN BOOL bOrder
144: );
145:
146: DWORD
147: WINAPI
148: GetUdpTable(
149: OUT PMIB_UDPTABLE pUdpTable,
150: IN OUT PDWORD pdwSize,
151: IN BOOL bOrder
152: );
153:
154:
155: //////////////////////////////////////////////////////////////////////////////
156: // //
157: // Gets IP/ICMP/TCP/UDP Statistics //
158: // //
159: //////////////////////////////////////////////////////////////////////////////
160:
161: DWORD
162: WINAPI
163: GetIpStatistics(
164: OUT PMIB_IPSTATS pStats
165: );
166:
167: DWORD
168: WINAPI
169: GetIpStatisticsEx(
170: OUT PMIB_IPSTATS pStats,
171: IN DWORD dwFamily
172: );
173:
174: DWORD
175: WINAPI
176: GetIcmpStatistics(
177: OUT PMIB_ICMP pStats
178: );
179:
180: DWORD
181: WINAPI
182: GetIcmpStatisticsEx(
183: OUT PMIB_ICMP_EX pStats,
184: IN DWORD dwFamily
185: );
186:
187: DWORD
188: WINAPI
189: GetTcpStatistics(
190: OUT PMIB_TCPSTATS pStats
191: );
192:
193: DWORD
194: WINAPI
195: GetTcpStatisticsEx(
196: OUT PMIB_TCPSTATS pStats,
197: IN DWORD dwFamily
198: );
199:
200: DWORD
201: WINAPI
202: GetUdpStatistics(
203: OUT PMIB_UDPSTATS pStats
204: );
205:
206: DWORD
207: WINAPI
208: GetUdpStatisticsEx(
209: OUT PMIB_UDPSTATS pStats,
210: IN DWORD dwFamily
211: );
212:
213: //////////////////////////////////////////////////////////////////////////////
214: // //
215: // Used to set the ifAdminStatus on an interface. The only fields of the //
216: // MIB_IFROW that are relevant are the dwIndex (index of the interface //
217: // whose status needs to be set) and the dwAdminStatus which can be either //
218: // MIB_IF_ADMIN_STATUS_UP or MIB_IF_ADMIN_STATUS_DOWN //
219: // //
220: //////////////////////////////////////////////////////////////////////////////
221:
222: DWORD
223: WINAPI
224: SetIfEntry(
225: IN PMIB_IFROW pIfRow
226: );
227:
228: //////////////////////////////////////////////////////////////////////////////
229: // //
230: // Used to create, modify or delete a route. In all cases the //
231: // dwForwardIfIndex, dwForwardDest, dwForwardMask, dwForwardNextHop and //
232: // dwForwardPolicy MUST BE SPECIFIED. Currently dwForwardPolicy is unused //
233: // and MUST BE 0. //
234: // For a set, the complete MIB_IPFORWARDROW structure must be specified //
235: // //
236: //////////////////////////////////////////////////////////////////////////////
237:
238: DWORD
239: WINAPI
240: CreateIpForwardEntry(
241: IN PMIB_IPFORWARDROW pRoute
242: );
243:
244: DWORD
245: WINAPI
246: SetIpForwardEntry(
247: IN PMIB_IPFORWARDROW pRoute
248: );
249:
250: DWORD
251: WINAPI
252: DeleteIpForwardEntry(
253: IN PMIB_IPFORWARDROW pRoute
254: );
255:
256: //////////////////////////////////////////////////////////////////////////////
257: // //
258: // Used to set the ipForwarding to ON or OFF (currently only ON->OFF is //
259: // allowed) and to set the defaultTTL. If only one of the fields needs to //
260: // be modified and the other needs to be the same as before the other field //
261: // needs to be set to MIB_USE_CURRENT_TTL or MIB_USE_CURRENT_FORWARDING as //
262: // the case may be //
263: // //
264: //////////////////////////////////////////////////////////////////////////////
265:
266:
267: DWORD
268: WINAPI
269: SetIpStatistics(
270: IN PMIB_IPSTATS pIpStats
271: );
272:
273: //////////////////////////////////////////////////////////////////////////////
274: // //
275: // Used to set the defaultTTL. //
276: // //
277: //////////////////////////////////////////////////////////////////////////////
278:
279: DWORD
280: WINAPI
281: SetIpTTL(
282: UINT nTTL
283: );
284:
285: //////////////////////////////////////////////////////////////////////////////
286: // //
287: // Used to create, modify or delete an ARP entry. In all cases the dwIndex //
288: // dwAddr field MUST BE SPECIFIED. //
289: // For a set, the complete MIB_IPNETROW structure must be specified //
290: // //
291: //////////////////////////////////////////////////////////////////////////////
292:
293: DWORD
294: WINAPI
295: CreateIpNetEntry(
296: IN PMIB_IPNETROW pArpEntry
297: );
298:
299: DWORD
300: WINAPI
301: SetIpNetEntry(
302: IN PMIB_IPNETROW pArpEntry
303: );
304:
305: DWORD
306: WINAPI
307: DeleteIpNetEntry(
308: IN PMIB_IPNETROW pArpEntry
309: );
310:
311: DWORD
312: WINAPI
313: FlushIpNetTable(
314: IN DWORD dwIfIndex
315: );
316:
317:
318: //////////////////////////////////////////////////////////////////////////////
319: // //
320: // Used to create or delete a Proxy ARP entry. The dwIndex is the index of //
321: // the interface on which to PARP for the dwAddress. If the interface is //
322: // of a type that doesnt support ARP, e.g. PPP, then the call will fail //
323: // //
324: //////////////////////////////////////////////////////////////////////////////
325:
326: DWORD
327: WINAPI
328: CreateProxyArpEntry(
329: IN DWORD dwAddress,
330: IN DWORD dwMask,
331: IN DWORD dwIfIndex
332: );
333:
334: DWORD
335: WINAPI
336: DeleteProxyArpEntry(
337: IN DWORD dwAddress,
338: IN DWORD dwMask,
339: IN DWORD dwIfIndex
340: );
341:
342: //////////////////////////////////////////////////////////////////////////////
343: // //
344: // Used to set the state of a TCP Connection. The only state that it can be //
345: // set to is MIB_TCP_STATE_DELETE_TCB. The complete MIB_TCPROW structure //
346: // MUST BE SPECIFIED //
347: // //
348: //////////////////////////////////////////////////////////////////////////////
349:
350: DWORD
351: WINAPI
352: SetTcpEntry(
353: IN PMIB_TCPROW pTcpRow
354: );
355:
356:
357: DWORD
358: WINAPI
359: GetInterfaceInfo(
360: IN PIP_INTERFACE_INFO pIfTable,
361: OUT PULONG dwOutBufLen
362: );
363:
364: DWORD
365: WINAPI
366: GetUniDirectionalAdapterInfo(OUT PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo,
367: OUT PULONG dwOutBufLen
368: );
369:
370: #ifndef NhpAllocateAndGetInterfaceInfoFromStack_DEFINED
371: #define NhpAllocateAndGetInterfaceInfoFromStack_DEFINED
372:
373: DWORD
374: WINAPI
375: NhpAllocateAndGetInterfaceInfoFromStack(
376: OUT IP_INTERFACE_NAME_INFO **ppTable,
377: OUT PDWORD pdwCount,
378: IN BOOL bOrder,
379: IN HANDLE hHeap,
380: IN DWORD dwFlags
381: );
382:
383: #endif
384:
385: //////////////////////////////////////////////////////////////////////////////
386: // //
387: // Gets the "best" outgoing interface for the specified destination address //
388: // //
389: //////////////////////////////////////////////////////////////////////////////
390:
391: DWORD
392: WINAPI
393: GetBestInterface(
394: IN IPAddr dwDestAddr,
395: OUT PDWORD pdwBestIfIndex
396: );
397:
398: #pragma warning(push)
399: #pragma warning(disable:4115)
400: DWORD
401: WINAPI
402: GetBestInterfaceEx(
403: IN struct sockaddr *pDestAddr,
404: OUT PDWORD pdwBestIfIndex
405: );
406: #pragma warning(pop)
407:
408: //////////////////////////////////////////////////////////////////////////////
409: // //
410: // Gets the best (longest matching prefix) route for the given destination //
411: // If the source address is also specified (i.e. is not 0x00000000), and //
412: // there are multiple "best" routes to the given destination, the returned //
413: // route will be one that goes out over the interface which has an address //
414: // that matches the source address //
415: // //
416: //////////////////////////////////////////////////////////////////////////////
417:
418: DWORD
419: WINAPI
420: GetBestRoute(
421: IN DWORD dwDestAddr,
422: IN DWORD dwSourceAddr, OPTIONAL
423: OUT PMIB_IPFORWARDROW pBestRoute
424: );
425:
426: DWORD
427: WINAPI
428: NotifyAddrChange(
429: OUT PHANDLE Handle,
430: IN LPOVERLAPPED overlapped
431: );
432:
433:
434: DWORD
435: WINAPI
436: NotifyRouteChange(
437: OUT PHANDLE Handle,
438: IN LPOVERLAPPED overlapped
439: );
440:
441: BOOL
442: WINAPI
443: CancelIPChangeNotify(
444: IN LPOVERLAPPED notifyOverlapped
445: );
446:
447: DWORD
448: WINAPI
449: GetAdapterIndex(
450: IN LPWSTR AdapterName,
451: OUT PULONG IfIndex
452: );
453:
454: DWORD
455: WINAPI
456: AddIPAddress(
457: IPAddr Address,
458: IPMask IpMask,
459: DWORD IfIndex,
460: PULONG NTEContext,
461: PULONG NTEInstance
462: );
463:
464: DWORD
465: WINAPI
466: DeleteIPAddress(
467: ULONG NTEContext
468: );
469:
470: DWORD
471: WINAPI
472: GetNetworkParams(
473: PFIXED_INFO pFixedInfo, PULONG pOutBufLen
474: );
475:
476: DWORD
477: WINAPI
478: GetAdaptersInfo(
479: PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen
480: );
481:
482: PIP_ADAPTER_ORDER_MAP
483: WINAPI
484: GetAdapterOrderMap(
485: VOID
486: );
487:
488: #ifdef _WINSOCK2API_
489:
490: //
491: // The following functions require Winsock2.
492: //
493:
494: DWORD
495: WINAPI
496: GetAdaptersAddresses(
497: IN ULONG Family,
498: IN DWORD Flags,
499: IN PVOID Reserved,
500: OUT PIP_ADAPTER_ADDRESSES pAdapterAddresses,
501: IN OUT PULONG pOutBufLen
502: );
503:
504: #endif
505:
506: DWORD
507: WINAPI
508: GetPerAdapterInfo(
509: ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen
510: );
511:
512: DWORD
513: WINAPI
514: IpReleaseAddress(
515: PIP_ADAPTER_INDEX_MAP AdapterInfo
516: );
517:
518:
519: DWORD
520: WINAPI
521: IpRenewAddress(
522: PIP_ADAPTER_INDEX_MAP AdapterInfo
523: );
524:
525: DWORD
526: WINAPI
527: SendARP(
528: IPAddr DestIP,
529: IPAddr SrcIP,
530: PULONG pMacAddr,
531: PULONG PhyAddrLen
532: );
533:
534: BOOL
535: WINAPI
536: GetRTTAndHopCount(
537: IPAddr DestIpAddress,
538: PULONG HopCount,
539: ULONG MaxHops,
540: PULONG RTT
541: );
542:
543: DWORD
544: WINAPI
545: GetFriendlyIfIndex(
546: DWORD IfIndex
547: );
548:
549: DWORD
550: WINAPI
551: EnableRouter(
552: HANDLE* pHandle,
553: OVERLAPPED* pOverlapped
554: );
555:
556: DWORD
557: WINAPI
558: UnenableRouter(
559: OVERLAPPED* pOverlapped,
560: LPDWORD lpdwEnableCount OPTIONAL
561: );
562: DWORD
563: WINAPI
564: DisableMediaSense(
565: HANDLE *pHandle,
566: OVERLAPPED *pOverLapped
567: );
568:
569: DWORD
570: WINAPI
571: RestoreMediaSense(
572: OVERLAPPED* pOverlapped,
573: LPDWORD lpdwEnableCount OPTIONAL
574: );
575:
576: DWORD
577: WINAPI
578: GetIpErrorString(
579: IN IP_STATUS ErrorCode,
580: OUT PWCHAR Buffer,
581: IN OUT PDWORD Size
582: );
583:
584: #ifdef __cplusplus
585: }
586: #endif
587:
588: #endif //__IPHLPAPI_H__
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.