最近在做虚拟网卡驱动, 整理了一些函数
NPAGED_LOOKASIDE_LIST: 是一个不透明的链表, 可以从分配确定长度的非分页内存,系统会创建或销毁链表中的内存. 对于确定长度的内存比直接分配内存快。
必须调用 NdisInitializeNPagedLookasideList()初始化一个链表,
NdisAllocateFromNPagedLookasideList(): 从链表里分配一块缓冲
NdisFreeToNPagedLookasideList(): 把一块缓冲返回给链表
NdisDeleteNPagedLookasideList(): 释放链表
VOID
NdisQueryPacket();
得到一个给定包的信息, 比如packet的总长度, buff的长度,起始地址
NdisQueryBufferSafe(), 得到一个指定buffer的长度,和virtual address;
NdisGetNextBuffer(), 得到链表中一个指定buffer下一个buffer,
NdisMSendComplete(), 通知上层驱动该packet已经处理完毕, 以便上层驱动释放资源
IoCallDriver(), 调用下层驱动执行irp