首页
社区
课程
招聘
内核链表为啥打印数字打印不出来的呢?
发表于: 2011-2-18 17:38 4966

内核链表为啥打印数字打印不出来的呢?

2011-2-18 17:38
4966
#include <ntddk.h>
#define MEM_TAG 'jklk'
typedef struct
{
LIST_ENTRY List_entry;
ULONG Data;
}MY_LIST,*PMY_LIST;

LIST_ENTRY My_listHead;//声明一个结构

void Unload(IN PDRIVER_OBJECT DriverObject)
{
KdPrint(("驱动卸载成功!\n"));
}


VOID Listinit()
{

InitializeListHead(&My_listHead);//初始化
}

NTSTATUS MyAppendData(ULONG AppendValue)
{
PMY_LIST my_AppendList=(PMY_LIST)ExAllocatePoolWithTag(PagedPool,sizeof(MY_LIST),
MEM_TAG);
if(my_AppendList==NULL)
{
KdPrint(("分配空间失败\n"));
return -1;
}
else
{
KdPrint(("分配空间成功\n"));
}
my_AppendList->Data=AppendValue;
InsertHeadList(&My_listHead,(PLIST_ENTRY)my_AppendList);
ExFreePool(my_AppendList);

return STATUS_SUCCESS;

}

void ShowList()
{
PLIST_ENTRY p=NULL;
PMY_LIST elem; 
KdPrint(("Show List start\n"));
 for(  p=My_listHead.Flink;p!=My_listHead.Flink;p=p->Flink)
{

elem=CONTAINING_RECORD(My_listHead.Flink,MY_LIST,List_entry);

 KdPrint(("Value Is%x \n",elem->Data));
} 



}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegPath)
{
ULONG value;
value=0;
KdPrint(("驱动加载成功!\n"));
 Listinit();
for(value=0;value<10;value++)
MyAppendData(value);
ShowList();
DriverObject->DriverUnload=Unload;
return STATUS_SUCCESS;
}


就是上面的这个代码.没蓝屏但是数字就是打印不出来,郁闷谁帮忙看看这个是咋 回事的哦?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 538
活跃值: (460)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
p=My_listHead.Flink;p!=My_listHead.Flink; 改为 p = My_listHead.Flink; p != &My_listHead;
试试
2011-2-18 18:18
0
雪    币: 7
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
改了,杀那件蓝屏..
2011-2-18 21:43
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
InsertHeadList(&My_listHead,(PLIST_ENTRY)my_AppendList);
ExFreePool(my_AppendList);

你把刚分配内存的数据又释放了, 不会有问题吗?
2011-2-18 21:48
0
雪    币: 7
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的释放了没问题..
不释放的话他能给我蓝死..
2011-2-19 13:39
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
InsertHeadList(&My_listHead,(PLIST_ENTRY)my_AppendList);

这个你都写错了
应该是InertHeadList(My_listHead, &my_AppendList->List_entry);
2011-2-19 13:56
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
while(!IsListEmpty(&linkListHead))
        {
                PLIST_ENTRY pEntry = RemoveTailList(&My_listHead);
                pData = CONTAINING_RECORD(pEntry,
                              MY_LIST,
                              ListEntry);
                KdPrint(("%d\n",pData->Data));
                ExFreePool(pData);
        }
2011-2-19 14:00
0
游客
登录 | 注册 方可回帖
返回
//