📄 passthru.h
字号:
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
);
VOID
MPQueryPNPCapabilities(
OUT PADAPT MiniportProtocolContext,
OUT PNDIS_STATUS Status
);
NDIS_STATUS
MPSetMiniportSecondary (
IN PADAPT Secondary,
IN PADAPT Primary
);
//==============================================================================================================
#ifdef NDIS51_MINIPORT
VOID
MPCancelSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID CancelId
);
VOID
MPAdapterShutdown(
IN NDIS_HANDLE MiniportAdapterContext
);
VOID
MPDevicePnPEvent(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_DEVICE_PNP_EVENT DevicePnPEvent,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength
);
#endif // NDIS51_MINIPORT
//=================================================================================================================
VOID
MPFreeAllPacketPools(
IN PADAPT pAdapt
);
NDIS_STATUS
MPPromoteSecondary (
IN PADAPT pAdapt
);
NDIS_STATUS
MPBundleSearchAndSetSecondary (
IN PADAPT pAdapt
);
VOID
MPProcessSetPowerOid(
IN OUT PNDIS_STATUS pNdisStatus,
IN PADAPT pAdapt,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
);
//==========================================================================================================
// There should be no DbgPrint's in the Free version of the driver
//==========================================================================================================
#if DBG
#define DBGPRINT(Fmt) \
{ \
DbgPrint("Passthru: "); \
DbgPrint Fmt; \
}
#else // if DBG
#define DBGPRINT(Fmt)
#endif // if DBG
//===========================================================================================================
#define NUM_PKTS_IN_POOL 256
//===========================================================================================================
// 我们分配给一个发送包的协议保留部分
//===========================================================================================================
typedef struct _SEND_RSVD
{
PNDIS_PACKET OriginalPkt;
} SEND_RSVD, *PSEND_RSVD;
//===========================================================================================================
// 微端口保留部分,给接收包的。 Note that this should fit into the MiniportReserved space
// in an NDIS_PACKET.
//===========================================================================================================
typedef struct _RECV_RSVD
{
PNDIS_PACKET OriginalPkt;
} RECV_RSVD, *PRECV_RSVD;
C_ASSERT(sizeof(RECV_RSVD) <= sizeof(((PNDIS_PACKET)0)->MiniportReserved));
//============================================================================================================
// 和 PassthruEvent 结构相关的事件编号
//============================================================================================================
typedef enum
{
Passthru_Invalid,
Passthru_SetPower,
Passthru_Unbind
} PASSSTHRU_EVENT_CODE, *PPASTHRU_EVENT_CODE;
//============================================================================================================
// Passthru Event with a code to state why they have been state
//============================================================================================================
typedef struct _PASSTHRU_EVENT
{
NDIS_EVENT Event;
PASSSTHRU_EVENT_CODE Code;
} PASSTHRU_EVENT, *PPASSTHRU_EVENT;
//============================================================================================================
// Structure used by both the miniport as well as the protocol part of the intermediate driver
// to represent an adapter and its corres. lower bindings
//============================================================================================================
typedef struct _ADAPT
{
struct _ADAPT * Next;
NDIS_HANDLE BindingHandle; // To the lower miniport
NDIS_HANDLE MiniportHandle; // NDIS Handle to for miniport up-calls
NDIS_HANDLE SendPacketPoolHandle;
NDIS_HANDLE RecvPacketPoolHandle;
NDIS_STATUS Status; // Open Status
NDIS_EVENT Event; // Used by bind/halt for Open/Close Adapter synch.
NDIS_MEDIUM Medium;
NDIS_REQUEST Request; // This is used to wrap a request coming down
// to us. This exploits the fact that requests
// are serialized down to us.
PULONG BytesNeeded;
PULONG BytesReadOrWritten;
BOOLEAN IndicateRcvComplete;
BOOLEAN OutstandingRequests; // TRUE iff a request is pending
// at the miniport below
BOOLEAN QueuedRequest; // TRUE iff a request is queued at
// this IM miniport
BOOLEAN StandingBy; // True - When the miniport or protocol is transitioning from a D0 to Standby (>D0) State
BOOLEAN UnbindingInProcess;
NDIS_SPIN_LOCK Lock;
// False - At all other times, - Flag is cleared after a transition to D0
NDIS_DEVICE_POWER_STATE MPDeviceState; // Miniport's Device State
NDIS_DEVICE_POWER_STATE PTDeviceState; // Protocol's Device State
NDIS_STRING DeviceName; // For initializing the miniport edge
// BEGIN_PTUSERIO
NDIS_STRING LowerDeviceName; // 设备对象的名称,这是传递给NdisOpenAdapter的参数
ULONG RefCount; // 此结构的引用计数
POPEN_CONTEXT pOpenContext;
// END_PTUSERIO
NDIS_EVENT MiniportInitEvent; // For blocking UnbindAdapter while
// an IM Init is in progress.
BOOLEAN MiniportInitPending; // TRUE iff IMInit in progress
NDIS_STATUS LastIndicatedStatus; // The last indicated media status
NDIS_STATUS LatestUnIndicateStatus; // The latest suppressed media status
ULONG OutstandingSends;
// BEGIN_PTEX_FILTER
//
// Per-Adapter Filter-Specific Area
//
ULONG FilterReserved[16];
// END_PTEX_FILTER
} ADAPT, *PADAPT;
extern NDIS_HANDLE ProtHandle, DriverHandle; //protocol handle and DriverHandle
extern NDIS_MEDIUM MediumArray[4]; //介质类型数组
extern PADAPT pAdaptList; //适配器列表
extern NDIS_SPIN_LOCK GlobalLock; //全局锁
#define ADAPT_MINIPORT_HANDLE(_pAdapt) ((_pAdapt)->MiniportHandle)
#define ADAPT_DECR_PENDING_SENDS(_pAdapt) \
{ \
NdisAcquireSpinLock(&(_pAdapt)->Lock); \
(_pAdapt)->OutstandingSends--; \
NdisReleaseSpinLock(&(_pAdapt)->Lock); \
}
//=================================================================================================================
// Custom Macros to be used by the passthru driver
//=================================================================================================================
/*
BOOLEAN
IsIMDeviceStateOn(
PADAPT
)
*/
//======= 判断设备是不是处于打开状态
#define IsIMDeviceStateOn(_pP) ((_pP)->MPDeviceState == NdisDeviceStateD0 && (_pP)->PTDeviceState == NdisDeviceStateD0 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -