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 
								);