ホーム › System.UpdateAssessment › OSUpdateAssessment
OSUpdateAssessment
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| isEndOfSupport | BOOL | 4 | +0 | +0 | OSがサポート終了(EOL)状態か否かを示すBOOL。 |
| assessmentForCurrent | UpdateAssessment | 12 | +4 | +4 | 現在のOSビルドに対する更新評価結果。 |
| assessmentForUpToDate | UpdateAssessment | 12 | +16 | +16 | 最新OSビルドを基準とした更新評価結果。 |
| securityStatus | UpdateAssessmentStatus | 4 | +28 | +28 | セキュリティ更新の評価状態を示す値。 |
| assessmentTime | FILETIME | 8 | +32 | +32 | この評価を実施した時刻(FILETIME)。 |
| releaseInfoTime | FILETIME | 8 | +40 | +40 | 参照したリリース情報の時刻(FILETIME)。 |
| currentOSBuild | LPWSTR | 8/4 | +48 | +48 | 現在のOSビルド番号を表す文字列(Unicode)。 |
| currentOSReleaseTime | FILETIME | 8 | +56 | +52 | 現在のOSビルドのリリース時刻(FILETIME)。 |
| upToDateOSBuild | LPWSTR | 8/4 | +64 | +60 | 最新OSビルド番号を表す文字列(Unicode)。 |
| upToDateOSReleaseTime | FILETIME | 8 | +72 | +64 | 最新OSビルドのリリース時刻(FILETIME)。 |
各言語での定義
#include <windows.h>
// UpdateAssessment (x64 12 / x86 12 バイト)
typedef struct UpdateAssessment {
UpdateAssessmentStatus status;
UpdateImpactLevel impact;
DWORD daysOutOfDate;
} UpdateAssessment;
// FILETIME (x64 8 / x86 8 バイト)
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
// OSUpdateAssessment (x64 80 / x86 72 バイト)
typedef struct OSUpdateAssessment {
BOOL isEndOfSupport;
UpdateAssessment assessmentForCurrent;
UpdateAssessment assessmentForUpToDate;
UpdateAssessmentStatus securityStatus;
FILETIME assessmentTime;
FILETIME releaseInfoTime;
LPWSTR currentOSBuild;
FILETIME currentOSReleaseTime;
LPWSTR upToDateOSBuild;
FILETIME upToDateOSReleaseTime;
} OSUpdateAssessment;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UpdateAssessment
{
public int status;
public int impact;
public uint daysOutOfDate;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OSUpdateAssessment
{
[MarshalAs(UnmanagedType.Bool)] public bool isEndOfSupport;
public UpdateAssessment assessmentForCurrent;
public UpdateAssessment assessmentForUpToDate;
public int securityStatus;
public FILETIME assessmentTime;
public FILETIME releaseInfoTime;
public IntPtr currentOSBuild;
public FILETIME currentOSReleaseTime;
public IntPtr upToDateOSBuild;
public FILETIME upToDateOSReleaseTime;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure UpdateAssessment
Public status As Integer
Public impact As Integer
Public daysOutOfDate As UInteger
End Structure
<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 OSUpdateAssessment
<MarshalAs(UnmanagedType.Bool)> Public isEndOfSupport As Boolean
Public assessmentForCurrent As UpdateAssessment
Public assessmentForUpToDate As UpdateAssessment
Public securityStatus As Integer
Public assessmentTime As FILETIME
Public releaseInfoTime As FILETIME
Public currentOSBuild As IntPtr
Public currentOSReleaseTime As FILETIME
Public upToDateOSBuild As IntPtr
Public upToDateOSReleaseTime As FILETIME
End Structureimport ctypes
from ctypes import wintypes
class UpdateAssessment(ctypes.Structure):
_fields_ = [
("status", ctypes.c_int),
("impact", ctypes.c_int),
("daysOutOfDate", wintypes.DWORD),
]
class FILETIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class OSUpdateAssessment(ctypes.Structure):
_fields_ = [
("isEndOfSupport", wintypes.BOOL),
("assessmentForCurrent", UpdateAssessment),
("assessmentForUpToDate", UpdateAssessment),
("securityStatus", ctypes.c_int),
("assessmentTime", FILETIME),
("releaseInfoTime", FILETIME),
("currentOSBuild", ctypes.c_void_p),
("currentOSReleaseTime", FILETIME),
("upToDateOSBuild", ctypes.c_void_p),
("upToDateOSReleaseTime", FILETIME),
]#[repr(C)]
pub struct UpdateAssessment {
pub status: i32,
pub impact: i32,
pub daysOutOfDate: u32,
}
#[repr(C)]
pub struct FILETIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct OSUpdateAssessment {
pub isEndOfSupport: i32,
pub assessmentForCurrent: UpdateAssessment,
pub assessmentForUpToDate: UpdateAssessment,
pub securityStatus: i32,
pub assessmentTime: FILETIME,
pub releaseInfoTime: FILETIME,
pub currentOSBuild: *mut core::ffi::c_void,
pub currentOSReleaseTime: FILETIME,
pub upToDateOSBuild: *mut core::ffi::c_void,
pub upToDateOSReleaseTime: FILETIME,
}import "golang.org/x/sys/windows"
type UpdateAssessment struct {
status int32
impact int32
daysOutOfDate uint32
}
type FILETIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type OSUpdateAssessment struct {
isEndOfSupport int32
assessmentForCurrent UpdateAssessment
assessmentForUpToDate UpdateAssessment
securityStatus int32
assessmentTime FILETIME
releaseInfoTime FILETIME
currentOSBuild uintptr
currentOSReleaseTime FILETIME
upToDateOSBuild uintptr
upToDateOSReleaseTime FILETIME
}type
UpdateAssessment = record
status: Integer;
impact: Integer;
daysOutOfDate: DWORD;
end;
FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
OSUpdateAssessment = record
isEndOfSupport: BOOL;
assessmentForCurrent: UpdateAssessment;
assessmentForUpToDate: UpdateAssessment;
securityStatus: Integer;
assessmentTime: FILETIME;
releaseInfoTime: FILETIME;
currentOSBuild: Pointer;
currentOSReleaseTime: FILETIME;
upToDateOSBuild: Pointer;
upToDateOSReleaseTime: FILETIME;
end;const UpdateAssessment = extern struct {
status: i32,
impact: i32,
daysOutOfDate: u32,
};
const FILETIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const OSUpdateAssessment = extern struct {
isEndOfSupport: i32,
assessmentForCurrent: UpdateAssessment,
assessmentForUpToDate: UpdateAssessment,
securityStatus: i32,
assessmentTime: FILETIME,
releaseInfoTime: FILETIME,
currentOSBuild: ?*anyopaque,
currentOSReleaseTime: FILETIME,
upToDateOSBuild: ?*anyopaque,
upToDateOSReleaseTime: FILETIME,
};type
UpdateAssessment {.bycopy.} = object
status: int32
impact: int32
daysOutOfDate: uint32
FILETIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
OSUpdateAssessment {.bycopy.} = object
isEndOfSupport: int32
assessmentForCurrent: UpdateAssessment
assessmentForUpToDate: UpdateAssessment
securityStatus: int32
assessmentTime: FILETIME
releaseInfoTime: FILETIME
currentOSBuild: pointer
currentOSReleaseTime: FILETIME
upToDateOSBuild: pointer
upToDateOSReleaseTime: FILETIMEstruct UpdateAssessment
{
int status;
int impact;
uint daysOutOfDate;
}
struct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct OSUpdateAssessment
{
int isEndOfSupport;
UpdateAssessment assessmentForCurrent;
UpdateAssessment assessmentForUpToDate;
int securityStatus;
FILETIME assessmentTime;
FILETIME releaseInfoTime;
void* currentOSBuild;
FILETIME currentOSReleaseTime;
void* upToDateOSBuild;
FILETIME upToDateOSReleaseTime;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; OSUpdateAssessment サイズ: 72 バイト(x86)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; isEndOfSupport : BOOL (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; assessmentForCurrent : UpdateAssessment (+4, 12byte) varptr(st)+4 を基点に操作(12byte:入れ子/配列)
; assessmentForUpToDate : UpdateAssessment (+16, 12byte) varptr(st)+16 を基点に操作(12byte:入れ子/配列)
; securityStatus : UpdateAssessmentStatus (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; assessmentTime : FILETIME (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; releaseInfoTime : FILETIME (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; currentOSBuild : LPWSTR (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; currentOSReleaseTime : FILETIME (+52, 8byte) varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; upToDateOSBuild : LPWSTR (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; upToDateOSReleaseTime : FILETIME (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OSUpdateAssessment サイズ: 80 バイト(x64)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; isEndOfSupport : BOOL (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; assessmentForCurrent : UpdateAssessment (+4, 12byte) varptr(st)+4 を基点に操作(12byte:入れ子/配列)
; assessmentForUpToDate : UpdateAssessment (+16, 12byte) varptr(st)+16 を基点に操作(12byte:入れ子/配列)
; securityStatus : UpdateAssessmentStatus (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; assessmentTime : FILETIME (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; releaseInfoTime : FILETIME (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; currentOSBuild : LPWSTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; currentOSReleaseTime : FILETIME (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; upToDateOSBuild : LPWSTR (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; upToDateOSReleaseTime : FILETIME (+72, 8byte) varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global UpdateAssessment
#field int status
#field int impact
#field int daysOutOfDate
#endstruct
#defstruct global FILETIME
#field int dwLowDateTime
#field int dwHighDateTime
#endstruct
#defstruct global OSUpdateAssessment
#field bool isEndOfSupport
#field UpdateAssessment assessmentForCurrent
#field UpdateAssessment assessmentForUpToDate
#field int securityStatus
#field FILETIME assessmentTime
#field FILETIME releaseInfoTime
#field intptr currentOSBuild
#field FILETIME currentOSReleaseTime
#field intptr upToDateOSBuild
#field FILETIME upToDateOSReleaseTime
#endstruct
stdim st, OSUpdateAssessment ; NSTRUCT 変数を確保
st->isEndOfSupport = 100
mes "isEndOfSupport=" + st->isEndOfSupport