ホーム › Storage.FileSystem › NTMS_LIBRARYINFORMATION
NTMS_LIBRARYINFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| LibraryType | DWORD | 4 | +0 | +0 | ライブラリの種類を示す値。スタンドアロン/チェンジャー等。 |
| CleanerSlot | GUID | 16 | +4 | +4 | クリーナーカートリッジが置かれるスロットのGUID。 |
| CleanerSlotDefault | GUID | 16 | +20 | +20 | 既定のクリーナースロットのGUID。 |
| LibrarySupportsDriveCleaning | BOOL | 4 | +36 | +36 | ドライブクリーニング対応かを示すブール値。 |
| BarCodeReaderInstalled | BOOL | 4 | +40 | +40 | バーコードリーダーが搭載されているかを示すブール値。 |
| InventoryMethod | DWORD | 4 | +44 | +44 | インベントリ(在庫確認)の方式を示す値。 |
| dwCleanerUsesRemaining | DWORD | 4 | +48 | +48 | クリーナーの残り使用可能回数。 |
| FirstDriveNumber | DWORD | 4 | +52 | +52 | 最初のドライブ番号。 |
| dwNumberOfDrives | DWORD | 4 | +56 | +56 | ライブラリ内のドライブ総数。 |
| FirstSlotNumber | DWORD | 4 | +60 | +60 | 最初のスロット番号。 |
| dwNumberOfSlots | DWORD | 4 | +64 | +64 | ライブラリ内のスロット総数。 |
| FirstDoorNumber | DWORD | 4 | +68 | +68 | 最初のドア番号。 |
| dwNumberOfDoors | DWORD | 4 | +72 | +72 | ライブラリ内のドア総数。 |
| FirstPortNumber | DWORD | 4 | +76 | +76 | 最初のポート(I/Eポート)番号。 |
| dwNumberOfPorts | DWORD | 4 | +80 | +80 | ライブラリ内のポート総数。 |
| FirstChangerNumber | DWORD | 4 | +84 | +84 | 最初のチェンジャー番号。 |
| dwNumberOfChangers | DWORD | 4 | +88 | +88 | ライブラリ内のチェンジャー総数。 |
| dwNumberOfMedia | DWORD | 4 | +92 | +92 | ライブラリ内のメディア総数。 |
| dwNumberOfMediaTypes | DWORD | 4 | +96 | +96 | ライブラリが扱うメディア種別の数。 |
| dwNumberOfLibRequests | DWORD | 4 | +100 | +100 | 保留中のライブラリ要求の数。 |
| Reserved | GUID | 16 | +104 | +104 | 予約フィールド。GUID形式。 |
| AutoRecovery | BOOL | 4 | +120 | +120 | 自動回復が有効かを示すブール値。 |
| dwFlags | DWORD | 4 | +124 | +124 | ライブラリの状態や属性を示すフラグ。 |
各言語での定義
#include <windows.h>
// NTMS_LIBRARYINFORMATION (x64 128 / x86 128 バイト)
typedef struct NTMS_LIBRARYINFORMATION {
DWORD LibraryType;
GUID CleanerSlot;
GUID CleanerSlotDefault;
BOOL LibrarySupportsDriveCleaning;
BOOL BarCodeReaderInstalled;
DWORD InventoryMethod;
DWORD dwCleanerUsesRemaining;
DWORD FirstDriveNumber;
DWORD dwNumberOfDrives;
DWORD FirstSlotNumber;
DWORD dwNumberOfSlots;
DWORD FirstDoorNumber;
DWORD dwNumberOfDoors;
DWORD FirstPortNumber;
DWORD dwNumberOfPorts;
DWORD FirstChangerNumber;
DWORD dwNumberOfChangers;
DWORD dwNumberOfMedia;
DWORD dwNumberOfMediaTypes;
DWORD dwNumberOfLibRequests;
GUID Reserved;
BOOL AutoRecovery;
DWORD dwFlags;
} NTMS_LIBRARYINFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTMS_LIBRARYINFORMATION
{
public uint LibraryType;
public Guid CleanerSlot;
public Guid CleanerSlotDefault;
[MarshalAs(UnmanagedType.Bool)] public bool LibrarySupportsDriveCleaning;
[MarshalAs(UnmanagedType.Bool)] public bool BarCodeReaderInstalled;
public uint InventoryMethod;
public uint dwCleanerUsesRemaining;
public uint FirstDriveNumber;
public uint dwNumberOfDrives;
public uint FirstSlotNumber;
public uint dwNumberOfSlots;
public uint FirstDoorNumber;
public uint dwNumberOfDoors;
public uint FirstPortNumber;
public uint dwNumberOfPorts;
public uint FirstChangerNumber;
public uint dwNumberOfChangers;
public uint dwNumberOfMedia;
public uint dwNumberOfMediaTypes;
public uint dwNumberOfLibRequests;
public Guid Reserved;
[MarshalAs(UnmanagedType.Bool)] public bool AutoRecovery;
public uint dwFlags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_LIBRARYINFORMATION
Public LibraryType As UInteger
Public CleanerSlot As Guid
Public CleanerSlotDefault As Guid
<MarshalAs(UnmanagedType.Bool)> Public LibrarySupportsDriveCleaning As Boolean
<MarshalAs(UnmanagedType.Bool)> Public BarCodeReaderInstalled As Boolean
Public InventoryMethod As UInteger
Public dwCleanerUsesRemaining As UInteger
Public FirstDriveNumber As UInteger
Public dwNumberOfDrives As UInteger
Public FirstSlotNumber As UInteger
Public dwNumberOfSlots As UInteger
Public FirstDoorNumber As UInteger
Public dwNumberOfDoors As UInteger
Public FirstPortNumber As UInteger
Public dwNumberOfPorts As UInteger
Public FirstChangerNumber As UInteger
Public dwNumberOfChangers As UInteger
Public dwNumberOfMedia As UInteger
Public dwNumberOfMediaTypes As UInteger
Public dwNumberOfLibRequests As UInteger
Public Reserved As Guid
<MarshalAs(UnmanagedType.Bool)> Public AutoRecovery As Boolean
Public dwFlags As UInteger
End Structureimport ctypes
from ctypes import wintypes
class NTMS_LIBRARYINFORMATION(ctypes.Structure):
_fields_ = [
("LibraryType", wintypes.DWORD),
("CleanerSlot", GUID),
("CleanerSlotDefault", GUID),
("LibrarySupportsDriveCleaning", wintypes.BOOL),
("BarCodeReaderInstalled", wintypes.BOOL),
("InventoryMethod", wintypes.DWORD),
("dwCleanerUsesRemaining", wintypes.DWORD),
("FirstDriveNumber", wintypes.DWORD),
("dwNumberOfDrives", wintypes.DWORD),
("FirstSlotNumber", wintypes.DWORD),
("dwNumberOfSlots", wintypes.DWORD),
("FirstDoorNumber", wintypes.DWORD),
("dwNumberOfDoors", wintypes.DWORD),
("FirstPortNumber", wintypes.DWORD),
("dwNumberOfPorts", wintypes.DWORD),
("FirstChangerNumber", wintypes.DWORD),
("dwNumberOfChangers", wintypes.DWORD),
("dwNumberOfMedia", wintypes.DWORD),
("dwNumberOfMediaTypes", wintypes.DWORD),
("dwNumberOfLibRequests", wintypes.DWORD),
("Reserved", GUID),
("AutoRecovery", wintypes.BOOL),
("dwFlags", wintypes.DWORD),
]#[repr(C)]
pub struct NTMS_LIBRARYINFORMATION {
pub LibraryType: u32,
pub CleanerSlot: GUID,
pub CleanerSlotDefault: GUID,
pub LibrarySupportsDriveCleaning: i32,
pub BarCodeReaderInstalled: i32,
pub InventoryMethod: u32,
pub dwCleanerUsesRemaining: u32,
pub FirstDriveNumber: u32,
pub dwNumberOfDrives: u32,
pub FirstSlotNumber: u32,
pub dwNumberOfSlots: u32,
pub FirstDoorNumber: u32,
pub dwNumberOfDoors: u32,
pub FirstPortNumber: u32,
pub dwNumberOfPorts: u32,
pub FirstChangerNumber: u32,
pub dwNumberOfChangers: u32,
pub dwNumberOfMedia: u32,
pub dwNumberOfMediaTypes: u32,
pub dwNumberOfLibRequests: u32,
pub Reserved: GUID,
pub AutoRecovery: i32,
pub dwFlags: u32,
}import "golang.org/x/sys/windows"
type NTMS_LIBRARYINFORMATION struct {
LibraryType uint32
CleanerSlot windows.GUID
CleanerSlotDefault windows.GUID
LibrarySupportsDriveCleaning int32
BarCodeReaderInstalled int32
InventoryMethod uint32
dwCleanerUsesRemaining uint32
FirstDriveNumber uint32
dwNumberOfDrives uint32
FirstSlotNumber uint32
dwNumberOfSlots uint32
FirstDoorNumber uint32
dwNumberOfDoors uint32
FirstPortNumber uint32
dwNumberOfPorts uint32
FirstChangerNumber uint32
dwNumberOfChangers uint32
dwNumberOfMedia uint32
dwNumberOfMediaTypes uint32
dwNumberOfLibRequests uint32
Reserved windows.GUID
AutoRecovery int32
dwFlags uint32
}type
NTMS_LIBRARYINFORMATION = record
LibraryType: DWORD;
CleanerSlot: TGUID;
CleanerSlotDefault: TGUID;
LibrarySupportsDriveCleaning: BOOL;
BarCodeReaderInstalled: BOOL;
InventoryMethod: DWORD;
dwCleanerUsesRemaining: DWORD;
FirstDriveNumber: DWORD;
dwNumberOfDrives: DWORD;
FirstSlotNumber: DWORD;
dwNumberOfSlots: DWORD;
FirstDoorNumber: DWORD;
dwNumberOfDoors: DWORD;
FirstPortNumber: DWORD;
dwNumberOfPorts: DWORD;
FirstChangerNumber: DWORD;
dwNumberOfChangers: DWORD;
dwNumberOfMedia: DWORD;
dwNumberOfMediaTypes: DWORD;
dwNumberOfLibRequests: DWORD;
Reserved: TGUID;
AutoRecovery: BOOL;
dwFlags: DWORD;
end;const NTMS_LIBRARYINFORMATION = extern struct {
LibraryType: u32,
CleanerSlot: GUID,
CleanerSlotDefault: GUID,
LibrarySupportsDriveCleaning: i32,
BarCodeReaderInstalled: i32,
InventoryMethod: u32,
dwCleanerUsesRemaining: u32,
FirstDriveNumber: u32,
dwNumberOfDrives: u32,
FirstSlotNumber: u32,
dwNumberOfSlots: u32,
FirstDoorNumber: u32,
dwNumberOfDoors: u32,
FirstPortNumber: u32,
dwNumberOfPorts: u32,
FirstChangerNumber: u32,
dwNumberOfChangers: u32,
dwNumberOfMedia: u32,
dwNumberOfMediaTypes: u32,
dwNumberOfLibRequests: u32,
Reserved: GUID,
AutoRecovery: i32,
dwFlags: u32,
};type
NTMS_LIBRARYINFORMATION {.bycopy.} = object
LibraryType: uint32
CleanerSlot: GUID
CleanerSlotDefault: GUID
LibrarySupportsDriveCleaning: int32
BarCodeReaderInstalled: int32
InventoryMethod: uint32
dwCleanerUsesRemaining: uint32
FirstDriveNumber: uint32
dwNumberOfDrives: uint32
FirstSlotNumber: uint32
dwNumberOfSlots: uint32
FirstDoorNumber: uint32
dwNumberOfDoors: uint32
FirstPortNumber: uint32
dwNumberOfPorts: uint32
FirstChangerNumber: uint32
dwNumberOfChangers: uint32
dwNumberOfMedia: uint32
dwNumberOfMediaTypes: uint32
dwNumberOfLibRequests: uint32
Reserved: GUID
AutoRecovery: int32
dwFlags: uint32struct NTMS_LIBRARYINFORMATION
{
uint LibraryType;
GUID CleanerSlot;
GUID CleanerSlotDefault;
int LibrarySupportsDriveCleaning;
int BarCodeReaderInstalled;
uint InventoryMethod;
uint dwCleanerUsesRemaining;
uint FirstDriveNumber;
uint dwNumberOfDrives;
uint FirstSlotNumber;
uint dwNumberOfSlots;
uint FirstDoorNumber;
uint dwNumberOfDoors;
uint FirstPortNumber;
uint dwNumberOfPorts;
uint FirstChangerNumber;
uint dwNumberOfChangers;
uint dwNumberOfMedia;
uint dwNumberOfMediaTypes;
uint dwNumberOfLibRequests;
GUID Reserved;
int AutoRecovery;
uint dwFlags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NTMS_LIBRARYINFORMATION サイズ: 128 バイト(x64)
dim st, 32 ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; LibraryType : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; CleanerSlot : GUID (+4, 16byte) varptr(st)+4 を基点に操作(16byte:入れ子/配列)
; CleanerSlotDefault : GUID (+20, 16byte) varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; LibrarySupportsDriveCleaning : BOOL (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; BarCodeReaderInstalled : BOOL (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; InventoryMethod : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwCleanerUsesRemaining : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; FirstDriveNumber : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwNumberOfDrives : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; FirstSlotNumber : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; dwNumberOfSlots : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; FirstDoorNumber : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; dwNumberOfDoors : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; FirstPortNumber : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; dwNumberOfPorts : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; FirstChangerNumber : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; dwNumberOfChangers : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; dwNumberOfMedia : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; dwNumberOfMediaTypes : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; dwNumberOfLibRequests : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; Reserved : GUID (+104, 16byte) varptr(st)+104 を基点に操作(16byte:入れ子/配列)
; AutoRecovery : BOOL (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; dwFlags : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (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_LIBRARYINFORMATION
#field int LibraryType
#field GUID CleanerSlot
#field GUID CleanerSlotDefault
#field bool LibrarySupportsDriveCleaning
#field bool BarCodeReaderInstalled
#field int InventoryMethod
#field int dwCleanerUsesRemaining
#field int FirstDriveNumber
#field int dwNumberOfDrives
#field int FirstSlotNumber
#field int dwNumberOfSlots
#field int FirstDoorNumber
#field int dwNumberOfDoors
#field int FirstPortNumber
#field int dwNumberOfPorts
#field int FirstChangerNumber
#field int dwNumberOfChangers
#field int dwNumberOfMedia
#field int dwNumberOfMediaTypes
#field int dwNumberOfLibRequests
#field GUID Reserved
#field bool AutoRecovery
#field int dwFlags
#endstruct
stdim st, NTMS_LIBRARYINFORMATION ; NSTRUCT 変数を確保
st->LibraryType = 100
mes "LibraryType=" + st->LibraryType