home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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 */
-