首页
社区
课程
招聘
[求助]枚举进程所有线程的问题
发表于: 2010-8-30 10:41 6247

[求助]枚举进程所有线程的问题

2010-8-30 10:41
6247
我是要枚举一个进程的所有线程,然后把每个线程杀掉。但是我的这个枚举线程的函数有问题
#pragma PAGEDCODE
PETHREAD NTAPI GetNextProcessThread(
                                                                        IN PEPROCESS Process,
                                                                        IN PETHREAD Thread OPTIONAL
                                                                        )
{
        PETHREAD FoundThread = NULL;
        PLIST_ENTRY ListHead, Entry;
        KSPIN_LOCK QLock;
        KIRQL oldirql;
        PAGEDCODE
        KeInitializeSpinLock(&QLock);
        KeAcquireSpinLock(&QLock, &oldirql);
//        KeEnterCriticalRegionThread(&Thread->Tcb);
        if (Thread&&MmIsAddressValid(Thread))
        {
                Entry = (PLIST_ENTRY)((ULONG)(Thread)+uThreadListEntryOffset);
                if (MmIsAddressValid(Entry))
                {
                        Entry=Entry->Flink;
                }
               
               
        }
        else
        {
               
                Entry = (PLIST_ENTRY)((ULONG)(Process)+uThreadListHeadOffset);
                if (MmIsAddressValid(Entry))
                {
                                Entry = Entry->Flink;
                }
               
       
        }
        ListHead = (PLIST_ENTRY)((ULONG)Process + uThreadListHeadOffset);
        while (ListHead != Entry)
        {
                FoundThread = (PETHREAD)((ULONG)Entry - uThreadListEntryOffset);
               
               
                if (MmIsAddressValid(FoundThread))
                {
                        if (ObReferenceObject(FoundThread))
                                //Entry = Entry->Flink;
                                break;
                       
               
                }else
                {
                        FoundThread = NULL;
                        if (MmIsAddressValid(Entry))
                        {
                                Entry = Entry->Flink;                        }
                       
                    break;
                        //Entry = Entry->Flink;
                }
                //if (MmIsAddressValid(Entry))
                //{
                        //Entry = Entry->Flink;
                //}
       
                //break;
        }
        KeReleaseSpinLock(&QLock, oldirql);
        if (Thread&&MmIsAddressValid(Thread))
                ObDereferenceObject(Thread);
        return FoundThread;
}
执行后要杀的进程界面没了,但是后台进程仍然在。
外部调用是        for(Thread = GetNextProcessThread(pObjEpro,NULL);
                //MmIsAddressValid(Thread);
                Thread != NULL;
                Thread = GetNextProcessThread(pObjEpro, Thread))
                {  
                        Status        = (NTSTATUS)(PspTerminateThreadByPt)(Thread,0);
                }
求助各位 我单步运行发现加黑的地方都不会执行。。。。。求助

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哪位大哥帮下忙啊 谢谢了
2010-8-30 12:26
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
或者能给一个得到PsGetNextProcessThread地址的函数也可以啊 谢谢了 搞了一周了 老是蓝屏
2010-8-30 15:24
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
4
PETHREAD GetNextProcessThread (IN PEPROCESS Process, IN PETHREAD Thread) {
	PLIST_ENTRY ListEntry;
	PETHREAD NewThread;

	if (Thread == NULL)
		ListEntry = ((PLIST_ENTRY)((ULONG)Process + 0x190/*ThreadListHeadOffset*/))->Flink;
	else
		ListEntry = ((PLIST_ENTRY)((ULONG)Thread + 0x22c/*ThreadListEntryOffset*/))->Flink;

	KeEnterCriticalRegion();
	while(1) {
			if (ListEntry != (PLIST_ENTRY)((ULONG)Process + 0x190/*ThreadListHeadOffset*/)) {
				NewThread = (PETHREAD)((ULONG)ListEntry - 0x22c/*uThreadListEntryOffset*/);
				if (ObReferenceObject(NewThread)) {
					break;
				}
			} else {
				NewThread = NULL;
				break;
			}
			ListEntry = ListEntry->Flink;
	}
	KeLeaveCriticalRegion();
	if (Thread != NULL) {
		ObDereferenceObject (Thread);
	}
	return NewThread;
}
2010-8-30 19:10
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢FypHer我再试试 ,非常感谢
2010-8-31 10:41
0
游客
登录 | 注册 方可回帖
返回