ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1380回复:6

请教:如何将驱动中得到的信息存储在硬盘上

楼主#
更多 发布于:2008-02-26 09:48
现在我遇到这样一种情况:我的驱动在执行过程中将产生一些数据,我现在想把这些数据存储在硬盘上,下次驱动初始化时,就直接从硬盘上读出这些数据,而不用重新执行再生成这些数据。请各位高手给点指点。
barton
驱动牛犊
驱动牛犊
  • 注册日期2003-06-10
  • 最后登录2008-12-18
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望52点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-26 11:11
驱动程序中不是有直接操作注册表的函数么?存在注册表中不就OK了
清风拂柳
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-02-26 11:55
多谢指教,可数据量太大(有20多M),并不适合存在注册表中。请大家多多赐教。
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
地板#
发布于:2008-02-26 17:20
用户被禁言,该主题自动屏蔽!
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-02-27 14:09
多谢指教,我试了一下,还是不行,原因是我要在Dispatch_level级别上调用这些函数,而这些函数只能用在Passive_Level级别上,请问有什么办法解决这个冲突吗
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-29 11:13
请问一下,这个论坛怎么给分啊
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-02-29 13:17
我在驱动中创建一个内核级线程,就可以使用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有对写入文件大小的限制?
游客

返回顶部