阅读:1490回复:0
请教:ZwWriteFile出错??
我在驱动中创建一个线程,来将驱动中产生的一些数据保存在硬盘上,下面是我做的一个测试代码:
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有对写入文件大小的限制? |
|