ホーム › Storage.FileSystem › NTMS_I1_PMIDINFORMATIONW
NTMS_I1_PMIDINFORMATIONW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| CurrentLibrary | GUID | 16 | +0 | +0 | メディアが現在存在するライブラリのGUID。 |
| MediaPool | GUID | 16 | +16 | +16 | メディアが属するメディアプールのGUID。 |
| Location | GUID | 16 | +32 | +32 | メディアの現在位置を識別するGUID。 |
| LocationType | DWORD | 4 | +48 | +48 | 位置の種類を示す値。 |
| MediaType | GUID | 16 | +52 | +52 | メディアの種別を識別するGUID。 |
| HomeSlot | GUID | 16 | +68 | +68 | メディアのホームスロットを識別するGUID。 |
| szBarCode | WCHAR | 128 | +84 | +84 | メディアのバーコード文字列。Unicode。 |
| BarCodeState | DWORD | 4 | +212 | +212 | バーコードの読み取り状態を示す値。 |
| szSequenceNumber | WCHAR | 64 | +216 | +216 | メディアのシーケンス番号文字列。Unicode。 |
| MediaState | DWORD | 4 | +280 | +280 | 物理メディアの状態を示す値。 |
| dwNumberOfPartitions | DWORD | 4 | +284 | +284 | メディア上のパーティション数。 |
各言語での定義
#include <windows.h>
// NTMS_I1_PMIDINFORMATIONW (x64 288 / x86 288 バイト)
typedef struct NTMS_I1_PMIDINFORMATIONW {
GUID CurrentLibrary;
GUID MediaPool;
GUID Location;
DWORD LocationType;
GUID MediaType;
GUID HomeSlot;
WCHAR szBarCode[64];
DWORD BarCodeState;
WCHAR szSequenceNumber[32];
DWORD MediaState;
DWORD dwNumberOfPartitions;
} NTMS_I1_PMIDINFORMATIONW;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTMS_I1_PMIDINFORMATIONW
{
public Guid CurrentLibrary;
public Guid MediaPool;
public Guid Location;
public uint LocationType;
public Guid MediaType;
public Guid HomeSlot;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string szBarCode;
public uint BarCodeState;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string szSequenceNumber;
public uint MediaState;
public uint dwNumberOfPartitions;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_I1_PMIDINFORMATIONW
Public CurrentLibrary As Guid
Public MediaPool As Guid
Public Location As Guid
Public LocationType As UInteger
Public MediaType As Guid
Public HomeSlot As Guid
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Public szBarCode As String
Public BarCodeState As UInteger
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Public szSequenceNumber As String
Public MediaState As UInteger
Public dwNumberOfPartitions As UInteger
End Structureimport ctypes
from ctypes import wintypes
class NTMS_I1_PMIDINFORMATIONW(ctypes.Structure):
_fields_ = [
("CurrentLibrary", GUID),
("MediaPool", GUID),
("Location", GUID),
("LocationType", wintypes.DWORD),
("MediaType", GUID),
("HomeSlot", GUID),
("szBarCode", ctypes.c_wchar * 64),
("BarCodeState", wintypes.DWORD),
("szSequenceNumber", ctypes.c_wchar * 32),
("MediaState", wintypes.DWORD),
("dwNumberOfPartitions", wintypes.DWORD),
]#[repr(C)]
pub struct NTMS_I1_PMIDINFORMATIONW {
pub CurrentLibrary: GUID,
pub MediaPool: GUID,
pub Location: GUID,
pub LocationType: u32,
pub MediaType: GUID,
pub HomeSlot: GUID,
pub szBarCode: [u16; 64],
pub BarCodeState: u32,
pub szSequenceNumber: [u16; 32],
pub MediaState: u32,
pub dwNumberOfPartitions: u32,
}import "golang.org/x/sys/windows"
type NTMS_I1_PMIDINFORMATIONW struct {
CurrentLibrary windows.GUID
MediaPool windows.GUID
Location windows.GUID
LocationType uint32
MediaType windows.GUID
HomeSlot windows.GUID
szBarCode [64]uint16
BarCodeState uint32
szSequenceNumber [32]uint16
MediaState uint32
dwNumberOfPartitions uint32
}type
NTMS_I1_PMIDINFORMATIONW = record
CurrentLibrary: TGUID;
MediaPool: TGUID;
Location: TGUID;
LocationType: DWORD;
MediaType: TGUID;
HomeSlot: TGUID;
szBarCode: array[0..63] of WideChar;
BarCodeState: DWORD;
szSequenceNumber: array[0..31] of WideChar;
MediaState: DWORD;
dwNumberOfPartitions: DWORD;
end;const NTMS_I1_PMIDINFORMATIONW = extern struct {
CurrentLibrary: GUID,
MediaPool: GUID,
Location: GUID,
LocationType: u32,
MediaType: GUID,
HomeSlot: GUID,
szBarCode: [64]u16,
BarCodeState: u32,
szSequenceNumber: [32]u16,
MediaState: u32,
dwNumberOfPartitions: u32,
};type
NTMS_I1_PMIDINFORMATIONW {.bycopy.} = object
CurrentLibrary: GUID
MediaPool: GUID
Location: GUID
LocationType: uint32
MediaType: GUID
HomeSlot: GUID
szBarCode: array[64, uint16]
BarCodeState: uint32
szSequenceNumber: array[32, uint16]
MediaState: uint32
dwNumberOfPartitions: uint32struct NTMS_I1_PMIDINFORMATIONW
{
GUID CurrentLibrary;
GUID MediaPool;
GUID Location;
uint LocationType;
GUID MediaType;
GUID HomeSlot;
wchar[64] szBarCode;
uint BarCodeState;
wchar[32] szSequenceNumber;
uint MediaState;
uint dwNumberOfPartitions;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NTMS_I1_PMIDINFORMATIONW サイズ: 288 バイト(x64)
dim st, 72 ; 4byte整数×72(構造体サイズ 288 / 4 切り上げ)
; CurrentLibrary : GUID (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; MediaPool : GUID (+16, 16byte) varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; Location : GUID (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; LocationType : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; MediaType : GUID (+52, 16byte) varptr(st)+52 を基点に操作(16byte:入れ子/配列)
; HomeSlot : GUID (+68, 16byte) varptr(st)+68 を基点に操作(16byte:入れ子/配列)
; szBarCode : WCHAR (+84, 128byte) varptr(st)+84 を基点に操作(128byte:入れ子/配列)
; BarCodeState : DWORD (+212, 4byte) st.53 = 値 / 値 = st.53 (lpoke/lpeek も可)
; szSequenceNumber : WCHAR (+216, 64byte) varptr(st)+216 を基点に操作(64byte:入れ子/配列)
; MediaState : DWORD (+280, 4byte) st.70 = 値 / 値 = st.70 (lpoke/lpeek も可)
; dwNumberOfPartitions : DWORD (+284, 4byte) st.71 = 値 / 値 = st.71 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global NTMS_I1_PMIDINFORMATIONW
#field GUID CurrentLibrary
#field GUID MediaPool
#field GUID Location
#field int LocationType
#field GUID MediaType
#field GUID HomeSlot
#field wchar szBarCode 64
#field int BarCodeState
#field wchar szSequenceNumber 32
#field int MediaState
#field int dwNumberOfPartitions
#endstruct
stdim st, NTMS_I1_PMIDINFORMATIONW ; NSTRUCT 変数を確保
st->LocationType = 100
mes "LocationType=" + st->LocationType