*include/imagehlp.h: Comment out IN, OUT and OPTIONAL, throughout. *include/rpcdce.h: Don't define IN, OUT or OPTIONAL if _NO_W32_PSEUDO_MODIFIERS. *include/rpcnsi.h: Comment out IN, OUT and OPTIONAL, throughout. *include/rpcnsip.h: Likewise. *include/windef.h: Don't define IN, OUT or OPTIONAL if _NO_W32_PSEUDO_MODIFIERS. *include/ddk/batclass.h: Comment out IN, OUT and OPTIONAL, throughout. *include/ddk/cfgmgr32.h: Likewise. *include/ddk/ddkmapi.h: Likewise. *include/ddk/hidclass.h: Likewise. *include/ddk/hidpi.h: Likewise. *include/ddk/kbdmou.h: Likewise. *include/ddk/mcd.h: Likewise. *include/ddk/miniport.h: Likewise. *include/ddk/minitape.h: Likewise. *include/ddk/ndis.h: Likewise. *include/ddk/ndistapi.h: Likewise. *include/ddk/ndiswan.h: Likewise. *include/ddk/ntapi.h: Likewise. *include/ddk/ntdd8042.h: Likewise. *include/ddk/ntddpcm.h: Likewise. *include/ddk/ntifs.h: Likewise. *include/ddk/ntpoapi.h: Likewise. *include/ddk/parallel.h: Likewise. *include/ddk/pfhook.h: Likewise. *include/ddk/scsiwmi.h: Likewise. *include/ddk/smbus.h: Likewise. *include/ddk/srb.h: Likewise. *include/ddk/storport.h: Likewise. *include/ddk/tdikrnl.h: Likewise. *include/ddk/upssvc.h: Likewise. *include/ddk/usbcamdi.h: Likewise. *include/ddk/usbscan.h: Likewise. *include/ddk/video.h: Likewise. *include/ddk/videoagp.h: Likewise. *include/ddk/win2k.h: Likewise. *include/ddk/winddi.h: Likewise. *include/ddk/winddk.h: Don't define IN, OUT or OPTIONAL if _NO_W32_PSEUDO_MODIFIERS. Comment out IN, OUT and OPTIONAL, throughout. *include/ddk/winnt4.h: Comment out IN, OUT and OPTIONAL, throughout. *include/ddk/ws2san.h: Likewise.
		
			
				
	
	
		
			1163 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1163 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * tdikrnl.h
 | 
						|
 *
 | 
						|
 * TDI kernel mode definitions
 | 
						|
 *
 | 
						|
 * This file is part of the w32api package.
 | 
						|
 *
 | 
						|
 * Contributors:
 | 
						|
 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 | 
						|
 *
 | 
						|
 * THIS SOFTWARE IS NOT COPYRIGHTED
 | 
						|
 *
 | 
						|
 * This source code is offered for use in the public domain. You may
 | 
						|
 * use, modify or distribute it freely.
 | 
						|
 *
 | 
						|
 * This code is distributed in the hope that it will be useful but
 | 
						|
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 | 
						|
 * DISCLAIMED. This includes but is not limited to warranties of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __TDIKRNL_H
 | 
						|
#define __TDIKRNL_H
 | 
						|
 | 
						|
#if __GNUC__ >=3
 | 
						|
#pragma GCC system_header
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#include "ntddk.h"
 | 
						|
#include "tdi.h"
 | 
						|
 | 
						|
#if defined(_TDI_)
 | 
						|
  #define TDIKRNLAPI DECLSPEC_EXPORT
 | 
						|
#else
 | 
						|
  #define TDIKRNLAPI DECLSPEC_IMPORT
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
typedef struct _TDI_REQUEST_KERNEL {
 | 
						|
  ULONG  RequestFlags;
 | 
						|
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
 | 
						|
  PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
 | 
						|
  PVOID  RequestSpecific;
 | 
						|
} TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;
 | 
						|
 | 
						|
/* Request codes */
 | 
						|
#define TDI_ASSOCIATE_ADDRESS             0x01
 | 
						|
#define TDI_DISASSOCIATE_ADDRESS          0x02
 | 
						|
#define TDI_CONNECT                       0x03
 | 
						|
#define TDI_LISTEN                        0x04
 | 
						|
#define TDI_ACCEPT                        0x05
 | 
						|
#define TDI_DISCONNECT                    0x06
 | 
						|
#define TDI_SEND                          0x07
 | 
						|
#define TDI_RECEIVE                       0x08
 | 
						|
#define TDI_SEND_DATAGRAM                 0x09
 | 
						|
#define TDI_RECEIVE_DATAGRAM              0x0A
 | 
						|
#define TDI_SET_EVENT_HANDLER             0x0B
 | 
						|
#define TDI_QUERY_INFORMATION             0x0C
 | 
						|
#define TDI_SET_INFORMATION               0x0D
 | 
						|
#define TDI_ACTION                        0x0E
 | 
						|
 | 
						|
#define TDI_DIRECT_SEND                   0x27
 | 
						|
#define TDI_DIRECT_SEND_DATAGRAM          0x29
 | 
						|
 | 
						|
#define TDI_TRANSPORT_ADDRESS_FILE        1
 | 
						|
#define TDI_CONNECTION_FILE               2
 | 
						|
#define TDI_CONTROL_CHANNEL_FILE          3
 | 
						|
 | 
						|
/* Internal TDI IOCTLS */
 | 
						|
#define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER   _TDI_CONTROL_CODE(0x80, METHOD_NEITHER)
 | 
						|
#define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER)
 | 
						|
 | 
						|
/* TdiAssociateAddress */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
 | 
						|
  HANDLE  AddressHandle;
 | 
						|
} TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
 | 
						|
 | 
						|
/* TdiDisassociateAddress */
 | 
						|
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
 | 
						|
  *PTDI_REQUEST_KERNEL_DISASSOCIATE;
 | 
						|
 | 
						|
/* TdiAccept */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_ACCEPT {
 | 
						|
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
 | 
						|
  PTDI_CONNECTION_INFORMATION  ReturnConnectionInformation;
 | 
						|
} TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;
 | 
						|
 | 
						|
/* TdiConnect */
 | 
						|
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
 | 
						|
  *PTDI_REQUEST_KERNEL_CONNECT;
 | 
						|
 | 
						|
/* TdiDisconnect */
 | 
						|
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
 | 
						|
  *PTDI_REQUEST_KERNEL_DISCONNECT;
 | 
						|
 | 
						|
/* TdiListen */
 | 
						|
typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
 | 
						|
  *PTDI_REQUEST_KERNEL_LISTEN;
 | 
						|
 | 
						|
/* TdiReceive */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
 | 
						|
  ULONG  ReceiveLength;
 | 
						|
  ULONG  ReceiveFlags;
 | 
						|
} TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
 | 
						|
 | 
						|
/* TdiReceiveDatagram */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG {
 | 
						|
  ULONG  ReceiveLength;
 | 
						|
  PTDI_CONNECTION_INFORMATION  ReceiveDatagramInformation;
 | 
						|
  PTDI_CONNECTION_INFORMATION  ReturnDatagramInformation;
 | 
						|
  ULONG  ReceiveFlags;
 | 
						|
} TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;
 | 
						|
 | 
						|
/* TdiSend */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_SEND {
 | 
						|
  ULONG  SendLength;
 | 
						|
  ULONG  SendFlags;
 | 
						|
} TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;
 | 
						|
 | 
						|
/* TdiSendDatagram */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_SENDDG {
 | 
						|
  ULONG  SendLength;
 | 
						|
  PTDI_CONNECTION_INFORMATION  SendDatagramInformation;
 | 
						|
} TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;
 | 
						|
 | 
						|
/* TdiSetEventHandler */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_SET_EVENT {
 | 
						|
  LONG  EventType;
 | 
						|
  PVOID  EventHandler;
 | 
						|
  PVOID  EventContext;
 | 
						|
} TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;
 | 
						|
 | 
						|
/* TdiQueryInformation */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO {
 | 
						|
  LONG  QueryType;
 | 
						|
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
 | 
						|
} TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
 | 
						|
 | 
						|
/* TdiSetInformation */
 | 
						|
typedef struct _TDI_REQUEST_KERNEL_SET_INFO {
 | 
						|
  LONG  SetType;
 | 
						|
  PTDI_CONNECTION_INFORMATION  RequestConnectionInformation;
 | 
						|
} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;
 | 
						|
 | 
						|
 | 
						|
/* Event types */
 | 
						|
#define TDI_EVENT_CONNECT                   0
 | 
						|
#define TDI_EVENT_DISCONNECT                1
 | 
						|
#define TDI_EVENT_ERROR                     2
 | 
						|
#define TDI_EVENT_RECEIVE                   3
 | 
						|
#define TDI_EVENT_RECEIVE_DATAGRAM          4
 | 
						|
#define TDI_EVENT_RECEIVE_EXPEDITED         5
 | 
						|
#define TDI_EVENT_SEND_POSSIBLE             6
 | 
						|
#define TDI_EVENT_CHAINED_RECEIVE           7
 | 
						|
#define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM  8
 | 
						|
#define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9
 | 
						|
#define TDI_EVENT_ERROR_EX                  10
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_CONNECT)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ LONG  RemoteAddressLength,
 | 
						|
  /*IN*/ PVOID  RemoteAddress,
 | 
						|
  /*IN*/ LONG  UserDataLength,
 | 
						|
  /*IN*/ PVOID  UserData,
 | 
						|
  /*IN*/ LONG  OptionsLength,
 | 
						|
  /*IN*/ PVOID  Options,
 | 
						|
  /*OUT*/ CONNECTION_CONTEXT  *ConnectionContext,
 | 
						|
  /*OUT*/ PIRP  *AcceptIrp);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultConnectHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ LONG  RemoteAddressLength,
 | 
						|
  /*IN*/ PVOID  RemoteAddress,
 | 
						|
  /*IN*/ LONG  UserDataLength,
 | 
						|
  /*IN*/ PVOID  UserData,
 | 
						|
  /*IN*/ LONG  OptionsLength,
 | 
						|
  /*IN*/ PVOID  Options,
 | 
						|
  /*OUT*/ CONNECTION_CONTEXT *ConnectionContext,
 | 
						|
  /*OUT*/ PIRP  *AcceptIrp);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_DISCONNECT)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ LONG  DisconnectDataLength,
 | 
						|
  /*IN*/ PVOID  DisconnectData,
 | 
						|
  /*IN*/ LONG  DisconnectInformationLength,
 | 
						|
  /*IN*/ PVOID  DisconnectInformation,
 | 
						|
  /*IN*/ ULONG  DisconnectFlags);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultDisconnectHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ LONG  DisconnectDataLength,
 | 
						|
  /*IN*/ PVOID  DisconnectData,
 | 
						|
  /*IN*/ LONG  DisconnectInformationLength,
 | 
						|
  /*IN*/ PVOID  DisconnectInformation,
 | 
						|
  /*IN*/ ULONG  DisconnectFlags);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_ERROR)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ NTSTATUS  Status);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_ERROR_EX)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ NTSTATUS  Status,
 | 
						|
  /*IN*/ PVOID  Buffer);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultErrorHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ NTSTATUS  Status);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_RECEIVE)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  BytesIndicated,
 | 
						|
  /*IN*/ ULONG  BytesAvailable,
 | 
						|
  /*OUT*/ ULONG  *BytesTaken,
 | 
						|
  /*IN*/ PVOID  Tsdu,
 | 
						|
  /*OUT*/ PIRP  *IoRequestPacket);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultReceiveHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  BytesIndicated,
 | 
						|
  /*IN*/ ULONG  BytesAvailable,
 | 
						|
  /*OUT*/ ULONG  *BytesTaken,
 | 
						|
  /*IN*/ PVOID  Tsdu,
 | 
						|
  /*OUT*/ PIRP  *IoRequestPacket);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_RECEIVE_DATAGRAM)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ LONG  SourceAddressLength,
 | 
						|
  /*IN*/ PVOID  SourceAddress,
 | 
						|
  /*IN*/ LONG  OptionsLength,
 | 
						|
  /*IN*/ PVOID  Options,
 | 
						|
  /*IN*/ ULONG  ReceiveDatagramFlags,
 | 
						|
  /*IN*/ ULONG  BytesIndicated,
 | 
						|
  /*IN*/ ULONG  BytesAvailable,
 | 
						|
  /*OUT*/ ULONG  *BytesTaken,
 | 
						|
  /*IN*/ PVOID  Tsdu,
 | 
						|
  /*OUT*/ PIRP  *IoRequestPacket);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS DDKAPI
 | 
						|
TdiDefaultRcvDatagramHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ LONG  SourceAddressLength,
 | 
						|
  /*IN*/ PVOID  SourceAddress,
 | 
						|
  /*IN*/ LONG  OptionsLength,
 | 
						|
  /*IN*/ PVOID  Options,
 | 
						|
  /*IN*/ ULONG  ReceiveDatagramFlags,
 | 
						|
  /*IN*/ ULONG  BytesIndicated,
 | 
						|
  /*IN*/ ULONG  BytesAvailable,
 | 
						|
  /*OUT*/ ULONG  *BytesTaken,
 | 
						|
  /*IN*/ PVOID  Tsdu,
 | 
						|
  /*OUT*/ PIRP  *IoRequestPacket);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_RECEIVE_EXPEDITED)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  BytesIndicated,
 | 
						|
  /*IN*/ ULONG  BytesAvailable,
 | 
						|
  /*OUT*/ ULONG  *BytesTaken,
 | 
						|
  /*IN*/ PVOID  Tsdu,
 | 
						|
  /*OUT*/ PIRP  *IoRequestPacket);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultRcvExpeditedHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  BytesIndicated,
 | 
						|
  /*IN*/ ULONG  BytesAvailable,
 | 
						|
  /*OUT*/ ULONG  *BytesTaken,
 | 
						|
  /*IN*/ PVOID  Tsdu,
 | 
						|
  /*OUT*/ PIRP  *IoRequestPacket);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_CHAINED_RECEIVE)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  ReceiveLength,
 | 
						|
  /*IN*/ ULONG  StartingOffset,
 | 
						|
  /*IN*/ PMDL  Tsdu,
 | 
						|
  /*IN*/ PVOID  TsduDescriptor);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultChainedReceiveHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  ReceiveLength,
 | 
						|
  /*IN*/ ULONG  StartingOffset,
 | 
						|
  /*IN*/ PMDL  Tsdu,
 | 
						|
  /*IN*/ PVOID  TsduDescriptor);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ LONG  SourceAddressLength,
 | 
						|
  /*IN*/ PVOID  SourceAddress,
 | 
						|
  /*IN*/ LONG  OptionsLength,
 | 
						|
  /*IN*/ PVOID  Options,
 | 
						|
  /*IN*/ ULONG  ReceiveDatagramFlags,
 | 
						|
  /*IN*/ ULONG  ReceiveDatagramLength,
 | 
						|
  /*IN*/ ULONG  StartingOffset,
 | 
						|
  /*IN*/ PMDL  Tsdu,
 | 
						|
  /*IN*/ PVOID  TsduDescriptor);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultChainedRcvDatagramHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ LONG  SourceAddressLength,
 | 
						|
  /*IN*/ PVOID  SourceAddress,
 | 
						|
  /*IN*/ LONG  OptionsLength,
 | 
						|
  /*IN*/ PVOID  Options,
 | 
						|
  /*IN*/ ULONG  ReceiveDatagramFlags,
 | 
						|
  /*IN*/ ULONG  ReceiveDatagramLength,
 | 
						|
  /*IN*/ ULONG  StartingOffset,
 | 
						|
  /*IN*/ PMDL  Tsdu,
 | 
						|
  /*IN*/ PVOID  TsduDescriptor);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  ReceiveLength,
 | 
						|
  /*IN*/ ULONG  StartingOffset,
 | 
						|
  /*IN*/ PMDL  Tsdu,
 | 
						|
  /*IN*/ PVOID  TsduDescriptor);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultChainedRcvExpeditedHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ CONNECTION_CONTEXT  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  ReceiveFlags,
 | 
						|
  /*IN*/ ULONG  ReceiveLength,
 | 
						|
  /*IN*/ ULONG  StartingOffset,
 | 
						|
  /*IN*/ PMDL  Tsdu,
 | 
						|
  /*IN*/ PVOID  TsduDescriptor);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*PTDI_IND_SEND_POSSIBLE)(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ PVOID  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  BytesAvailable);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDefaultSendPossibleHandler(
 | 
						|
  /*IN*/ PVOID  TdiEventContext,
 | 
						|
  /*IN*/ PVOID  ConnectionContext,
 | 
						|
  /*IN*/ ULONG  BytesAvailable);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
  /* Macros and functions to build IRPs */
 | 
						|
 | 
						|
#define TdiBuildBaseIrp(                                                  \
 | 
						|
  bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor)         \
 | 
						|
{                                                                         \
 | 
						|
  bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;                 \
 | 
						|
  bIrpSp->MinorFunction = (bMinor);                                       \
 | 
						|
  bIrpSp->DeviceObject  = (bDevObj);                                      \
 | 
						|
  bIrpSp->FileObject    = (bFileObj);                                     \
 | 
						|
  if (bCompRoutine)                                                       \
 | 
						|
    IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE) \
 | 
						|
  else                                                                    \
 | 
						|
    IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE);        \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildAccept(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 | 
						|
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);
 | 
						|
 */
 | 
						|
#define TdiBuildAccept(                                             \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
 | 
						|
  RequestConnectionInfo, ReturnConnectionInfo)                      \
 | 
						|
{                                                                   \
 | 
						|
  PTDI_REQUEST_KERNEL_ACCEPT _Request;                              \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                        \
 | 
						|
                                                                    \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
 | 
						|
                                                                    \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
 | 
						|
                  Contxt, _IrpSp, TDI_ACCEPT);                      \
 | 
						|
                                                                    \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters;       \
 | 
						|
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
 | 
						|
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildAction(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PMDL  MdlAddr);
 | 
						|
 */
 | 
						|
#define TdiBuildAction(                               \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
 | 
						|
{                                                     \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                          \
 | 
						|
                                                      \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);            \
 | 
						|
                                                      \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,  \
 | 
						|
                  Contxt, _IrpSp, TDI_ACTION);        \
 | 
						|
                                                      \
 | 
						|
  (Irp)->MdlAddress = (MdlAddr);                      \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildAssociateAddress(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN HANDLE  AddrHandle);
 | 
						|
 */
 | 
						|
#define TdiBuildAssociateAddress(                                \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle)         \
 | 
						|
{                                                                \
 | 
						|
  PTDI_REQUEST_KERNEL_ASSOCIATE _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                     \
 | 
						|
                                                                 \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
 | 
						|
                                                                 \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
 | 
						|
                  Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS);        \
 | 
						|
                                                                 \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
 | 
						|
  _Request->AddressHandle = (HANDLE)(AddrHandle);                \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildConnect(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PLARGE_INTEGER  Time,
 | 
						|
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 | 
						|
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); 
 | 
						|
 */
 | 
						|
#define TdiBuildConnect(                                            \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
 | 
						|
  Time, RequestConnectionInfo, ReturnConnectionInfo)                \
 | 
						|
{                                                                   \
 | 
						|
  PTDI_REQUEST_KERNEL _Request;                                     \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                        \
 | 
						|
                                                                    \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
 | 
						|
                                                                    \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
 | 
						|
                  Contxt, _IrpSp, TDI_CONNECT);                     \
 | 
						|
                                                                    \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
 | 
						|
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
 | 
						|
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
 | 
						|
  _Request->RequestSpecific              = (PVOID)(Time);           \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildDisassociateAddress(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt);
 | 
						|
 */
 | 
						|
#define TdiBuildDisassociateAddress(                                \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt)                        \
 | 
						|
{                                                                   \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                        \
 | 
						|
                                                                    \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
 | 
						|
                                                                    \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
 | 
						|
                  Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS);        \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildDisconnect(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PLARGE_INTEGER  Time,
 | 
						|
 * IN PULONG  Flags,
 | 
						|
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 | 
						|
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); 
 | 
						|
 */
 | 
						|
#define TdiBuildDisconnect(                                         \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt, Time,                  \
 | 
						|
  Flags, RequestConnectionInfo, ReturnConnectionInfo)               \
 | 
						|
{                                                                   \
 | 
						|
  PTDI_REQUEST_KERNEL _Request;                                     \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                        \
 | 
						|
                                                                    \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
 | 
						|
                                                                    \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
 | 
						|
                  Contxt, _IrpSp, TDI_DISCONNECT);                  \
 | 
						|
                                                                    \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
 | 
						|
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
 | 
						|
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
 | 
						|
  _Request->RequestSpecific = (PVOID)(Time);                        \
 | 
						|
  _Request->RequestFlags    = (Flags);                              \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * PIRP
 | 
						|
 * TdiBuildInternalDeviceControlIrp(
 | 
						|
 * IN CCHAR IrpSubFunction,
 | 
						|
 * IN PDEVICE_OBJECT DeviceObject,
 | 
						|
 * IN PFILE_OBJECT FileObject,
 | 
						|
 * IN PKEVENT Event,
 | 
						|
 * IN PIO_STATUS_BLOCK IoStatusBlock);
 | 
						|
 */
 | 
						|
#define TdiBuildInternalDeviceControlIrp( \
 | 
						|
  IrpSubFunction, DeviceObject,           \
 | 
						|
  FileObject, Event, IoStatusBlock)       \
 | 
						|
  IoBuildDeviceIoControlRequest(          \
 | 
						|
		0x00000003, DeviceObject,             \
 | 
						|
		NULL, 0, NULL, 0,                     \
 | 
						|
		TRUE, Event, IoStatusBlock)
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildListen(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN ULONG  Flags,
 | 
						|
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 | 
						|
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); 
 | 
						|
 */
 | 
						|
#define TdiBuildListen(                                             \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
 | 
						|
  Flags, RequestConnectionInfo, ReturnConnectionInfo)               \
 | 
						|
{                                                                   \
 | 
						|
  PTDI_REQUEST_KERNEL _Request;                                     \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                        \
 | 
						|
                                                                    \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
 | 
						|
                                                                    \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
 | 
						|
                  Contxt, _IrpSp, TDI_LISTEN);                      \
 | 
						|
                                                                    \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
 | 
						|
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
 | 
						|
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
 | 
						|
  _Request->RequestFlags = (Flags);                                 \
 | 
						|
}
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
TdiBuildNetbiosAddress(
 | 
						|
  /*IN*/ PUCHAR  NetbiosName,
 | 
						|
  /*IN*/ BOOLEAN  IsGroupName,
 | 
						|
  /*IN OUT*/ PTA_NETBIOS_ADDRESS  NetworkName);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiBuildNetbiosAddressEa(
 | 
						|
  /*IN*/ PUCHAR  Buffer,
 | 
						|
  /*IN*/ BOOLEAN  IsGroupName,
 | 
						|
  /*IN*/ PUCHAR  NetbiosName);
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildQueryInformation(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN UINT  QType,
 | 
						|
 * IN PMDL  MdlAddr);
 | 
						|
 */
 | 
						|
#define TdiBuildQueryInformation(                                        \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr)             \
 | 
						|
{                                                                        \
 | 
						|
  PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                             \
 | 
						|
                                                                         \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                               \
 | 
						|
                                                                         \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                     \
 | 
						|
                  Contxt, _IrpSp, TDI_QUERY_INFORMATION);                \
 | 
						|
                                                                         \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
 | 
						|
  _Request->RequestConnectionInformation = NULL;                         \
 | 
						|
  _Request->QueryType = (ULONG)(QType);                                  \
 | 
						|
  (Irp)->MdlAddress   = (MdlAddr);                                       \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildReceive(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PMDL  MdlAddr,
 | 
						|
 * IN ULONG  InFlags, 
 | 
						|
 * IN ULONG  ReceiveLen); 
 | 
						|
 */
 | 
						|
#define TdiBuildReceive(                                       \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                   \
 | 
						|
  MdlAddr, InFlags, ReceiveLen)                                \
 | 
						|
{                                                              \
 | 
						|
  PTDI_REQUEST_KERNEL_RECEIVE _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                   \
 | 
						|
                                                               \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                     \
 | 
						|
                                                               \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,           \
 | 
						|
                  Contxt, _IrpSp, TDI_RECEIVE);                \
 | 
						|
                                                               \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
 | 
						|
  _Request->ReceiveFlags  = (InFlags);                         \
 | 
						|
  _Request->ReceiveLength = (ReceiveLen);                      \
 | 
						|
  (Irp)->MdlAddress       = (MdlAddr);                         \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildReceiveDatagram(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PMDL  MdlAddr,
 | 
						|
 * IN ULONG  ReceiveLen,
 | 
						|
 * IN PTDI_CONNECTION_INFORMATION  ReceiveDatagramInfo,
 | 
						|
 * OUT PTDI_CONNECTION_INFORMATION  ReturnInfo,
 | 
						|
 *   ULONG InFlags); 
 | 
						|
 */
 | 
						|
#define TdiBuildReceiveDatagram(                                 \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr,            \
 | 
						|
  ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags)          \
 | 
						|
{                                                                \
 | 
						|
  PTDI_REQUEST_KERNEL_RECEIVEDG _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                     \
 | 
						|
                                                                 \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
 | 
						|
                                                                 \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
 | 
						|
                  Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM);         \
 | 
						|
                                                                 \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \
 | 
						|
  _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo);  \
 | 
						|
  _Request->ReturnDatagramInformation  = (ReturnInfo);           \
 | 
						|
  _Request->ReceiveLength = (ReceiveLen);                        \
 | 
						|
  _Request->ReceiveFlags  = (InFlags);                           \
 | 
						|
  (Irp)->MdlAddress       = (MdlAddr);                           \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildSend(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PMDL  MdlAddr,
 | 
						|
 * IN ULONG  InFlags,
 | 
						|
 * IN ULONG  SendLen);
 | 
						|
 */
 | 
						|
#define TdiBuildSend(                                       \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                \
 | 
						|
  MdlAddr, InFlags, SendLen)                                \
 | 
						|
{                                                           \
 | 
						|
  PTDI_REQUEST_KERNEL_SEND _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                \
 | 
						|
                                                            \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                  \
 | 
						|
                                                            \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,        \
 | 
						|
                  Contxt, _IrpSp, TDI_SEND);                \
 | 
						|
                                                            \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
 | 
						|
  _Request->SendFlags  = (InFlags);                         \
 | 
						|
  _Request->SendLength = (SendLen);                         \
 | 
						|
  (Irp)->MdlAddress    = (MdlAddr);                         \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildSendDatagram(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN PMDL  MdlAddr,
 | 
						|
 * IN ULONG  SendLen,
 | 
						|
 * IN PTDI_CONNECTION_INFORMATION  SendDatagramInfo); 
 | 
						|
 */
 | 
						|
#define TdiBuildSendDatagram(                                 \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                  \
 | 
						|
  MdlAddr, SendLen, SendDatagramInfo)                         \
 | 
						|
{                                                             \
 | 
						|
  PTDI_REQUEST_KERNEL_SENDDG _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                  \
 | 
						|
                                                              \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                    \
 | 
						|
                                                              \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,          \
 | 
						|
                  Contxt, _IrpSp, TDI_SEND_DATAGRAM);         \
 | 
						|
                                                              \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
 | 
						|
  _Request->SendDatagramInformation = (SendDatagramInfo);     \
 | 
						|
  _Request->SendLength = (SendLen);                           \
 | 
						|
  (Irp)->MdlAddress    = (MdlAddr);                           \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildSetEventHandler(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN INT  InEventType,
 | 
						|
 * IN PVOID  InEventHandler,
 | 
						|
 * IN PVOID  InEventContext);
 | 
						|
 */
 | 
						|
#define TdiBuildSetEventHandler(                                 \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt,                     \
 | 
						|
  InEventType, InEventHandler, InEventContext)                   \
 | 
						|
{                                                                \
 | 
						|
  PTDI_REQUEST_KERNEL_SET_EVENT _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                     \
 | 
						|
                                                                 \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
 | 
						|
                                                                 \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
 | 
						|
                  Contxt, _IrpSp, TDI_SET_EVENT_HANDLER);        \
 | 
						|
                                                                 \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
 | 
						|
  _Request->EventType    = (InEventType);                        \
 | 
						|
  _Request->EventHandler = (PVOID)(InEventHandler);              \
 | 
						|
  _Request->EventContext = (PVOID)(InEventContext);              \
 | 
						|
}
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiBuildSetInformation(
 | 
						|
 * IN PIRP  Irp,
 | 
						|
 * IN PDEVICE_OBJECT  DevObj,
 | 
						|
 * IN PFILE_OBJECT  FileObj,
 | 
						|
 * IN PVOID  CompRoutine,
 | 
						|
 * IN PVOID  Contxt,
 | 
						|
 * IN UINT  SType,
 | 
						|
 * IN PMDL  MdlAddr);
 | 
						|
 */
 | 
						|
#define TdiBuildSetInformation(                                        \
 | 
						|
  Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr)           \
 | 
						|
{                                                                      \
 | 
						|
  PTDI_REQUEST_KERNEL_SET_INFORMATION _Request;                        \
 | 
						|
  PIO_STACK_LOCATION _IrpSp;                                           \
 | 
						|
                                                                       \
 | 
						|
  _IrpSp = IoGetNextIrpStackLocation(Irp);                             \
 | 
						|
                                                                       \
 | 
						|
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                   \
 | 
						|
                  Contxt, _IrpSp, TDI_SET_INFORMATION);                \
 | 
						|
                                                                       \
 | 
						|
  _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
 | 
						|
  _Request->RequestConnectionInformation = NULL;                       \
 | 
						|
  _Request->SetType = (ULONG)(SType);                                  \
 | 
						|
  (Irp)->MdlAddress = (MdlAddr);                                       \
 | 
						|
}
 | 
						|
 | 
						|
  /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
 | 
						|
#define TDI_CURRENT_MAJOR_VERSION         2
 | 
						|
#define TDI_CURRENT_MINOR_VERSION         0
 | 
						|
 | 
						|
#define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
 | 
						|
  | (TDI_CURRENT_MAJOR_VERSION))
 | 
						|
 | 
						|
#define TDI_VERSION_ONE                   0x0001
 | 
						|
 | 
						|
typedef enum _TDI_PNP_OPCODE {
 | 
						|
  TDI_PNP_OP_MIN,
 | 
						|
  TDI_PNP_OP_ADD,
 | 
						|
  TDI_PNP_OP_DEL,
 | 
						|
  TDI_PNP_OP_UPDATE,
 | 
						|
  TDI_PNP_OP_PROVIDERREADY,
 | 
						|
  TDI_PNP_OP_NETREADY,
 | 
						|
  TDI_PNP_OP_ADD_IGNORE_BINDING,
 | 
						|
  TDI_PNP_OP_DELETE_IGNORE_BINDING,
 | 
						|
  TDI_PNP_OP_MAX
 | 
						|
} TDI_PNP_OPCODE;
 | 
						|
 | 
						|
  /* TDI_PNP_CONTEXT.ContextType */
 | 
						|
#define TDI_PNP_CONTEXT_TYPE_IF_NAME            0x1
 | 
						|
#define TDI_PNP_CONTEXT_TYPE_IF_ADDR            0x2
 | 
						|
#define TDI_PNP_CONTEXT_TYPE_PDO                0x3
 | 
						|
#define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF   0x4
 | 
						|
 | 
						|
typedef struct _TDI_PNP_CONTEXT {
 | 
						|
  USHORT  ContextSize;
 | 
						|
  USHORT  ContextType;
 | 
						|
  UCHAR  ContextData[1];
 | 
						|
} TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_ADD_ADDRESS_HANDLER)(
 | 
						|
  /*IN*/ PTA_ADDRESS  Address);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_ADD_ADDRESS_HANDLER_V2)(
 | 
						|
  /*IN*/ PTA_ADDRESS  Address,
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_BINDING_HANDLER)(
 | 
						|
  /*IN*/ TDI_PNP_OPCODE  PnPOpcode,
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*IN*/ PWSTR  MultiSZBindList);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_BIND_HANDLER)(
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_DEL_ADDRESS_HANDLER)(
 | 
						|
  /*IN*/ PTA_ADDRESS  Address);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_DEL_ADDRESS_HANDLER_V2)(
 | 
						|
  /*IN*/ PTA_ADDRESS  Address,
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context);
 | 
						|
 | 
						|
typedef NTSTATUS DDKAPI
 | 
						|
(*TDI_PNP_POWER_HANDLER)(
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*IN*/ PNET_PNP_EVENT  PowerEvent,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context1,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context2);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*TDI_UNBIND_HANDLER)(
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName);
 | 
						|
 | 
						|
typedef VOID DDKAPI
 | 
						|
(*ProviderPnPPowerComplete)(
 | 
						|
  /*IN*/ PNET_PNP_EVENT  NetEvent,
 | 
						|
  /*IN*/ NTSTATUS  ProviderStatus);
 | 
						|
 | 
						|
typedef struct _TDI20_CLIENT_INTERFACE_INFO {
 | 
						|
  _ANONYMOUS_UNION union {
 | 
						|
    _ANONYMOUS_STRUCT struct {
 | 
						|
      UCHAR  MajorTdiVersion;
 | 
						|
      UCHAR  MinorTdiVersion;
 | 
						|
    } DUMMYSTRUCTNAME;
 | 
						|
    USHORT TdiVersion;
 | 
						|
  } DUMMYUNIONNAME;
 | 
						|
  USHORT  Unused;
 | 
						|
  PUNICODE_STRING  ClientName;
 | 
						|
  TDI_PNP_POWER_HANDLER  PnPPowerHandler;
 | 
						|
  _ANONYMOUS_UNION union {
 | 
						|
    TDI_BINDING_HANDLER  BindingHandler;
 | 
						|
    _ANONYMOUS_STRUCT struct {
 | 
						|
      TDI_BIND_HANDLER  BindHandler;
 | 
						|
      TDI_UNBIND_HANDLER  UnBindHandler;
 | 
						|
    } DUMMYSTRUCTNAME;
 | 
						|
  }DUMMYUNIONNAME2;
 | 
						|
  _ANONYMOUS_UNION union {
 | 
						|
    _ANONYMOUS_STRUCT struct {
 | 
						|
      TDI_ADD_ADDRESS_HANDLER_V2  AddAddressHandlerV2;
 | 
						|
      TDI_DEL_ADDRESS_HANDLER_V2  DelAddressHandlerV2;
 | 
						|
    } DUMMYSTRUCTNAME;
 | 
						|
    _ANONYMOUS_STRUCT struct {
 | 
						|
      TDI_ADD_ADDRESS_HANDLER  AddAddressHandler;
 | 
						|
      TDI_DEL_ADDRESS_HANDLER  DelAddressHandler;
 | 
						|
    } DUMMYSTRUCTNAME2;
 | 
						|
  } DUMMYUNIONNAME3;
 | 
						|
} TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
 | 
						|
 | 
						|
typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
 | 
						|
typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
 | 
						|
 | 
						|
 | 
						|
  /* TDI functions */
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiCompleteRequest(
 | 
						|
 * IN PIRP Irp,
 | 
						|
 * IN NTSTATUS Status);
 | 
						|
 */
 | 
						|
#define TdiCompleteRequest(Irp, Status)           \
 | 
						|
{                                                 \
 | 
						|
  (Irp)->IoStatus.Status = (Status);              \
 | 
						|
  IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
 | 
						|
}
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiCopyBufferToMdl(
 | 
						|
  /*IN*/ PVOID  SourceBuffer,
 | 
						|
  /*IN*/ ULONG  SourceOffset,
 | 
						|
  /*IN*/ ULONG  SourceBytesToCopy,
 | 
						|
  /*IN*/ PMDL  DestinationMdlChain,
 | 
						|
  /*IN*/ ULONG  DestinationOffset,
 | 
						|
  /*IN*/ PULONG  BytesCopied);
 | 
						|
 | 
						|
  /*
 | 
						|
 * VOID
 | 
						|
 * TdiCopyLookaheadData(
 | 
						|
 * IN PVOID  Destination,
 | 
						|
 * IN PVOID  Source,
 | 
						|
 * IN ULONG  Length,
 | 
						|
 * IN ULONG  ReceiveFlags);
 | 
						|
 */
 | 
						|
#define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
 | 
						|
  RtlCopyMemory(Destination, Source, Length)
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiCopyMdlChainToMdlChain (
 | 
						|
  /*IN*/ PMDL  SourceMdlChain,
 | 
						|
  /*IN*/ ULONG  SourceOffset,
 | 
						|
  /*IN*/ PMDL  DestinationMdlChain,
 | 
						|
  /*IN*/ ULONG  DestinationOffset,
 | 
						|
  /*OUT*/ PULONG  BytesCopied);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiCopyMdlToBuffer(
 | 
						|
  /*IN*/ PMDL  SourceMdlChain,
 | 
						|
  /*IN*/ ULONG  SourceOffset,
 | 
						|
  /*IN*/ PVOID  DestinationBuffer,
 | 
						|
  /*IN*/ ULONG  DestinationOffset,
 | 
						|
  /*IN*/ ULONG  DestinationBufferSize,
 | 
						|
  /*OUT*/ PULONG  BytesCopied);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDeregisterAddressChangeHandler(
 | 
						|
  /*IN*/ HANDLE  BindingHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDeregisterDeviceObject(
 | 
						|
  /*IN*/ HANDLE  DevRegistrationHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDeregisterNetAddress(
 | 
						|
  /*IN*/ HANDLE  AddrRegistrationHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDeregisterPnPHandlers(
 | 
						|
  /*IN*/ HANDLE  BindingHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiDeregisterProvider(
 | 
						|
  /*IN*/ HANDLE  ProviderHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiEnumerateAddresses(
 | 
						|
  /*IN*/ HANDLE  BindingHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
TdiInitialize(
 | 
						|
  VOID);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
TdiMapBuffer(
 | 
						|
  /*IN*/ PMDL  MdlChain);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiMapUserRequest(
 | 
						|
  /*IN*/ PDEVICE_OBJECT  DeviceObject,
 | 
						|
  /*IN*/ PIRP  Irp,
 | 
						|
  /*IN*/ PIO_STACK_LOCATION  IrpSp);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
BOOLEAN
 | 
						|
DDKAPI
 | 
						|
TdiMatchPdoWithChainedReceiveContext(
 | 
						|
  /*IN*/ PVOID TsduDescriptor,
 | 
						|
  /*IN*/ PVOID PDO);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
TdiPnPPowerComplete(
 | 
						|
  /*IN*/ HANDLE  BindingHandle,
 | 
						|
  /*IN*/ PNET_PNP_EVENT  PowerEvent,
 | 
						|
  /*IN*/ NTSTATUS  Status);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiPnPPowerRequest(
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*IN*/ PNET_PNP_EVENT  PowerEvent,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context1,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context2,
 | 
						|
  /*IN*/ ProviderPnPPowerComplete  ProtocolCompletionHandler);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiProviderReady(
 | 
						|
  /*IN*/ HANDLE  ProviderHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiRegisterAddressChangeHandler(
 | 
						|
  /*IN*/ TDI_ADD_ADDRESS_HANDLER  AddHandler,
 | 
						|
  /*IN*/ TDI_DEL_ADDRESS_HANDLER  DeleteHandler,
 | 
						|
  /*OUT*/ HANDLE  *BindingHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiRegisterDeviceObject(
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*OUT*/ HANDLE  *DevRegistrationHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiRegisterNetAddress(
 | 
						|
  /*IN*/ PTA_ADDRESS  Address,
 | 
						|
  /*IN*/ PUNICODE_STRING  DeviceName,
 | 
						|
  /*IN*/ PTDI_PNP_CONTEXT  Context,
 | 
						|
  /*OUT*/ HANDLE  *AddrRegistrationHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiRegisterNotificationHandler(
 | 
						|
  /*IN*/ TDI_BIND_HANDLER  BindHandler,
 | 
						|
  /*IN*/ TDI_UNBIND_HANDLER  UnbindHandler,
 | 
						|
  /*OUT*/ HANDLE  *BindingHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiRegisterPnPHandlers(
 | 
						|
  /*IN*/ PTDI_CLIENT_INTERFACE_INFO  ClientInterfaceInfo,
 | 
						|
  /*IN*/ ULONG  InterfaceInfoSize,
 | 
						|
  /*OUT*/ HANDLE  *BindingHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
NTSTATUS
 | 
						|
DDKAPI
 | 
						|
TdiRegisterProvider(
 | 
						|
  /*IN*/ PUNICODE_STRING  ProviderName,
 | 
						|
  /*OUT*/ HANDLE  *ProviderHandle);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
TdiReturnChainedReceives(
 | 
						|
  /*IN*/ PVOID  *TsduDescriptors,
 | 
						|
  /*IN*/ ULONG   NumberOfTsdus);
 | 
						|
 | 
						|
TDIKRNLAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
TdiUnmapBuffer(
 | 
						|
  /*IN*/ PMDL  MdlChain);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* __TDIKRNL_H */
 |