ホーム › NetworkManagement.Dhcp › DHCPV4_FAILOVER_CLIENT_INFO
DHCPV4_FAILOVER_CLIENT_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ClientIpAddress | DWORD | 4 | +0 | +0 | クライアントに割り当てたIPアドレスをDWORDで示す。 |
| SubnetMask | DWORD | 4 | +4 | +4 | クライアントのサブネットマスクをDWORDで示す。 |
| ClientHardwareAddress | DHCP_BINARY_DATA | 16/8 | +8 | +8 | クライアントのハードウェア(MAC)アドレスを保持するバイナリデータ。 |
| ClientName | LPWSTR | 8/4 | +24 | +16 | クライアントのホスト名を示すワイド文字列。NULL可。 |
| ClientComment | LPWSTR | 8/4 | +32 | +20 | クライアントの説明コメントを示すワイド文字列。NULL可。 |
| ClientLeaseExpires | DATE_TIME | 8 | +40 | +24 | クライアントのリース満了日時を示す。 |
| OwnerHost | DHCP_HOST_INFO | 24/12 | +48 | +32 | このリースを管理するDHCPサーバーの情報を保持する。 |
| bClientType | BYTE | 1 | +72 | +44 | クライアントの種別(DHCP/BOOTP等)を示すフラグ。 |
| AddressState | BYTE | 1 | +73 | +45 | アドレスの状態(使用中/オファー済み等)を示す。 |
| Status | QuarantineStatus | 4 | +76 | +48 | 検疫(NAP)の状態を示すQuarantineStatus値。 |
| ProbationEnds | DATE_TIME | 8 | +80 | +52 | 検疫の猶予期間の終了日時を示す。 |
| QuarantineCapable | BOOL | 4 | +88 | +60 | クライアントが検疫対応可能かを示すブール値。 |
| SentPotExpTime | DWORD | 4 | +92 | +64 | パートナーへ送信した潜在有効期限(秒)を示す。 |
| AckPotExpTime | DWORD | 4 | +96 | +68 | パートナーが承認した潜在有効期限(秒)を示す。 |
| RecvPotExpTime | DWORD | 4 | +100 | +72 | パートナーから受信した潜在有効期限(秒)を示す。 |
| StartTime | DWORD | 4 | +104 | +76 | リース開始時刻を示す。 |
| CltLastTransTime | DWORD | 4 | +108 | +80 | クライアントとの最終トランザクション時刻を示す。 |
| LastBndUpdTime | DWORD | 4 | +112 | +84 | 最後にバインディング更新を行った時刻を示す。 |
| BndMsgStatus | DWORD | 4 | +116 | +88 | バインディング更新メッセージの処理状態を示す。 |
| PolicyName | LPWSTR | 8/4 | +120 | +92 | クライアントに適用されたポリシーの名前を示すワイド文字列。NULL可。 |
| Flags | BYTE | 1 | +128 | +96 | フェイルオーバー固有の属性を示すフラグ。 |
各言語での定義
#include <windows.h>
// DHCP_BINARY_DATA (x64 16 / x86 8 バイト)
typedef struct DHCP_BINARY_DATA {
DWORD DataLength;
BYTE* Data;
} DHCP_BINARY_DATA;
// DATE_TIME (x64 8 / x86 8 バイト)
typedef struct DATE_TIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} DATE_TIME;
// DHCP_HOST_INFO (x64 24 / x86 12 バイト)
typedef struct DHCP_HOST_INFO {
DWORD IpAddress;
LPWSTR NetBiosName;
LPWSTR HostName;
} DHCP_HOST_INFO;
// DHCPV4_FAILOVER_CLIENT_INFO (x64 136 / x86 100 バイト)
typedef struct DHCPV4_FAILOVER_CLIENT_INFO {
DWORD ClientIpAddress;
DWORD SubnetMask;
DHCP_BINARY_DATA ClientHardwareAddress;
LPWSTR ClientName;
LPWSTR ClientComment;
DATE_TIME ClientLeaseExpires;
DHCP_HOST_INFO OwnerHost;
BYTE bClientType;
BYTE AddressState;
QuarantineStatus Status;
DATE_TIME ProbationEnds;
BOOL QuarantineCapable;
DWORD SentPotExpTime;
DWORD AckPotExpTime;
DWORD RecvPotExpTime;
DWORD StartTime;
DWORD CltLastTransTime;
DWORD LastBndUpdTime;
DWORD BndMsgStatus;
LPWSTR PolicyName;
BYTE Flags;
} DHCPV4_FAILOVER_CLIENT_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DHCP_BINARY_DATA
{
public uint DataLength;
public IntPtr Data;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DATE_TIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DHCP_HOST_INFO
{
public uint IpAddress;
public IntPtr NetBiosName;
public IntPtr HostName;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DHCPV4_FAILOVER_CLIENT_INFO
{
public uint ClientIpAddress;
public uint SubnetMask;
public DHCP_BINARY_DATA ClientHardwareAddress;
public IntPtr ClientName;
public IntPtr ClientComment;
public DATE_TIME ClientLeaseExpires;
public DHCP_HOST_INFO OwnerHost;
public byte bClientType;
public byte AddressState;
public int Status;
public DATE_TIME ProbationEnds;
[MarshalAs(UnmanagedType.Bool)] public bool QuarantineCapable;
public uint SentPotExpTime;
public uint AckPotExpTime;
public uint RecvPotExpTime;
public uint StartTime;
public uint CltLastTransTime;
public uint LastBndUpdTime;
public uint BndMsgStatus;
public IntPtr PolicyName;
public byte Flags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DHCP_BINARY_DATA
Public DataLength As UInteger
Public Data As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DATE_TIME
Public dwLowDateTime As UInteger
Public dwHighDateTime As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DHCP_HOST_INFO
Public IpAddress As UInteger
Public NetBiosName As IntPtr
Public HostName As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DHCPV4_FAILOVER_CLIENT_INFO
Public ClientIpAddress As UInteger
Public SubnetMask As UInteger
Public ClientHardwareAddress As DHCP_BINARY_DATA
Public ClientName As IntPtr
Public ClientComment As IntPtr
Public ClientLeaseExpires As DATE_TIME
Public OwnerHost As DHCP_HOST_INFO
Public bClientType As Byte
Public AddressState As Byte
Public Status As Integer
Public ProbationEnds As DATE_TIME
<MarshalAs(UnmanagedType.Bool)> Public QuarantineCapable As Boolean
Public SentPotExpTime As UInteger
Public AckPotExpTime As UInteger
Public RecvPotExpTime As UInteger
Public StartTime As UInteger
Public CltLastTransTime As UInteger
Public LastBndUpdTime As UInteger
Public BndMsgStatus As UInteger
Public PolicyName As IntPtr
Public Flags As Byte
End Structureimport ctypes
from ctypes import wintypes
class DHCP_BINARY_DATA(ctypes.Structure):
_fields_ = [
("DataLength", wintypes.DWORD),
("Data", ctypes.c_void_p),
]
class DATE_TIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class DHCP_HOST_INFO(ctypes.Structure):
_fields_ = [
("IpAddress", wintypes.DWORD),
("NetBiosName", ctypes.c_void_p),
("HostName", ctypes.c_void_p),
]
class DHCPV4_FAILOVER_CLIENT_INFO(ctypes.Structure):
_fields_ = [
("ClientIpAddress", wintypes.DWORD),
("SubnetMask", wintypes.DWORD),
("ClientHardwareAddress", DHCP_BINARY_DATA),
("ClientName", ctypes.c_void_p),
("ClientComment", ctypes.c_void_p),
("ClientLeaseExpires", DATE_TIME),
("OwnerHost", DHCP_HOST_INFO),
("bClientType", ctypes.c_ubyte),
("AddressState", ctypes.c_ubyte),
("Status", ctypes.c_int),
("ProbationEnds", DATE_TIME),
("QuarantineCapable", wintypes.BOOL),
("SentPotExpTime", wintypes.DWORD),
("AckPotExpTime", wintypes.DWORD),
("RecvPotExpTime", wintypes.DWORD),
("StartTime", wintypes.DWORD),
("CltLastTransTime", wintypes.DWORD),
("LastBndUpdTime", wintypes.DWORD),
("BndMsgStatus", wintypes.DWORD),
("PolicyName", ctypes.c_void_p),
("Flags", ctypes.c_ubyte),
]#[repr(C)]
pub struct DHCP_BINARY_DATA {
pub DataLength: u32,
pub Data: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct DATE_TIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct DHCP_HOST_INFO {
pub IpAddress: u32,
pub NetBiosName: *mut core::ffi::c_void,
pub HostName: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct DHCPV4_FAILOVER_CLIENT_INFO {
pub ClientIpAddress: u32,
pub SubnetMask: u32,
pub ClientHardwareAddress: DHCP_BINARY_DATA,
pub ClientName: *mut core::ffi::c_void,
pub ClientComment: *mut core::ffi::c_void,
pub ClientLeaseExpires: DATE_TIME,
pub OwnerHost: DHCP_HOST_INFO,
pub bClientType: u8,
pub AddressState: u8,
pub Status: i32,
pub ProbationEnds: DATE_TIME,
pub QuarantineCapable: i32,
pub SentPotExpTime: u32,
pub AckPotExpTime: u32,
pub RecvPotExpTime: u32,
pub StartTime: u32,
pub CltLastTransTime: u32,
pub LastBndUpdTime: u32,
pub BndMsgStatus: u32,
pub PolicyName: *mut core::ffi::c_void,
pub Flags: u8,
}import "golang.org/x/sys/windows"
type DHCP_BINARY_DATA struct {
DataLength uint32
Data uintptr
}
type DATE_TIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type DHCP_HOST_INFO struct {
IpAddress uint32
NetBiosName uintptr
HostName uintptr
}
type DHCPV4_FAILOVER_CLIENT_INFO struct {
ClientIpAddress uint32
SubnetMask uint32
ClientHardwareAddress DHCP_BINARY_DATA
ClientName uintptr
ClientComment uintptr
ClientLeaseExpires DATE_TIME
OwnerHost DHCP_HOST_INFO
bClientType byte
AddressState byte
Status int32
ProbationEnds DATE_TIME
QuarantineCapable int32
SentPotExpTime uint32
AckPotExpTime uint32
RecvPotExpTime uint32
StartTime uint32
CltLastTransTime uint32
LastBndUpdTime uint32
BndMsgStatus uint32
PolicyName uintptr
Flags byte
}type
DHCP_BINARY_DATA = record
DataLength: DWORD;
Data: Pointer;
end;
DATE_TIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
DHCP_HOST_INFO = record
IpAddress: DWORD;
NetBiosName: Pointer;
HostName: Pointer;
end;
DHCPV4_FAILOVER_CLIENT_INFO = record
ClientIpAddress: DWORD;
SubnetMask: DWORD;
ClientHardwareAddress: DHCP_BINARY_DATA;
ClientName: Pointer;
ClientComment: Pointer;
ClientLeaseExpires: DATE_TIME;
OwnerHost: DHCP_HOST_INFO;
bClientType: Byte;
AddressState: Byte;
Status: Integer;
ProbationEnds: DATE_TIME;
QuarantineCapable: BOOL;
SentPotExpTime: DWORD;
AckPotExpTime: DWORD;
RecvPotExpTime: DWORD;
StartTime: DWORD;
CltLastTransTime: DWORD;
LastBndUpdTime: DWORD;
BndMsgStatus: DWORD;
PolicyName: Pointer;
Flags: Byte;
end;const DHCP_BINARY_DATA = extern struct {
DataLength: u32,
Data: ?*anyopaque,
};
const DATE_TIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const DHCP_HOST_INFO = extern struct {
IpAddress: u32,
NetBiosName: ?*anyopaque,
HostName: ?*anyopaque,
};
const DHCPV4_FAILOVER_CLIENT_INFO = extern struct {
ClientIpAddress: u32,
SubnetMask: u32,
ClientHardwareAddress: DHCP_BINARY_DATA,
ClientName: ?*anyopaque,
ClientComment: ?*anyopaque,
ClientLeaseExpires: DATE_TIME,
OwnerHost: DHCP_HOST_INFO,
bClientType: u8,
AddressState: u8,
Status: i32,
ProbationEnds: DATE_TIME,
QuarantineCapable: i32,
SentPotExpTime: u32,
AckPotExpTime: u32,
RecvPotExpTime: u32,
StartTime: u32,
CltLastTransTime: u32,
LastBndUpdTime: u32,
BndMsgStatus: u32,
PolicyName: ?*anyopaque,
Flags: u8,
};type
DHCP_BINARY_DATA {.bycopy.} = object
DataLength: uint32
Data: pointer
DATE_TIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
DHCP_HOST_INFO {.bycopy.} = object
IpAddress: uint32
NetBiosName: pointer
HostName: pointer
DHCPV4_FAILOVER_CLIENT_INFO {.bycopy.} = object
ClientIpAddress: uint32
SubnetMask: uint32
ClientHardwareAddress: DHCP_BINARY_DATA
ClientName: pointer
ClientComment: pointer
ClientLeaseExpires: DATE_TIME
OwnerHost: DHCP_HOST_INFO
bClientType: uint8
AddressState: uint8
Status: int32
ProbationEnds: DATE_TIME
QuarantineCapable: int32
SentPotExpTime: uint32
AckPotExpTime: uint32
RecvPotExpTime: uint32
StartTime: uint32
CltLastTransTime: uint32
LastBndUpdTime: uint32
BndMsgStatus: uint32
PolicyName: pointer
Flags: uint8struct DHCP_BINARY_DATA
{
uint DataLength;
void* Data;
}
struct DATE_TIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct DHCP_HOST_INFO
{
uint IpAddress;
void* NetBiosName;
void* HostName;
}
struct DHCPV4_FAILOVER_CLIENT_INFO
{
uint ClientIpAddress;
uint SubnetMask;
DHCP_BINARY_DATA ClientHardwareAddress;
void* ClientName;
void* ClientComment;
DATE_TIME ClientLeaseExpires;
DHCP_HOST_INFO OwnerHost;
ubyte bClientType;
ubyte AddressState;
int Status;
DATE_TIME ProbationEnds;
int QuarantineCapable;
uint SentPotExpTime;
uint AckPotExpTime;
uint RecvPotExpTime;
uint StartTime;
uint CltLastTransTime;
uint LastBndUpdTime;
uint BndMsgStatus;
void* PolicyName;
ubyte Flags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DHCPV4_FAILOVER_CLIENT_INFO サイズ: 100 バイト(x86)
dim st, 25 ; 4byte整数×25(構造体サイズ 100 / 4 切り上げ)
; ClientIpAddress : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; SubnetMask : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ClientHardwareAddress : DHCP_BINARY_DATA (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; ClientName : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ClientComment : LPWSTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ClientLeaseExpires : DATE_TIME (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; OwnerHost : DHCP_HOST_INFO (+32, 12byte) varptr(st)+32 を基点に操作(12byte:入れ子/配列)
; bClientType : BYTE (+44, 1byte) poke st,44,値 / 値 = peek(st,44)
; AddressState : BYTE (+45, 1byte) poke st,45,値 / 値 = peek(st,45)
; Status : QuarantineStatus (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; ProbationEnds : DATE_TIME (+52, 8byte) varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; QuarantineCapable : BOOL (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; SentPotExpTime : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; AckPotExpTime : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; RecvPotExpTime : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; StartTime : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; CltLastTransTime : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; LastBndUpdTime : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; BndMsgStatus : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; PolicyName : LPWSTR (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; Flags : BYTE (+96, 1byte) poke st,96,値 / 値 = peek(st,96)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DHCPV4_FAILOVER_CLIENT_INFO サイズ: 136 バイト(x64)
dim st, 34 ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; ClientIpAddress : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; SubnetMask : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ClientHardwareAddress : DHCP_BINARY_DATA (+8, 16byte) varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; ClientName : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ClientComment : LPWSTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ClientLeaseExpires : DATE_TIME (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; OwnerHost : DHCP_HOST_INFO (+48, 24byte) varptr(st)+48 を基点に操作(24byte:入れ子/配列)
; bClientType : BYTE (+72, 1byte) poke st,72,値 / 値 = peek(st,72)
; AddressState : BYTE (+73, 1byte) poke st,73,値 / 値 = peek(st,73)
; Status : QuarantineStatus (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; ProbationEnds : DATE_TIME (+80, 8byte) varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; QuarantineCapable : BOOL (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; SentPotExpTime : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; AckPotExpTime : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; RecvPotExpTime : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; StartTime : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; CltLastTransTime : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; LastBndUpdTime : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; BndMsgStatus : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; PolicyName : LPWSTR (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; Flags : BYTE (+128, 1byte) poke st,128,値 / 値 = peek(st,128)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DHCP_BINARY_DATA
#field int DataLength
#field intptr Data
#endstruct
#defstruct global DATE_TIME
#field int dwLowDateTime
#field int dwHighDateTime
#endstruct
#defstruct global DHCP_HOST_INFO
#field int IpAddress
#field intptr NetBiosName
#field intptr HostName
#endstruct
#defstruct global DHCPV4_FAILOVER_CLIENT_INFO
#field int ClientIpAddress
#field int SubnetMask
#field DHCP_BINARY_DATA ClientHardwareAddress
#field intptr ClientName
#field intptr ClientComment
#field DATE_TIME ClientLeaseExpires
#field DHCP_HOST_INFO OwnerHost
#field byte bClientType
#field byte AddressState
#field int Status
#field DATE_TIME ProbationEnds
#field bool QuarantineCapable
#field int SentPotExpTime
#field int AckPotExpTime
#field int RecvPotExpTime
#field int StartTime
#field int CltLastTransTime
#field int LastBndUpdTime
#field int BndMsgStatus
#field intptr PolicyName
#field byte Flags
#endstruct
stdim st, DHCPV4_FAILOVER_CLIENT_INFO ; NSTRUCT 変数を確保
st->ClientIpAddress = 100
mes "ClientIpAddress=" + st->ClientIpAddress