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

DNS_SOA_DATAW

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

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

フィールド

フィールドサイズx64x86説明
pNamePrimaryServerLPWSTR8/4+0+0ゾーンのプライマリネームサーバー名を示すワイド文字列。NULL可。
pNameAdministratorLPWSTR8/4+8+4ゾーン管理者のメールアドレス名を示すワイド文字列。NULL可。
dwSerialNoDWORD4+16+8ゾーンのシリアル番号を示す。更新検出に用いる。
dwRefreshDWORD4+20+12セカンダリがゾーン更新を確認する間隔を秒単位で示す。
dwRetryDWORD4+24+16リフレッシュ失敗時の再試行間隔を秒単位で示す。
dwExpireDWORD4+28+20更新できない場合にゾーンを無効とする期限を秒単位で示す。
dwDefaultTtlDWORD4+32+24ネガティブキャッシュ/既定TTLを秒単位で示す。

各言語での定義

#include <windows.h>

// DNS_SOA_DATAW  (x64 40 / x86 28 バイト)
typedef struct DNS_SOA_DATAW {
    LPWSTR pNamePrimaryServer;
    LPWSTR pNameAdministrator;
    DWORD dwSerialNo;
    DWORD dwRefresh;
    DWORD dwRetry;
    DWORD dwExpire;
    DWORD dwDefaultTtl;
} DNS_SOA_DATAW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DNS_SOA_DATAW
{
    public IntPtr pNamePrimaryServer;
    public IntPtr pNameAdministrator;
    public uint dwSerialNo;
    public uint dwRefresh;
    public uint dwRetry;
    public uint dwExpire;
    public uint dwDefaultTtl;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DNS_SOA_DATAW
    Public pNamePrimaryServer As IntPtr
    Public pNameAdministrator As IntPtr
    Public dwSerialNo As UInteger
    Public dwRefresh As UInteger
    Public dwRetry As UInteger
    Public dwExpire As UInteger
    Public dwDefaultTtl As UInteger
End Structure
import ctypes
from ctypes import wintypes

class DNS_SOA_DATAW(ctypes.Structure):
    _fields_ = [
        ("pNamePrimaryServer", ctypes.c_void_p),
        ("pNameAdministrator", ctypes.c_void_p),
        ("dwSerialNo", wintypes.DWORD),
        ("dwRefresh", wintypes.DWORD),
        ("dwRetry", wintypes.DWORD),
        ("dwExpire", wintypes.DWORD),
        ("dwDefaultTtl", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DNS_SOA_DATAW {
    pub pNamePrimaryServer: *mut core::ffi::c_void,
    pub pNameAdministrator: *mut core::ffi::c_void,
    pub dwSerialNo: u32,
    pub dwRefresh: u32,
    pub dwRetry: u32,
    pub dwExpire: u32,
    pub dwDefaultTtl: u32,
}
import "golang.org/x/sys/windows"

type DNS_SOA_DATAW struct {
	pNamePrimaryServer uintptr
	pNameAdministrator uintptr
	dwSerialNo uint32
	dwRefresh uint32
	dwRetry uint32
	dwExpire uint32
	dwDefaultTtl uint32
}
type
  DNS_SOA_DATAW = record
    pNamePrimaryServer: Pointer;
    pNameAdministrator: Pointer;
    dwSerialNo: DWORD;
    dwRefresh: DWORD;
    dwRetry: DWORD;
    dwExpire: DWORD;
    dwDefaultTtl: DWORD;
  end;
const DNS_SOA_DATAW = extern struct {
    pNamePrimaryServer: ?*anyopaque,
    pNameAdministrator: ?*anyopaque,
    dwSerialNo: u32,
    dwRefresh: u32,
    dwRetry: u32,
    dwExpire: u32,
    dwDefaultTtl: u32,
};
type
  DNS_SOA_DATAW {.bycopy.} = object
    pNamePrimaryServer: pointer
    pNameAdministrator: pointer
    dwSerialNo: uint32
    dwRefresh: uint32
    dwRetry: uint32
    dwExpire: uint32
    dwDefaultTtl: uint32
struct DNS_SOA_DATAW
{
    void* pNamePrimaryServer;
    void* pNameAdministrator;
    uint dwSerialNo;
    uint dwRefresh;
    uint dwRetry;
    uint dwExpire;
    uint dwDefaultTtl;
}

HSP用 定義

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

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

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