-1

我想在驱动程序模块中编写一行代码以获得移动宽带的支持。这是代码:

   PUCHAR pCurrData;

   struct eth_hdr *pEthHeader = (struct eth_hdr*)pCurrData;
   NET_BUFFER_LIST_INFO(pNBL, NetBufferListFrameType) = (PVOID)(ULONG_PTR)pEthHeader->type;

    switch( pEthHeader->type ){

        case PP_HTONS(ETHTYPE_IP):

             NdisSetNblFlag(pNBL, 0x00000200 /*NDIS_NBL_FLAGS_IS_IPV4*/);

         break;

            }

所以我的疑问是什么 struct eth_hdr?我包括哪个头文件?所以我应该把这个结构定义为我自己的?

4

1 回答 1

0

在 google 上搜索一下会从 GitHub 上的 repo 中返回这些精确的行

在 repo 上使用 GitHub 搜索功能会返回这些行

/** Ethernet header */
struct eth_hdr {
#if ETH_PAD_SIZE
  PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]);
#endif
  PACK_STRUCT_FIELD(struct eth_addr dest);
  PACK_STRUCT_FIELD(struct eth_addr src);
  PACK_STRUCT_FIELD(u16_t type);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
#  include "arch/epstruct.h"
#endif

这似乎只描述了带有 MAC Dest、MAC 源和 Ethertype的以太网帧的一部分。

您应该注意到,此代码是直接从bootkit(即Caberp)中提取的,其中包括在内核网络驱动程序堆栈中注入网络驱动程序。我不认为这种代码是了解如何制作 NDIS 驱动程序的好开始。

WDK 上有足够好的 NDIS 驱动程序示例可供开始使用。

于 2015-11-22T14:30:35.390 回答