ホーム › NetworkManagement.Dhcp › DHCP_FILTER_ADD_INFO
DHCP_FILTER_ADD_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| AddrPatt | DHCP_ADDR_PATTERN | 268 | +0 | +0 | 追加するフィルタのアドレスパターンを保持する。 |
| Comment | LPWSTR | 8/4 | +272 | +268 | フィルタエントリの説明コメントを示すワイド文字列。NULL可。 |
| ListType | DHCP_FILTER_LIST_TYPE | 4 | +280 | +272 | 許可/拒否のいずれのリストに追加するかを示すDHCP_FILTER_LIST_TYPE値。 |
各言語での定義
#include <windows.h>
// DHCP_ADDR_PATTERN (x64 268 / x86 268 バイト)
typedef struct DHCP_ADDR_PATTERN {
BOOL MatchHWType;
BYTE HWType;
BOOL IsWildcard;
BYTE Length;
BYTE Pattern[255];
} DHCP_ADDR_PATTERN;
// DHCP_FILTER_ADD_INFO (x64 288 / x86 276 バイト)
typedef struct DHCP_FILTER_ADD_INFO {
DHCP_ADDR_PATTERN AddrPatt;
LPWSTR Comment;
DHCP_FILTER_LIST_TYPE ListType;
} DHCP_FILTER_ADD_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DHCP_ADDR_PATTERN
{
[MarshalAs(UnmanagedType.Bool)] public bool MatchHWType;
public byte HWType;
[MarshalAs(UnmanagedType.Bool)] public bool IsWildcard;
public byte Length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)] public byte[] Pattern;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DHCP_FILTER_ADD_INFO
{
public DHCP_ADDR_PATTERN AddrPatt;
public IntPtr Comment;
public int ListType;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DHCP_ADDR_PATTERN
<MarshalAs(UnmanagedType.Bool)> Public MatchHWType As Boolean
Public HWType As Byte
<MarshalAs(UnmanagedType.Bool)> Public IsWildcard As Boolean
Public Length As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=255)> Public Pattern() As Byte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DHCP_FILTER_ADD_INFO
Public AddrPatt As DHCP_ADDR_PATTERN
Public Comment As IntPtr
Public ListType As Integer
End Structureimport ctypes
from ctypes import wintypes
class DHCP_ADDR_PATTERN(ctypes.Structure):
_fields_ = [
("MatchHWType", wintypes.BOOL),
("HWType", ctypes.c_ubyte),
("IsWildcard", wintypes.BOOL),
("Length", ctypes.c_ubyte),
("Pattern", ctypes.c_ubyte * 255),
]
class DHCP_FILTER_ADD_INFO(ctypes.Structure):
_fields_ = [
("AddrPatt", DHCP_ADDR_PATTERN),
("Comment", ctypes.c_void_p),
("ListType", ctypes.c_int),
]#[repr(C)]
pub struct DHCP_ADDR_PATTERN {
pub MatchHWType: i32,
pub HWType: u8,
pub IsWildcard: i32,
pub Length: u8,
pub Pattern: [u8; 255],
}
#[repr(C)]
pub struct DHCP_FILTER_ADD_INFO {
pub AddrPatt: DHCP_ADDR_PATTERN,
pub Comment: *mut core::ffi::c_void,
pub ListType: i32,
}import "golang.org/x/sys/windows"
type DHCP_ADDR_PATTERN struct {
MatchHWType int32
HWType byte
IsWildcard int32
Length byte
Pattern [255]byte
}
type DHCP_FILTER_ADD_INFO struct {
AddrPatt DHCP_ADDR_PATTERN
Comment uintptr
ListType int32
}type
DHCP_ADDR_PATTERN = record
MatchHWType: BOOL;
HWType: Byte;
IsWildcard: BOOL;
Length: Byte;
Pattern: array[0..254] of Byte;
end;
DHCP_FILTER_ADD_INFO = record
AddrPatt: DHCP_ADDR_PATTERN;
Comment: Pointer;
ListType: Integer;
end;const DHCP_ADDR_PATTERN = extern struct {
MatchHWType: i32,
HWType: u8,
IsWildcard: i32,
Length: u8,
Pattern: [255]u8,
};
const DHCP_FILTER_ADD_INFO = extern struct {
AddrPatt: DHCP_ADDR_PATTERN,
Comment: ?*anyopaque,
ListType: i32,
};type
DHCP_ADDR_PATTERN {.bycopy.} = object
MatchHWType: int32
HWType: uint8
IsWildcard: int32
Length: uint8
Pattern: array[255, uint8]
DHCP_FILTER_ADD_INFO {.bycopy.} = object
AddrPatt: DHCP_ADDR_PATTERN
Comment: pointer
ListType: int32struct DHCP_ADDR_PATTERN
{
int MatchHWType;
ubyte HWType;
int IsWildcard;
ubyte Length;
ubyte[255] Pattern;
}
struct DHCP_FILTER_ADD_INFO
{
DHCP_ADDR_PATTERN AddrPatt;
void* Comment;
int ListType;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DHCP_FILTER_ADD_INFO サイズ: 276 バイト(x86)
dim st, 69 ; 4byte整数×69(構造体サイズ 276 / 4 切り上げ)
; AddrPatt : DHCP_ADDR_PATTERN (+0, 268byte) varptr(st)+0 を基点に操作(268byte:入れ子/配列)
; Comment : LPWSTR (+268, 4byte) st.67 = 値 / 値 = st.67 (lpoke/lpeek も可)
; ListType : DHCP_FILTER_LIST_TYPE (+272, 4byte) st.68 = 値 / 値 = st.68 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DHCP_FILTER_ADD_INFO サイズ: 288 バイト(x64)
dim st, 72 ; 4byte整数×72(構造体サイズ 288 / 4 切り上げ)
; AddrPatt : DHCP_ADDR_PATTERN (+0, 268byte) varptr(st)+0 を基点に操作(268byte:入れ子/配列)
; Comment : LPWSTR (+272, 8byte) qpoke st,272,値 / qpeek(st,272) ※IronHSPのみ。3.7/3.8は lpoke st,272,下位 : lpoke st,276,上位
; ListType : DHCP_FILTER_LIST_TYPE (+280, 4byte) st.70 = 値 / 値 = st.70 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DHCP_ADDR_PATTERN
#field bool MatchHWType
#field byte HWType
#field bool IsWildcard
#field byte Length
#field byte Pattern 255
#endstruct
#defstruct global DHCP_FILTER_ADD_INFO
#field DHCP_ADDR_PATTERN AddrPatt
#field intptr Comment
#field int ListType
#endstruct
stdim st, DHCP_FILTER_ADD_INFO ; NSTRUCT 変数を確保
st->ListType = 100
mes "ListType=" + st->ListType