|
|
/*++
Copyright (c) 1990-1995 Microsoft Corporation
Module Name:
transfdrv.h
Abstract:
This file contains defines for the NdisWan driver.
Author:
Tony Bell (TonyBe) January 36, 1998
Environment:
Kernel Mode
Revision History:
TonyBe 01/26/98 Created
--*/
#ifndef _TRANSDRV_
#define _TRANSDRV_
//
// Transform Driver client handlers
//
typedef NTSTATUS (*CL_TRANS_REGISTER)( IN PVOID ClientOpenContext, IN ULONG CharacteristicsSize, IN struct _TRANSFORM_CHARACTERISTICS *Characteristics, IN ULONG TransformCapsSize, IN struct _TRANSFORM_INFO *TransformCaps );
typedef VOID (*CL_TRANS_TX_COMPLETE)( IN NTSTATUS Status, IN PVOID ClientTxContext, IN PMDL InData, IN PMDL OutData, IN ULONG OutDataOffset, IN ULONG OutDataLength );
typedef VOID (*CL_TRANS_RX_COMPLETE)( IN NTSTATUS Status, IN PVOID ClientRxContext, IN PMDL InData, IN PMDL OutData, IN ULONG OutDataOffset, IN ULONG OutDataLength );
typedef NTSTATUS (*CL_TRANS_SEND_CTRL)( IN PVOID ClientTxContext, IN ULONG DataLength, IN UCHAR Data[1] );
//
// Transform Driver handlers
//
typedef NTSTATUS (*TRANS_ALLOC_CTX)( IN PVOID ClientTxContext, OUT PVOID *TransformTxContext, IN ULONG MaxInputDataSize, OUT PULONG MaxOutputDataSize, IN ULONG TransformInfoSize, IN struct _TRANSFORM_INFO *TransformInfo );
typedef NTSTATUS (*TRANS_ALLOC_CTX)( IN PVOID ClientRxContext, OUT PVOID *TransformRxContext, IN ULONG MaxInputDataSize, OUT PULONG MaxOutputDataSize, IN ULONG TransformInfoSize, IN struct _TRANSFORM_INFO *TransformInfo );
typedef VOID (*TRANS_FREE_CTX)( IN PVOID TransformContext );
typedef VOID (*TRANS_SET_TXCTX_INFO)( IN PVOID TransformTxContext, IN ULONG Cmd, IN ULONG CmdInfoSize, IN PUCHAR CmdInfo );
typedef VOID (*TRANS_SET_RXCTX_INFO)( IN PVOID TransformRxContext, IN ULONG Cmd, IN ULONG CmdInfoSize, IN PUCHAR CmdInfo );
typedef NTSTATUS (*TRANS_TRANSFORM_TX_DATA)( IN PVOID TransformTxContext, IN PMDL InData, IN ULONG InDataOffset, IN ULONG InDataLength, IN OUT PMDL OutData, IN OUT ULONG OutDataOffset, IN OUT PULONG OutDataLength );
typedef NTSTATUS (*TRANS_TRANSFORM_RX_DATA)( IN PVOID TransformRxContext, IN PMDL InData, IN ULONG InDataOffset, IN ULONG InDataLength, IN OUT PMDL OutData, IN OUT ULONG OutDataOffset, IN OUT PULONG OutDataLength );
typedef NTSTATUS (*TRANS_RECV_CTRL)( IN PVOID TransformRxContext, IN ULONG DataLength, IN UCHAR Data[1] );
#define FILE_DEVICE_TRANSFORM_DRIVER 0x066
#define FUNC_TRANSFORM_OPEN 0
#define FUNC_TRANSFORM_CLOSE 1
#define TRANSFORM_CTL_CODE(_Function) \
CTL_CODE(FILE_DEVICE_TRANSFORM_DRIVER, _Function, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_TRANSFORM_OPEN \
TRANSFORM_CTL_CODE(FUNC_TRANSFORM_OPEN)
#define IOCTL_TRANSFORM_CLOSE \
TRANSFORM_CTL_CODE(FUNC_TRANSFORM_CLOSE)
#define HARDWARE_ACCELERATED 0x00000001
#define FRAMING_MODE 0x00000001
#define RAW_MODE 0x00000002
#define DATA_EXPANSION 0x00000004
typedef enum _TRANSFOR_IE_TYPE { TRANS_PPP_COMPRESSION = 1, TRANS_PPP_ENCRYPTION, TRANS_IPSEC_ENCRYPTION, TRANS_IPSEC_HASHING } TRANSFORM_IE_TYPE;
typedef struct _TRANSFORM_OPEN { IN PVOID ClientOpenContext; OUT PVOID *TransformOpenContext; IN UCHAR MajorVersion; IN UCHAR MinorVersion; IN CL_TRANS_REGISTER TransformRegisterHandler; IN CL_TRANS_TX_COMPLETE TransformTxCompleteHandler; IN CL_TRANS_RX_COMPLETE TransformRxCompleteHandler; IN CL_TRANS_SEND_CTRL SendCtrlPacketHandler; } TRANSFORM_OPEN, *PTRANSFORM_OPEN;
typedef struct _TRANSFORM_CLOSE { IN PVOID TransformOpenContext; } TRANSFORM_CLOSE, *PTRANSFORM_CLOSE;
typedef struct _TRANSFORM_CHARACTERISTICS { UCHAR MajorVersion; UCHAR MinorVersion; USHORT Reserved; ULONG Flags; // TRANS_GET_INFO GetInfoHandler;
TRANS_ALLOC_CTX AllocTxCtxHandler; TRANS_ALLOC_CTX AllocateRxCtxHandle; TRANS_FREE_CTX FreeCtxHandler; TRANS_SET_TXCTX_INFO SetTxCtxInfoHandler; TRANS_SET_RXCTX_INFO SetRxCtxInfoHandler; TRANS_TRANSFORM_TX_DATA TransformTxDataHandler; TRANS_TRANSFORM_RX_DATA TransformRxDataHandler; TRANS_RECV_CTRL RecvCtrlPacketHandler; } TRANSFORM_CHARACTERISTICS, *PTRANSFORM_CHARACTERISTICS;
typedef struct _TRANSFORM_INFO { ULONG InfoElementCount; UCHAR InfoElements[1]; } TRANSFORM_INFO, *PTRANSFORM_INFO;
typedef struct _TRANSFORM_IE { TRANSFORM_IE_TYPE IEType; ULONG IESize; ULONG Flags; UCHAR IEData[1]; } TRANSFORM_IE, *PTRANSFORM_IE;
//
// Encryption key sizes
//
#ifndef MAX_SESSIONKEY_SIZE
#define MAX_SESSIONKEY_SIZE 8
#endif
#ifndef MAX_USERSESSIONKEY_SIZE
#define MAX_USERSESSIONKEY_SIZE 16
#endif
#ifndef MAX_CHALLENGE_SIZE
#define MAX_CHALLENGE_SIZE 8
#endif
typedef struct _IE_CCP { //
// MPPC/MPPE specific fields
//
UCHAR LMSessionKey[MAX_SESSIONKEY_SIZE]; UCHAR UserSessionKey[MAX_USERSESSIONKEY_SIZE]; UCHAR Challenge[MAX_CHALLENGE_SIZE]; ULONG MSCompType; //
// End of MPPC/MPPE specifc fields
//
UCHAR CompType; USHORT CompLength;
union { struct { UCHAR CompOUI[3]; UCHAR CompSubType; UCHAR CompValues[32]; } Proprietary;
struct { UCHAR CompValues[32]; } Public; };
}IE_CCP, *PIE_CCP;
typedef struct IE_ECP{ UCHAR EncryptType; USHORT EncryptLength;
union { struct { UCHAR EncryptOUI[3]; UCHAR EncryptSubtype; UCHAR EncryptValues[1]; } Proprietary;
struct { UCHAR EncryptValues[1]; } Public; };
} IE_ECP, *PIE_ECP;
#endif // _TRANSDRV_
|