ホーム › System.RemoteManagement › WSMAN_OPERATION_INFO
WSMAN_OPERATION_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| fragment | WSMAN_FRAGMENT | 16/8 | +0 | +0 | 操作対象のフラグメント情報。WSMAN_FRAGMENTで表す。 |
| filter | WSMAN_FILTER | 16/8 | +16 | +8 | 操作に適用するフィルター。WSMAN_FILTERで表す。 |
| selectorSet | WSMAN_SELECTOR_SET | 16/8 | +32 | +16 | リソース特定用のセレクターセット。WSMAN_SELECTOR_SETで表す。 |
| optionSet | WSMAN_OPTION_SET | 24/12 | +48 | +24 | 操作に渡すオプションセット。WSMAN_OPTION_SETで表す。 |
| reserved | void* | 8/4 | +72 | +36 | 予約済みポインター。将来の拡張用。 |
| version | DWORD | 4 | +80 | +40 | この構造体のバージョン。 |
各言語での定義
#include <windows.h>
// WSMAN_FRAGMENT (x64 16 / x86 8 バイト)
typedef struct WSMAN_FRAGMENT {
LPWSTR path;
LPWSTR dialect;
} WSMAN_FRAGMENT;
// WSMAN_FILTER (x64 16 / x86 8 バイト)
typedef struct WSMAN_FILTER {
LPWSTR filter;
LPWSTR dialect;
} WSMAN_FILTER;
// WSMAN_SELECTOR_SET (x64 16 / x86 8 バイト)
typedef struct WSMAN_SELECTOR_SET {
DWORD numberKeys;
WSMAN_KEY* keys;
} WSMAN_SELECTOR_SET;
// WSMAN_OPTION_SET (x64 24 / x86 12 バイト)
typedef struct WSMAN_OPTION_SET {
DWORD optionsCount;
WSMAN_OPTION* options;
BOOL optionsMustUnderstand;
} WSMAN_OPTION_SET;
// WSMAN_OPERATION_INFO (x64 88 / x86 44 バイト)
typedef struct WSMAN_OPERATION_INFO {
WSMAN_FRAGMENT fragment;
WSMAN_FILTER filter;
WSMAN_SELECTOR_SET selectorSet;
WSMAN_OPTION_SET optionSet;
void* reserved;
DWORD version;
} WSMAN_OPERATION_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSMAN_FRAGMENT
{
public IntPtr path;
public IntPtr dialect;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSMAN_FILTER
{
public IntPtr filter;
public IntPtr dialect;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSMAN_SELECTOR_SET
{
public uint numberKeys;
public IntPtr keys;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSMAN_OPTION_SET
{
public uint optionsCount;
public IntPtr options;
[MarshalAs(UnmanagedType.Bool)] public bool optionsMustUnderstand;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSMAN_OPERATION_INFO
{
public WSMAN_FRAGMENT fragment;
public WSMAN_FILTER filter;
public WSMAN_SELECTOR_SET selectorSet;
public WSMAN_OPTION_SET optionSet;
public IntPtr reserved;
public uint version;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSMAN_FRAGMENT
Public path As IntPtr
Public dialect As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSMAN_FILTER
Public filter As IntPtr
Public dialect As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSMAN_SELECTOR_SET
Public numberKeys As UInteger
Public keys As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSMAN_OPTION_SET
Public optionsCount As UInteger
Public options As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public optionsMustUnderstand As Boolean
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSMAN_OPERATION_INFO
Public fragment As WSMAN_FRAGMENT
Public filter As WSMAN_FILTER
Public selectorSet As WSMAN_SELECTOR_SET
Public optionSet As WSMAN_OPTION_SET
Public reserved As IntPtr
Public version As UInteger
End Structureimport ctypes
from ctypes import wintypes
class WSMAN_FRAGMENT(ctypes.Structure):
_fields_ = [
("path", ctypes.c_void_p),
("dialect", ctypes.c_void_p),
]
class WSMAN_FILTER(ctypes.Structure):
_fields_ = [
("filter", ctypes.c_void_p),
("dialect", ctypes.c_void_p),
]
class WSMAN_SELECTOR_SET(ctypes.Structure):
_fields_ = [
("numberKeys", wintypes.DWORD),
("keys", ctypes.c_void_p),
]
class WSMAN_OPTION_SET(ctypes.Structure):
_fields_ = [
("optionsCount", wintypes.DWORD),
("options", ctypes.c_void_p),
("optionsMustUnderstand", wintypes.BOOL),
]
class WSMAN_OPERATION_INFO(ctypes.Structure):
_fields_ = [
("fragment", WSMAN_FRAGMENT),
("filter", WSMAN_FILTER),
("selectorSet", WSMAN_SELECTOR_SET),
("optionSet", WSMAN_OPTION_SET),
("reserved", ctypes.c_void_p),
("version", wintypes.DWORD),
]#[repr(C)]
pub struct WSMAN_FRAGMENT {
pub path: *mut core::ffi::c_void,
pub dialect: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct WSMAN_FILTER {
pub filter: *mut core::ffi::c_void,
pub dialect: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct WSMAN_SELECTOR_SET {
pub numberKeys: u32,
pub keys: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct WSMAN_OPTION_SET {
pub optionsCount: u32,
pub options: *mut core::ffi::c_void,
pub optionsMustUnderstand: i32,
}
#[repr(C)]
pub struct WSMAN_OPERATION_INFO {
pub fragment: WSMAN_FRAGMENT,
pub filter: WSMAN_FILTER,
pub selectorSet: WSMAN_SELECTOR_SET,
pub optionSet: WSMAN_OPTION_SET,
pub reserved: *mut core::ffi::c_void,
pub version: u32,
}import "golang.org/x/sys/windows"
type WSMAN_FRAGMENT struct {
path uintptr
dialect uintptr
}
type WSMAN_FILTER struct {
filter uintptr
dialect uintptr
}
type WSMAN_SELECTOR_SET struct {
numberKeys uint32
keys uintptr
}
type WSMAN_OPTION_SET struct {
optionsCount uint32
options uintptr
optionsMustUnderstand int32
}
type WSMAN_OPERATION_INFO struct {
fragment WSMAN_FRAGMENT
filter WSMAN_FILTER
selectorSet WSMAN_SELECTOR_SET
optionSet WSMAN_OPTION_SET
reserved uintptr
version uint32
}type
WSMAN_FRAGMENT = record
path: Pointer;
dialect: Pointer;
end;
WSMAN_FILTER = record
filter: Pointer;
dialect: Pointer;
end;
WSMAN_SELECTOR_SET = record
numberKeys: DWORD;
keys: Pointer;
end;
WSMAN_OPTION_SET = record
optionsCount: DWORD;
options: Pointer;
optionsMustUnderstand: BOOL;
end;
WSMAN_OPERATION_INFO = record
fragment: WSMAN_FRAGMENT;
filter: WSMAN_FILTER;
selectorSet: WSMAN_SELECTOR_SET;
optionSet: WSMAN_OPTION_SET;
reserved: Pointer;
version: DWORD;
end;const WSMAN_FRAGMENT = extern struct {
path: ?*anyopaque,
dialect: ?*anyopaque,
};
const WSMAN_FILTER = extern struct {
filter: ?*anyopaque,
dialect: ?*anyopaque,
};
const WSMAN_SELECTOR_SET = extern struct {
numberKeys: u32,
keys: ?*anyopaque,
};
const WSMAN_OPTION_SET = extern struct {
optionsCount: u32,
options: ?*anyopaque,
optionsMustUnderstand: i32,
};
const WSMAN_OPERATION_INFO = extern struct {
fragment: WSMAN_FRAGMENT,
filter: WSMAN_FILTER,
selectorSet: WSMAN_SELECTOR_SET,
optionSet: WSMAN_OPTION_SET,
reserved: ?*anyopaque,
version: u32,
};type
WSMAN_FRAGMENT {.bycopy.} = object
path: pointer
dialect: pointer
WSMAN_FILTER {.bycopy.} = object
filter: pointer
dialect: pointer
WSMAN_SELECTOR_SET {.bycopy.} = object
numberKeys: uint32
keys: pointer
WSMAN_OPTION_SET {.bycopy.} = object
optionsCount: uint32
options: pointer
optionsMustUnderstand: int32
WSMAN_OPERATION_INFO {.bycopy.} = object
fragment: WSMAN_FRAGMENT
filter: WSMAN_FILTER
selectorSet: WSMAN_SELECTOR_SET
optionSet: WSMAN_OPTION_SET
reserved: pointer
version: uint32struct WSMAN_FRAGMENT
{
void* path;
void* dialect;
}
struct WSMAN_FILTER
{
void* filter;
void* dialect;
}
struct WSMAN_SELECTOR_SET
{
uint numberKeys;
void* keys;
}
struct WSMAN_OPTION_SET
{
uint optionsCount;
void* options;
int optionsMustUnderstand;
}
struct WSMAN_OPERATION_INFO
{
WSMAN_FRAGMENT fragment;
WSMAN_FILTER filter;
WSMAN_SELECTOR_SET selectorSet;
WSMAN_OPTION_SET optionSet;
void* reserved;
uint version;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WSMAN_OPERATION_INFO サイズ: 44 バイト(x86)
dim st, 11 ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; fragment : WSMAN_FRAGMENT (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; filter : WSMAN_FILTER (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; selectorSet : WSMAN_SELECTOR_SET (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; optionSet : WSMAN_OPTION_SET (+24, 12byte) varptr(st)+24 を基点に操作(12byte:入れ子/配列)
; reserved : void* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; version : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WSMAN_OPERATION_INFO サイズ: 88 バイト(x64)
dim st, 22 ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; fragment : WSMAN_FRAGMENT (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; filter : WSMAN_FILTER (+16, 16byte) varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; selectorSet : WSMAN_SELECTOR_SET (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; optionSet : WSMAN_OPTION_SET (+48, 24byte) varptr(st)+48 を基点に操作(24byte:入れ子/配列)
; reserved : void* (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; version : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WSMAN_FRAGMENT
#field intptr path
#field intptr dialect
#endstruct
#defstruct global WSMAN_FILTER
#field intptr filter
#field intptr dialect
#endstruct
#defstruct global WSMAN_SELECTOR_SET
#field int numberKeys
#field intptr keys
#endstruct
#defstruct global WSMAN_OPTION_SET
#field int optionsCount
#field intptr options
#field bool optionsMustUnderstand
#endstruct
#defstruct global WSMAN_OPERATION_INFO
#field WSMAN_FRAGMENT fragment
#field WSMAN_FILTER filter
#field WSMAN_SELECTOR_SET selectorSet
#field WSMAN_OPTION_SET optionSet
#field intptr reserved
#field int version
#endstruct
stdim st, WSMAN_OPERATION_INFO ; NSTRUCT 変数を確保
st->version = 100
mes "version=" + st->version