阅读:1380回复:6
请教:如何将驱动中得到的信息存储在硬盘上
现在我遇到这样一种情况:我的驱动在执行过程中将产生一些数据,我现在想把这些数据存储在硬盘上,下次驱动初始化时,就直接从硬盘上读出这些数据,而不用重新执行再生成这些数据。请各位高手给点指点。
|
|
沙发#
发布于:2008-02-26 11:11
驱动程序中不是有直接操作注册表的函数么?存在注册表中不就OK了
|
|
|
板凳#
发布于:2008-02-26 11:55
多谢指教,可数据量太大(有20多M),并不适合存在注册表中。请大家多多赐教。
|
|
地板#
发布于:2008-02-26 17:20
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2008-02-27 14:09
多谢指教,我试了一下,还是不行,原因是我要在Dispatch_level级别上调用这些函数,而这些函数只能用在Passive_Level级别上,请问有什么办法解决这个冲突吗
|
|
5楼#
发布于:2008-02-29 11:13
请问一下,这个论坛怎么给分啊
|
|
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有对写入文件大小的限制? |
|