📄 ndis.h
字号:
NDISAPIULONGDDKAPINDIS_BUFFER_TO_SPAN_PAGES( /*IN*/ PNDIS_BUFFER Buffer);NDISAPIVOIDDDKAPINdisFreeBuffer( /*IN*/ PNDIS_BUFFER Buffer);NDISAPIVOIDDDKAPINdisGetBufferPhysicalArraySize( /*IN*/ PNDIS_BUFFER Buffer, /*OUT*/ PUINT ArraySize);NDISAPIVOIDDDKAPINdisGetFirstBufferFromPacket( /*IN*/ PNDIS_PACKET _Packet, /*OUT*/ PNDIS_BUFFER *_FirstBuffer, /*OUT*/ PVOID *_FirstBufferVA, /*OUT*/ PUINT _FirstBufferLength, /*OUT*/ PUINT _TotalBufferLength);NDISAPIVOIDDDKAPINdisQueryBuffer( /*IN*/ PNDIS_BUFFER Buffer, /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/, /*OUT*/ PUINT Length);NDISAPIVOIDDDKAPINdisQueryBufferOffset( /*IN*/ PNDIS_BUFFER Buffer, /*OUT*/ PUINT Offset, /*OUT*/ PUINT Length);NDISAPIVOIDDDKAPINdisFreeBuffer( /*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, \ TotalPacketLength) \{ \ if ((TotalPacketLength)) \ { \ 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; \ } \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -