summaryrefslogtreecommitdiffstats
path: root/private/inc/nbtioctl.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/inc/nbtioctl.h347
1 files changed, 347 insertions, 0 deletions
diff --git a/private/inc/nbtioctl.h b/private/inc/nbtioctl.h
new file mode 100644
index 000000000..6ceaca286
--- /dev/null
+++ b/private/inc/nbtioctl.h
@@ -0,0 +1,347 @@
+/*++ BUILD Version: 0001 // Increment this if a change has global effects
+
+Copyright (c) 1991-1993 Microsoft Corporation
+
+Module Name:
+
+ nbtioctl.h
+
+Abstract:
+
+ This header file defines constants for issuing IOCTLS to Netbt
+
+
+Author:
+
+ JSTEW November 16, 1993
+
+Revision History:
+
+--*/
+
+#include <tdi.h>
+
+#ifndef _NBTIOCTL_
+#define _NBTIOCTL_
+
+#define NETBIOS_NAMESIZE 16
+#define MAX_IPADDRS_PER_HOST 10
+//
+// Netbt supports this number of adapters
+//
+#ifndef VXD
+#define NBT_MAXIMUM_BINDINGS 64 // we allow up to 64 net cards in NT
+#else
+#define NBT_MAXIMUM_BINDINGS 32 // we allow up to 32 net cards in VXD
+#endif
+
+//
+// This structure is passed down to netbt on a IOCTL_NETBT_ADAPTER_STATUS
+// call. If the Ipaddress is set to anything other than zero netbt will
+// assume it is an ip address and use it rather than try a name resolution
+// on the netbios name passed in.
+//
+typedef struct
+{
+ ULONG IpAddress;
+ TA_NETBIOS_ADDRESS NetbiosAddress;
+
+} tIPANDNAMEINFO;
+
+//
+// Adapter Status response buffer format for a query of the remote hash
+// table. It is the same as the adapter status format except it includes
+// the ip address of each name too. This is used in NBtQueryAdapterStatus
+// when responding to nbtstat queries.
+//
+typedef struct
+{
+ UCHAR name[NETBIOS_NAMESIZE];
+ UCHAR name_num;
+ UCHAR name_flags;
+ UCHAR padding;
+ ULONG IpAddress; // ip address of remote host
+ ULONG Ttl; // remaining time in cache
+} tREMOTE_CACHE;
+
+// We log the how names are registered and queried
+//
+#define NAME_QUERY_SUCCESS 0
+#define NAME_REGISTRATION_SUCCESS 1
+#define NAME_QUERY_FAILURE 2
+#define SIZE_RESOLVD_BY_BCAST_CACHE 8
+
+typedef struct
+{
+ UCHAR Name[NETBIOS_NAMESIZE];
+} tNAME;
+typedef struct
+{
+ ULONG Stats[4];
+ ULONG Index;
+ tNAME NamesReslvdByBcast[SIZE_RESOLVD_BY_BCAST_CACHE];
+
+} tNAMESTATS_INFO;
+
+
+typedef struct
+{
+ USHORT LanaNumber;
+ ULONG IpAddress;
+ ULONG NameServerAddress; // primary WINS server
+ ULONG BackupServer; // backup WINS server
+ ULONG lDnsServerAddress; // primary DNS server
+ ULONG lDnsBackupServer; // backup DNS server
+} tIPCONFIG_PER_LANA;
+
+//
+// structure returned when ipconfig queries vnbt for parameters being used
+//
+typedef struct
+{
+ USHORT NumLanas;
+ tIPCONFIG_PER_LANA LanaInfo[8];
+ USHORT NodeType;
+ USHORT ScopeLength;
+ CHAR szScope[1];
+} tIPCONFIG_INFO;
+
+//
+// These two structures are used to return the connection list to
+// NbtStat
+//
+typedef struct
+{
+ ULONG State;
+ ULONG SrcIpAddr;
+ CHAR LocalName[NETBIOS_NAMESIZE];
+ CHAR RemoteName[NETBIOS_NAMESIZE];
+#ifndef VXD
+ LARGE_INTEGER BytesRcvd;
+ LARGE_INTEGER BytesSent;
+#else
+ ULONG BytesRcvd;
+ ULONG BytesSent;
+#endif
+ UCHAR Originator; // True if originated on this node
+
+} tCONNECTIONS;
+
+typedef struct
+{
+ ULONG ConnectionCount;
+ tCONNECTIONS ConnList[1];
+} tCONNECTION_LIST;
+
+
+typedef struct
+{
+ ULONG IpAddress;
+ ULONG Resolved;
+ UCHAR Name[16];
+
+} tIPADDR_BUFFER;
+
+// this is the format of the buffer passed to Netbt when it either posts
+// a buffer for subsequent DNS name resolutions, or it replies to a name
+// resolution request. For a posted buffer, Name starts with a null, otherwise
+// name is the name that was resolved. Resolved is set to true if the name
+// resolved.
+//
+typedef struct
+{
+ ULONG IpAddrsList[MAX_IPADDRS_PER_HOST+1];
+ ULONG Resolved;
+ UCHAR pName[261]; // the destination name
+ ULONG NameLen; // how big is the name
+
+} tIPADDR_BUFFER_DNS;
+
+//
+// this is the format of the buffer passed to Nbt by DHCP when DHCP
+// changes the Ip Address
+//
+typedef struct
+{
+ ULONG IpAddress;
+ ULONG SubnetMask;
+
+} tNEW_IP_ADDRESS;
+
+//
+// this is the format of the buffer passed to Nbt by the RDR when
+// it wants to know the Wins IP addresses for a given network adapter
+// card.
+//
+typedef struct
+{
+ ULONG PrimaryWinsServer;
+ ULONG BackupWinsServer;
+
+} tWINS_ADDRESSES;
+
+//
+// This structure is returned by Nbt when a TdiQueryInformation()
+// call asks for TDI_QUERY_ADDRESS_INFO on a connection. This is
+// the same as a TRANSPORT_ADDRESS struct from "tdi.h" containing
+// two address, a NetBIOS address followed by an IP address.
+//
+
+typedef struct _NBT_ADDRESS_PAIR {
+ LONG TAAddressCount; // this will always == 2
+
+ struct {
+ USHORT AddressLength; // length in bytes of this address == 18
+ USHORT AddressType; // this will == TDI_ADDRESS_TYPE_NETBIOS
+ TDI_ADDRESS_NETBIOS Address;
+ } AddressNetBIOS;
+
+ struct {
+ USHORT AddressLength; // length in bytes of this address == 14
+ USHORT AddressType; // this will == TDI_ADDRESS_TYPE_IP
+ TDI_ADDRESS_IP Address;
+ } AddressIP;
+
+} NBT_ADDRESS_PAIR, *PNBT_ADDRESS_PAIR;
+
+typedef struct _NBT_ADDRESS_PAIR_INFO {
+ ULONG ActivityCount; // outstanding open file objects/this address.
+ NBT_ADDRESS_PAIR AddressPair; // the actual address & its components.
+} NBT_ADDRESS_PAIR_INFO, *PNBT_ADDRESS_PAIR_INFO;
+
+
+#define WINS_INTERFACE_NAME "WinsInterface"
+//
+// This is the format of the remote address structure on the front of
+// datagram rcvs passed up to WINS
+//
+typedef struct
+{
+ SHORT Family;
+ USHORT Port;
+ ULONG IpAddress;
+ ULONG LengthOfBuffer;
+
+} tREM_ADDRESS;
+
+//
+// Wins and Netbt share the transaction id space, where WINS uses the lower
+// half
+//
+#define WINS_MAXIMUM_TRANSACTION_ID 0x7FFF
+
+// this is equivalent to AF_INET - WINS depends on this to determine kind of
+// address the source node has.
+//
+#define NBT_UNIX 1
+#define NBT_INET 2
+#define WINS_EXPORT TEXT("Export")
+#define NETBT_LINKAGE_KEY TEXT("system\\currentcontrolset\\services\\netbt\\linkage")
+
+#ifndef VXD
+
+// defines for NT
+
+//
+// NtDeviceIoControlFile IoControlCode values for this device.
+//
+#define _NETBT_CTRL_CODE(function, method, access) \
+ CTL_CODE(FILE_DEVICE_TRANSPORT, function, method, access)
+
+
+#define IOCTL_NETBT_PURGE_CACHE _NETBT_CTRL_CODE( 30, METHOD_BUFFERED, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_GET_BCAST_NAMES _NETBT_CTRL_CODE( 31, METHOD_OUT_DIRECT,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_GET_CONNECTIONS _NETBT_CTRL_CODE( 32, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_GET_REMOTE_NAMES _NETBT_CTRL_CODE( 33, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_REREAD_REGISTRY _NETBT_CTRL_CODE( 34, METHOD_BUFFERED, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_NEW_IPADDRESS _NETBT_CTRL_CODE( 35, METHOD_BUFFERED, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_DNS_NAME_RESOLVE _NETBT_CTRL_CODE( 36, METHOD_OUT_DIRECT,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_FIND_NAME _NETBT_CTRL_CODE( 37, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_GET_WINS_ADDR _NETBT_CTRL_CODE( 38, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_WINS_SEND _NETBT_CTRL_CODE( 39, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_WINS_RCV _NETBT_CTRL_CODE( 40, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_GET_IP_ADDRS _NETBT_CTRL_CODE( 41, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_GET_IP_SUBNET _NETBT_CTRL_CODE( 42, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_ADAPTER_STATUS _NETBT_CTRL_CODE( 43, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_CHECK_IP_ADDR _NETBT_CTRL_CODE( 44, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_ADD_INTERFACE _NETBT_CTRL_CODE( 45, METHOD_BUFFERED,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_DELETE_INTERFACE _NETBT_CTRL_CODE( 46, METHOD_BUFFERED,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_QUERY_INTERFACE_INSTANCE _NETBT_CTRL_CODE( 47, METHOD_BUFFERED,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_SET_WINS_ADDRESS _NETBT_CTRL_CODE( 48, METHOD_BUFFERED,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_ENABLE_EXTENDED_ADDR _NETBT_CTRL_CODE( 49, METHOD_BUFFERED,\
+ FILE_ANY_ACCESS)
+#define IOCTL_NETBT_DISABLE_EXTENDED_ADDR _NETBT_CTRL_CODE( 50, METHOD_BUFFERED,\
+ FILE_ANY_ACCESS)
+
+//
+// This ioctl should be last since Driver.c uses this to decide the range of
+// ioctls to pass to DispatchIoctls
+//
+#define IOCTL_NETBT_LAST_IOCTL _NETBT_CTRL_CODE( 51, METHOD_OUT_DIRECT, \
+ FILE_ANY_ACCESS)
+
+//
+// Used in IOCTL_NETBT_ADD_INTERFACE and IOCTL_NETBT_DELETE_INTERFACE
+//
+typedef struct _netbt_add_del_if {
+ NTSTATUS Status;
+ ULONG InstanceNumber; // instance number of this device
+ ULONG Length; // length of the buffer
+ WCHAR IfName[1]; // actual data
+} NETBT_ADD_DEL_IF, *PNETBT_ADD_DEL_IF;
+
+//
+// Used in IOCTL_NETBT_SET_WINS_ADDRESS
+//
+typedef struct _netbt_set_wins_addr {
+ ULONG PrimaryWinsAddr;
+ ULONG SecondaryWinsAddr;
+ NTSTATUS Status;
+} NETBT_SET_WINS_ADDR, *PNETBT_SET_WINS_ADDR;
+
+#else
+
+// defines for VXD
+
+#define IOCTL_NETBT_PURGE_CACHE 101
+#define IOCTL_NETBT_GET_BCAST_NAMES 102
+#define IOCTL_NETBT_GET_CONNECTIONS 103
+#define IOCTL_NETBT_GET_LOCAL_NAMES 104
+#define IOCTL_NETBT_GET_REMOTE_NAMES 105
+#define IOCTL_NETBT_REREAD_REGISTRY 106
+#define IOCTL_NETBT_NEW_IPADDRESS 107
+#define IOCTL_NETBT_DNS_NAME_RESOLVE 108
+#define IOCTL_NETBT_FIND_NAME 109
+#define IOCTL_NETBT_GET_WINS_ADDR 110
+#define IOCTL_NETBT_WINS_SEND 111
+#define IOCTL_NETBT_WINS_RCV 112
+#define IOCTL_NETBT_GET_IP_ADDRS 113
+#define IOCTL_NETBT_GET_IP_SUBNET 114
+#define IOCTL_NETBT_ADAPTER_STATUS 115
+#define IOCTL_NETBT_IPCONFIG_INFO 116
+#define IOCTL_NETBT_LAST_IOCTL 200
+
+#endif // ifndef VXD
+
+#endif // ifndef _NBTIOCTL_
+
+