katon
驱动牛犊
驱动牛犊
  • 注册日期2006-06-22
  • 最后登录2014-09-23
  • 粉丝1
  • 关注0
  • 积分26分
  • 威望150点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1285回复:3

求助,为什么这段程序一装windowsserver2003-kb925902-x86-chs.exe就蓝屏啊?

楼主#
更多 发布于:2008-09-24 17:12
代码如下: (我后来把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;
katon
驱动牛犊
驱动牛犊
  • 注册日期2006-06-22
  • 最后登录2014-09-23
  • 粉丝1
  • 关注0
  • 积分26分
  • 威望150点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-09-24 18:31
忘了说下, 这个函数是在线程中执行的 ^-^
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2008-09-25 09:54
一个可能的原因是:
NonPagedPool的内存大小是受限的,在我的XP系统上,即使物理内存有2G,实际的NonPagedPool也只有192MB。如果文件比较大,内存分配就可能出错。糟糕的是,本来应该是返回NULL的,但实际上我遇到过分配导致蓝屏的情况。
处理这个问题的方法如下:
建立WINDBG联调环境捕捉蓝屏,
使用Analyzer -v分析蓝屏信息,
在反汇编窗口内查看出问题的函数的汇编代码,找到出错的地方。
使用IDA将这个函数反汇编,
在WRK中找到对应的函数源代码,对比分析。
一切都是时间问题!
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
地板#
发布于:2008-09-25 10:08
出现蓝屏问题的时候,最好像osr的邮件列表里的那些邮件将analyer -v的结果贴出来。
一切都是时间问题!
游客

返回顶部