下面的代码是“否决”、“硬块”还是两者都有?

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

最佳答案

这是一个硬性的障碍,但不是否决权。
硬操作是除了将actionType设置为FWP_action_BLOCK或FWP_action_PERMIT之外,还重置FWPS_RIGHT_action_WRITE标志的操作。(这在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) {...}

08-26 18:03