阅读:3436回复:8
请教关于用ZwCreateFile和ZwWriteFile写文件的问题。
最近在写对服务器指定文件的监控程序!
不过在写日志的时候发生了一个问题,虽然看了一些帮助文档,不过还是没有能解决, 现在只能请教一下大伙了! 下面是写日志文件部分代码 NTSTATUS WriteToLogfile(IN CHAR buff[] ){ UNICODE_STRING uniName; OBJECT_ATTRIBUTES objAttr; HANDLE handle; NTSTATUS ntstatus; IO_STATUS_BLOCK ioStatusBlock; size_t cb; LARGE_INTEGER byteOffset; ULONG length; RtlInitUnicodeString(&uniName, L"\\DosDevices\\C:\\MyLog.xls"); InitializeObjectAttributes(&objAttr, &uniName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL); if(KeGetCurrentIrql() != PASSIVE_LEVEL) return STATUS_INVALID_DEVICE_STATE; ntstatus = ZwCreateFile(&handle, FILE_APPEND_DATA, &objAttr, &ioStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); if(NT_SUCCESS(ntstatus)) { // ntstatus = RtlStringCbPrintfA(buff, sizeof(buff), "This is %d test\r\n", 0x0); //if(NT_SUCCESS(ntstatus)) { // ntstatus = RtlStringCbLengthA(buff, sizeof(buff), &cb); // if(NT_SUCCESS(ntstatus)) { // ntstatus = ZwWriteFile(handle, NULL, NULL, NULL, &ioStatusBlock, // buff, cb, NULL, NULL); // } //} //byteOffset.HighPart = -1; //byteOffset.LowPart = FILE_WRITE_TO_END_OF_FILE; length = strlen(buff); if(buff[length-1]=='\n') { buff[length-1]='\r'; strcat(buff,"\n"); length++; } else { strcat(buff,"\r\n"); length+=2; } ntstatus = ZwWriteFile(handle, NULL, NULL, NULL, &ioStatusBlock, buff, length, NULL, NULL); ZwClose(handle); } return ntstatus; } 下面是遇到的问题: 文件创建成功,写文件也行, 但写文件不能追加内容,每次都是覆盖了原来文件的内容,结果一直只有一条最新的一条! 大家帮帮忙,看我的程序有什么问题? 先谢谢了! |
|
最新喜欢:Leopar... |
沙发#
发布于:2007-06-29 12:52
貌似FILE_OVERWRITE_IF这个参数用的不对
|
|
板凳#
发布于:2007-06-29 13:28
谢谢LS的回答!
我之前用 FILE_OVERWRITE FILE_OVERWRITE_IF 都试过了,结果都是一样的! |
|
地板#
发布于:2007-06-29 13:40
用FILE_OPEN_IF试试,这个应该对应CreateFile(....)中OPEN_ALWAYS,文件不存在的时候创建新文件,文件存在的时候,直接打开
|
|
地下室#
发布于:2007-06-29 13:56
OK,谢谢LS,问题已经解决!
|
|
5楼#
发布于:2007-07-02 09:50
LS 怎么解决的啊,我也遇到了和你一样的问题,可是我换成了FILE_OPEN_IF依然不行啊?请指教!
|
|
6楼#
发布于:2007-07-12 09:04
对,既然解决了,就和大家分享一下得你的经验阿
|
|
7楼#
发布于:2010-08-12 15:51
ntstatus = ZwCreateFile(&handle,
SYNCHRONIZE |FILE_APPEND_DATA &objAttr, &ioStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); |
|
8楼#
发布于:2010-08-18 11:50
我觉得ZwWriteFile的时候是不是应该指定一下偏移量?
|
|