/*++ 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 #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_