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

DHCP_POLICY_EX

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

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

フィールド

フィールドサイズx64x86説明
PolicyNameLPWSTR8/4+0+0ポリシーの名前を示すワイド文字列。NULL可。
IsGlobalPolicyBOOL4+8+4サーバー全体に適用するグローバルポリシーかを示すブール値。
SubnetDWORD4+12+8ポリシーを適用するサブネットアドレスをDWORDで示す。グローバル時は0。
ProcessingOrderDWORD4+16+12ポリシーの評価順序(優先度)を示す。
ConditionsDHCP_POL_COND_ARRAY*8/4+24+16ポリシーの条件群を保持するDHCP_POL_COND_ARRAYへのポインタ。NULL可。
ExpressionsDHCP_POL_EXPR_ARRAY*8/4+32+20条件を結合する論理式群を保持するDHCP_POL_EXPR_ARRAYへのポインタ。NULL可。
RangesDHCP_IP_RANGE_ARRAY*8/4+40+24ポリシー一致時に割り当てるアドレス範囲群へのポインタ。NULL可。
DescriptionLPWSTR8/4+48+28ポリシーの説明を示すワイド文字列。NULL可。
EnabledBOOL4+56+32ポリシーが有効かを示すブール値。
PropertiesDHCP_PROPERTY_ARRAY*8/4+64+36ポリシーの拡張プロパティ群を保持するDHCP_PROPERTY_ARRAYへのポインタ。NULL可。

各言語での定義

#include <windows.h>

// DHCP_POLICY_EX  (x64 72 / x86 40 バイト)
typedef struct DHCP_POLICY_EX {
    LPWSTR PolicyName;
    BOOL IsGlobalPolicy;
    DWORD Subnet;
    DWORD ProcessingOrder;
    DHCP_POL_COND_ARRAY* Conditions;
    DHCP_POL_EXPR_ARRAY* Expressions;
    DHCP_IP_RANGE_ARRAY* Ranges;
    LPWSTR Description;
    BOOL Enabled;
    DHCP_PROPERTY_ARRAY* Properties;
} DHCP_POLICY_EX;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DHCP_POLICY_EX
{
    public IntPtr PolicyName;
    [MarshalAs(UnmanagedType.Bool)] public bool IsGlobalPolicy;
    public uint Subnet;
    public uint ProcessingOrder;
    public IntPtr Conditions;
    public IntPtr Expressions;
    public IntPtr Ranges;
    public IntPtr Description;
    [MarshalAs(UnmanagedType.Bool)] public bool Enabled;
    public IntPtr Properties;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DHCP_POLICY_EX
    Public PolicyName As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public IsGlobalPolicy As Boolean
    Public Subnet As UInteger
    Public ProcessingOrder As UInteger
    Public Conditions As IntPtr
    Public Expressions As IntPtr
    Public Ranges As IntPtr
    Public Description As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public Enabled As Boolean
    Public Properties As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class DHCP_POLICY_EX(ctypes.Structure):
    _fields_ = [
        ("PolicyName", ctypes.c_void_p),
        ("IsGlobalPolicy", wintypes.BOOL),
        ("Subnet", wintypes.DWORD),
        ("ProcessingOrder", wintypes.DWORD),
        ("Conditions", ctypes.c_void_p),
        ("Expressions", ctypes.c_void_p),
        ("Ranges", ctypes.c_void_p),
        ("Description", ctypes.c_void_p),
        ("Enabled", wintypes.BOOL),
        ("Properties", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct DHCP_POLICY_EX {
    pub PolicyName: *mut core::ffi::c_void,
    pub IsGlobalPolicy: i32,
    pub Subnet: u32,
    pub ProcessingOrder: u32,
    pub Conditions: *mut core::ffi::c_void,
    pub Expressions: *mut core::ffi::c_void,
    pub Ranges: *mut core::ffi::c_void,
    pub Description: *mut core::ffi::c_void,
    pub Enabled: i32,
    pub Properties: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type DHCP_POLICY_EX struct {
	PolicyName uintptr
	IsGlobalPolicy int32
	Subnet uint32
	ProcessingOrder uint32
	Conditions uintptr
	Expressions uintptr
	Ranges uintptr
	Description uintptr
	Enabled int32
	Properties uintptr
}
type
  DHCP_POLICY_EX = record
    PolicyName: Pointer;
    IsGlobalPolicy: BOOL;
    Subnet: DWORD;
    ProcessingOrder: DWORD;
    Conditions: Pointer;
    Expressions: Pointer;
    Ranges: Pointer;
    Description: Pointer;
    Enabled: BOOL;
    Properties: Pointer;
  end;
const DHCP_POLICY_EX = extern struct {
    PolicyName: ?*anyopaque,
    IsGlobalPolicy: i32,
    Subnet: u32,
    ProcessingOrder: u32,
    Conditions: ?*anyopaque,
    Expressions: ?*anyopaque,
    Ranges: ?*anyopaque,
    Description: ?*anyopaque,
    Enabled: i32,
    Properties: ?*anyopaque,
};
type
  DHCP_POLICY_EX {.bycopy.} = object
    PolicyName: pointer
    IsGlobalPolicy: int32
    Subnet: uint32
    ProcessingOrder: uint32
    Conditions: pointer
    Expressions: pointer
    Ranges: pointer
    Description: pointer
    Enabled: int32
    Properties: pointer
struct DHCP_POLICY_EX
{
    void* PolicyName;
    int IsGlobalPolicy;
    uint Subnet;
    uint ProcessingOrder;
    void* Conditions;
    void* Expressions;
    void* Ranges;
    void* Description;
    int Enabled;
    void* Properties;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DHCP_POLICY_EX サイズ: 40 バイト(x86)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; PolicyName : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; IsGlobalPolicy : BOOL (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Subnet : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ProcessingOrder : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Conditions : DHCP_POL_COND_ARRAY* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; Expressions : DHCP_POL_EXPR_ARRAY* (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; Ranges : DHCP_IP_RANGE_ARRAY* (+24, 4byte)  varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; Description : LPWSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Enabled : BOOL (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Properties : DHCP_PROPERTY_ARRAY* (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DHCP_POLICY_EX サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; PolicyName : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; IsGlobalPolicy : BOOL (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Subnet : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ProcessingOrder : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; Conditions : DHCP_POL_COND_ARRAY* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; Expressions : DHCP_POL_EXPR_ARRAY* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; Ranges : DHCP_IP_RANGE_ARRAY* (+40, 8byte)  varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; Description : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; Enabled : BOOL (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; Properties : DHCP_PROPERTY_ARRAY* (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DHCP_POLICY_EX
    #field intptr PolicyName
    #field bool IsGlobalPolicy
    #field int Subnet
    #field int ProcessingOrder
    #field intptr Conditions
    #field intptr Expressions
    #field intptr Ranges
    #field intptr Description
    #field bool Enabled
    #field intptr Properties
#endstruct

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