ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1490回复:0

请教:ZwWriteFile出错??

楼主#
更多 发布于:2008-02-29 12:23
我在驱动中创建一个线程,来将驱动中产生的一些数据保存在硬盘上,下面是我做的一个测试代码:
void TheThread(IN   PVOID   Context)
{
    while(saveAWB)
    {
        if(LightAvg==1)
        {
            UNICODE_STRING     uniName;
            OBJECT_ATTRIBUTES  objAttr;
            
            RtlInitUnicodeString(&uniName, L"\\DosDevices\\C:\\WINDOWS\\example.txt");  
            InitializeObjectAttributes(&objAttr, &uniName,
                OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                NULL, NULL);
            
            HANDLE   handle;
            NTSTATUS ntstatus;
            IO_STATUS_BLOCK    ioStatusBlock;
            
            ntstatus = ZwCreateFile(&handle,
                GENERIC_WRITE,
                &objAttr, &ioStatusBlock, NULL,
                FILE_ATTRIBUTE_NORMAL,
                0,
                FILE_OVERWRITE_IF,
                FILE_SYNCHRONOUS_IO_NONALERT,
                NULL, 0);
            
            
            char     buffer[3000];
            ULONG  cb=3000;
            int i;
            for(i=0;i<3000;i++)
            {
                buffer='a';
            }
            
            ntstatus = ZwWriteFile(handle, NULL, NULL, NULL, &ioStatusBlock,
                buffer, cb, NULL, NULL);

            ZwClose(handle);
            saveAWB=0;            
        }
    }
}
saveAWB和LightAvg是两个外部参数,保证驱动运行过程中这些代码只执行一次。如上粗体部分所示,当数组buffer的长度是3000的时候可以正常执行,能够将数组中的数据写入到example.txt中,但若把buffer长度改为30000的时候,驱动安装过程中就会死机。 这是为什么,难道ZwWriteFile有对写入文件大小的限制?
游客

返回顶部