FwpmSubLayerAdd0 函数 (fwpmu.h)

FwpmSubLayerAdd0 函数向系统添加新的子层。

语法

DWORD FwpmSubLayerAdd0(
  [in]           HANDLE               engineHandle,
  [in]           const FWPM_SUBLAYER0 *subLayer,
  [in, optional] PSECURITY_DESCRIPTOR sd
);

参数

[in] engineHandle

类型: 句柄

筛选器引擎的打开会话的句柄。 调用 FwpmEngineOpen0 以打开与筛选器引擎的会话。

[in] subLayer

类型: FWPM_SUBLAYER0*

要添加的子层。

[in, optional] sd

类型: PSECURITY_DESCRIPTOR

子层对象的安全信息。

返回值

类型:DWORD

返回代码/值 说明
ERROR_SUCCESS
0
已成功添加子层。
FWP_E_* 错误代码
0x80320001 — 0x80320039
Windows 筛选平台 (WFP) 特定错误。 有关详细信息 ,请参阅 WFP 错误代码
RPC_* 错误代码
0x80010001 — 0x80010122
无法与远程或本地防火墙引擎通信。

注解

如果调用方提供 null 安全描述符,系统将分配默认的安全描述符。

无法从只读事务中调用此函数。 它将失败并 出现FWP_E_INCOMPATIBLE_TXN。 有关事务的详细信息,请参阅 对象管理

调用方需要 FWPM_ACTRL_ADD 访问子层的容器,并 FWPM_ACTRL_ADD_LINK 访问提供程序 ((如果有任何) )。 有关详细信息,请参阅访问控制

FwpmSubLayerAdd0 是 FwpmSubLayerAdd 的特定实现。 有关详细信息 ,请参阅 WFP Version-Independent 名称和面向 Windows 的特定版本

示例

以下 C++ 示例演示了子层对象的初始化以及将子图层键添加到筛选器对象。

#include <windows.h>
#include <fwpmu.h>
#include <rpc.h>
#include <stdio.h>

#pragma comment(lib, "Fwpuclnt.lib")
#pragma comment(lib, "Rpcrt4.lib")

void main()
{
    FWPM_FILTER0    fwpFilter;
    FWPM_SUBLAYER0    fwpFilterSubLayer;
    HANDLE engineHandle = NULL;     
    DWORD  result = ERROR_SUCCESS; 
    RPC_STATUS rpcStatus = RPC_S_OK;
     
    memset(&fwpFilterSubLayer, 0, sizeof(fwpFilterSubLayer));
    rpcStatus = UuidCreate(&fwpFilterSubLayer.subLayerKey);
          
    if (RPC_S_OK != rpcStatus)
    {
           printf("UuidCreate failed (%d).\n", rpcStatus);
           return;
    }

    result = FwpmEngineOpen0( NULL, RPC_C_AUTHN_WINNT, NULL, NULL, &engineHandle );
    if (result != ERROR_SUCCESS)
    {
        printf("FwpmEngineOpen0 failed.\n");
        return;
    }

    fwpFilterSubLayer.displayData.name = L"MyFilterSublayer";
    fwpFilterSubLayer.displayData.description = L"My filter sublayer";
    fwpFilterSubLayer.flags = 0;
    fwpFilterSubLayer.weight = 0x100;
            
    printf("Adding filter sublayer.\n");
      result = FwpmSubLayerAdd0(engineHandle, &fwpFilterSubLayer, NULL);

      if (result != ERROR_SUCCESS)
      {           
           printf("FwpmSubLayerAdd0 failed (%d).\n", result);
           return;
    }

    // Add sublayer key to a filter.
    memset(&fwpFilter, 0, sizeof(FWPM_FILTER0));

    if (&fwpFilterSubLayer.subLayerKey != NULL)
        fwpFilter.subLayerKey = fwpFilterSubLayer.subLayerKey;

    // Finish initializing filter...

    return;
}

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 fwpmu.h
Library Fwpuclnt.lib
DLL Fwpuclnt.dll

另请参阅

FWPM_SUBLAYER0

管理功能

WFP 函数