Win32 API 日本語リファレンス
ホームNetworkManagement.WindowsFilteringPlatform › FWPM_LAYER_STATISTICS1

FWPM_LAYER_STATISTICS1

構造体
サイズx64: 40 バイト / x86: 40 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
layerIdGUID16+0+0統計対象のレイヤーを識別するGUID。
classifyPermitCountDWORD4+16+16このレイヤーで許可された分類の回数。
classifyBlockCountDWORD4+20+20このレイヤーでブロックされた分類の回数。
classifyVetoCountDWORD4+24+24コールアウトが拒否(veto)した分類の回数。
numCacheEntriesDWORD4+28+28このレイヤーの分類キャッシュエントリ数。
filterCountDWORD4+32+32このレイヤーに登録されているフィルター数。バージョン1で追加。
totalFilterSizeDWORD4+36+36このレイヤーのフィルターの合計サイズ。バージョン1で追加。

各言語での定義

#include <windows.h>

// FWPM_LAYER_STATISTICS1  (x64 40 / x86 40 バイト)
typedef struct FWPM_LAYER_STATISTICS1 {
    GUID layerId;
    DWORD classifyPermitCount;
    DWORD classifyBlockCount;
    DWORD classifyVetoCount;
    DWORD numCacheEntries;
    DWORD filterCount;
    DWORD totalFilterSize;
} FWPM_LAYER_STATISTICS1;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FWPM_LAYER_STATISTICS1
{
    public Guid layerId;
    public uint classifyPermitCount;
    public uint classifyBlockCount;
    public uint classifyVetoCount;
    public uint numCacheEntries;
    public uint filterCount;
    public uint totalFilterSize;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FWPM_LAYER_STATISTICS1
    Public layerId As Guid
    Public classifyPermitCount As UInteger
    Public classifyBlockCount As UInteger
    Public classifyVetoCount As UInteger
    Public numCacheEntries As UInteger
    Public filterCount As UInteger
    Public totalFilterSize As UInteger
End Structure
import ctypes
from ctypes import wintypes

class FWPM_LAYER_STATISTICS1(ctypes.Structure):
    _fields_ = [
        ("layerId", GUID),
        ("classifyPermitCount", wintypes.DWORD),
        ("classifyBlockCount", wintypes.DWORD),
        ("classifyVetoCount", wintypes.DWORD),
        ("numCacheEntries", wintypes.DWORD),
        ("filterCount", wintypes.DWORD),
        ("totalFilterSize", wintypes.DWORD),
    ]
#[repr(C)]
pub struct FWPM_LAYER_STATISTICS1 {
    pub layerId: GUID,
    pub classifyPermitCount: u32,
    pub classifyBlockCount: u32,
    pub classifyVetoCount: u32,
    pub numCacheEntries: u32,
    pub filterCount: u32,
    pub totalFilterSize: u32,
}
import "golang.org/x/sys/windows"

type FWPM_LAYER_STATISTICS1 struct {
	layerId windows.GUID
	classifyPermitCount uint32
	classifyBlockCount uint32
	classifyVetoCount uint32
	numCacheEntries uint32
	filterCount uint32
	totalFilterSize uint32
}
type
  FWPM_LAYER_STATISTICS1 = record
    layerId: TGUID;
    classifyPermitCount: DWORD;
    classifyBlockCount: DWORD;
    classifyVetoCount: DWORD;
    numCacheEntries: DWORD;
    filterCount: DWORD;
    totalFilterSize: DWORD;
  end;
const FWPM_LAYER_STATISTICS1 = extern struct {
    layerId: GUID,
    classifyPermitCount: u32,
    classifyBlockCount: u32,
    classifyVetoCount: u32,
    numCacheEntries: u32,
    filterCount: u32,
    totalFilterSize: u32,
};
type
  FWPM_LAYER_STATISTICS1 {.bycopy.} = object
    layerId: GUID
    classifyPermitCount: uint32
    classifyBlockCount: uint32
    classifyVetoCount: uint32
    numCacheEntries: uint32
    filterCount: uint32
    totalFilterSize: uint32
struct FWPM_LAYER_STATISTICS1
{
    GUID layerId;
    uint classifyPermitCount;
    uint classifyBlockCount;
    uint classifyVetoCount;
    uint numCacheEntries;
    uint filterCount;
    uint totalFilterSize;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FWPM_LAYER_STATISTICS1 サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; layerId : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; classifyPermitCount : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; classifyBlockCount : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; classifyVetoCount : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; numCacheEntries : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; filterCount : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; totalFilterSize : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global FWPM_LAYER_STATISTICS1
    #field GUID layerId
    #field int classifyPermitCount
    #field int classifyBlockCount
    #field int classifyVetoCount
    #field int numCacheEntries
    #field int filterCount
    #field int totalFilterSize
#endstruct

stdim st, FWPM_LAYER_STATISTICS1        ; NSTRUCT 変数を確保
st->classifyPermitCount = 100
mes "classifyPermitCount=" + st->classifyPermitCount