www.pudn.com > IPsec_Src_Instal.rar > IPSec.h
/*++
Copyright (c) 1992-2000 Microsoft Corporation
--*/
//
// Data Types and Structures
//
// Adapter Specific Context
//
typedef struct _ADAPT
{
struct _ADAPT* Next;
//
// For handling this Event
//
NDIS_EVENT Event;
//
// For Synchronisation
//
NDIS_SPIN_LOCK Lock;
//
// Packet Pool for Sending
//
NDIS_HANDLE SendPacketPoolHandle;
//
// Packet Pool for Receieving
//
NDIS_HANDLE RecvPacketPoolHandle;
//
// Handle for the binding between this Protocol functions
// and the Underlying NIC
//
NDIS_HANDLE BindingHandle;
//
// Handle for this NIC assigned by NDIS
//
NDIS_HANDLE MiniportHandle;
//
// General Status
//
NDIS_STATUS Status;
//
// Operating Medium;
//
NDIS_MEDIUM Medium;
//
// Device State of Miniport
//
NDIS_DEVICE_POWER_STATE MiniportDeviceState;
//
// Device State of Protocol
//
NDIS_DEVICE_POWER_STATE ProtocolDeviceState;
//
// TRUE - If Device goes from D0 state to Standby
// FALSE - If in D0 State
//
BOOLEAN StandingBy;
//
// For Requesting down
//
NDIS_REQUEST Request;
PULONG BytesReadOrWritten;
PULONG BytesNeeded;
//
// TRUE- if request is passed below
//
BOOLEAN OutstandingRequests;
//
// TRUE - if a request is queued with the IM miniport and needs
// to be either failed or sent to the miniport below the
// IM Protocol
//
BOOLEAN QueuedRequest;
BOOLEAN IndicateRcvComplete;
//
// For blocking UnbindAdapter while an IM Init is in progress.
//
NDIS_EVENT MiniportInitEvent;
//
// TRUE iff IM Init in progress
//
BOOLEAN MiniportInitPending;
BOOLEAN UnbindingInProcess;
NDIS_STRING DeviceName;
//
// The last indicated media status
//
NDIS_STATUS LastIndicatedStatus;
//
// The latest suppressed media status
//
NDIS_STATUS LatestUnIndicateStatus;
ULONG OutstandingSends;
//
// Handle to Send buffer pool.
//
NDIS_HANDLE hSendBufferPool;
//
// Handle to Receive buffer pool.
//
NDIS_HANDLE hRecvBufferPool;
//
// Ethernet address of the underlying adapter.
//
UCHAR MACAddress[ETH_LENGTH_OF_ADDRESS];
NDIS_STRING BundleUniString;
}ADAPT, *PADAPT;
//
// Protocol reserved part of a sent packet that is allocated by us.
//
typedef struct _SEND_RSVD
{
PNDIS_PACKET OriginalPkt;
//
// TRUE => NDIS_BUFFER is a substitution
//
BOOLEAN bNewBuffer;
} SEND_RSVD, *PSEND_RSVD;
//
// Miniport reserved part of a received packet that is allocated by
// us. Note that this should fit into the MiniportReserved space
// in an NDIS_PACKET.
//
typedef struct _RECV_RSVD
{
PNDIS_PACKET OriginalPkt;
//
// TRUE => NDIS_BUFFER is a substitution
//
BOOLEAN bNewBuffer;
} RECV_RSVD, *PRECV_RSVD;
extern NDIS_HANDLE DriverHandle;
extern NDIS_HANDLE ProtocolHandle;
extern NDIS_SPIN_LOCK GlobalLock;
extern NDIS_MEDIUM Medium[2];
extern NDIS_SPIN_LOCK GlobalLock;
extern PADAPT pAdaptList;
extern LONG MiniportCount;
extern NDIS_HANDLE NdisWrapperHandle;
#define MAX_PACKET_POOL_SIZE 0x0000FFFF
#define MIN_PACKET_POOL_SIZE 0x000000FF
#define MAX_BUNDLEID_LENGTH 50
#define TAG 'ImPa'
#define ADAPT_MINIPORT_HANDLE(_pAdapt) ((_pAdapt)->MiniportHandle)
#define ADAPT_DECR_PENDING_SENDS(_pAdapt) \
{ \
NdisAcquireSpinLock(&(_pAdapt)->Lock); \
(_pAdapt)->OutstandingSends--; \
NdisReleaseSpinLock(&(_pAdapt)->Lock); \
}
#define IsIMDeviceStateOn(_pP) ((_pP)->MiniportDeviceState == NdisDeviceStateD0 && (_pP)->ProtocolDeviceState == NdisDeviceStateD0 )
extern NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
//
// Protocol Functions
//
extern VOID PPBindAdapter(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE BindContext,
IN PNDIS_STRING DeviceName,
IN PVOID SystemSpecific1,
IN PVOID SystemSpecific2
);
extern VOID PPOpenAdapterComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStaus
);
extern VOID PPSendComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status
);
extern NDIS_STATUS PPReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookAheadBufferSize,
IN UINT PacketSize
);
extern VOID PPReceiveComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
extern VOID PPRequestComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST NdisRequest,
IN NDIS_STATUS Status
);
extern NDIS_STATUS PPPnpEvent(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNET_PNP_EVENT NetPnPEvent
);
extern VOID PPUnbindAdapter(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE UnbindContext
);
extern VOID PPCloseAdapterComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
extern VOID PPResetComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
extern VOID PPUnload(
IN PDRIVER_OBJECT DriverObject
);
extern VOID PPUnloadProtocol(
VOID
);
extern VOID PPTransferDataComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
extern VOID PPStatus(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize
);
extern VOID PPStatusComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
extern INT PPReceivePacket
(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet
);
extern NDIS_STATUS PtPnPNetEventReconfigure
(
IN PADAPT pAdapt,
IN PNET_PNP_EVENT pNetPnPEvent
);
extern NDIS_STATUS PtPnPNetEventSetPower
(
IN PADAPT pAdapt,
IN PNET_PNP_EVENT pNetPnPEvent
);
//
// Miniport Functions
//
extern NDIS_STATUS MPInitialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE WrapperConfigurationContext
);
extern NDIS_STATUS MPSend(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet,
IN UINT Flags
);
extern VOID MPSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets
);
extern NDIS_STATUS MPQueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesWritten,
OUT PULONG BytesNeeded
);
extern NDIS_STATUS MPSetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
extern VOID MPReturnPacket(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet
);
extern NDIS_STATUS MPTransferData(
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred,
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer
);
extern VOID MPHalt(
IN NDIS_HANDLE MiniportAdapterContext
);
extern NDIS_STATUS MPReset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext
);
extern VOID MPFreeAllPacketPools(
IN PADAPT pAdapt
);
extern VOID MPQueryPNPCapabilities(
IN OUT PADAPT pAdapt,
OUT PNDIS_STATUS pStatus
);
extern VOID MPProcessSetPowerOid(
IN OUT PNDIS_STATUS pNdisStatus,
IN PADAPT pAdapt,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
NDIS_STATUS FilterPacket(
PADAPT pAdapt,
PNDIS_PACKET pPktDesc,
PUCHAR pPayload,
BOOLEAN bSend,
PBOOLEAN pBDecision
);