📄 ndis.h
字号:
/*OUT*/ PNDIS_BUFFER *Buffer);
NDISAPI
VOID
DDKAPI
NdisAdjustBufferLength(
/*IN*/ PNDIS_BUFFER Buffer,
/*IN*/ UINT Length);
NDISAPI
ULONG
DDKAPI
NdisBufferLength(
/*IN*/ PNDIS_BUFFER Buffer);
NDISAPI
PVOID
DDKAPI
NdisBufferVirtualAddress(
/*IN*/ PNDIS_BUFFER Buffer);
NDISAPI
ULONG
DDKAPI
NDIS_BUFFER_TO_SPAN_PAGES(
/*IN*/ PNDIS_BUFFER Buffer);
NDISAPI
VOID
DDKAPI
NdisFreeBuffer(
/*IN*/ PNDIS_BUFFER Buffer);
NDISAPI
VOID
DDKAPI
NdisGetBufferPhysicalArraySize(
/*IN*/ PNDIS_BUFFER Buffer,
/*OUT*/ PUINT ArraySize);
NDISAPI
VOID
DDKAPI
NdisGetFirstBufferFromPacket(
/*IN*/ PNDIS_PACKET _Packet,
/*OUT*/ PNDIS_BUFFER *_FirstBuffer,
/*OUT*/ PVOID *_FirstBufferVA,
/*OUT*/ PUINT _FirstBufferLength,
/*OUT*/ PUINT _TotalBufferLength);
NDISAPI
VOID
DDKAPI
NdisQueryBuffer(
/*IN*/ PNDIS_BUFFER Buffer,
/*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
/*OUT*/ PUINT Length);
NDISAPI
VOID
DDKAPI
NdisQueryBufferOffset(
/*IN*/ PNDIS_BUFFER Buffer,
/*OUT*/ PUINT Offset,
/*OUT*/ PUINT Length);
NDISAPI
VOID
DDKAPI
NdisFreeBuffer(
/*IN*/ PNDIS_BUFFER Buffer);
/*
* VOID
* NdisGetBufferPhysicalArraySize(
* IN PNDIS_BUFFER Buffer,
* OUT PUINT ArraySize);
*/
#define NdisGetBufferPhysicalArraySize(Buffer, \
ArraySize) \
{ \
(*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
}
/*
* VOID
* NdisGetFirstBufferFromPacket(
* IN PNDIS_PACKET _Packet,
* OUT PNDIS_BUFFER * _FirstBuffer,
* OUT PVOID * _FirstBufferVA,
* OUT PUINT _FirstBufferLength,
* OUT PUINT _TotalBufferLength)
*/
#define NdisGetFirstBufferFromPacket(_Packet, \
_FirstBuffer, \
_FirstBufferVA, \
_FirstBufferLength, \
_TotalBufferLength) \
{ \
PNDIS_BUFFER _Buffer; \
\
_Buffer = (_Packet)->Private.Head; \
*(_FirstBuffer) = _Buffer; \
if (_Buffer != NULL) \
{ \
*(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
*(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
_Buffer = _Buffer->Next; \
*(_TotalBufferLength) = *(_FirstBufferLength); \
while (_Buffer != NULL) { \
*(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
_Buffer = _Buffer->Next; \
} \
} \
else \
{ \
*(_FirstBufferVA) = 0; \
*(_FirstBufferLength) = 0; \
*(_TotalBufferLength) = 0; \
} \
}
/*
* VOID
* NdisQueryBuffer(
* IN PNDIS_BUFFER Buffer,
* OUT PVOID *VirtualAddress OPTIONAL,
* OUT PUINT Length)
*/
#define NdisQueryBuffer(Buffer, \
VirtualAddress, \
Length) \
{ \
if (VirtualAddress) \
*((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
\
*((PUINT)Length) = MmGetMdlByteCount(Buffer); \
}
/*
* VOID
* NdisQueryBufferOffset(
* IN PNDIS_BUFFER Buffer,
* OUT PUINT Offset,
* OUT PUINT Length);
*/
#define NdisQueryBufferOffset(Buffer, \
Offset, \
Length) \
{ \
*((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
*((PUINT)Length) = MmGetMdlByteCount(Buffer); \
}
/*
* PVOID
* NDIS_BUFFER_LINKAGE(
* IN PNDIS_BUFFER Buffer);
*/
#define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
/*
* VOID
* NdisChainBufferAtBack(
* IN OUT PNDIS_PACKET Packet,
* IN OUT PNDIS_BUFFER Buffer)
*/
#define NdisChainBufferAtBack(Packet, \
Buffer) \
{ \
PNDIS_BUFFER NdisBuffer = (Buffer); \
\
while (NdisBuffer->Next != NULL) \
NdisBuffer = NdisBuffer->Next; \
\
NdisBuffer->Next = NULL; \
\
if ((Packet)->Private.Head != NULL) \
(Packet)->Private.Tail->Next = (Buffer); \
else \
(Packet)->Private.Head = (Buffer); \
\
(Packet)->Private.Tail = NdisBuffer; \
(Packet)->Private.ValidCounts = FALSE; \
}
/*
* VOID
* NdisChainBufferAtFront(
* IN OUT PNDIS_PACKET Packet,
* IN OUT PNDIS_BUFFER Buffer)
*/
#define NdisChainBufferAtFront(Packet, \
Buffer) \
{ \
PNDIS_BUFFER _NdisBuffer = (Buffer); \
\
while (_NdisBuffer->Next != NULL) \
_NdisBuffer = _NdisBuffer->Next; \
\
if ((Packet)->Private.Head == NULL) \
(Packet)->Private.Tail = _NdisBuffer; \
\
_NdisBuffer->Next = (Packet)->Private.Head; \
(Packet)->Private.Head = (Buffer); \
(Packet)->Private.ValidCounts = FALSE; \
}
/*
* VOID
* NdisGetNextBuffer(
* IN PNDIS_BUFFER CurrentBuffer,
* OUT PNDIS_BUFFER * NextBuffer)
*/
#define NdisGetNextBuffer(CurrentBuffer, \
NextBuffer) \
{ \
*(NextBuffer) = (CurrentBuffer)->Next; \
}
/*
* UINT
* NdisGetPacketFlags(
* IN PNDIS_PACKET Packet);
*/
#define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
/*
* VOID
* NdisClearPacketFlags(
* IN PNDIS_PACKET Packet,
* IN UINT Flags);
*/
#define NdisClearPacketFlags(Packet, Flags) \
(Packet)->Private.Flags &= ~(Flags)
/*
* VOID
* NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
* IN PNDIS_PACKET Packet,
* IN PPVOID pMediaSpecificInfo,
* IN PUINT pSizeMediaSpecificInfo);
*/
#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
_pMediaSpecificInfo, \
_pSizeMediaSpecificInfo) \
{ \
if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
!((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
{ \
*(_pMediaSpecificInfo) = NULL; \
*(_pSizeMediaSpecificInfo) = 0; \
} \
else \
{ \
*(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
*(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
} \
}
/*
* ULONG
* NDIS_GET_PACKET_PROTOCOL_TYPE(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
/*
* ULONG
* NDIS_GET_PACKET_HEADER_SIZE(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->HeaderSize
/*
* NDIS_STATUS
* NDIS_GET_PACKET_STATUS(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_STATUS(_Packet) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->Status
/*
* ULONGLONG
* NDIS_GET_PACKET_TIME_RECEIVED(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->TimeReceived
/*
* ULONGLONG
* NDIS_GET_PACKET_TIME_SENT(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_TIME_SENT(_Packet) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->TimeSent
/*
* ULONGLONG
* NDIS_GET_PACKET_TIME_TO_SEND(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset))->TimeToSend
/*
* PNDIS_PACKET_OOB_DATA
* NDIS_OOB_DATA_FROM_PACKET(
* IN PNDIS_PACKET Packet);
*/
#define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
(PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
(_Packet)->Private.NdisPacketOobOffset)
/*
* VOID
* NdisQueryPacket(
* IN PNDIS_PACKET Packet,
* OUT PUINT PhysicalBufferCount OPTIONAL,
* OUT PUINT BufferCount OPTIONAL,
* OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
* OUT PUINT TotalPacketLength OPTIONAL);
*/
#define NdisQueryPacket(Packet, \
PhysicalBufferCount, \
BufferCount, \
FirstBuffer, \
TotalPacketLength) \
{ \
if (FirstBuffer) \
*((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) \
{ \
if (!(Packet)->Private.ValidCounts) { \
UINT _Offset; \
UINT _PacketLength; \
PNDIS_BUFFER _NdisBuffer; \
UINT _PhysicalBufferCount = 0; \
UINT _TotalPacketLength = 0; \
UINT _Count = 0; \
\
for (_NdisBuffer = (Packet)->Private.Head; \
_NdisBuffer != (PNDIS_BUFFER)NULL; \
_NdisBuffer = _NdisBuffer->Next) \
{ \
_PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
_TotalPacketLength += _PacketLength; \
_Count++; \
} \
(Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
(Packet)->Private.TotalLength = _TotalPacketLength; \
(Packet)->Private.Count = _Count; \
(Packet)->Private.ValidCounts = TRUE; \
} \
\
if (PhysicalBufferCount) \
*((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
\
if (BufferCount) \
*((PUINT)BufferCount) = (Packet)->Private.Count; \
\
if (TotalPacketLength) \
*((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
} \
}
/*
* VOID
* NdisQueryPacketLength(
* IN PNDIS_PACKET Packet,
* OUT PUINT PhysicalBufferCount OPTIONAL,
* OUT PUINT BufferCount OPTIONAL,
* OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
* OUT PUINT TotalPacketLength OPTIONAL);
*/
#define NdisQueryPacketLength(Packet,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -