阅读:2520回复:1
求助:ZwWriteFile导致系统死机
我写了一个NDIS的驱动,在里面建了一个线程用来把从网络上得到的数据写到文件中去。程序开始运行正常,但运行一段时间后总会死机,我加了调试输出,发现死在ZwWriteFile上,请教各位大虾,是何原因导致。创建和写代码如下:
HANDLE g_hCacheFile = NULL NTSTATUS status; OBJECT_ATTRIBUTES oa; UNICODE_STRING usname; IO_STATUS_BLOCK iostatus; WCHAR wcFileName[MAX_PATH]; memset(wcFileName,0,sizeof(wcFileName)); swprintf(wcFileName,L"\\??\\d:\\test.cth"); RtlInitUnicodeString(&usname, wcFileName); InitializeObjectAttributes(&oa, &usname, OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE , NULL, NULL); status = ZwCreateFile(&g_hCacheFile, GENERIC_READ|GENERIC_WRITE, &oa, &iostatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, FILE_SYNCHRONOUS_IO_NONALERT|FILE_NO_INTERMEDIATE_BUFFERING, NULL, 0); IO_STATUS_BLOCK IOSB; LARGE_INTEGER liOffset; NTSTATUS state; liOffset.QuadPart = nOffset; state = ZwWriteFile( g_hCacheFile, NULL, NULL, NULL, &IOSB, buffer, nLength, &liOffset, NULL ); 其中写长度nLength是512的倍数。 |
|
沙发#
发布于:2010-01-23 14:57
我也遇到这个问题。我做的过滤驱动,拦截用户写入动作时,将写入内容备份到指定文件。
用 ZwWriteFile 备份。结果死锁。死在 ZwWriteFile 写入大量数据时。我看了一下可能锁在 Lazy Write 里。 目标文件已经是 NO BUFFERING 打开的,仍然死锁。 不知道有没有哪位专家解决过这类问题。 |
|