LIST_ENTRY 遍历问题
为什么我在网上看到和《Windows 内核安全与驱动开发》遍历LIST_ENTRY 的方式是//摘录书中代码
BOOLEAN cfIsFileCrypting(PFILE_OBJECT file)
{
PLIST_ENTRY p;
PCF_NODE node;
for(p = s_cf_list.Flink; p != &s_cf_list; p = p->Flink)
{
node = (PCF_NODE)p;
if(node->fcb == file->FsContext)
{
//KdPrint(("cfIsFileCrypting: file %wZ is crypting. fcb = %x \r\n",&file->FileName,file->FsContext));
return TRUE;
}
}
return FALSE;
}
但是我自己实现的
int inedx = 0;
for (PLIST_ENTRY plist = pDevExt->ProcessHead.Flink;
plist != &pDevExt->ProcessHead;
plist = plist->Flink, inedx++)
{
KdBreakPoint();
if (inedx == pDevExt->processInedx && inedx != pDevExt->processCount)
{
pDevExt->processInedx++;
*data = CONTAINING_RECORD(plist, tagProcess, listEntry);
return STATUS_SUCCESS;
}
}
只循环第一次,链表指针就飞掉了。。。 但是用那种最土的,拿一个丢一个却又能正常拿到。。。
这样子又能正常遍历完毕。。。
PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
if (IsListEmpty(&pDevExt->ProcessHead))
{
*data = NULL;
return STATUS_SUCCESS;
}
PLIST_ENTRY plist = RemoveTailList(&pDevExt->ProcessHead);
*data = CONTAINING_RECORD(plist, tagProcess, listEntry);
return STATUS_SUCCESS;
我就是不想获取一个就释放一个。但是用for。我这里每次循环拿第二项的时候就指针错乱了。。 有人遇见过这种情况吗???
环境 7600 XP Checked 版本 帮顶........
驱动相关问题请 @Tesla.Angela 难道你要找的是这个?
http://www.m5home.com/bbs/thread-8450-1-1.html 遍历链表参考我的这个帖子(http://www.m5home.com/bbs/thread-8450-1-1.html)即可。
页:
[1]