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

DNS_CONNECTION_POLICY_ENTRY

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

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

フィールド

フィールドサイズx64x86説明
pwszHostLPWSTR8/4+0+0ポリシーが適用される対象ホスト名(パターン)を表すワイド文字列ポインタ。
pwszAppIdLPWSTR8/4+8+4ポリシー対象アプリケーションのID(パッケージ名等)を表すワイド文字列ポインタ。
cbAppSidDWORD4+16+8pbAppSidが指すアプリSIDのバイト長を示す。
pbAppSidBYTE*8/4+24+12対象アプリケーションのSIDバイト列を指すポインタ。
nConnectionsDWORD4+32+16ppwszConnectionsが指す接続名の個数を示す。
ppwszConnectionsLPWSTR*8/4+40+20ポリシーで使用する接続名のワイド文字列配列を指すポインタ。
dwPolicyEntryFlagsDWORD4+48+24ポリシーエントリの動作を制御するフラグ値を保持する。

各言語での定義

#include <windows.h>

// DNS_CONNECTION_POLICY_ENTRY  (x64 56 / x86 28 バイト)
typedef struct DNS_CONNECTION_POLICY_ENTRY {
    LPWSTR pwszHost;
    LPWSTR pwszAppId;
    DWORD cbAppSid;
    BYTE* pbAppSid;
    DWORD nConnections;
    LPWSTR* ppwszConnections;
    DWORD dwPolicyEntryFlags;
} DNS_CONNECTION_POLICY_ENTRY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DNS_CONNECTION_POLICY_ENTRY
{
    public IntPtr pwszHost;
    public IntPtr pwszAppId;
    public uint cbAppSid;
    public IntPtr pbAppSid;
    public uint nConnections;
    public IntPtr ppwszConnections;
    public uint dwPolicyEntryFlags;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DNS_CONNECTION_POLICY_ENTRY
    Public pwszHost As IntPtr
    Public pwszAppId As IntPtr
    Public cbAppSid As UInteger
    Public pbAppSid As IntPtr
    Public nConnections As UInteger
    Public ppwszConnections As IntPtr
    Public dwPolicyEntryFlags As UInteger
End Structure
import ctypes
from ctypes import wintypes

class DNS_CONNECTION_POLICY_ENTRY(ctypes.Structure):
    _fields_ = [
        ("pwszHost", ctypes.c_void_p),
        ("pwszAppId", ctypes.c_void_p),
        ("cbAppSid", wintypes.DWORD),
        ("pbAppSid", ctypes.c_void_p),
        ("nConnections", wintypes.DWORD),
        ("ppwszConnections", ctypes.c_void_p),
        ("dwPolicyEntryFlags", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DNS_CONNECTION_POLICY_ENTRY {
    pub pwszHost: *mut core::ffi::c_void,
    pub pwszAppId: *mut core::ffi::c_void,
    pub cbAppSid: u32,
    pub pbAppSid: *mut core::ffi::c_void,
    pub nConnections: u32,
    pub ppwszConnections: *mut core::ffi::c_void,
    pub dwPolicyEntryFlags: u32,
}
import "golang.org/x/sys/windows"

type DNS_CONNECTION_POLICY_ENTRY struct {
	pwszHost uintptr
	pwszAppId uintptr
	cbAppSid uint32
	pbAppSid uintptr
	nConnections uint32
	ppwszConnections uintptr
	dwPolicyEntryFlags uint32
}
type
  DNS_CONNECTION_POLICY_ENTRY = record
    pwszHost: Pointer;
    pwszAppId: Pointer;
    cbAppSid: DWORD;
    pbAppSid: Pointer;
    nConnections: DWORD;
    ppwszConnections: Pointer;
    dwPolicyEntryFlags: DWORD;
  end;
const DNS_CONNECTION_POLICY_ENTRY = extern struct {
    pwszHost: ?*anyopaque,
    pwszAppId: ?*anyopaque,
    cbAppSid: u32,
    pbAppSid: ?*anyopaque,
    nConnections: u32,
    ppwszConnections: ?*anyopaque,
    dwPolicyEntryFlags: u32,
};
type
  DNS_CONNECTION_POLICY_ENTRY {.bycopy.} = object
    pwszHost: pointer
    pwszAppId: pointer
    cbAppSid: uint32
    pbAppSid: pointer
    nConnections: uint32
    ppwszConnections: pointer
    dwPolicyEntryFlags: uint32
struct DNS_CONNECTION_POLICY_ENTRY
{
    void* pwszHost;
    void* pwszAppId;
    uint cbAppSid;
    void* pbAppSid;
    uint nConnections;
    void* ppwszConnections;
    uint dwPolicyEntryFlags;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DNS_CONNECTION_POLICY_ENTRY サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; pwszHost : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pwszAppId : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; cbAppSid : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pbAppSid : BYTE* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; nConnections : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ppwszConnections : LPWSTR* (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwPolicyEntryFlags : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DNS_CONNECTION_POLICY_ENTRY サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; pwszHost : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pwszAppId : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbAppSid : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pbAppSid : BYTE* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; nConnections : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ppwszConnections : LPWSTR* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwPolicyEntryFlags : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DNS_CONNECTION_POLICY_ENTRY
    #field intptr pwszHost
    #field intptr pwszAppId
    #field int cbAppSid
    #field intptr pbAppSid
    #field int nConnections
    #field intptr ppwszConnections
    #field int dwPolicyEntryFlags
#endstruct

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