/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1991-1993 Microsoft Corporation
Module Name:
ntddip.h
Abstract:
This header file defines constants and types for accessing the NT
IP driver.
Author:
Mike Massa (mikemas) August 13, 1993
Revision History:
--*/
#ifndef _NTDDIP_
#define _NTDDIP_
//
// Device Name - this string is the name of the device. It is the name
// that should be passed to NtOpenFile when accessing the device.
//
#define DD_IP_DEVICE_NAME L"\\Device\\Ip"
//
// Structures used in IOCTLs.
//
typedef struct set_ip_address_request {
unsigned short Context; // Context value for the target NTE
unsigned long Address; // IP address to set, or zero to clear
unsigned long SubnetMask; // Subnet mask to set
} IP_SET_ADDRESS_REQUEST, *PIP_SET_ADDRESS_REQUEST;
typedef struct set_dhcp_interface_request {
unsigned long Context; // Context value identifying the NTE
// Valid contexts are 16 bit quantities.
} IP_SET_DHCP_INTERFACE_REQUEST, *PIP_SET_DHCP_INTERFACE_REQUEST;
typedef struct add_ip_nte_request {
unsigned short InterfaceContext; // Context value for the IP interface
// to which to add the NTE
unsigned long Address; // IP address to set, or zero to clear
unsigned long SubnetMask; // Subnet mask to set
} IP_ADD_NTE_REQUEST, *PIP_ADD_NTE_REQUEST;
typedef struct add_ip_nte_response {
unsigned short Context; // Context value for the new NTE
unsigned long Instance; // Instance ID for the new NTE
} IP_ADD_NTE_RESPONSE, *PIP_ADD_NTE_RESPONSE;
typedef struct delete_ip_nte_request {
unsigned short Context; // Context value for the NTE
} IP_DELETE_NTE_REQUEST, *PIP_DELETE_NTE_REQUEST;
typedef struct get_ip_nte_info_request {
unsigned short Context; // Context value for the NTE
} IP_GET_NTE_INFO_REQUEST, *PIP_GET_NTE_INFO_REQUEST;
typedef struct get_ip_nte_info_response {
unsigned long Instance; // Instance ID for the NTE
unsigned long Address;
unsigned long SubnetMask;
unsigned long Flags;
} IP_GET_NTE_INFO_RESPONSE, *PIP_GET_NTE_INFO_RESPONSE;
//
// NTE Flags
//
#define IP_NTE_DYNAMIC 0x00000010
//
// IP IOCTL code definitions
//
#define FSCTL_IP_BASE FILE_DEVICE_NETWORK
#define _IP_CTL_CODE(function, method, access) \
CTL_CODE(FSCTL_IP_BASE, function, method, access)
//
// This IOCTL is used to send an ICMP Echo request. It is synchronous and
// returns any replies received.
//
#define IOCTL_ICMP_ECHO_REQUEST \
_IP_CTL_CODE(0, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// This IOCTL is used to set the IP address for an interface. It is meant to
// be issued by a DHCP client. Setting the address to 0 deletes the current
// address and disables the interface. It may only be issued by a process
// with Administrator privilege.
//
#define IOCTL_IP_SET_ADDRESS \
_IP_CTL_CODE(1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This IOCTL is used to specify on which uninitialized interface a DHCP
// client intends to send its requests. The Interface Context parameter is
// a 16-bit quantity. The IOCTL takes a 32-bit Context as its argument. This
// IOCTL with a Context value of 0xFFFFFFFF must be issued to disable special
// processing in IP when a DHCP client is finished initializing interfaces.
// This IOCTL may only be issued by a process with Administrator privilege.
//
#define IOCTL_IP_SET_DHCP_INTERFACE \
_IP_CTL_CODE(2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl may only be issued by a process with Administrator privilege.
//
#define IOCTL_IP_SET_IF_CONTEXT \
_IP_CTL_CODE(3, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl may only be issued by a process with Administrator privilege.
//
#define IOCTL_IP_SET_FILTER_POINTER \
_IP_CTL_CODE(4, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl may only be issued by a process with Administrator privilege.
//
#define IOCTL_IP_SET_MAP_ROUTE_POINTER \
_IP_CTL_CODE(5, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl may only be issued by a process with Administrator privilege.
//
#define IOCTL_IP_GET_PNP_ARP_POINTERS \
_IP_CTL_CODE(6, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl creates a new, dynamic NTE. It may only be issued by a process
// with Administrator privilege.
//
#define IOCTL_IP_ADD_NTE \
_IP_CTL_CODE(7, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl deletes a dynamic NTE. It may only be issued by a process with
// Administrator privilege.
//
#define IOCTL_IP_DELETE_NTE \
_IP_CTL_CODE(8, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//
// This ioctl gathers information about an NTE. It requires no special
// privilege.
//
#define IOCTL_IP_GET_NTE_INFO \
_IP_CTL_CODE(9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif // ifndef _NTDDIP_