ホーム › NetworkManagement.WindowsFilteringPlatform › FWPM_NET_EVENT1
FWPM_NET_EVENT1
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| header | FWPM_NET_EVENT_HEADER1 | 96/76 | +0 | +0 | イベント共通情報を保持するヘッダー(バージョン1)。 |
| type | FWPM_NET_EVENT_TYPE | 4 | +96 | +76 | ネットワークイベントの種類を示すFWPM_NET_EVENT_TYPE。 |
| Anonymous | _Anonymous_e__Union | 8/4 | +104 | +80 | イベント種別に応じた詳細情報を保持する共用体。 |
共用体: _Anonymous_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| ikeMmFailure | FWPM_NET_EVENT_IKEEXT_MM_FAILURE1* | 8/4 | +0 | +0 |
| ikeQmFailure | FWPM_NET_EVENT_IKEEXT_QM_FAILURE0* | 8/4 | +0 | +0 |
| ikeEmFailure | FWPM_NET_EVENT_IKEEXT_EM_FAILURE1* | 8/4 | +0 | +0 |
| classifyDrop | FWPM_NET_EVENT_CLASSIFY_DROP1* | 8/4 | +0 | +0 |
| ipsecDrop | FWPM_NET_EVENT_IPSEC_KERNEL_DROP0* | 8/4 | +0 | +0 |
| idpDrop | FWPM_NET_EVENT_IPSEC_DOSP_DROP0* | 8/4 | +0 | +0 |
各言語での定義
#include <windows.h>
// FILETIME (x64 8 / x86 8 バイト)
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
// FWP_BYTE_BLOB (x64 16 / x86 8 バイト)
typedef struct FWP_BYTE_BLOB {
DWORD size;
BYTE* data;
} FWP_BYTE_BLOB;
// FWPM_NET_EVENT_HEADER1 (x64 96 / x86 76 バイト)
typedef struct FWPM_NET_EVENT_HEADER1 {
FILETIME timeStamp;
DWORD flags;
FWP_IP_VERSION ipVersion;
BYTE ipProtocol;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
WORD localPort;
WORD remotePort;
DWORD scopeId;
FWP_BYTE_BLOB appId;
SID* userId;
_Anonymous3_e__Union Anonymous3;
} FWPM_NET_EVENT_HEADER1;
// FWPM_NET_EVENT1 (x64 112 / x86 84 バイト)
typedef struct FWPM_NET_EVENT1 {
FWPM_NET_EVENT_HEADER1 header;
FWPM_NET_EVENT_TYPE type;
_Anonymous_e__Union Anonymous;
} FWPM_NET_EVENT1;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FWP_BYTE_BLOB
{
public uint size;
public IntPtr data;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FWPM_NET_EVENT_HEADER1
{
public FILETIME timeStamp;
public uint flags;
public int ipVersion;
public byte ipProtocol;
public _Anonymous1_e__Union Anonymous1;
public _Anonymous2_e__Union Anonymous2;
public ushort localPort;
public ushort remotePort;
public uint scopeId;
public FWP_BYTE_BLOB appId;
public IntPtr userId;
public _Anonymous3_e__Union Anonymous3;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FWPM_NET_EVENT1
{
public FWPM_NET_EVENT_HEADER1 header;
public int type;
public _Anonymous_e__Union Anonymous;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
Public dwLowDateTime As UInteger
Public dwHighDateTime As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FWP_BYTE_BLOB
Public size As UInteger
Public data As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FWPM_NET_EVENT_HEADER1
Public timeStamp As FILETIME
Public flags As UInteger
Public ipVersion As Integer
Public ipProtocol As Byte
Public Anonymous1 As _Anonymous1_e__Union
Public Anonymous2 As _Anonymous2_e__Union
Public localPort As UShort
Public remotePort As UShort
Public scopeId As UInteger
Public appId As FWP_BYTE_BLOB
Public userId As IntPtr
Public Anonymous3 As _Anonymous3_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FWPM_NET_EVENT1
Public header As FWPM_NET_EVENT_HEADER1
Public type As Integer
Public Anonymous As _Anonymous_e__Union
End Structureimport ctypes
from ctypes import wintypes
class FILETIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class FWP_BYTE_BLOB(ctypes.Structure):
_fields_ = [
("size", wintypes.DWORD),
("data", ctypes.c_void_p),
]
class FWPM_NET_EVENT_HEADER1(ctypes.Structure):
_fields_ = [
("timeStamp", FILETIME),
("flags", wintypes.DWORD),
("ipVersion", ctypes.c_int),
("ipProtocol", ctypes.c_ubyte),
("Anonymous1", _Anonymous1_e__Union),
("Anonymous2", _Anonymous2_e__Union),
("localPort", ctypes.c_ushort),
("remotePort", ctypes.c_ushort),
("scopeId", wintypes.DWORD),
("appId", FWP_BYTE_BLOB),
("userId", ctypes.c_void_p),
("Anonymous3", _Anonymous3_e__Union),
]
class FWPM_NET_EVENT1(ctypes.Structure):
_fields_ = [
("header", FWPM_NET_EVENT_HEADER1),
("type", ctypes.c_int),
("Anonymous", _Anonymous_e__Union),
]#[repr(C)]
pub struct FILETIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct FWP_BYTE_BLOB {
pub size: u32,
pub data: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct FWPM_NET_EVENT_HEADER1 {
pub timeStamp: FILETIME,
pub flags: u32,
pub ipVersion: i32,
pub ipProtocol: u8,
pub Anonymous1: _Anonymous1_e__Union,
pub Anonymous2: _Anonymous2_e__Union,
pub localPort: u16,
pub remotePort: u16,
pub scopeId: u32,
pub appId: FWP_BYTE_BLOB,
pub userId: *mut core::ffi::c_void,
pub Anonymous3: _Anonymous3_e__Union,
}
#[repr(C)]
pub struct FWPM_NET_EVENT1 {
pub header: FWPM_NET_EVENT_HEADER1,
pub type: i32,
pub Anonymous: _Anonymous_e__Union,
}import "golang.org/x/sys/windows"
type FILETIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type FWP_BYTE_BLOB struct {
size uint32
data uintptr
}
type FWPM_NET_EVENT_HEADER1 struct {
timeStamp FILETIME
flags uint32
ipVersion int32
ipProtocol byte
Anonymous1 _Anonymous1_e__Union
Anonymous2 _Anonymous2_e__Union
localPort uint16
remotePort uint16
scopeId uint32
appId FWP_BYTE_BLOB
userId uintptr
Anonymous3 _Anonymous3_e__Union
}
type FWPM_NET_EVENT1 struct {
header FWPM_NET_EVENT_HEADER1
type int32
Anonymous _Anonymous_e__Union
}type
FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
FWP_BYTE_BLOB = record
size: DWORD;
data: Pointer;
end;
FWPM_NET_EVENT_HEADER1 = record
timeStamp: FILETIME;
flags: DWORD;
ipVersion: Integer;
ipProtocol: Byte;
Anonymous1: _Anonymous1_e__Union;
Anonymous2: _Anonymous2_e__Union;
localPort: Word;
remotePort: Word;
scopeId: DWORD;
appId: FWP_BYTE_BLOB;
userId: Pointer;
Anonymous3: _Anonymous3_e__Union;
end;
FWPM_NET_EVENT1 = record
header: FWPM_NET_EVENT_HEADER1;
type: Integer;
Anonymous: _Anonymous_e__Union;
end;const FILETIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const FWP_BYTE_BLOB = extern struct {
size: u32,
data: ?*anyopaque,
};
const FWPM_NET_EVENT_HEADER1 = extern struct {
timeStamp: FILETIME,
flags: u32,
ipVersion: i32,
ipProtocol: u8,
Anonymous1: _Anonymous1_e__Union,
Anonymous2: _Anonymous2_e__Union,
localPort: u16,
remotePort: u16,
scopeId: u32,
appId: FWP_BYTE_BLOB,
userId: ?*anyopaque,
Anonymous3: _Anonymous3_e__Union,
};
const FWPM_NET_EVENT1 = extern struct {
header: FWPM_NET_EVENT_HEADER1,
type: i32,
Anonymous: _Anonymous_e__Union,
};type
FILETIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
FWP_BYTE_BLOB {.bycopy.} = object
size: uint32
data: pointer
FWPM_NET_EVENT_HEADER1 {.bycopy.} = object
timeStamp: FILETIME
flags: uint32
ipVersion: int32
ipProtocol: uint8
Anonymous1: _Anonymous1_e__Union
Anonymous2: _Anonymous2_e__Union
localPort: uint16
remotePort: uint16
scopeId: uint32
appId: FWP_BYTE_BLOB
userId: pointer
Anonymous3: _Anonymous3_e__Union
FWPM_NET_EVENT1 {.bycopy.} = object
header: FWPM_NET_EVENT_HEADER1
type: int32
Anonymous: _Anonymous_e__Unionstruct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct FWP_BYTE_BLOB
{
uint size;
void* data;
}
struct FWPM_NET_EVENT_HEADER1
{
FILETIME timeStamp;
uint flags;
int ipVersion;
ubyte ipProtocol;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
ushort localPort;
ushort remotePort;
uint scopeId;
FWP_BYTE_BLOB appId;
void* userId;
_Anonymous3_e__Union Anonymous3;
}
struct FWPM_NET_EVENT1
{
FWPM_NET_EVENT_HEADER1 header;
int type;
_Anonymous_e__Union Anonymous;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FWPM_NET_EVENT1 サイズ: 84 バイト(x86)
dim st, 21 ; 4byte整数×21(構造体サイズ 84 / 4 切り上げ)
; header : FWPM_NET_EVENT_HEADER1 (+0, 76byte) varptr(st)+0 を基点に操作(76byte:入れ子/配列)
; type : FWPM_NET_EVENT_TYPE (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; Anonymous : _Anonymous_e__Union (+80, 4byte) varptr(st)+80 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FWPM_NET_EVENT1 サイズ: 112 バイト(x64)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; header : FWPM_NET_EVENT_HEADER1 (+0, 96byte) varptr(st)+0 を基点に操作(96byte:入れ子/配列)
; type : FWPM_NET_EVENT_TYPE (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; Anonymous : _Anonymous_e__Union (+104, 8byte) varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
#field int dwLowDateTime
#field int dwHighDateTime
#endstruct
#defstruct global FWP_BYTE_BLOB
#field int size
#field intptr data
#endstruct
#defstruct global FWPM_NET_EVENT_HEADER1
#field FILETIME timeStamp
#field int flags
#field int ipVersion
#field byte ipProtocol
#field byte Anonymous1 16
#field byte Anonymous2 16
#field short localPort
#field short remotePort
#field int scopeId
#field FWP_BYTE_BLOB appId
#field intptr userId
#field byte Anonymous3 8
#endstruct
#defstruct global FWPM_NET_EVENT1
#field FWPM_NET_EVENT_HEADER1 header
#field int type
#field byte Anonymous 8
#endstruct
stdim st, FWPM_NET_EVENT1 ; NSTRUCT 変数を確保
st->type = 100
mes "type=" + st->type
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。