驱动开发与系统原理-驱动中的双向链表
#include<ntifs.h>VOID DriverUnload(PDRIVER_OBJECT pDriver) {
UNREFERENCED_PARAMETER(pDriver);//对没引用的参数进行处理
DbgPrint("Unload success!\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) {//驱动对象指针,注册表路径 DriverEntry不能改
//指明该参数未被使用,避免被编译器警告
UNREFERENCED_PARAMETER(pRegPath);
//注册卸载函数,作用是指定用哪个函数来完成卸载
pDriverObject->DriverUnload = DriverUnload;
//定义结构
typedef struct _TestListEntry{
int m_data;
LIST_ENTRY m_ListEntry;
}TestListEntry,*PTestListEntry;
//声明一个头结点
LIST_ENTRY ListHeader = { 0 };
//初始化头结点
InitializeListHead(&ListHeader);
//声明带数据的结构
TestListEntry EntryA = { 0 };
TestListEntry EntryB = { 0 };
TestListEntry EntryC = { 0 };
TestListEntry EntryD = { 0 };
//给数据成员赋值
EntryA.m_data = 11;
EntryB.m_data = 22;
EntryC.m_data = 33;
EntryD.m_data = 44;
//插入数据
InsertHeadList(&ListHeader, &EntryA.m_ListEntry);//头插法
InsertTailList(&ListHeader, &EntryB.m_ListEntry);//尾插法
InsertTailList(&ListHeader, &EntryC.m_ListEntry);
InsertHeadList(&ListHeader, &EntryD.m_ListEntry);
//循环遍历链表
PLIST_ENTRY pListEntry=NULL;
//删除节点
RemoveHeadList(&ListHeader);//删除第一个
RemoveTailList(&ListHeader);//删除最后一个
pListEntry = ListHeader.Flink;
while (pListEntry!=&ListHeader)
{
PTestListEntry pTestEntry = CONTAINING_RECORD(pListEntry, TestListEntry, m_ListEntry);
DbgPrint("%d", pTestEntry->m_data);
pListEntry = pListEntry->Flink;
}
return STATUS_SUCCESS;//状态成功0,一定要有返回值
}
页:
[1]