bravery36
驱动牛犊
驱动牛犊
  • 注册日期2008-03-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望376点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1350回复:2

请问一下可以在driverentry中读文件的吗?

楼主#
更多 发布于:2009-03-26 09:26
本意是想将文件内容在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;
}

希望各位大侠能不嫌弃问题太简单.
bravery36
驱动牛犊
驱动牛犊
  • 注册日期2008-03-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望376点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-03-27 13:12
这个也知道了,是starttype的问题, 驱动启动得太早就什么都读不到.
wwg266543
驱动小牛
驱动小牛
  • 注册日期2007-07-03
  • 最后登录2014-08-27
  • 粉丝3
  • 关注1
  • 积分3分
  • 威望882点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分54分
板凳#
发布于:2009-03-27 13:45
资料上说入口函数是在system进程中执行,并且此时的Irql在dispatch级别。如果这个说法对的话,入口函数中读写文件操作就实现不了!
游客

返回顶部