ホーム › System.SystemInformation › OSVERSIONINFOEXW
OSVERSIONINFOEXW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwOSVersionInfoSize | DWORD | 4 | +0 | +0 | この構造体のバイト数。呼び出し前に sizeof で設定する。 |
| dwMajorVersion | DWORD | 4 | +4 | +4 | OS のメジャーバージョン番号。 |
| dwMinorVersion | DWORD | 4 | +8 | +8 | OS のマイナーバージョン番号。 |
| dwBuildNumber | DWORD | 4 | +12 | +12 | OS のビルド番号。 |
| dwPlatformId | DWORD | 4 | +16 | +16 | OS プラットフォーム識別子。Win32 NT は VER_PLATFORM_WIN32_NT。 |
| szCSDVersion | WCHAR | 256 | +20 | +20 | 適用済みサービスパック等を示す文字列(ワイド)。 |
| wServicePackMajor | WORD | 2 | +276 | +276 | インストール済みサービスパックのメジャー番号。 |
| wServicePackMinor | WORD | 2 | +278 | +278 | インストール済みサービスパックのマイナー番号。 |
| wSuiteMask | WORD | 2 | +280 | +280 | 利用可能な製品スイートを示すフラグのビット集合。 |
| wProductType | BYTE | 1 | +282 | +282 | 製品の種類。ワークステーション/サーバー/ドメインコントローラーを区別する。 |
| wReserved | BYTE | 1 | +283 | +283 | 予約済みフィールド。0 を設定する。 |
各言語での定義
#include <windows.h>
// OSVERSIONINFOEXW (x64 284 / x86 284 バイト)
typedef struct OSVERSIONINFOEXW {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
WCHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
} OSVERSIONINFOEXW;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OSVERSIONINFOEXW
{
public uint dwOSVersionInfoSize;
public uint dwMajorVersion;
public uint dwMinorVersion;
public uint dwBuildNumber;
public uint dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szCSDVersion;
public ushort wServicePackMajor;
public ushort wServicePackMinor;
public ushort wSuiteMask;
public byte wProductType;
public byte wReserved;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OSVERSIONINFOEXW
Public dwOSVersionInfoSize As UInteger
Public dwMajorVersion As UInteger
Public dwMinorVersion As UInteger
Public dwBuildNumber As UInteger
Public dwPlatformId As UInteger
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> Public szCSDVersion As String
Public wServicePackMajor As UShort
Public wServicePackMinor As UShort
Public wSuiteMask As UShort
Public wProductType As Byte
Public wReserved As Byte
End Structureimport ctypes
from ctypes import wintypes
class OSVERSIONINFOEXW(ctypes.Structure):
_fields_ = [
("dwOSVersionInfoSize", wintypes.DWORD),
("dwMajorVersion", wintypes.DWORD),
("dwMinorVersion", wintypes.DWORD),
("dwBuildNumber", wintypes.DWORD),
("dwPlatformId", wintypes.DWORD),
("szCSDVersion", ctypes.c_wchar * 128),
("wServicePackMajor", ctypes.c_ushort),
("wServicePackMinor", ctypes.c_ushort),
("wSuiteMask", ctypes.c_ushort),
("wProductType", ctypes.c_ubyte),
("wReserved", ctypes.c_ubyte),
]#[repr(C)]
pub struct OSVERSIONINFOEXW {
pub dwOSVersionInfoSize: u32,
pub dwMajorVersion: u32,
pub dwMinorVersion: u32,
pub dwBuildNumber: u32,
pub dwPlatformId: u32,
pub szCSDVersion: [u16; 128],
pub wServicePackMajor: u16,
pub wServicePackMinor: u16,
pub wSuiteMask: u16,
pub wProductType: u8,
pub wReserved: u8,
}import "golang.org/x/sys/windows"
type OSVERSIONINFOEXW struct {
dwOSVersionInfoSize uint32
dwMajorVersion uint32
dwMinorVersion uint32
dwBuildNumber uint32
dwPlatformId uint32
szCSDVersion [128]uint16
wServicePackMajor uint16
wServicePackMinor uint16
wSuiteMask uint16
wProductType byte
wReserved byte
}type
OSVERSIONINFOEXW = record
dwOSVersionInfoSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwBuildNumber: DWORD;
dwPlatformId: DWORD;
szCSDVersion: array[0..127] of WideChar;
wServicePackMajor: Word;
wServicePackMinor: Word;
wSuiteMask: Word;
wProductType: Byte;
wReserved: Byte;
end;const OSVERSIONINFOEXW = extern struct {
dwOSVersionInfoSize: u32,
dwMajorVersion: u32,
dwMinorVersion: u32,
dwBuildNumber: u32,
dwPlatformId: u32,
szCSDVersion: [128]u16,
wServicePackMajor: u16,
wServicePackMinor: u16,
wSuiteMask: u16,
wProductType: u8,
wReserved: u8,
};type
OSVERSIONINFOEXW {.bycopy.} = object
dwOSVersionInfoSize: uint32
dwMajorVersion: uint32
dwMinorVersion: uint32
dwBuildNumber: uint32
dwPlatformId: uint32
szCSDVersion: array[128, uint16]
wServicePackMajor: uint16
wServicePackMinor: uint16
wSuiteMask: uint16
wProductType: uint8
wReserved: uint8struct OSVERSIONINFOEXW
{
uint dwOSVersionInfoSize;
uint dwMajorVersion;
uint dwMinorVersion;
uint dwBuildNumber;
uint dwPlatformId;
wchar[128] szCSDVersion;
ushort wServicePackMajor;
ushort wServicePackMinor;
ushort wSuiteMask;
ubyte wProductType;
ubyte wReserved;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OSVERSIONINFOEXW サイズ: 284 バイト(x64)
dim st, 71 ; 4byte整数×71(構造体サイズ 284 / 4 切り上げ)
; dwOSVersionInfoSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwMajorVersion : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwMinorVersion : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwBuildNumber : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwPlatformId : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; szCSDVersion : WCHAR (+20, 256byte) varptr(st)+20 を基点に操作(256byte:入れ子/配列)
; wServicePackMajor : WORD (+276, 2byte) wpoke st,276,値 / 値 = wpeek(st,276)
; wServicePackMinor : WORD (+278, 2byte) wpoke st,278,値 / 値 = wpeek(st,278)
; wSuiteMask : WORD (+280, 2byte) wpoke st,280,値 / 値 = wpeek(st,280)
; wProductType : BYTE (+282, 1byte) poke st,282,値 / 値 = peek(st,282)
; wReserved : BYTE (+283, 1byte) poke st,283,値 / 値 = peek(st,283)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global OSVERSIONINFOEXW
#field int dwOSVersionInfoSize
#field int dwMajorVersion
#field int dwMinorVersion
#field int dwBuildNumber
#field int dwPlatformId
#field wchar szCSDVersion 128
#field short wServicePackMajor
#field short wServicePackMinor
#field short wSuiteMask
#field byte wProductType
#field byte wReserved
#endstruct
stdim st, OSVERSIONINFOEXW ; NSTRUCT 変数を確保
st->dwOSVersionInfoSize = 100
mes "dwOSVersionInfoSize=" + st->dwOSVersionInfoSize