急关于WH_CBT钩子的有关问题,大家帮帮忙

急!关于WH_CBT钩子的问题,大家帮帮忙啊
我写一个CBT钩子,想检测窗口的创建,断判窗口是不是我要关闭的窗口,如果是就关闭它
//钩子函数
LRESULT WINAPI msgHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult=CallNextHookEx(g_hhookmsg,nCode,wParam,lParam);
if(nCode==HCBT_CREATEWND)
{
LPCBT_CREATEWND pstr=(LPCBT_CREATEWND)lParam;
LPCREATESTRUCT pstr2=pstr->lpcs;
char buffer[100];
strcpy(buffer,pstr2->lpszName);
}
return(lResult);


}
//安装CBT钩子
BOOL setMsgHook()
{
HHOOK hhookmsg;
if(g_hhookmsg!=NULL)
return FALSE;
hhookmsg=SetWindowsHookEx(WH_CBT,msgHookProc,g_hinstDLL,0);
g_hhookmsg=hhookmsg;
return (g_hhookmsg!=NULL);
}
钩子能钩到消息,可是一旦我想调用pstr2->lpszName读出里面的内容,就会出现内存不能为'read'的错误,要不然就是EXPLORER出现错误退出,所有的窗口都无法打开,可是我不调用pstr2->lpszName这句,不会出现错误.这倒底是怎么回事?是我的程序无权限读取CREATESTRUCT里的内容吗?(顺便问下,lpszName里面是不是存放的窗品的标题?)

------解决方案--------------------
LRESULT lResult=CallNextHookEx(g_hhookmsg,nCode,wParam,lParam); 

CallNextHookEx会释放结构体或修改结构体, 

正确使用 LPCBT_CREATEWND 结构体应该在CallNextHookEx之前

把CallNextHookEx放到后面即可