ホーム › System.RemoteDesktop › WTS_VALIDATION_INFORMATIONA
WTS_VALIDATION_INFORMATIONA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ProductInfo | PRODUCT_INFOA | 260 | +0 | +0 | 製品情報(会社名・製品ID)を含む構造体(ANSI)。 |
| License | BYTE | 16384 | +260 | +260 | ライセンスデータの本体。バイト配列。 |
| LicenseLength | DWORD | 4 | +16644 | +16644 | ライセンスデータの長さ。バイト数で表す。 |
| HardwareID | BYTE | 20 | +16648 | +16648 | ハードウェア識別子データ。バイト配列。 |
| HardwareIDLength | DWORD | 4 | +16668 | +16668 | ハードウェア識別子データの長さ。バイト数で表す。 |
各言語での定義
#include <windows.h>
// PRODUCT_INFOA (x64 260 / x86 260 バイト)
typedef struct PRODUCT_INFOA {
CHAR CompanyName[256];
CHAR ProductID[4];
} PRODUCT_INFOA;
// WTS_VALIDATION_INFORMATIONA (x64 16672 / x86 16672 バイト)
typedef struct WTS_VALIDATION_INFORMATIONA {
PRODUCT_INFOA ProductInfo;
BYTE License[16384];
DWORD LicenseLength;
BYTE HardwareID[20];
DWORD HardwareIDLength;
} WTS_VALIDATION_INFORMATIONA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PRODUCT_INFOA
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public sbyte[] CompanyName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public sbyte[] ProductID;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTS_VALIDATION_INFORMATIONA
{
public PRODUCT_INFOA ProductInfo;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16384)] public byte[] License;
public uint LicenseLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public byte[] HardwareID;
public uint HardwareIDLength;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PRODUCT_INFOA
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public CompanyName() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public ProductID() As SByte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WTS_VALIDATION_INFORMATIONA
Public ProductInfo As PRODUCT_INFOA
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16384)> Public License() As Byte
Public LicenseLength As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=20)> Public HardwareID() As Byte
Public HardwareIDLength As UInteger
End Structureimport ctypes
from ctypes import wintypes
class PRODUCT_INFOA(ctypes.Structure):
_fields_ = [
("CompanyName", ctypes.c_byte * 256),
("ProductID", ctypes.c_byte * 4),
]
class WTS_VALIDATION_INFORMATIONA(ctypes.Structure):
_fields_ = [
("ProductInfo", PRODUCT_INFOA),
("License", ctypes.c_ubyte * 16384),
("LicenseLength", wintypes.DWORD),
("HardwareID", ctypes.c_ubyte * 20),
("HardwareIDLength", wintypes.DWORD),
]#[repr(C)]
pub struct PRODUCT_INFOA {
pub CompanyName: [i8; 256],
pub ProductID: [i8; 4],
}
#[repr(C)]
pub struct WTS_VALIDATION_INFORMATIONA {
pub ProductInfo: PRODUCT_INFOA,
pub License: [u8; 16384],
pub LicenseLength: u32,
pub HardwareID: [u8; 20],
pub HardwareIDLength: u32,
}import "golang.org/x/sys/windows"
type PRODUCT_INFOA struct {
CompanyName [256]int8
ProductID [4]int8
}
type WTS_VALIDATION_INFORMATIONA struct {
ProductInfo PRODUCT_INFOA
License [16384]byte
LicenseLength uint32
HardwareID [20]byte
HardwareIDLength uint32
}type
PRODUCT_INFOA = record
CompanyName: array[0..255] of Shortint;
ProductID: array[0..3] of Shortint;
end;
WTS_VALIDATION_INFORMATIONA = record
ProductInfo: PRODUCT_INFOA;
License: array[0..16383] of Byte;
LicenseLength: DWORD;
HardwareID: array[0..19] of Byte;
HardwareIDLength: DWORD;
end;const PRODUCT_INFOA = extern struct {
CompanyName: [256]i8,
ProductID: [4]i8,
};
const WTS_VALIDATION_INFORMATIONA = extern struct {
ProductInfo: PRODUCT_INFOA,
License: [16384]u8,
LicenseLength: u32,
HardwareID: [20]u8,
HardwareIDLength: u32,
};type
PRODUCT_INFOA {.bycopy.} = object
CompanyName: array[256, int8]
ProductID: array[4, int8]
WTS_VALIDATION_INFORMATIONA {.bycopy.} = object
ProductInfo: PRODUCT_INFOA
License: array[16384, uint8]
LicenseLength: uint32
HardwareID: array[20, uint8]
HardwareIDLength: uint32struct PRODUCT_INFOA
{
byte[256] CompanyName;
byte[4] ProductID;
}
struct WTS_VALIDATION_INFORMATIONA
{
PRODUCT_INFOA ProductInfo;
ubyte[16384] License;
uint LicenseLength;
ubyte[20] HardwareID;
uint HardwareIDLength;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WTS_VALIDATION_INFORMATIONA サイズ: 16672 バイト(x64)
dim st, 4168 ; 4byte整数×4168(構造体サイズ 16672 / 4 切り上げ)
; ProductInfo : PRODUCT_INFOA (+0, 260byte) varptr(st)+0 を基点に操作(260byte:入れ子/配列)
; License : BYTE (+260, 16384byte) varptr(st)+260 を基点に操作(16384byte:入れ子/配列)
; LicenseLength : DWORD (+16644, 4byte) st.4161 = 値 / 値 = st.4161 (lpoke/lpeek も可)
; HardwareID : BYTE (+16648, 20byte) varptr(st)+16648 を基点に操作(20byte:入れ子/配列)
; HardwareIDLength : DWORD (+16668, 4byte) st.4167 = 値 / 値 = st.4167 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global PRODUCT_INFOA
#field byte CompanyName 256
#field byte ProductID 4
#endstruct
#defstruct global WTS_VALIDATION_INFORMATIONA
#field PRODUCT_INFOA ProductInfo
#field byte License 16384
#field int LicenseLength
#field byte HardwareID 20
#field int HardwareIDLength
#endstruct
stdim st, WTS_VALIDATION_INFORMATIONA ; NSTRUCT 変数を確保
st->LicenseLength = 100
mes "LicenseLength=" + st->LicenseLength