2

以下代码是否称为“否决”、“硬块”或两者兼而有之?

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

4

1 回答 1

1

这是一个硬块,但不是否决

硬操作是除了将actionType设置为FWP_ACTION_BLOCKFWP_ACTION_PERMIT之外,还重置FWPS_RIGHT_ACTION_WRITE标志的操作。(这在文档中没有明确定义,但可以从第一个表中推断出来。)

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

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

文档中所述

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

在您的代码中,如果设置了标志,您只会发出一个块,使您的操作不是 Veto

if ( ... && FlagOn(classifyOut->rights, FWPS_RIGHT_ACTION_WRITE) {...}
于 2019-03-07T16:42:27.197 回答