求助,某句柄导致线程崩溃!
最近做一个用NtQueryInformationFile获取句柄对应文件名的小程序,由于要获取namedpipe中的信息,要创建子线程设置等待超时。谁知每到同一个namedpipe句柄,线程就崩溃了,信息如下:线程 'Win32 线程' (0x9b4) 已退出,返回值为 -1073741510 (0xc000013a)。
线程 'Win32 线程' (0x2640) 已退出,返回值为 -1073741510 (0xc000013a)。
线程 'Win32 线程' (0x2088) 已退出,返回值为 -1073741510 (0xc000013a)。
程序“[9648] cheumn.exe: 本机”已退出,返回值为 -1073741510 (0xc000013a)。
通过process explorer,这个句柄属于Atiesrxx.exe的DEVICE\NAMEDPIPE\EXTEVENTPIPE_SERVICE
DWORD WINAPI
GetFileNameThread(PVOID lpParameter)
{
PNM_INFO NmInfo = lpParameter;
IO_STATUS_BLOCK IoStatus;
NtQueryInformationFile(NmInfo->hFile, &IoStatus, &NmInfo->Info,
sizeof(NM_INFO) - sizeof(HANDLE), FileNameInformation);
return 0;
}
EXTERN_C void GetFileName(HANDLE hFile, PCHAR TheName)
{
HANDLE hThread;
PNM_INFO Info = HeapAlloc(hHeap, 0, sizeof(NM_INFO));
Info->hFile = hFile;
hThread = CreateThread(NULL, 0, GetFileNameThread, Info, 0, NULL);
if (MsgWaitForMultipleObjects(1, &hThread,
FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0) //问题出在这里
{
TerminateThread(hThread, 0);
}
CloseHandle(hThread);
memset(TheName, 0, MAX_PATH);
WideCharToMultiByte(CP_ACP, 0, Info->Info.FileName, Info->Info.FileNameLength >> 1, TheName, MAX_PATH, NULL, NULL);
HeapFree(hHeap, 0, Info);
}
请各位大神解答!