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

NTMS_PMIDINFORMATIONW

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

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

フィールド

フィールドサイズx64x86説明
CurrentLibraryGUID16+0+0メディアが格納されているライブラリの一意の ID です。
MediaPoolGUID16+16+16メディアが割り当てられているメディアプールの一意の ID です。
LocationGUID16+32+32メディアの物理的な場所を表すオブジェクトの一意の ID です。
LocationTypeDWORD4+48+48物理メディアの現在の場所の種類です。このメンバーには NTMS_STORAGESLOTNTMS_DRIVENTMS_IEPORT のいずれかの値を設定できます。(オフラインのメディアはスロット内にあります。)
MediaTypeGUID16+52+52メディアの種類を表すオブジェクトの一意の ID です。
HomeSlotGUID16+68+68メディアが格納されるライブラリの記憶域スロットの一意の ID です。
szBarCodeWCHAR128+84+84物理メディアのバーコードラベルに記載されたバーコード値と一致する文字列です。
BarCodeStateDWORD4+212+212

バーコードの現在の状態です。次のいずれかの値になります。

意味
NTMS_BARCODESTATE_OK
メディアにバーコードがあり、読み取り可能です。
NTMS_BARCODESTATE_UNREADABLE
メディアにバーコードが無いか、バーコードを読み取れません。
szSequenceNumberWCHAR64+216+216指定したメディアに割り当てられる連続番号です。人が読み取れる値であり、オフラインライブラリ内でそのメディアを見つけられるように、ユーザーがメディア上に書き写す必要があります。
MediaStateDWORD4+280+280

物理メディアの現在の状態です。次のいずれかの値になります。

意味
NTMS_MEDIASTATE_IDLE
メディアはライブラリのスロット内、マウント解除されたドライブ内、またはオフラインライブラリ内にあります。
NTMS_MEDIASTATE_INUSE
RSM に対する操作の要求が成功すると、メディアは直ちに使用中としてマークされます。
NTMS_MEDIASTATE_LOADED
メディアが読み取りおよび書き込みに利用可能であると RSM が判断したときの状態です。
NTMS_MEDIASTATE_MOUNTED
物理メディアがドライブに装填されているときの状態です。
NTMS_MEDIASTATE_OP_ERROR
物理メディアが回復可能なエラー状態にあります。オペレーターによる介入は必要ありません。
NTMS_MEDIASTATE_UNLOADED
メディアをドライブから取り出せる状態です。ドライブの状態 DISMOUNTABLE も、ドライブをいつでも取り出せることを示します。
NTMS_MEDIASTATE_OPREQ
メディアはオペレーターの要求を待機しています。
dwNumberOfPartitionsDWORD4+284+284メディアの面の数です。
dwMediaTypeCodeDWORD4+288+288SCSI のメディアタイプコードです。
dwDensityCodeDWORD4+292+292SCSI の密度コードです。
MountedPartitionGUID16+296+296現在マウントされているメディアの面のグローバル一意 ID です。

公式ドキュメント

[リムーバブル記憶域マネージャー は Windows 7 および Windows Server 2008 R2 以降では利用できません。]

NTMS_PMIDINFORMATION 構造体は、物理メディアオブジェクトに固有のプロパティを定義します。

解説(Remarks)

NTMS_PMIDINFORMATION 構造体は NTMS_OBJECTINFORMATION 構造体に含まれます。

メモ

ntmsapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして NTMS_PMIDINFORMATION を定義しています。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させると不整合が生じ、コンパイルエラーや実行時エラーの原因となる場合があります。詳細については、関数プロトタイプの規則 を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

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

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

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

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

type NTMS_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
	dwMediaTypeCode uint32
	dwDensityCode uint32
	MountedPartition windows.GUID
}
type
  NTMS_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;
    dwMediaTypeCode: DWORD;
    dwDensityCode: DWORD;
    MountedPartition: TGUID;
  end;
const NTMS_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,
    dwMediaTypeCode: u32,
    dwDensityCode: u32,
    MountedPartition: GUID,
};
type
  NTMS_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: uint32
    dwMediaTypeCode: uint32
    dwDensityCode: uint32
    MountedPartition: GUID
struct NTMS_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;
    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_PMIDINFORMATIONW サイズ: 312 バイト(x64)
dim st, 78    ; 4byte整数×78(構造体サイズ 312 / 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 も可)
; dwMediaTypeCode : DWORD (+288, 4byte)  st.72 = 値  /  値 = st.72   (lpoke/lpeek も可)
; dwDensityCode : DWORD (+292, 4byte)  st.73 = 値  /  値 = st.73   (lpoke/lpeek も可)
; MountedPartition : GUID (+296, 16byte)  varptr(st)+296 を基点に操作(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_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
    #field int dwMediaTypeCode
    #field int dwDensityCode
    #field GUID MountedPartition
#endstruct

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