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

WCM_BILLING_CYCLE_INFO

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

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

フィールド

フィールドサイズx64x86説明
StartDateFILETIME8+0+0課金サイクルの開始日時。FILETIME形式。
DurationWCM_TIME_INTERVAL14+8+8課金サイクルの期間を表す時間間隔。
ResetBOOL4+24+24サイクル終了時に使用量をリセットするかを示すBOOL。

各言語での定義

#include <windows.h>

// FILETIME  (x64 8 / x86 8 バイト)
typedef struct FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

// WCM_TIME_INTERVAL  (x64 14 / x86 14 バイト)
typedef struct WCM_TIME_INTERVAL {
    WORD wYear;
    WORD wMonth;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} WCM_TIME_INTERVAL;

// WCM_BILLING_CYCLE_INFO  (x64 28 / x86 28 バイト)
typedef struct WCM_BILLING_CYCLE_INFO {
    FILETIME StartDate;
    WCM_TIME_INTERVAL Duration;
    BOOL Reset;
} WCM_BILLING_CYCLE_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
    public uint dwLowDateTime;
    public uint dwHighDateTime;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WCM_TIME_INTERVAL
{
    public ushort wYear;
    public ushort wMonth;
    public ushort wDay;
    public ushort wHour;
    public ushort wMinute;
    public ushort wSecond;
    public ushort wMilliseconds;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WCM_BILLING_CYCLE_INFO
{
    public FILETIME StartDate;
    public WCM_TIME_INTERVAL Duration;
    [MarshalAs(UnmanagedType.Bool)] public bool Reset;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
    Public dwLowDateTime As UInteger
    Public dwHighDateTime As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WCM_TIME_INTERVAL
    Public wYear As UShort
    Public wMonth As UShort
    Public wDay As UShort
    Public wHour As UShort
    Public wMinute As UShort
    Public wSecond As UShort
    Public wMilliseconds As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WCM_BILLING_CYCLE_INFO
    Public StartDate As FILETIME
    Public Duration As WCM_TIME_INTERVAL
    <MarshalAs(UnmanagedType.Bool)> Public Reset As Boolean
End Structure
import ctypes
from ctypes import wintypes

class FILETIME(ctypes.Structure):
    _fields_ = [
        ("dwLowDateTime", wintypes.DWORD),
        ("dwHighDateTime", wintypes.DWORD),
    ]

class WCM_TIME_INTERVAL(ctypes.Structure):
    _fields_ = [
        ("wYear", ctypes.c_ushort),
        ("wMonth", ctypes.c_ushort),
        ("wDay", ctypes.c_ushort),
        ("wHour", ctypes.c_ushort),
        ("wMinute", ctypes.c_ushort),
        ("wSecond", ctypes.c_ushort),
        ("wMilliseconds", ctypes.c_ushort),
    ]

class WCM_BILLING_CYCLE_INFO(ctypes.Structure):
    _fields_ = [
        ("StartDate", FILETIME),
        ("Duration", WCM_TIME_INTERVAL),
        ("Reset", wintypes.BOOL),
    ]
#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct WCM_TIME_INTERVAL {
    pub wYear: u16,
    pub wMonth: u16,
    pub wDay: u16,
    pub wHour: u16,
    pub wMinute: u16,
    pub wSecond: u16,
    pub wMilliseconds: u16,
}

#[repr(C)]
pub struct WCM_BILLING_CYCLE_INFO {
    pub StartDate: FILETIME,
    pub Duration: WCM_TIME_INTERVAL,
    pub Reset: i32,
}
import "golang.org/x/sys/windows"

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type WCM_TIME_INTERVAL struct {
	wYear uint16
	wMonth uint16
	wDay uint16
	wHour uint16
	wMinute uint16
	wSecond uint16
	wMilliseconds uint16
}

type WCM_BILLING_CYCLE_INFO struct {
	StartDate FILETIME
	Duration WCM_TIME_INTERVAL
	Reset int32
}
type
  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  WCM_TIME_INTERVAL = record
    wYear: Word;
    wMonth: Word;
    wDay: Word;
    wHour: Word;
    wMinute: Word;
    wSecond: Word;
    wMilliseconds: Word;
  end;

  WCM_BILLING_CYCLE_INFO = record
    StartDate: FILETIME;
    Duration: WCM_TIME_INTERVAL;
    Reset: BOOL;
  end;
const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const WCM_TIME_INTERVAL = extern struct {
    wYear: u16,
    wMonth: u16,
    wDay: u16,
    wHour: u16,
    wMinute: u16,
    wSecond: u16,
    wMilliseconds: u16,
};

const WCM_BILLING_CYCLE_INFO = extern struct {
    StartDate: FILETIME,
    Duration: WCM_TIME_INTERVAL,
    Reset: i32,
};
type
  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  WCM_TIME_INTERVAL {.bycopy.} = object
    wYear: uint16
    wMonth: uint16
    wDay: uint16
    wHour: uint16
    wMinute: uint16
    wSecond: uint16
    wMilliseconds: uint16

  WCM_BILLING_CYCLE_INFO {.bycopy.} = object
    StartDate: FILETIME
    Duration: WCM_TIME_INTERVAL
    Reset: int32
struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct WCM_TIME_INTERVAL
{
    ushort wYear;
    ushort wMonth;
    ushort wDay;
    ushort wHour;
    ushort wMinute;
    ushort wSecond;
    ushort wMilliseconds;
}

struct WCM_BILLING_CYCLE_INFO
{
    FILETIME StartDate;
    WCM_TIME_INTERVAL Duration;
    int Reset;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WCM_BILLING_CYCLE_INFO サイズ: 28 バイト(x64)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; StartDate : FILETIME (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Duration : WCM_TIME_INTERVAL (+8, 14byte)  varptr(st)+8 を基点に操作(14byte:入れ子/配列)
; Reset : BOOL (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
    #field int dwLowDateTime
    #field int dwHighDateTime
#endstruct

#defstruct global WCM_TIME_INTERVAL
    #field short wYear
    #field short wMonth
    #field short wDay
    #field short wHour
    #field short wMinute
    #field short wSecond
    #field short wMilliseconds
#endstruct

#defstruct global WCM_BILLING_CYCLE_INFO
    #field FILETIME StartDate
    #field WCM_TIME_INTERVAL Duration
    #field bool Reset
#endstruct

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