首页
社区
课程
招聘
创建的系统线程,释放参数内存时蓝屏,why?
发表于: 2009-10-4 11:05 4566

创建的系统线程,释放参数内存时蓝屏,why?

2009-10-4 11:05
4566
BSOD: BAD_POOL_HEADER

VOID MyThread(IN PVOID StartContext)
{
        ......

        ExFreePool(StartContext);//蓝屏; 如果创建的线程只有一个,这里不蓝屏

        PsTerminateSystemThread(STATUS_SUCCESS);
}

//与用户层DeviceIoControl通讯,创建系统线程
case IOCTL_TEST:
{
        HANDLE thread;
                               
        PCWSTR Param=(PCWSTR)ExAllocatePool(PagedPool,255);
        memset(Param,0,255);
                               
        wcscpy(Param,L"test");
                       
        PsCreateSystemThread(&thread,0L,NULL,NULL,NULL,MyThread,Param);
        ZwClose(thread);
}

/////////////////////////////////////
但是如果在DriverEntry里创建线程,不蓝屏
for(int i=0;i<10;i++)
{
        HANDLE thread;
                               
        PCWSTR Param=(PCWSTR)ExAllocatePool(PagedPool,255);
        memset(Param,0,255);
                               
        wcscpy(Param,L"test");
                       
        PsCreateSystemThread(&thread,0L,NULL,NULL,NULL,MyThread,Param);
        ZwClose(thread);
}

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
应该是驱动下释放已经释放过的内存就会蓝
2009-10-4 11:11
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我这里没有其他的释放过程啊.
2009-10-4 11:21
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
难道ExAllocatePool分配的内存地址是同一个地方??否则怎么可能被其他线程给释放了...
我windbg查了啊.也不是同一个地址啊.
2009-10-4 12:04
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
知道原因了,原来分配的内存不能用unicodesting的length来做大小.
2009-10-4 17:41
0
游客
登录 | 注册 方可回帖
返回
//