阅读:1285回复:3
求助,为什么这段程序一装windowsserver2003-kb925902-x86-chs.exe就蓝屏啊?
代码如下: (我后来把ExAllocatePoolWithTag函数以下部分注释掉就可以通过了,看来问题是出在ExAllocatePoolWithTag这个函数里,可为什么只就跟这个补丁冲突呢,其他补丁都没问题的. )
RtlInitUnicodeString( &usname, L"\\SystemRoot\\policy.dat" ); InitializeObjectAttributes(&objectAttributes, &usname, OBJ_KERNEL_HANDLE, NULL, NULL); status = ZwCreateFile(&hfile, GENERIC_READ, &objectAttributes, &iostatus, NULL, 0, 0, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE, NULL, 0 ); if (!NT_SUCCESS(status)) { return FALSE; } status = ZwQueryInformationFile(hfile, &iostatus, &si, sizeof(si), FileStandardInformation); length = si.EndOfFile.LowPart; if (!NT_SUCCESS(status)) { ZwClose(hfile); return FALSE; } if (pFileList) { ExFreePoolWithTag(pFileList, SFLT_POOL_TAG_FILEBUFFER); } if (length <= 0) { ZwClose(hfile); return FALSE; } pFileList = ExAllocatePoolWithTag( NonPagedPool, length+2, SFLT_POOL_TAG_FILEBUFFER ); if (!pFileList) { ZwClose(hfile); return FALSE; } RtlZeroMemory(pFileList, length+2); ByteOffset.QuadPart = 0; status = ZwReadFile(hfile, NULL, NULL, NULL, &iostatus, pFileList, length, &ByteOffset, NULL ); if (status != STATUS_SUCCESS) { ExFreePoolWithTag(pFileList, SFLT_POOL_TAG_FILEBUFFER); ZwClose(hfile); return FALSE; } ZwClose(hfile); return TRUE; |
|
沙发#
发布于:2008-09-24 18:31
忘了说下, 这个函数是在线程中执行的 ^-^
|
|
板凳#
发布于:2008-09-25 09:54
一个可能的原因是:
NonPagedPool的内存大小是受限的,在我的XP系统上,即使物理内存有2G,实际的NonPagedPool也只有192MB。如果文件比较大,内存分配就可能出错。糟糕的是,本来应该是返回NULL的,但实际上我遇到过分配导致蓝屏的情况。 处理这个问题的方法如下: 建立WINDBG联调环境捕捉蓝屏, 使用Analyzer -v分析蓝屏信息, 在反汇编窗口内查看出问题的函数的汇编代码,找到出错的地方。 使用IDA将这个函数反汇编, 在WRK中找到对应的函数源代码,对比分析。 |
|
|
地板#
发布于:2008-09-25 10:08
出现蓝屏问题的时候,最好像osr的邮件列表里的那些邮件将analyer -v的结果贴出来。
|
|
|