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

DNS_RECORDA

構造体
サイズx64: 88 バイト / x86: 64 バイト

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

フィールド

フィールドサイズx64x86説明
pNextDNS_RECORDA*8/4+0+0連結リスト上の次のDNSレコードを指すポインタ。末尾ではNULL。
pNameLPSTR8/4+8+4レコードの所有者名を表すANSI文字列ポインタ。
wTypeWORD2+16+8レコードの種別(A/AAAA/MX等)を示すDNSタイプ値。
wDataLengthWORD2+18+10可変長レコードのバイト長、または固定長レコードでは構造体サイズを示す。
Flags_Flags_e__Union4+20+12レコード属性を表す無名共用体。DWORD全体とビットフィールド表現を兼ねる。
dwTtlDWORD4+24+16レコードの有効期間(TTL)を秒単位で示す。
dwReservedDWORD4+28+20予約フィールド。使用されない。
Data_Data_e__Union56/40+32+24レコード種別に応じたデータを保持する無名共用体。A/SRV/TXT等各形式を含む。

共用体: _Flags_e__Union x64 4B / x86 4B

フィールドサイズx64x86
DWDWORD4+0+0
SDNS_RECORD_FLAGS4+0+0

共用体: _Data_e__Union x64 56B / x86 40B

フィールドサイズx64x86
ADNS_A_DATA4+0+0
SOADNS_SOA_DATAA40/28+0+0
SoaDNS_SOA_DATAA40/28+0+0
PTRDNS_PTR_DATAA8/4+0+0
PtrDNS_PTR_DATAA8/4+0+0
NSDNS_PTR_DATAA8/4+0+0
NsDNS_PTR_DATAA8/4+0+0
CNAMEDNS_PTR_DATAA8/4+0+0
CnameDNS_PTR_DATAA8/4+0+0
DNAMEDNS_PTR_DATAA8/4+0+0
DnameDNS_PTR_DATAA8/4+0+0
MBDNS_PTR_DATAA8/4+0+0
MbDNS_PTR_DATAA8/4+0+0
MDDNS_PTR_DATAA8/4+0+0
MdDNS_PTR_DATAA8/4+0+0
MFDNS_PTR_DATAA8/4+0+0
MfDNS_PTR_DATAA8/4+0+0
MGDNS_PTR_DATAA8/4+0+0
MgDNS_PTR_DATAA8/4+0+0
MRDNS_PTR_DATAA8/4+0+0
MrDNS_PTR_DATAA8/4+0+0
MINFODNS_MINFO_DATAA16/8+0+0
MinfoDNS_MINFO_DATAA16/8+0+0
RPDNS_MINFO_DATAA16/8+0+0
RpDNS_MINFO_DATAA16/8+0+0
MXDNS_MX_DATAA16/8+0+0
MxDNS_MX_DATAA16/8+0+0
AFSDBDNS_MX_DATAA16/8+0+0
AfsdbDNS_MX_DATAA16/8+0+0
RTDNS_MX_DATAA16/8+0+0
RtDNS_MX_DATAA16/8+0+0
HINFODNS_TXT_DATAA16/8+0+0
HinfoDNS_TXT_DATAA16/8+0+0
ISDNDNS_TXT_DATAA16/8+0+0
IsdnDNS_TXT_DATAA16/8+0+0
TXTDNS_TXT_DATAA16/8+0+0
TxtDNS_TXT_DATAA16/8+0+0
X25DNS_TXT_DATAA16/8+0+0
NullDNS_NULL_DATA8+0+0
WKSDNS_WKS_DATA8+0+0
WksDNS_WKS_DATA8+0+0
AAAADNS_AAAA_DATA16+0+0
KEYDNS_KEY_DATA10+0+0
KeyDNS_KEY_DATA10+0+0
SIGDNS_SIG_DATAA40/28+0+0
SigDNS_SIG_DATAA40/28+0+0
ATMADNS_ATMA_DATA21+0+0
AtmaDNS_ATMA_DATA21+0+0
NXTDNS_NXT_DATAA16/8+0+0
NxtDNS_NXT_DATAA16/8+0+0
SRVDNS_SRV_DATAA16/12+0+0
SrvDNS_SRV_DATAA16/12+0+0
NAPTRDNS_NAPTR_DATAA40/20+0+0
NaptrDNS_NAPTR_DATAA40/20+0+0
OPTDNS_OPT_DATA6+0+0
OptDNS_OPT_DATA6+0+0
DSDNS_DS_DATA10+0+0
DsDNS_DS_DATA10+0+0
RRSIGDNS_SIG_DATAA40/28+0+0
RrsigDNS_SIG_DATAA40/28+0+0
NSECDNS_NSEC_DATAA16/12+0+0
NsecDNS_NSEC_DATAA16/12+0+0
DNSKEYDNS_KEY_DATA10+0+0
DnskeyDNS_KEY_DATA10+0+0
TKEYDNS_TKEY_DATAA56/40+0+0
TkeyDNS_TKEY_DATAA56/40+0+0
TSIGDNS_TSIG_DATAA56/40+0+0
TsigDNS_TSIG_DATAA56/40+0+0
WINSDNS_WINS_DATA20+0+0
WinsDNS_WINS_DATA20+0+0
WINSRDNS_WINSR_DATAA24/16+0+0
WinsRDNS_WINSR_DATAA24/16+0+0
NBSTATDNS_WINSR_DATAA24/16+0+0
NbstatDNS_WINSR_DATAA24/16+0+0
DHCIDDNS_DHCID_DATA8+0+0
NSEC3DNS_NSEC3_DATA10+0+0
Nsec3DNS_NSEC3_DATA10+0+0
NSEC3PARAMDNS_NSEC3PARAM_DATA10+0+0
Nsec3ParamDNS_NSEC3PARAM_DATA10+0+0
TLSADNS_TLSA_DATA10+0+0
TlsaDNS_TLSA_DATA10+0+0
SVCBDNS_SVCB_DATA32/16+0+0
SvcbDNS_SVCB_DATA32/16+0+0
UNKNOWNDNS_UNKNOWN_DATA8+0+0
UnknownDNS_UNKNOWN_DATA8+0+0
pDataPtrBYTE*8/4+0+0

各言語での定義

#include <windows.h>

// DNS_RECORDA  (x64 88 / x86 64 バイト)
typedef struct DNS_RECORDA {
    DNS_RECORDA* pNext;
    LPSTR pName;
    WORD wType;
    WORD wDataLength;
    _Flags_e__Union Flags;
    DWORD dwTtl;
    DWORD dwReserved;
    _Data_e__Union Data;
} DNS_RECORDA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DNS_RECORDA
{
    public IntPtr pNext;
    public IntPtr pName;
    public ushort wType;
    public ushort wDataLength;
    public _Flags_e__Union Flags;
    public uint dwTtl;
    public uint dwReserved;
    public _Data_e__Union Data;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DNS_RECORDA
    Public pNext As IntPtr
    Public pName As IntPtr
    Public wType As UShort
    Public wDataLength As UShort
    Public Flags As _Flags_e__Union
    Public dwTtl As UInteger
    Public dwReserved As UInteger
    Public Data As _Data_e__Union
End Structure
import ctypes
from ctypes import wintypes

class DNS_RECORDA(ctypes.Structure):
    _fields_ = [
        ("pNext", ctypes.c_void_p),
        ("pName", ctypes.c_void_p),
        ("wType", ctypes.c_ushort),
        ("wDataLength", ctypes.c_ushort),
        ("Flags", _Flags_e__Union),
        ("dwTtl", wintypes.DWORD),
        ("dwReserved", wintypes.DWORD),
        ("Data", _Data_e__Union),
    ]
#[repr(C)]
pub struct DNS_RECORDA {
    pub pNext: *mut core::ffi::c_void,
    pub pName: *mut core::ffi::c_void,
    pub wType: u16,
    pub wDataLength: u16,
    pub Flags: _Flags_e__Union,
    pub dwTtl: u32,
    pub dwReserved: u32,
    pub Data: _Data_e__Union,
}
import "golang.org/x/sys/windows"

type DNS_RECORDA struct {
	pNext uintptr
	pName uintptr
	wType uint16
	wDataLength uint16
	Flags _Flags_e__Union
	dwTtl uint32
	dwReserved uint32
	Data _Data_e__Union
}
type
  DNS_RECORDA = record
    pNext: Pointer;
    pName: Pointer;
    wType: Word;
    wDataLength: Word;
    Flags: _Flags_e__Union;
    dwTtl: DWORD;
    dwReserved: DWORD;
    Data: _Data_e__Union;
  end;
const DNS_RECORDA = extern struct {
    pNext: ?*anyopaque,
    pName: ?*anyopaque,
    wType: u16,
    wDataLength: u16,
    Flags: _Flags_e__Union,
    dwTtl: u32,
    dwReserved: u32,
    Data: _Data_e__Union,
};
type
  DNS_RECORDA {.bycopy.} = object
    pNext: pointer
    pName: pointer
    wType: uint16
    wDataLength: uint16
    Flags: _Flags_e__Union
    dwTtl: uint32
    dwReserved: uint32
    Data: _Data_e__Union
struct DNS_RECORDA
{
    void* pNext;
    void* pName;
    ushort wType;
    ushort wDataLength;
    _Flags_e__Union Flags;
    uint dwTtl;
    uint dwReserved;
    _Data_e__Union Data;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DNS_RECORDA サイズ: 64 バイト(x86)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; pNext : DNS_RECORDA* (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; pName : LPSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; wType : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; wDataLength : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; Flags : _Flags_e__Union (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; dwTtl : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwReserved : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; Data : _Data_e__Union (+24, 40byte)  varptr(st)+24 を基点に操作(40byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DNS_RECORDA サイズ: 88 バイト(x64)
dim st, 22    ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; pNext : DNS_RECORDA* (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; pName : LPSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; wType : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; wDataLength : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; Flags : _Flags_e__Union (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; dwTtl : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwReserved : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Data : _Data_e__Union (+32, 56byte)  varptr(st)+32 を基点に操作(56byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DNS_RECORDA
    #field intptr pNext
    #field intptr pName
    #field short wType
    #field short wDataLength
    #field byte Flags 4
    #field int dwTtl
    #field int dwReserved
    #field byte Data 56
#endstruct

stdim st, DNS_RECORDA        ; NSTRUCT 変数を確保
st->wType = 100
mes "wType=" + st->wType
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。