呵呵,我还处于入门新手菜鸟状态,,这些博文仅仅记录我的学习成长过程...
此处用到自定义结构,LIST_ENTRY, InitializeListHead,InsertTailList,RemoveTailList,CONTAINING_RECORD等宏或函数....
先定义
typedef struct _MyDataStruct{
LIST_ENTRY myListEntry;
ULONG x;
ULONG y;
}MyDataStruct;
然后再写一段测试代码
LIST_ENTRY listLinkHead;
InitializeListHead(&listLinkHead);
MyDataStruct *pMyDataStruct;
ULONG i=0;
KdPrint(("Start to insert into link list"));
for(;i<10;i++){ pMyDataStruct=(MyDataStruct*)ExAllocatePool(PagedPool,sizeof(MyDataStruct)); pMyDataStruct->x=i+10;
pMyDataStruct->y=i*10;
InsertTailList(&listLinkHead,&pMyDataStruct->myListEntry);
}
KdPrint(("Inserted into link list"));
while(!IsListEmpty(&listLinkHead)){
PLIST_ENTRY pEntry=RemoveTailList(&listLinkHead);
pMyDataStruct=CONTAINING_RECORD(pEntry,MyDataStruct,myListEntry);
KdPrint(("x=%d,y=%d",pMyDataStruct->x,pMyDataStruct->y));
ExFreePool(pMyDataStruct);
}