📄 tdi.h
字号:
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
tdi.h
Abstract:
This header file contains interface definitions for NT transport
providers. This interface is documented in the NT Transport
Driver Interface (TDI) Specification, Version 2.
Revision History:
--*/
//
// Include the types which are common to TDI and other network users
//
#ifndef _TDI_USER_
#define _TDI_USER_
#include <nettypes.h>
#include <ntddtdi.h>
//
// Include Transport driver interface definitions
// All of the following have two definitions; ones that correspond exactly to
// the TDI spec, and those that correspond to the NT coding standards. They
// should be equivalent.
//
typedef LONG TDI_STATUS;
typedef PVOID CONNECTION_CONTEXT; // connection context
//
// Basic type used to represent an address at the transport level. There may
// be many addresses represented in a single address structure. If there are
// multiple addresses, a given provider must understand all of them or it can
// use none of them. Note that it is acceptible for the provider to not know
// how to use the address, as long as it knows the address type. Thus, a
// TCP/IP NetBIOS provider may know both NetBIOS and TCP/IP addresses, but
// use only the NetBIOS address; the TCP/IP address would (likely) be passed on
// to the TCP/IP provider.
//
typedef UNALIGNED struct _TA_ADDRESS {
USHORT AddressLength; // length in bytes of Address[] in this
USHORT AddressType; // type of this address
UCHAR Address[1]; // actually AddressLength bytes long
} TA_ADDRESS, *PTA_ADDRESS;
typedef struct _TRANSPORT_ADDRESS {
LONG TAAddressCount; // number of addresses following
TA_ADDRESS Address[1]; // actually TAAddressCount elements long
} TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;
//
// define some names for the EAs so people don't have to make them up.
//
#define TdiTransportAddress "TransportAddress"
#define TdiConnectionContext "ConnectionContext"
#define TDI_TRANSPORT_ADDRESS_LENGTH (sizeof (TdiTransportAddress) - 1)
#define TDI_CONNECTION_CONTEXT_LENGTH (sizeof (TdiConnectionContext) - 1)
//
// Known Address types
//
#define TDI_ADDRESS_TYPE_UNSPEC ((USHORT)0) // unspecified
#define TDI_ADDRESS_TYPE_UNIX ((USHORT)1) // local to host (pipes, portals)
#define TDI_ADDRESS_TYPE_IP ((USHORT)2) // internetwork: UDP, TCP, etc.
#define TDI_ADDRESS_TYPE_IMPLINK ((USHORT)3) // arpanet imp addresses
#define TDI_ADDRESS_TYPE_PUP ((USHORT)4) // pup protocols: e.g. BSP
#define TDI_ADDRESS_TYPE_CHAOS ((USHORT)5) // mit CHAOS protocols
#define TDI_ADDRESS_TYPE_NS ((USHORT)6) // XEROX NS protocols
#define TDI_ADDRESS_TYPE_IPX ((USHORT)6) // Netware IPX
#define TDI_ADDRESS_TYPE_NBS ((USHORT)7) // nbs protocols
#define TDI_ADDRESS_TYPE_ECMA ((USHORT)8) // european computer manufacturers
#define TDI_ADDRESS_TYPE_DATAKIT ((USHORT)9) // datakit protocols
#define TDI_ADDRESS_TYPE_CCITT ((USHORT)10) // CCITT protocols, X.25 etc
#define TDI_ADDRESS_TYPE_SNA ((USHORT)11) // IBM SNA
#define TDI_ADDRESS_TYPE_DECnet ((USHORT)12) // DECnet
#define TDI_ADDRESS_TYPE_DLI ((USHORT)13) // Direct data link interface
#define TDI_ADDRESS_TYPE_LAT ((USHORT)14) // LAT
#define TDI_ADDRESS_TYPE_HYLINK ((USHORT)15) // NSC Hyperchannel
#define TDI_ADDRESS_TYPE_APPLETALK ((USHORT)16) // AppleTalk
#define TDI_ADDRESS_TYPE_NETBIOS ((USHORT)17) // Netbios Addresses
#define TDI_ADDRESS_TYPE_8022 ((USHORT)18) //
#define TDI_ADDRESS_TYPE_OSI_TSAP ((USHORT)19) //
#define TDI_ADDRESS_TYPE_NETONE ((USHORT)20) // for WzMail
#define TDI_ADDRESS_TYPE_VNS ((USHORT)21) // Banyan VINES IP
#define TDI_ADDRESS_TYPE_NETBIOS_EX ((USHORT)22) // NETBIOS address extensions
#define TDI_ADDRESS_TYPE_IP6 ((USHORT)23) // IP version 6
#define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX ((USHORT)24) // WCHAR Netbios address
//
// Definition of address structures. These need to be packed
// and misaligned where necessary.
//
#include <packon.h>
//
// Unicode NetBIOS
//
enum eNameBufferType {
NBT_READONLY = 0, // default
NBT_WRITEONLY,
NBT_READWRITE,
NBT_WRITTEN
};
typedef UNALIGNED struct _TDI_ADDRESS_NETBIOS_UNICODE_EX {
USHORT NetbiosNameType;
enum eNameBufferType NameBufferType;
UNICODE_STRING EndpointName; // Buffer should point to EndpointBuffer
UNICODE_STRING RemoteName; // Buffer should point to RemoteNameBuffer
WCHAR EndpointBuffer[17]; // UNICODE
WCHAR RemoteNameBuffer[1]; // UNICODE
} TDI_ADDRESS_NETBIOS_UNICODE_EX, *PTDI_ADDRESS_NETBIOS_UNICODE_EX;
typedef UNALIGNED struct _TA_ADDRESS_NETBIOS_UNICODE_EX {
LONG TAAddressCount;
struct _AddrNetbiosWCharEx {
USHORT AddressLength; // length in bytes of this address == ??
USHORT AddressType; // this will == TDI_ADDRESS_TYPE_NETBIOS_WCHAR_EX
TDI_ADDRESS_NETBIOS_UNICODE_EX Address[1];
} Address [1];
} TA_NETBIOS_UNICODE_EX_ADDRESS, *PTA_NETBIOS_UNICODE_EX_ADDRESS;
//
// NetBIOS
//
typedef UNALIGNED struct _TDI_ADDRESS_NETBIOS {
USHORT NetbiosNameType;
UCHAR NetbiosName[16];
} TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;
#define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE ((USHORT)0x0000)
#define TDI_ADDRESS_NETBIOS_TYPE_GROUP ((USHORT)0x0001)
#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE ((USHORT)0x0002)
#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP ((USHORT)0x0003)
#define TDI_ADDRESS_LENGTH_NETBIOS sizeof (TDI_ADDRESS_NETBIOS)
//
// NETBIOS Extended address
//
typedef struct _TDI_ADDRESS_NETBIOS_EX {
UCHAR EndpointName[16]; // the called name to be used in NETBT session setup
TDI_ADDRESS_NETBIOS NetbiosAddress;
} TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;
#define TDI_ADDRESS_LENGTH_NETBIOS_EX sizeof(TDI_ADDRESS_NETBIOS_EX)
//
// Xns address for UB
//
typedef struct _TDI_ADDRESS_NETONE {
USHORT NetoneNameType;
UCHAR NetoneName[20];
} TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;
#define TDI_ADDRESS_NETONE_TYPE_UNIQUE ((USHORT)0x0000)
#define TDI_ADDRESS_NETONE_TYPE_ROTORED ((USHORT)0x0001)
#define TDI_ADDRESS_LENGTH_NETONE sizeof (TDI_ADDRESS_NETONE)
//
// AppleTalk
//
typedef struct _TDI_ADDRESS_APPLETALK {
USHORT Network;
UCHAR Node;
UCHAR Socket;
} TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;
#define TDI_ADDRESS_LENGTH_APPLETALK sizeof (TDI_ADDRESS_APPLETALK)
//
// 802.2 MAC addresses
//
typedef struct _TDI_ADDRESS_8022 {
UCHAR MACAddress[6];
} TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;
#define TDI_ADDRESS_LENGTH_8022 sizeof (TDI_ADDRESS_8022);
//
// IP address
//
typedef struct _TDI_ADDRESS_IP {
USHORT sin_port;
ULONG in_addr;
UCHAR sin_zero[8];
} TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;
#define TDI_ADDRESS_LENGTH_IP sizeof (TDI_ADDRESS_IP)
//
// IPv6 address
//
typedef struct _TDI_ADDRESS_IP6 {
USHORT sin6_port;
ULONG sin6_flowinfo;
USHORT sin6_addr[8];
ULONG sin6_scope_id;
} TDI_ADDRESS_IP6, *PTDI_ADDRESS_IP6;
#define TDI_ADDRESS_LENGTH_IP6 sizeof (TDI_ADDRESS_IP6)
//
// IPX address
//
typedef struct _TDI_ADDRESS_IPX {
ULONG NetworkAddress;
UCHAR NodeAddress[6];
USHORT Socket;
} TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;
#define TDI_ADDRESS_LENGTH_IPX sizeof (TDI_ADDRESS_IPX)
//
// XNS address (same as IPX)
//
typedef struct _TDI_ADDRESS_NS {
ULONG NetworkAddress;
UCHAR NodeAddress[6];
USHORT Socket;
} TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;
#define TDI_ADDRESS_LENGTH_NS sizeof (TDI_ADDRESS_NS)
//
// Banyan VINES IP address
//
typedef struct _TDI_ADDRESS_VNS {
UCHAR net_address[4]; // network address (static)
UCHAR subnet_addr[2]; // subnet address (dynamic)
UCHAR port[2];
UCHAR hops; // # hops for broadcasts
UCHAR filler[5]; // filler, zeros
} TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;
#define TDI_ADDRESS_LENGTH_VNS sizeof (TDI_ADDRESS_VNS)
// OSI TSAP
/*
* The maximum size of the tranport address (tp_addr field of a
* sockaddr_tp structure) is 64.
*/
#define ISO_MAX_ADDR_LENGTH 64
/*
* There are two types of ISO addresses, hierarchical and
* non-hierarchical. For hierarchical addresses, the tp_addr
* field contains both the transport selector and the network
* address. For non-hierarchical addresses, tp_addr contains only
* the transport address, which must be translated by the ISO TP4
* transport provider into the transport selector and network address.
*/
#define ISO_HIERARCHICAL 0
#define ISO_NON_HIERARCHICAL 1
typedef struct _TDI_ADDRESS_OSI_TSAP {
USHORT tp_addr_type; /* ISO_HIERARCHICAL or ISO_NON_HIERARCHICAL
*/
USHORT tp_taddr_len; /* Length of transport address, <= 52 */
USHORT tp_tsel_len; /* Length of transport selector, <= 32 */
/* 0 if ISO_NON_HIERARCHICAL */
UCHAR tp_addr[ISO_MAX_ADDR_LENGTH];
} TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;
#define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof (TDI_ADDRESS_OSI_TSAP)
//
// Some pre-defined structures to make life easier for
// the 99.99% of us who use but one address.
//
typedef struct _TA_ADDRESS_NETBIOS {
LONG TAAddressCount;
struct _Addr {
USHORT AddressLength; // length in bytes of this address == 18
USHORT AddressType; // this will == TDI_ADDRESS_TYPE_NETBIOS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -