duzhp
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望19点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:2197回复:8

基于ndis防火墙的规则设置问题(有分相赠)

楼主#
更多 发布于:2007-01-17 16:33
利用网上基于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!
}

最新喜欢:

alenyangalenya...
duzhp
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望19点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-19 11:19
顶一个!
究竟怎样才能在passthru驱动中实现一个文件的读写?
poweruser
驱动老牛
驱动老牛
  • 注册日期2003-02-26
  • 最后登录2008-07-18
  • 粉丝0
  • 关注0
  • 积分652分
  • 威望72点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-22 16:00
做主机防火墙一般都是在应用层来保存和加载规则文件的,加载后传递给NDIS驱动来执行。驱动中只在内存中保留一份规则列表,当你进行判断时根据这份列表来查找即可。

驱动中文件读写可以用ZwCreateFile、ZwWriteFile等API。
老虎不发威,你当我是Hello Kitty!
duzhp
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望19点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-22 17:16
首先对poweruser表示感谢!

我的目的是当我的防火墙配置完成之后,其配置文件能够保存下来,在系统重起之后,不调用应用程序的情况下,我的驱动读取这个配置文件,自动过滤;或者超级用户设置好防火墙规则之后,普通用户在没有使用应用程序权限的情况下,驱动读取配置文件,自动过滤!

我想在驱动中“主动”地完成配置文件读取,在不加载应用程序的情况下,实现自动过滤功能!用上边的程序始终无法创建文件!请高手帮我看看!
daisyboy
驱动小牛
驱动小牛
  • 注册日期2002-10-24
  • 最后登录2012-05-21
  • 粉丝3
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值1点
  • 好评度56点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-23 17:21
引用第3楼duzhp2007-01-22 17:16发表的“”:
首先对poweruser表示感谢!

我的目的是当我的防火墙配置完成之后,其配置文件能够保存下来,在系统重起之后,不调用应用程序的情况下,我的驱动读取这个配置文件,自动过滤;或者超级用户设置好防火墙规则之后,普通用户在没有使用应用程序权限的情况下,驱动读取配置文件,自动过滤!

我想在驱动中“主动”地完成配置文件读取,在不加载应用程序的情况下,实现自动过滤功能!用上边的程序始终无法创建文件!请高手帮我看看!


搞这么复杂做什么???!安装一个隐藏而且带权限控制的服务在系统里。随着系统一起运行,对规则读写到驱动了不就完了?

驱动层读写文件很容易蓝屏的。
合作c/c++/ndis/pppoe/802.1x!
duzhp
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望19点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-24 09:27
感谢daisyboy!

我对windows的服务不太熟悉,不过我按照你的方法试一试!有问题的话再请教!我的主贴下边找不到加分按钮,此问题解决以后我再开一贴加分。
kingdark
驱动牛犊
驱动牛犊
  • 注册日期2007-01-25
  • 最后登录2008-06-17
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-02-03 13:36
楼主你好,你的防火墙代码能给我发一份参考学习么? 我正在学习这些东西,一时找不到太多头绪。
我的邮箱:kingdark@vip.sina.com
愿岁月记载着你的慷慨
hitdragon
驱动牛犊
驱动牛犊
  • 注册日期2008-07-08
  • 最后登录2008-07-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-07-11 16:58
楼主你好!!!能不能给小弟一份你的代码啊~~让小弟也学习一下。在此谢过了!~~~
邮箱:040410626@163.com
交流是增长知识的最好方法~~~~
emissary
驱动牛犊
驱动牛犊
  • 注册日期2006-10-17
  • 最后登录2011-06-14
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望32点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
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.
blog:www.emissary.cn
游客

返回顶部