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 */
|