阅读:1350回复:2
请问一下可以在driverentry中读文件的吗?
本意是想将文件内容在driverentry就读入数组中, 以后只需要读取数组内容和更新数组. 不过在读文件时出错, 错误码是c000000d(无效参数), 不知道在driverentry中读文件是否合适? 不然的话还有什么更好的时机吗?
相关变量: WCHAR WListData[10000]; ULONG WListDataLength = 9999; WCHAR MDirData[10000]; ULONG MDirDataLength = 9999; #define WListDataPath L"\\??\\C:\\sfiltermon\\DeleteRule.dat" #define MDirDataPath L"\\??\\C:\\sfiltermon\\WatchDir.dat" 入口处的代码: status = ReadDataFromFile((PWSTR *)&WListData, WListDataLength, WListDataPath); if(!NT_SUCCESS(status)) { KdPrint(( "SFilter!DriverEntry: Error readWListData, status=%08x\n", status )); return status; } status = ReadDataFromFile((PWSTR *)&MDirData, MDirDataLength, MDirDataPath); if(!NT_SUCCESS(status)) { KdPrint(( "SFilter!DriverEntry: Error readMDirData, status=%08x\n", status )); return status; } 读文件的函数: NTSTATUS ReadDataFromFile( OUT PWSTR *Data, IN ULONG DataLength, IN PWSTR FileName ) { HANDLE FileHandle; IO_STATUS_BLOCK IoStatus; OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING ObjectName; NTSTATUS Status = STATUS_SUCCESS; RtlInitUnicodeString(&ObjectName, FileName); InitializeObjectAttributes(&ObjectAttributes, &ObjectName, OBJ_KERNEL_HANDLE, NULL, NULL ); Status = ZwCreateFile(&FileHandle, FILE_READ_DATA | SYNCHRONIZE, &ObjectAttributes, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 ); if (!NT_SUCCESS(Status)) { KdPrint(("ReadDataFromFile; Status = %x\n", Status)); return Status; } Status = ZwReadFile(FileHandle, NULL, NULL, NULL, &IoStatus, Data, DataLength, NULL, NULL ); ZwClose(FileHandle); return Status; } 希望各位大侠能不嫌弃问题太简单. |
|
沙发#
发布于:2009-03-27 13:12
这个也知道了,是starttype的问题, 驱动启动得太早就什么都读不到.
|
|
板凳#
发布于:2009-03-27 13:45
资料上说入口函数是在system进程中执行,并且此时的Irql在dispatch级别。如果这个说法对的话,入口函数中读写文件操作就实现不了!
|
|