内核文件中打开文件后,我我自己制定文件偏移地址,从而实现比较快读的读取。
使用了如下代码
1:打开文件ZwCreateFile.打开文件成功。
2: ZwReadFIle时,由于我指定了LARGE_INTEGER.
结果再执行read时,返回了C0000011错误,我感觉应该是我这个LARGE_INTEGER指定问题
我是如下初始化 LargInterge结构的。 请指教如何实现我的需求。
- C/C++ code
LARGE_INTEGER lrOffset = {0};
- C/C++ code
ZwCreateFile(lpFileHandle, FILE_READ_DATA, &oaName, &iosBlock, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
- C/C++ code
ntStatus = ZwReadFile(hFile, NULL, NULL, NULL, &iosBlock, pBuffer, ulBufferSize, ByteOffset, NULL);
------解决方案--------------------
- C/C++ code
OBJECT_ATTRIBUTES objectAttributes; IO_STATUS_BLOCK iostatus; UNICODE_STRING logFileUnicodeString; HANDLE hfile; //初始化UNICODE_STRING RtlInitUnicodeString( &logFileUnicodeString, L"\\??\\c:\\1.log" ); //初始化OBJECT_ATTRIBUTES结构体 InitializeObjectAttributes( &objectAttributes, &logFileUnicodeString, OBJ_CASE_INSENSITIVE, NULL, NULL ); //创建文件 NTSTATUS ntStatus = ZwCreateFile( &hfile, GENERIC_WRITE, &objectAttributes, &iostatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 ); if ( NT_SUCCESS( ntStatus ) ) { KdPrint( ( "Create File Success!\n" ) ); } else { KdPrint( ( "CreateFile Fail!\n" ) ); } ZwClose( hfile );
------解决方案--------------------
LZ查一下返回的错误代码 看看具体是代表什么错误