ホーム › Storage.FileSystem › NTMS_I1_PMIDINFORMATIONA
NTMS_I1_PMIDINFORMATIONA
構造体サイズ=各フィールドのバイト数(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 | CHAR | 64 | +84 | +84 | メディアのバーコード文字列。ANSI。 |
| BarCodeState | DWORD | 4 | +148 | +148 | バーコードの読み取り状態を示す値。 |
| szSequenceNumber | CHAR | 32 | +152 | +152 | メディアのシーケンス番号文字列。ANSI。 |
| MediaState | DWORD | 4 | +184 | +184 | 物理メディアの状態を示す値。 |
| dwNumberOfPartitions | DWORD | 4 | +188 | +188 | メディア上のパーティション数。 |
各言語での定義
#include <windows.h>
// NTMS_I1_PMIDINFORMATIONA (x64 192 / x86 192 バイト)
typedef struct NTMS_I1_PMIDINFORMATIONA {
GUID CurrentLibrary;
GUID MediaPool;
GUID Location;
DWORD LocationType;
GUID MediaType;
GUID HomeSlot;
CHAR szBarCode[64];
DWORD BarCodeState;
CHAR szSequenceNumber[32];
DWORD MediaState;
DWORD dwNumberOfPartitions;
} NTMS_I1_PMIDINFORMATIONA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTMS_I1_PMIDINFORMATIONA
{
public Guid CurrentLibrary;
public Guid MediaPool;
public Guid Location;
public uint LocationType;
public Guid MediaType;
public Guid HomeSlot;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public sbyte[] szBarCode;
public uint BarCodeState;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public sbyte[] szSequenceNumber;
public uint MediaState;
public uint dwNumberOfPartitions;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_I1_PMIDINFORMATIONA
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.ByValArray, SizeConst:=64)> Public szBarCode() As SByte
Public BarCodeState As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public szSequenceNumber() As SByte
Public MediaState As UInteger
Public dwNumberOfPartitions As UInteger
End Structureimport ctypes
from ctypes import wintypes
class NTMS_I1_PMIDINFORMATIONA(ctypes.Structure):
_fields_ = [
("CurrentLibrary", GUID),
("MediaPool", GUID),
("Location", GUID),
("LocationType", wintypes.DWORD),
("MediaType", GUID),
("HomeSlot", GUID),
("szBarCode", ctypes.c_byte * 64),
("BarCodeState", wintypes.DWORD),
("szSequenceNumber", ctypes.c_byte * 32),
("MediaState", wintypes.DWORD),
("dwNumberOfPartitions", wintypes.DWORD),
]#[repr(C)]
pub struct NTMS_I1_PMIDINFORMATIONA {
pub CurrentLibrary: GUID,
pub MediaPool: GUID,
pub Location: GUID,
pub LocationType: u32,
pub MediaType: GUID,
pub HomeSlot: GUID,
pub szBarCode: [i8; 64],
pub BarCodeState: u32,
pub szSequenceNumber: [i8; 32],
pub MediaState: u32,
pub dwNumberOfPartitions: u32,
}import "golang.org/x/sys/windows"
type NTMS_I1_PMIDINFORMATIONA struct {
CurrentLibrary windows.GUID
MediaPool windows.GUID
Location windows.GUID
LocationType uint32
MediaType windows.GUID
HomeSlot windows.GUID
szBarCode [64]int8
BarCodeState uint32
szSequenceNumber [32]int8
MediaState uint32
dwNumberOfPartitions uint32
}type
NTMS_I1_PMIDINFORMATIONA = record
CurrentLibrary: TGUID;
MediaPool: TGUID;
Location: TGUID;
LocationType: DWORD;
MediaType: TGUID;
HomeSlot: TGUID;
szBarCode: array[0..63] of Shortint;
BarCodeState: DWORD;
szSequenceNumber: array[0..31] of Shortint;
MediaState: DWORD;
dwNumberOfPartitions: DWORD;
end;const NTMS_I1_PMIDINFORMATIONA = extern struct {
CurrentLibrary: GUID,
MediaPool: GUID,
Location: GUID,
LocationType: u32,
MediaType: GUID,
HomeSlot: GUID,
szBarCode: [64]i8,
BarCodeState: u32,
szSequenceNumber: [32]i8,
MediaState: u32,
dwNumberOfPartitions: u32,
};type
NTMS_I1_PMIDINFORMATIONA {.bycopy.} = object
CurrentLibrary: GUID
MediaPool: GUID
Location: GUID
LocationType: uint32
MediaType: GUID
HomeSlot: GUID
szBarCode: array[64, int8]
BarCodeState: uint32
szSequenceNumber: array[32, int8]
MediaState: uint32
dwNumberOfPartitions: uint32struct NTMS_I1_PMIDINFORMATIONA
{
GUID CurrentLibrary;
GUID MediaPool;
GUID Location;
uint LocationType;
GUID MediaType;
GUID HomeSlot;
byte[64] szBarCode;
uint BarCodeState;
byte[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_PMIDINFORMATIONA サイズ: 192 バイト(x64)
dim st, 48 ; 4byte整数×48(構造体サイズ 192 / 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 : CHAR (+84, 64byte) varptr(st)+84 を基点に操作(64byte:入れ子/配列)
; BarCodeState : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; szSequenceNumber : CHAR (+152, 32byte) varptr(st)+152 を基点に操作(32byte:入れ子/配列)
; MediaState : DWORD (+184, 4byte) st.46 = 値 / 値 = st.46 (lpoke/lpeek も可)
; dwNumberOfPartitions : DWORD (+188, 4byte) st.47 = 値 / 値 = st.47 (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_PMIDINFORMATIONA
#field GUID CurrentLibrary
#field GUID MediaPool
#field GUID Location
#field int LocationType
#field GUID MediaType
#field GUID HomeSlot
#field byte szBarCode 64
#field int BarCodeState
#field byte szSequenceNumber 32
#field int MediaState
#field int dwNumberOfPartitions
#endstruct
stdim st, NTMS_I1_PMIDINFORMATIONA ; NSTRUCT 変数を確保
st->LocationType = 100
mes "LocationType=" + st->LocationType