“Veto”和“Hard Block”有什么区别?

时间:2013-01-15 14:59:48

标签: c windows kernel firewall wfp

下面的代码是" Veto"," Hard Block"还是两者兼而有之?

if (FWP_ACTION_PERMIT == classifyOut->actionType 
 && FlagOn(classifyOut->rights, FWPS_RIGHT_ACTION_WRITE))
{
    classifyOut->rights = 0;
    classifyOut->actionType = FWP_ACTION_BLOCK;
}

有关此问题的文档含糊不清。

请访问:http://msdn.microsoft.com/en-us/library/windows/desktop/aa364008(v=vs.85).aspx

1 个答案:

答案 0 :(得分:0)

它是硬块,但不是 Veto

硬动作是除了将 actionType 设置为 FWP_ACTION_BLOCK FWP_ACTION_PERMIT <之外,还重置 FWPS_RIGHT_ACTION_WRITE 标志的动作。 / em>。 (the documentation中没有明确定义,但是可以从第一个表中推断出来。)

在代码中,您要重置标志,然后将 actionType 设置为 FWP_ACTION_BLOCK ,使您的操作成为硬块

classifyOut->rights = 0;
classifyOut->actionType = FWP_ACTION_BLOCK;

the documentation中所述,

  

否决权是在调用过滤器之前重置FWPS_RIGHT_ACTION_WRITE标志时过滤器返回的阻止操作。

在您的代码中,仅在设置了标志的情况下才发出块,从而使操作不是否决权

if ( ... && FlagOn(classifyOut->rights, FWPS_RIGHT_ACTION_WRITE) {...}