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

NTMS_PMIDINFORMATIONA

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

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

フィールド

フィールドサイズx64x86説明
CurrentLibraryGUID16+0+0メディアが現在存在するライブラリのGUID。
MediaPoolGUID16+16+16メディアが属するメディアプールのGUID。
LocationGUID16+32+32メディアの現在位置を識別するGUID。
LocationTypeDWORD4+48+48位置の種類を示す値。スロット/ドライブ等。
MediaTypeGUID16+52+52メディアの種別を識別するGUID。
HomeSlotGUID16+68+68メディアのホームスロットを識別するGUID。
szBarCodeCHAR64+84+84メディアのバーコード文字列。ANSI。
BarCodeStateDWORD4+148+148バーコードの読み取り状態を示す値。
szSequenceNumberCHAR32+152+152メディアのシーケンス番号文字列。ANSI。
MediaStateDWORD4+184+184物理メディアの状態を示す値。
dwNumberOfPartitionsDWORD4+188+188メディア上のパーティション(サイド)数。
dwMediaTypeCodeDWORD4+192+192メディアタイプコード。
dwDensityCodeDWORD4+196+196記録密度コード。
MountedPartitionGUID16+200+200現在マウント中のパーティションを識別するGUID。

各言語での定義

#include <windows.h>

// NTMS_PMIDINFORMATIONA  (x64 216 / x86 216 バイト)
typedef struct NTMS_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;
    DWORD dwMediaTypeCode;
    DWORD dwDensityCode;
    GUID MountedPartition;
} NTMS_PMIDINFORMATIONA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTMS_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;
    public uint dwMediaTypeCode;
    public uint dwDensityCode;
    public Guid MountedPartition;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_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
    Public dwMediaTypeCode As UInteger
    Public dwDensityCode As UInteger
    Public MountedPartition As Guid
End Structure
import ctypes
from ctypes import wintypes

class NTMS_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),
        ("dwMediaTypeCode", wintypes.DWORD),
        ("dwDensityCode", wintypes.DWORD),
        ("MountedPartition", GUID),
    ]
#[repr(C)]
pub struct NTMS_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,
    pub dwMediaTypeCode: u32,
    pub dwDensityCode: u32,
    pub MountedPartition: GUID,
}
import "golang.org/x/sys/windows"

type NTMS_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
	dwMediaTypeCode uint32
	dwDensityCode uint32
	MountedPartition windows.GUID
}
type
  NTMS_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;
    dwMediaTypeCode: DWORD;
    dwDensityCode: DWORD;
    MountedPartition: TGUID;
  end;
const NTMS_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,
    dwMediaTypeCode: u32,
    dwDensityCode: u32,
    MountedPartition: GUID,
};
type
  NTMS_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: uint32
    dwMediaTypeCode: uint32
    dwDensityCode: uint32
    MountedPartition: GUID
struct NTMS_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;
    uint dwMediaTypeCode;
    uint dwDensityCode;
    GUID MountedPartition;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NTMS_PMIDINFORMATIONA サイズ: 216 バイト(x64)
dim st, 54    ; 4byte整数×54(構造体サイズ 216 / 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 も可)
; dwMediaTypeCode : DWORD (+192, 4byte)  st.48 = 値  /  値 = st.48   (lpoke/lpeek も可)
; dwDensityCode : DWORD (+196, 4byte)  st.49 = 値  /  値 = st.49   (lpoke/lpeek も可)
; MountedPartition : GUID (+200, 16byte)  varptr(st)+200 を基点に操作(16byte:入れ子/配列)
; ※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_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
    #field int dwMediaTypeCode
    #field int dwDensityCode
    #field GUID MountedPartition
#endstruct

stdim st, NTMS_PMIDINFORMATIONA        ; NSTRUCT 変数を確保
st->LocationType = 100
mes "LocationType=" + st->LocationType