📄 mux.h
字号:
IN UINT BytesTransferred
);
NDIS_STATUS
PtReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
VOID
PtReceiveComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
INT
PtReceivePacket(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet
);
VOID
PtBindAdapter(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE BindContext,
IN PNDIS_STRING DeviceName,
IN PVOID SystemSpecific1,
IN PVOID SystemSpecific2
);
VOID
PtUnbindAdapter(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE UnbindContext
);
NDIS_STATUS
PtPNPHandler(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNET_PNP_EVENT pNetPnPEvent
);
NDIS_STATUS
PtCreateAndStartVElan(
IN PADAPT pAdapt,
IN PNDIS_STRING pVElanKey
);
PVELAN
PtAllocateAndInitializeVElan(
IN PADAPT pAdapt,
IN PNDIS_STRING pVElanKey
);
VOID
PtDeallocateVElan(
IN PVELAN pVElan
);
VOID
PtStopVElan(
IN PVELAN pVElan
);
VOID
PtUnlinkVElanFromAdapter(
IN PVELAN pVElan
);
PVELAN
PtFindVElan(
IN PADAPT pAdapt,
IN PNDIS_STRING pElanKey
);
NDIS_STATUS
PtBootStrapVElans(
IN PADAPT pAdapt
);
VOID
PtReferenceVElan(
IN PVELAN pVElan,
IN PUCHAR String
);
ULONG
PtDereferenceVElan(
IN PVELAN pVElan,
IN PUCHAR String
);
BOOLEAN
PtReferenceAdapter(
IN PADAPT pAdapt,
IN PUCHAR String
);
ULONG
PtDereferenceAdapter(
IN PADAPT pAdapt,
IN PUCHAR String
);
//
// Miniport proto-types
//
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
);
VOID
MPSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets
);
NDIS_STATUS
MPQueryInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesWritten,
OUT PULONG BytesNeeded
);
NDIS_STATUS
MPSetInformation(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
VOID
MPReturnPacket(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet
);
NDIS_STATUS
MPTransferData(
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred,
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer
);
VOID
MPHalt(
IN NDIS_HANDLE MiniportAdapterContext
);
NDIS_STATUS
MPSetPacketFilter(
IN PVELAN pVElan,
IN ULONG PacketFilter
);
NDIS_STATUS
MPSetMulticastList(
IN PVELAN pVElan,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG pBytesRead,
OUT PULONG pBytesNeeded
);
PUCHAR
MacAddrToString(PVOID In
);
VOID
MPGenerateMacAddr(
PVELAN pVElan
);
#ifdef NDIS51_MINIPORT
VOID
MPCancelSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID CancelId
);
VOID
MPDevicePnPEvent(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_DEVICE_PNP_EVENT DevicePnPEvent,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength
);
VOID
MPAdapterShutdown(
IN NDIS_HANDLE MiniportAdapterContext
);
#endif //NDIS51_MINIPORT
VOID
MPUnload(
IN PDRIVER_OBJECT DriverObject
);
NDIS_STATUS
MPForwardRequest(
IN PVELAN pVElan,
IN NDIS_REQUEST_TYPE RequestType,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesReadOrWritten,
OUT PULONG BytesNeeded
);
//
// Super-structure for NDIS_REQUEST, to allow us to keep context
// about requests sent down to a lower binding.
//
typedef struct _MUX_NDIS_REQUEST
{
PVELAN pVElan; // Set iff this is a forwarded
// request from a VELAN.
NDIS_STATUS Status; // Completion status
NDIS_EVENT Event; // Used to block for completion.
PMUX_REQ_COMPLETE_HANDLER pCallback; // Called on completion of request
NDIS_REQUEST Request;
} MUX_NDIS_REQUEST, *PMUX_NDIS_REQUEST;
//
// The ADAPT object represents a binding to a lower adapter by
// the protocol edge of this driver. Based on the configured
// Upper bindings, zero or more virtual miniport devices (VELANs)
// are created above this binding.
//
typedef struct _ADAPT
{
// Chain adapters. Access to this is protected by the global lock.
LIST_ENTRY Link;
// References to this adapter.
ULONG RefCount;
// Handle to the lower adapter, used in NDIS calls referring
// to this adapter.
NDIS_HANDLE BindingHandle;
// List of all the virtual ELANs created on this lower binding
LIST_ENTRY VElanList;
// Length of above list.
ULONG VElanCount;
// String used to access configuration for this binding.
NDIS_STRING ConfigString;
// Open Status. Used by bind/halt for Open/Close Adapter status.
NDIS_STATUS Status;
NDIS_EVENT Event;
//
// Packet filter set to the underlying adapter. This is
// a combination (union) of filter bits set on all
// attached VELAN miniports.
//
ULONG PacketFilter;
// Medium of the underlying Adapter.
NDIS_MEDIUM Medium;
// Link speed of the underlying adapter.
ULONG LinkSpeed;
// Max lookahead size for the underlying adapter.
ULONG MaxLookAhead;
// Power state of the underlying adapter
NDIS_DEVICE_POWER_STATE PtDevicePowerState;
// Ethernet address of the underlying adapter.
UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
#ifndef WIN9X
//
// Read/Write lock: allows multiple readers but only a single
// writer. Used to protect the VELAN list and fields (e.g. packet
// filter) shared on an ADAPT by multiple VELANs. Code that
// needs to traverse the VELAN list safely acquires a READ lock.
// Code that needs to safely modify the VELAN list or shared
// fields acquires a WRITE lock (which also excludes READers).
//
// See macros MUX_ACQUIRE_ADAPT_xxx/MUX_RELEASE_ADAPT_xxx below.
//
// TBD - if we want to support this on Win9X, reimplement this!
//
NDIS_RW_LOCK ReadWriteLock;
#endif // WIN9X
} ADAPT, *PADAPT;
#define MAX_RECEIVE_PACKET_ARRAY_SIZE 40
//
// VELAN object represents a virtual ELAN instance and its
// corresponding virtual miniport adapter.
//
typedef struct _VELAN
{
// Link into parent adapter's VELAN list.
LIST_ENTRY Link;
// References to this VELAN.
ULONG RefCount;
// Parent ADAPT.
PADAPT pAdapt;
// Copy of BindingHandle from ADAPT.
NDIS_HANDLE BindingHandle;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -