Win32 API 日本語リファレンス
ホームSystem.UpdateAssessment › OSUpdateAssessment

OSUpdateAssessment

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

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

フィールド

フィールドサイズx64x86説明
isEndOfSupportBOOL4+0+0OSがサポート終了(EOL)状態か否かを示すBOOL。
assessmentForCurrentUpdateAssessment12+4+4現在のOSビルドに対する更新評価結果。
assessmentForUpToDateUpdateAssessment12+16+16最新OSビルドを基準とした更新評価結果。
securityStatusUpdateAssessmentStatus4+28+28セキュリティ更新の評価状態を示す値。
assessmentTimeFILETIME8+32+32この評価を実施した時刻(FILETIME)。
releaseInfoTimeFILETIME8+40+40参照したリリース情報の時刻(FILETIME)。
currentOSBuildLPWSTR8/4+48+48現在のOSビルド番号を表す文字列(Unicode)。
currentOSReleaseTimeFILETIME8+56+52現在のOSビルドのリリース時刻(FILETIME)。
upToDateOSBuildLPWSTR8/4+64+60最新OSビルド番号を表す文字列(Unicode)。
upToDateOSReleaseTimeFILETIME8+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 Structure
import 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: FILETIME
struct 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