Win32 API 日本語リファレンス
ホームStorage.Vss › VSS_OBJECT_PROP

VSS_OBJECT_PROP

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

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

フィールド

フィールドサイズx64x86説明
TypeVSS_OBJECT_TYPE4+0+0オブジェクトの種類を示すVSS_OBJECT_TYPE列挙値。
ObjVSS_OBJECT_UNION128/96+8+8オブジェクト種類に応じたプロパティを格納するVSS_OBJECT_UNION共用体。

各言語での定義

#include <windows.h>

// VSS_SNAPSHOT_PROP  (x64 128 / x86 96 バイト)
typedef struct VSS_SNAPSHOT_PROP {
    GUID m_SnapshotId;
    GUID m_SnapshotSetId;
    INT m_lSnapshotsCount;
    WORD* m_pwszSnapshotDeviceObject;
    WORD* m_pwszOriginalVolumeName;
    WORD* m_pwszOriginatingMachine;
    WORD* m_pwszServiceMachine;
    WORD* m_pwszExposedName;
    WORD* m_pwszExposedPath;
    GUID m_ProviderId;
    INT m_lSnapshotAttributes;
    LONGLONG m_tsCreationTimestamp;
    VSS_SNAPSHOT_STATE m_eStatus;
} VSS_SNAPSHOT_PROP;

// VSS_PROVIDER_PROP  (x64 72 / x86 60 バイト)
typedef struct VSS_PROVIDER_PROP {
    GUID m_ProviderId;
    WORD* m_pwszProviderName;
    VSS_PROVIDER_TYPE m_eProviderType;
    WORD* m_pwszProviderVersion;
    GUID m_ProviderVersionId;
    GUID m_ClassId;
} VSS_PROVIDER_PROP;

// VSS_OBJECT_UNION  (x64 128 / x86 96 バイト)
typedef struct VSS_OBJECT_UNION {
    VSS_SNAPSHOT_PROP Snap;
    VSS_PROVIDER_PROP Prov;
} VSS_OBJECT_UNION;

// VSS_OBJECT_PROP  (x64 136 / x86 104 バイト)
typedef struct VSS_OBJECT_PROP {
    VSS_OBJECT_TYPE Type;
    VSS_OBJECT_UNION Obj;
} VSS_OBJECT_PROP;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VSS_SNAPSHOT_PROP
{
    public Guid m_SnapshotId;
    public Guid m_SnapshotSetId;
    public int m_lSnapshotsCount;
    public IntPtr m_pwszSnapshotDeviceObject;
    public IntPtr m_pwszOriginalVolumeName;
    public IntPtr m_pwszOriginatingMachine;
    public IntPtr m_pwszServiceMachine;
    public IntPtr m_pwszExposedName;
    public IntPtr m_pwszExposedPath;
    public Guid m_ProviderId;
    public int m_lSnapshotAttributes;
    public long m_tsCreationTimestamp;
    public int m_eStatus;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VSS_PROVIDER_PROP
{
    public Guid m_ProviderId;
    public IntPtr m_pwszProviderName;
    public int m_eProviderType;
    public IntPtr m_pwszProviderVersion;
    public Guid m_ProviderVersionId;
    public Guid m_ClassId;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VSS_OBJECT_UNION
{
    public VSS_SNAPSHOT_PROP Snap;
    public VSS_PROVIDER_PROP Prov;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VSS_OBJECT_PROP
{
    public int Type;
    public VSS_OBJECT_UNION Obj;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VSS_SNAPSHOT_PROP
    Public m_SnapshotId As Guid
    Public m_SnapshotSetId As Guid
    Public m_lSnapshotsCount As Integer
    Public m_pwszSnapshotDeviceObject As IntPtr
    Public m_pwszOriginalVolumeName As IntPtr
    Public m_pwszOriginatingMachine As IntPtr
    Public m_pwszServiceMachine As IntPtr
    Public m_pwszExposedName As IntPtr
    Public m_pwszExposedPath As IntPtr
    Public m_ProviderId As Guid
    Public m_lSnapshotAttributes As Integer
    Public m_tsCreationTimestamp As Long
    Public m_eStatus As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VSS_PROVIDER_PROP
    Public m_ProviderId As Guid
    Public m_pwszProviderName As IntPtr
    Public m_eProviderType As Integer
    Public m_pwszProviderVersion As IntPtr
    Public m_ProviderVersionId As Guid
    Public m_ClassId As Guid
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VSS_OBJECT_UNION
    Public Snap As VSS_SNAPSHOT_PROP
    Public Prov As VSS_PROVIDER_PROP
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VSS_OBJECT_PROP
    Public Type As Integer
    Public Obj As VSS_OBJECT_UNION
End Structure
import ctypes
from ctypes import wintypes

class VSS_SNAPSHOT_PROP(ctypes.Structure):
    _fields_ = [
        ("m_SnapshotId", GUID),
        ("m_SnapshotSetId", GUID),
        ("m_lSnapshotsCount", ctypes.c_int),
        ("m_pwszSnapshotDeviceObject", ctypes.c_void_p),
        ("m_pwszOriginalVolumeName", ctypes.c_void_p),
        ("m_pwszOriginatingMachine", ctypes.c_void_p),
        ("m_pwszServiceMachine", ctypes.c_void_p),
        ("m_pwszExposedName", ctypes.c_void_p),
        ("m_pwszExposedPath", ctypes.c_void_p),
        ("m_ProviderId", GUID),
        ("m_lSnapshotAttributes", ctypes.c_int),
        ("m_tsCreationTimestamp", ctypes.c_longlong),
        ("m_eStatus", ctypes.c_int),
    ]

class VSS_PROVIDER_PROP(ctypes.Structure):
    _fields_ = [
        ("m_ProviderId", GUID),
        ("m_pwszProviderName", ctypes.c_void_p),
        ("m_eProviderType", ctypes.c_int),
        ("m_pwszProviderVersion", ctypes.c_void_p),
        ("m_ProviderVersionId", GUID),
        ("m_ClassId", GUID),
    ]

class VSS_OBJECT_UNION(ctypes.Structure):
    _fields_ = [
        ("Snap", VSS_SNAPSHOT_PROP),
        ("Prov", VSS_PROVIDER_PROP),
    ]

class VSS_OBJECT_PROP(ctypes.Structure):
    _fields_ = [
        ("Type", ctypes.c_int),
        ("Obj", VSS_OBJECT_UNION),
    ]
#[repr(C)]
pub struct VSS_SNAPSHOT_PROP {
    pub m_SnapshotId: GUID,
    pub m_SnapshotSetId: GUID,
    pub m_lSnapshotsCount: i32,
    pub m_pwszSnapshotDeviceObject: *mut core::ffi::c_void,
    pub m_pwszOriginalVolumeName: *mut core::ffi::c_void,
    pub m_pwszOriginatingMachine: *mut core::ffi::c_void,
    pub m_pwszServiceMachine: *mut core::ffi::c_void,
    pub m_pwszExposedName: *mut core::ffi::c_void,
    pub m_pwszExposedPath: *mut core::ffi::c_void,
    pub m_ProviderId: GUID,
    pub m_lSnapshotAttributes: i32,
    pub m_tsCreationTimestamp: i64,
    pub m_eStatus: i32,
}

#[repr(C)]
pub struct VSS_PROVIDER_PROP {
    pub m_ProviderId: GUID,
    pub m_pwszProviderName: *mut core::ffi::c_void,
    pub m_eProviderType: i32,
    pub m_pwszProviderVersion: *mut core::ffi::c_void,
    pub m_ProviderVersionId: GUID,
    pub m_ClassId: GUID,
}

#[repr(C)]
pub struct VSS_OBJECT_UNION {
    pub Snap: VSS_SNAPSHOT_PROP,
    pub Prov: VSS_PROVIDER_PROP,
}

#[repr(C)]
pub struct VSS_OBJECT_PROP {
    pub Type: i32,
    pub Obj: VSS_OBJECT_UNION,
}
import "golang.org/x/sys/windows"

type VSS_SNAPSHOT_PROP struct {
	m_SnapshotId windows.GUID
	m_SnapshotSetId windows.GUID
	m_lSnapshotsCount int32
	m_pwszSnapshotDeviceObject uintptr
	m_pwszOriginalVolumeName uintptr
	m_pwszOriginatingMachine uintptr
	m_pwszServiceMachine uintptr
	m_pwszExposedName uintptr
	m_pwszExposedPath uintptr
	m_ProviderId windows.GUID
	m_lSnapshotAttributes int32
	m_tsCreationTimestamp int64
	m_eStatus int32
}

type VSS_PROVIDER_PROP struct {
	m_ProviderId windows.GUID
	m_pwszProviderName uintptr
	m_eProviderType int32
	m_pwszProviderVersion uintptr
	m_ProviderVersionId windows.GUID
	m_ClassId windows.GUID
}

type VSS_OBJECT_UNION struct {
	Snap VSS_SNAPSHOT_PROP
	Prov VSS_PROVIDER_PROP
}

type VSS_OBJECT_PROP struct {
	Type int32
	Obj VSS_OBJECT_UNION
}
type
  VSS_SNAPSHOT_PROP = record
    m_SnapshotId: TGUID;
    m_SnapshotSetId: TGUID;
    m_lSnapshotsCount: Integer;
    m_pwszSnapshotDeviceObject: Pointer;
    m_pwszOriginalVolumeName: Pointer;
    m_pwszOriginatingMachine: Pointer;
    m_pwszServiceMachine: Pointer;
    m_pwszExposedName: Pointer;
    m_pwszExposedPath: Pointer;
    m_ProviderId: TGUID;
    m_lSnapshotAttributes: Integer;
    m_tsCreationTimestamp: Int64;
    m_eStatus: Integer;
  end;

  VSS_PROVIDER_PROP = record
    m_ProviderId: TGUID;
    m_pwszProviderName: Pointer;
    m_eProviderType: Integer;
    m_pwszProviderVersion: Pointer;
    m_ProviderVersionId: TGUID;
    m_ClassId: TGUID;
  end;

  VSS_OBJECT_UNION = record
    Snap: VSS_SNAPSHOT_PROP;
    Prov: VSS_PROVIDER_PROP;
  end;

  VSS_OBJECT_PROP = record
    Type: Integer;
    Obj: VSS_OBJECT_UNION;
  end;
const VSS_SNAPSHOT_PROP = extern struct {
    m_SnapshotId: GUID,
    m_SnapshotSetId: GUID,
    m_lSnapshotsCount: i32,
    m_pwszSnapshotDeviceObject: ?*anyopaque,
    m_pwszOriginalVolumeName: ?*anyopaque,
    m_pwszOriginatingMachine: ?*anyopaque,
    m_pwszServiceMachine: ?*anyopaque,
    m_pwszExposedName: ?*anyopaque,
    m_pwszExposedPath: ?*anyopaque,
    m_ProviderId: GUID,
    m_lSnapshotAttributes: i32,
    m_tsCreationTimestamp: i64,
    m_eStatus: i32,
};

const VSS_PROVIDER_PROP = extern struct {
    m_ProviderId: GUID,
    m_pwszProviderName: ?*anyopaque,
    m_eProviderType: i32,
    m_pwszProviderVersion: ?*anyopaque,
    m_ProviderVersionId: GUID,
    m_ClassId: GUID,
};

const VSS_OBJECT_UNION = extern struct {
    Snap: VSS_SNAPSHOT_PROP,
    Prov: VSS_PROVIDER_PROP,
};

const VSS_OBJECT_PROP = extern struct {
    Type: i32,
    Obj: VSS_OBJECT_UNION,
};
type
  VSS_SNAPSHOT_PROP {.bycopy.} = object
    m_SnapshotId: GUID
    m_SnapshotSetId: GUID
    m_lSnapshotsCount: int32
    m_pwszSnapshotDeviceObject: pointer
    m_pwszOriginalVolumeName: pointer
    m_pwszOriginatingMachine: pointer
    m_pwszServiceMachine: pointer
    m_pwszExposedName: pointer
    m_pwszExposedPath: pointer
    m_ProviderId: GUID
    m_lSnapshotAttributes: int32
    m_tsCreationTimestamp: int64
    m_eStatus: int32

  VSS_PROVIDER_PROP {.bycopy.} = object
    m_ProviderId: GUID
    m_pwszProviderName: pointer
    m_eProviderType: int32
    m_pwszProviderVersion: pointer
    m_ProviderVersionId: GUID
    m_ClassId: GUID

  VSS_OBJECT_UNION {.bycopy.} = object
    Snap: VSS_SNAPSHOT_PROP
    Prov: VSS_PROVIDER_PROP

  VSS_OBJECT_PROP {.bycopy.} = object
    Type: int32
    Obj: VSS_OBJECT_UNION
struct VSS_SNAPSHOT_PROP
{
    GUID m_SnapshotId;
    GUID m_SnapshotSetId;
    int m_lSnapshotsCount;
    void* m_pwszSnapshotDeviceObject;
    void* m_pwszOriginalVolumeName;
    void* m_pwszOriginatingMachine;
    void* m_pwszServiceMachine;
    void* m_pwszExposedName;
    void* m_pwszExposedPath;
    GUID m_ProviderId;
    int m_lSnapshotAttributes;
    long m_tsCreationTimestamp;
    int m_eStatus;
}

struct VSS_PROVIDER_PROP
{
    GUID m_ProviderId;
    void* m_pwszProviderName;
    int m_eProviderType;
    void* m_pwszProviderVersion;
    GUID m_ProviderVersionId;
    GUID m_ClassId;
}

struct VSS_OBJECT_UNION
{
    VSS_SNAPSHOT_PROP Snap;
    VSS_PROVIDER_PROP Prov;
}

struct VSS_OBJECT_PROP
{
    int Type;
    VSS_OBJECT_UNION Obj;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; VSS_OBJECT_PROP サイズ: 104 バイト(x86)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; Type : VSS_OBJECT_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Obj : VSS_OBJECT_UNION (+8, 96byte)  varptr(st)+8 を基点に操作(96byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VSS_OBJECT_PROP サイズ: 136 バイト(x64)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; Type : VSS_OBJECT_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Obj : VSS_OBJECT_UNION (+8, 128byte)  varptr(st)+8 を基点に操作(128byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global VSS_OBJECT_PROP
    #field int Type
    #field byte Obj 128
#endstruct

stdim st, VSS_OBJECT_PROP        ; NSTRUCT 変数を確保
st->Type = 100
mes "Type=" + st->Type
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。