1324 lines
30 KiB
C
1324 lines
30 KiB
C
/*++
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
ipnatapi.h
|
|
|
|
Abstract:
|
|
|
|
This module contains declarations for use by user-mode clients of the NAT.
|
|
Functions are included to access the kernel-mode packet-redirection
|
|
functionality implemented using the Windows 2000 firewall hook.
|
|
To facilitate development of transparent application proxies,
|
|
functions are also included to access the port-reservation functionality
|
|
implemented by the Windows 2000 TCP/IP driver.
|
|
|
|
Author:
|
|
|
|
Abolade Gbadegesin (aboladeg) 8-May-1998
|
|
|
|
Revision History:
|
|
|
|
Abolade Gbadegesin (aboladeg) 25-May-1999
|
|
|
|
Added port-reservation routines.
|
|
|
|
Jonathan Burstein (jonburs) 13-March-2000
|
|
|
|
Adapter-restricted variants.
|
|
|
|
--*/
|
|
|
|
#ifndef _ROUTING_IPNATAPI_H_
|
|
#define _ROUTING_IPNATAPI_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// General API declarations
|
|
//
|
|
|
|
typedef VOID
|
|
(WINAPI* PNAT_COMPLETION_ROUTINE)(
|
|
HANDLE RedirectHandle,
|
|
BOOLEAN Cancelled,
|
|
PVOID CompletionContext
|
|
);
|
|
|
|
ULONG
|
|
NatInitializeTranslator(
|
|
PHANDLE TranslatorHandle
|
|
);
|
|
|
|
VOID
|
|
NatShutdownTranslator(
|
|
HANDLE TranslatorHandle
|
|
);
|
|
|
|
//
|
|
// Redirect API declarations
|
|
//
|
|
|
|
typedef enum _NAT_REDIRECT_FLAGS {
|
|
NatRedirectFlagNoTimeout = 0x00000004,
|
|
NatRedirectFlagUnidirectional = 0x00000008,
|
|
NatRedirectFlagRestrictSource = 0x00000010,
|
|
NatRedirectFlagPortRedirect = 0x00000040,
|
|
NatRedirectFlagReceiveOnly = 0x00000080,
|
|
NatRedirectFlagLoopback = 0x00000100,
|
|
#if _WIN32_WINNT > 0x0500
|
|
NatRedirectFlagSendOnly = 0x00000200,
|
|
NatRedirectFlagRestrictAdapter = 0x00000400,
|
|
NatRedirectFlagSourceRedirect = 0x00000800,
|
|
NatRedirectFlagsAll = 0x00000fdc
|
|
#else
|
|
NatRedirectFlagsAll = 0x000001dc
|
|
#endif
|
|
} NAT_REDIRECT_FLAGS, *PNAT_REDIRECT_FLAGS;
|
|
|
|
typedef enum _NAT_REDIRECT_INFORMATION_CLASS {
|
|
NatByteCountRedirectInformation=1,
|
|
NatRejectRedirectInformation,
|
|
NatSourceMappingRedirectInformation,
|
|
NatDestinationMappingRedirectInformation,
|
|
NatMaximumRedirectInformation
|
|
} NAT_REDIRECT_INFORMATION_CLASS, *PNAT_REDIRECT_INFORMATION_CLASS;
|
|
|
|
typedef struct _NAT_BYTE_COUNT_REDIRECT_INFORMATION {
|
|
ULONG64 BytesForward;
|
|
ULONG64 BytesReverse;
|
|
} NAT_BYTE_COUNT_REDIRECT_INFORMATION, *PNAT_BYTE_COUNT_REDIRECT_INFORMATION;
|
|
|
|
typedef struct _NAT_REJECT_REDIRECT_INFORMATION {
|
|
ULONG64 RejectsForward;
|
|
ULONG64 RejectsReverse;
|
|
} NAT_REJECT_REDIRECT_INFORMATION, *PNAT_REJECT_REDIRECT_INFORMATION;
|
|
|
|
typedef struct _NAT_SOURCE_MAPPING_REDIRECT_INFORMATION {
|
|
ULONG SourceAddress;
|
|
USHORT SourcePort;
|
|
ULONG NewSourceAddress;
|
|
USHORT NewSourcePort;
|
|
} NAT_SOURCE_MAPPING_REDIRECT_INFORMATION,
|
|
*PNAT_SOURCE_MAPPING_REDIRECT_INFORMATION;
|
|
|
|
typedef struct _NAT_DESTINATION_MAPPING_REDIRECT_INFORMATION {
|
|
ULONG DestinationAddress;
|
|
USHORT DestinationPort;
|
|
ULONG NewDestinationAddress;
|
|
USHORT NewDestinationPort;
|
|
} NAT_DESTINATION_MAPPING_REDIRECT_INFORMATION,
|
|
*PNAT_DESTINATION_MAPPING_REDIRECT_INFORMATION;
|
|
|
|
#define NAT_INVALID_IF_INDEX (ULONG)-1 // The invalid inteface index.
|
|
|
|
//
|
|
// ULONG
|
|
// NatCancelPartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCancelPartialRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort \
|
|
) \
|
|
NatCancelRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0 \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCancelPortRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// UCHAR Protocol,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCancelPortRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort \
|
|
) \
|
|
NatCancelRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
0, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0 \
|
|
)
|
|
|
|
ULONG
|
|
NatCancelRedirect(
|
|
HANDLE TranslatorHandle,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG SourceAddress,
|
|
USHORT SourcePort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG NewSourceAddress,
|
|
USHORT NewSourcePort
|
|
);
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreatePartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreatePartialRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateAdapterRestrictedPartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictAdapterIndex,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateAdapterRestrictedPartialRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictAdapterIndex, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirectEx( \
|
|
TranslatorHandle, \
|
|
Flags | NatRedirectFlagRestrictAdapter, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
#endif
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreatePortRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreatePortRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirect( \
|
|
TranslatorHandle, \
|
|
Flags | NatRedirectFlagPortRedirect, \
|
|
Protocol, \
|
|
0, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateAdapterRestrictedPortRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictAdapterIndex,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateAdapterRestrictedPortRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictAdapterIndex, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirectEx( \
|
|
TranslatorHandle, \
|
|
Flags | NatRedirectFlagPortRedirect | NatRedirectFlagRestrictAdapter, \
|
|
Protocol, \
|
|
0, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
#endif
|
|
|
|
ULONG
|
|
NatCreateRedirect(
|
|
HANDLE TranslatorHandle,
|
|
ULONG Flags,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG SourceAddress,
|
|
USHORT SourcePort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG NewSourceAddress,
|
|
USHORT NewSourcePort,
|
|
PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
PVOID CompletionContext,
|
|
HANDLE NotifyEvent OPTIONAL
|
|
);
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// If IPNATAPI_SET_EVENT_ON_COMPLETION is specified as the completion
|
|
// routine, the completion context must be a valid event handle. The
|
|
// event object that the handle refers to will be signaled upon the
|
|
// completion of the redirect.
|
|
//
|
|
// N.B. Note that using this form of completion notification gives
|
|
// no indication if the redirect was cancelled or completed normally.
|
|
//
|
|
|
|
#define IPNATAPI_SET_EVENT_ON_COMPLETION (PNAT_COMPLETION_ROUTINE) -1
|
|
|
|
|
|
ULONG
|
|
NatCreateRedirectEx(
|
|
HANDLE TranslatorHandle,
|
|
ULONG Flags,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG SourceAddress,
|
|
USHORT SourcePort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG NewSourceAddress,
|
|
USHORT NewSourcePort,
|
|
ULONG RestrictAdapterIndex OPTIONAL,
|
|
PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
PVOID CompletionContext,
|
|
HANDLE NotifyEvent OPTIONAL
|
|
);
|
|
|
|
#endif
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateAddressRestrictedPartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictSourceAddress,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateAddressRestrictedPartialRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirect( \
|
|
TranslatorHandle, \
|
|
Flags | NatRedirectFlagRestrictSource, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
RestrictSourceAddress, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateRestrictedPartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictSourceAddress,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateRestrictedPartialRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirect( \
|
|
TranslatorHandle, \
|
|
Flags | NatRedirectFlagRestrictSource, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
RestrictSourceAddress, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateAdapterRestrictedAddressRestrictedPartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictSourceAddress,
|
|
// ULONG RestrictAdapterIndex,
|
|
// PNAT_COMPLETION_ROUTINE CompletionRoutine,
|
|
// PVOID CompletionContext,
|
|
// HANDLE NotifyEvent OPTIONAL
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateAdapterRestrictedAddressRestrictedPartialRedirect( \
|
|
TranslatorHandle, \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
RestrictAdapterIndex, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
) \
|
|
NatCreateRedirectEx( \
|
|
TranslatorHandle, \
|
|
Flags | NatRedirectFlagRestrictSource | NatRedirectFlagRestrictAdapter, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
RestrictSourceAddress, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
CompletionRoutine, \
|
|
CompletionContext, \
|
|
NotifyEvent \
|
|
)
|
|
|
|
#endif
|
|
|
|
|
|
//
|
|
// ULONG
|
|
// NatQueryInformationPartialRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// OUT PVOID Information,
|
|
// IN OUT PULONG InformationLength,
|
|
// NAT_REDIRECT_INFORMATION_CLASS InformationClass
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatQueryInformationPartialRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
Information, \
|
|
InformationLength, \
|
|
InformationClass \
|
|
) \
|
|
NatQueryInformationRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
Information, \
|
|
InformationLength, \
|
|
InformationClass \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatQueryInformationPortRedirect(
|
|
// HANDLE TranslatorHandle,
|
|
// UCHAR Protocol,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// OUT PVOID Information,
|
|
// IN OUT PULONG InformationLength,
|
|
// NAT_REDIRECT_INFORMATION_CLASS InformationClass
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatQueryInformationPortRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
Information, \
|
|
InformationLength, \
|
|
InformationClass \
|
|
) \
|
|
NatQueryInformationRedirect( \
|
|
TranslatorHandle, \
|
|
Protocol, \
|
|
0, \
|
|
DestinationPort, \
|
|
0, \
|
|
0, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
Information, \
|
|
InformationLength, \
|
|
InformationClass \
|
|
)
|
|
|
|
ULONG
|
|
NatQueryInformationRedirect(
|
|
HANDLE TranslatorHandle,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG SourceAddress,
|
|
USHORT SourcePort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG NewSourceAddress,
|
|
USHORT NewSourcePort,
|
|
OUT PVOID Information,
|
|
IN OUT PULONG InformationLength,
|
|
NAT_REDIRECT_INFORMATION_CLASS InformationClass
|
|
);
|
|
|
|
ULONG
|
|
NatQueryInformationRedirectHandle(
|
|
HANDLE RedirectHandle,
|
|
OUT PVOID Information,
|
|
IN OUT PULONG InformationLength,
|
|
NAT_REDIRECT_INFORMATION_CLASS InformationClass
|
|
);
|
|
|
|
//
|
|
// Dynamic-redirect API declarations
|
|
//
|
|
|
|
#define NatCancelDynamicPortRedirect NatCancelDynamicRedirect
|
|
#define NatCancelDynamicPartialRedirect NatCancelDynamicRedirect
|
|
ULONG
|
|
NatCancelDynamicRedirect(
|
|
HANDLE DynamicRedirectHandle
|
|
);
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicPortRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicPortRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirect( \
|
|
Flags | NatRedirectFlagPortRedirect, \
|
|
Protocol, \
|
|
0, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicAdapterRestrictedPortRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictAdapterIndex,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicAdapterRestrictedPortRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirectEx( \
|
|
Flags | NatRedirectFlagPortRedirect | NatRedirectFlagRestrictAdapter, \
|
|
Protocol, \
|
|
0, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicAdapterRestrictedSourcePortRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// USHORT SourcePort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictAdapterIndex,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
|
|
#define \
|
|
NatCreateDynamicAdapterRestrictedSourcePortRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
SourcePort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicFullRedirect( \
|
|
Flags | NatRedirectFlagPortRedirect | NatRedirectFlagRestrictAdapter \
|
|
| NatRedirectFlagSourceRedirect, \
|
|
Protocol, \
|
|
0, \
|
|
0, \
|
|
0, \
|
|
SourcePort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicAdapterRestrictedSourceRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG SourceAddress
|
|
// USHORT SourcePort,
|
|
// ULONG NewSourceAddress,
|
|
// USHORT NewSourcePort,
|
|
// ULONG RestrictAdapterIndex,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
|
|
#define \
|
|
NatCreateDynamicAdapterRestrictedSourceRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
SourceAddress, \
|
|
SourcePort, \
|
|
NewSourceAddress, \
|
|
NewSourcePort, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicFullRedirect( \
|
|
Flags | NatRedirectFlagRestrictAdapter | NatRedirectFlagSourceRedirect, \
|
|
Protocol, \
|
|
0, \
|
|
0, \
|
|
SourceAddress, \
|
|
SourcePort, \
|
|
0, \
|
|
0, \
|
|
NewSourceAddress, \
|
|
NewSourcePort, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
#endif
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicPartialRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicPartialRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicAdapterRestrictedPartialRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictAdapterIndex,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicAdapterRestrictedPartialRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirectEx( \
|
|
Flags | NatRedirectFlagRestrictAdapter, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
ULONG
|
|
NatCreateDynamicFullRedirect(
|
|
ULONG Flags,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG SourceAddress,
|
|
USHORT SourcePort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG NewSourceAddress,
|
|
USHORT NewSourcePort,
|
|
ULONG RestrictSourceAddress OPTIONAL,
|
|
ULONG RestrictAdapterIndex OPTIONAL,
|
|
ULONG MinimumBacklog OPTIONAL,
|
|
OUT PHANDLE DynamicRedirectHandlep
|
|
);
|
|
|
|
#endif
|
|
|
|
ULONG
|
|
NatCreateDynamicRedirect(
|
|
ULONG Flags,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG RestrictSourceAddress OPTIONAL,
|
|
ULONG MinimumBacklog OPTIONAL,
|
|
OUT PHANDLE DynamicRedirectHandlep
|
|
);
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
ULONG
|
|
NatCreateDynamicRedirectEx(
|
|
ULONG Flags,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG NewDestinationAddress,
|
|
USHORT NewDestinationPort,
|
|
ULONG RestrictSourceAddress OPTIONAL,
|
|
ULONG RestrictAdapterIndex OPTIONAL,
|
|
ULONG MinimumBacklog OPTIONAL,
|
|
OUT PHANDLE DynamicRedirectHandlep
|
|
);
|
|
|
|
#endif
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicAddressRestrictedPartialRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictSourceAddress,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicAddressRestrictedPartialRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirect( \
|
|
Flags | NatRedirectFlagRestrictSource, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicRestrictedPartialRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictSourceAddress,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicRestrictedPartialRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirect( \
|
|
Flags | NatRedirectFlagRestrictSource, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicAdapterRestrictedAddressRestrictedPartialRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG DestinationAddress,
|
|
// USHORT DestinationPort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG RestrictSourceAddress,
|
|
// ULONG RestrictAdapterIndex,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
#define \
|
|
NatCreateDynamicAdapterRestrictedAddressRestrictedPartialRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicRedirectEx( \
|
|
Flags | NatRedirectFlagRestrictSource | NatRedirectFlagRestrictAdapter, \
|
|
Protocol, \
|
|
DestinationAddress, \
|
|
DestinationPort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
RestrictSourceAddress, \
|
|
RestrictAdapterIndex, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicSourcePortRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// USHORT SourcePort,
|
|
// ULONG NewDestinationAddress,
|
|
// USHORT NewDestinationPort,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
|
|
#define \
|
|
NatCreateDynamicSourcePortRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
SourcePort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicFullRedirect( \
|
|
Flags | NatRedirectFlagPortRedirect | NatRedirectFlagSourceRedirect, \
|
|
Protocol, \
|
|
0, \
|
|
0, \
|
|
0, \
|
|
SourcePort, \
|
|
NewDestinationAddress, \
|
|
NewDestinationPort, \
|
|
0, \
|
|
0, \
|
|
0, \
|
|
0, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
//
|
|
// ULONG
|
|
// NatCreateDynamicSourceRedirect(
|
|
// ULONG Flags,
|
|
// UCHAR Protocol,
|
|
// ULONG SourceAddress
|
|
// USHORT SourcePort,
|
|
// ULONG NewSourceAddress,
|
|
// USHORT NewSourcePort,
|
|
// ULONG MinimumBacklog OPTIONAL,
|
|
// OUT PHANDLE DynamicRedirectHandlep
|
|
// );
|
|
//
|
|
|
|
|
|
#define \
|
|
NatCreateDynamicSourceRedirect( \
|
|
Flags, \
|
|
Protocol, \
|
|
SourceAddress, \
|
|
SourcePort, \
|
|
NewSourceAddress, \
|
|
NewSourcePort, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
) \
|
|
NatCreateDynamicFullRedirect( \
|
|
Flags | NatRedirectFlagSourceRedirect, \
|
|
Protocol, \
|
|
0, \
|
|
0, \
|
|
SourceAddress, \
|
|
SourcePort, \
|
|
0, \
|
|
0, \
|
|
NewSourceAddress, \
|
|
NewSourcePort, \
|
|
0, \
|
|
0, \
|
|
MinimumBacklog, \
|
|
DynamicRedirectHandlep \
|
|
)
|
|
|
|
|
|
#endif
|
|
|
|
//
|
|
// Session-mapping API declarations
|
|
//
|
|
|
|
typedef enum _NAT_SESSION_MAPPING_INFORMATION {
|
|
NatKeySessionMappingInformation,
|
|
NatStatisticsSessionMappingInformation,
|
|
#if _WIN32_WINNT > 0x0500
|
|
NatKeySessionMappingExInformation,
|
|
#endif
|
|
NatMaximumSessionMappingInformation
|
|
} NAT_SESSION_MAPPING_INFORMATION_CLASS,
|
|
*PNAT_SESSION_MAPPING_INFORMATION_CLASS;
|
|
|
|
typedef struct _NAT_KEY_SESSION_MAPPING_INFORMATION {
|
|
UCHAR Protocol;
|
|
ULONG DestinationAddress;
|
|
USHORT DestinationPort;
|
|
ULONG SourceAddress;
|
|
USHORT SourcePort;
|
|
ULONG NewDestinationAddress;
|
|
USHORT NewDestinationPort;
|
|
ULONG NewSourceAddress;
|
|
USHORT NewSourcePort;
|
|
} NAT_KEY_SESSION_MAPPING_INFORMATION, *PNAT_KEY_SESSION_MAPPING_INFORMATION;
|
|
|
|
#if _WIN32_WINNT > 0x0500
|
|
|
|
typedef struct _NAT_KEY_SESSION_MAPPING_EX_INFORMATION {
|
|
UCHAR Protocol;
|
|
ULONG DestinationAddress;
|
|
USHORT DestinationPort;
|
|
ULONG SourceAddress;
|
|
USHORT SourcePort;
|
|
ULONG NewDestinationAddress;
|
|
USHORT NewDestinationPort;
|
|
ULONG NewSourceAddress;
|
|
USHORT NewSourcePort;
|
|
ULONG AdapterIndex;
|
|
} NAT_KEY_SESSION_MAPPING_EX_INFORMATION, *PNAT_KEY_SESSION_MAPPING_EX_INFORMATION;
|
|
|
|
#endif
|
|
|
|
typedef struct _NAT_STATISTICS_SESSION_MAPPING_INFORMATION {
|
|
ULONG64 BytesForward;
|
|
ULONG64 BytesReverse;
|
|
ULONG64 PacketsForward;
|
|
ULONG64 PacketsReverse;
|
|
ULONG64 RejectsForward;
|
|
ULONG64 RejectsReverse;
|
|
} NAT_STATISTICS_SESSION_MAPPING_INFORMATION,
|
|
*PNAT_STATISTICS_SESSION_MAPPING_INFORMATION;
|
|
|
|
ULONG
|
|
NatLookupAndQueryInformationSessionMapping(
|
|
HANDLE TranslatorHandle,
|
|
UCHAR Protocol,
|
|
ULONG DestinationAddress,
|
|
USHORT DestinationPort,
|
|
ULONG SourceAddress,
|
|
USHORT SourcePort,
|
|
OUT PVOID Information,
|
|
IN OUT PULONG InformationLength,
|
|
NAT_SESSION_MAPPING_INFORMATION_CLASS InformationClass
|
|
);
|
|
|
|
//
|
|
// Port-reservation API declarations
|
|
//
|
|
|
|
ULONG
|
|
NatInitializePortReservation(
|
|
USHORT BlockSize,
|
|
OUT PHANDLE ReservationHandle
|
|
);
|
|
|
|
VOID
|
|
NatShutdownPortReservation(
|
|
HANDLE ReservationHandle
|
|
);
|
|
|
|
ULONG
|
|
NatAcquirePortReservation(
|
|
HANDLE ReservationHandle,
|
|
USHORT PortCount,
|
|
OUT PUSHORT ReservedPortBase
|
|
);
|
|
|
|
ULONG
|
|
NatReleasePortReservation(
|
|
HANDLE ReservationHandle,
|
|
USHORT ReservedPortBase,
|
|
USHORT PortCount
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // _ROUTING_IPNATAPI_H_
|