阅读:2273回复:8
基于ndis防火墙的规则设置问题(有分相赠)
利用网上基于ndis防火墙的源码,我进行了改进,现在我的防火墙能够在win2k和xp下正常运行,现在有个问题没有解决,请高手赐教!
如何处理规则使得在机器重起之后其仍然生效? 我的思路是,当规则设置时,将规则记录到一个文件之下进行保存,用的时候再把它读出来,用sys内部的函数跟这个文件进行匹配,实现策略。 以下是我在passthru中设置禁止访问的时候,将规则简单记录到一个文件的代码,请高手帮忙看一下哪里有问题!不胜感激! void DENYALL() { UCHAR *pSetRule=(UCHAR)FWS_DENYALL; PHANDLE ThreadHandle; NDIS_STATUS Status; KIRQL CurrentIrql; g_Rules.global.fw_status=FWS_DENYALL; Status = PsCreateSystemThread (&ThreadHandle, THREAD_ALL_ACCESS, NULL, NULL, NULL, SetFwRules, pSetRule); if (Status == STATUS_SUCCESS) { DBGPRINT(("Create system thread successful!\n")); // ZwClose(ThreadHandle); // PsTerminateSystemThread(STATUS_SUCCESS); } else return; } void SetFwRules(UCHAR *pFwRule) { NDIS_STRING FileName_FwRules; OBJECT_ATTRIBUTES ObjectAttributes; HANDLE FileHandle; NDIS_STATUS Status; IO_STATUS_BLOCK IoStatus; UCHAR TempBuf[2]; TempBuf[0]=pFwRule; //get a handle to the dat file object NdisInitUnicodeString (&FileName_FwRules, (PWSTR)L"G:\\FirewallRules.dat"); InitializeObjectAttributes (&ObjectAttributes, (PUNICODE_STRING)&FileName_FwRules, OBJ_OPENIF, NULL, NULL); Status = ZwCreateFile (&FileHandle, GENERIC_WRITE|SYNCHRONIZE, &ObjectAttributes, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); if(Status == STATUS_SUCCESS ) { DBGPRINT(("Create file for writing successful!\n")); ZwWriteFile(FileHandle, NULL, NULL, NULL, &IoStatus, TempBuf, sizeof(TempBuf), NULL, NULL); ZwClose(FileHandle); } else DBGPRINT(("Create file for writing failed!\n")); 系统输出: Create system thread successful! Create file for writing failed! } |
|
最新喜欢:alenya... |
沙发#
发布于:2007-01-19 11:19
顶一个!
究竟怎样才能在passthru驱动中实现一个文件的读写? |
|
板凳#
发布于:2007-01-22 16:00
做主机防火墙一般都是在应用层来保存和加载规则文件的,加载后传递给NDIS驱动来执行。驱动中只在内存中保留一份规则列表,当你进行判断时根据这份列表来查找即可。
驱动中文件读写可以用ZwCreateFile、ZwWriteFile等API。 |
|
|
地板#
发布于:2007-01-22 17:16
首先对poweruser表示感谢!
我的目的是当我的防火墙配置完成之后,其配置文件能够保存下来,在系统重起之后,不调用应用程序的情况下,我的驱动读取这个配置文件,自动过滤;或者超级用户设置好防火墙规则之后,普通用户在没有使用应用程序权限的情况下,驱动读取配置文件,自动过滤! 我想在驱动中“主动”地完成配置文件读取,在不加载应用程序的情况下,实现自动过滤功能!用上边的程序始终无法创建文件!请高手帮我看看! |
|
地下室#
发布于:2007-01-23 17:21
引用第3楼duzhp于2007-01-22 17:16发表的“”: 搞这么复杂做什么???!安装一个隐藏而且带权限控制的服务在系统里。随着系统一起运行,对规则读写到驱动了不就完了? 驱动层读写文件很容易蓝屏的。 |
|
|
5楼#
发布于:2007-01-24 09:27
感谢daisyboy!
我对windows的服务不太熟悉,不过我按照你的方法试一试!有问题的话再请教!我的主贴下边找不到加分按钮,此问题解决以后我再开一贴加分。 |
|
6楼#
发布于:2007-02-03 13:36
楼主你好,你的防火墙代码能给我发一份参考学习么? 我正在学习这些东西,一时找不到太多头绪。
我的邮箱:kingdark@vip.sina.com |
|
|
7楼#
发布于:2008-07-11 16:58
楼主你好!!!能不能给小弟一份你的代码啊~~让小弟也学习一下。在此谢过了!~~~
邮箱:040410626@163.com |
|
|
8楼#
发布于:2008-09-24 14:31
NdisInitUnicodeString (&FileName_FwRules, (PWSTR)L"G:\\FirewallRules.dat");
要用到内核路径!!!!!!! \\DosDevices\\G:\\FirewallRules.dat Kernel-mode components refer to a file by its object name, which is \DosDevices concatenated to the file's full path. (On Microsoft Windows 2000 and later versions of the operating system, \?? is equivalent to \DosDevices.) For example, the object name of the C:\WINDOWS\example.txt file is \DosDevices\C:\WINDOWS\example.txt. You use the object name to open a handle to a file. For more information about object names, see Object Names. |
|
|