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

NTMS_I1_LIBRARYINFORMATION

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

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

フィールド

フィールドサイズx64x86説明
LibraryTypeDWORD4+0+0ライブラリの種類を示す値。
CleanerSlotGUID16+4+4クリーナーカートリッジのスロットGUID。
CleanerSlotDefaultGUID16+20+20既定のクリーナースロットGUID。
LibrarySupportsDriveCleaningBOOL4+36+36ドライブクリーニング対応かを示すブール値。
BarCodeReaderInstalledBOOL4+40+40バーコードリーダー搭載の有無を示すブール値。
InventoryMethodDWORD4+44+44インベントリ方式を示す値。
dwCleanerUsesRemainingDWORD4+48+48クリーナーの残り使用回数。
FirstDriveNumberDWORD4+52+52最初のドライブ番号。
dwNumberOfDrivesDWORD4+56+56ドライブ総数。
FirstSlotNumberDWORD4+60+60最初のスロット番号。
dwNumberOfSlotsDWORD4+64+64スロット総数。
FirstDoorNumberDWORD4+68+68最初のドア番号。
dwNumberOfDoorsDWORD4+72+72ドア総数。
FirstPortNumberDWORD4+76+76最初のポート番号。
dwNumberOfPortsDWORD4+80+80ポート総数。
FirstChangerNumberDWORD4+84+84最初のチェンジャー番号。
dwNumberOfChangersDWORD4+88+88チェンジャー総数。
dwNumberOfMediaDWORD4+92+92メディア総数。
dwNumberOfMediaTypesDWORD4+96+96扱うメディア種別の数。
dwNumberOfLibRequestsDWORD4+100+100保留中のライブラリ要求数。
ReservedGUID16+104+104予約フィールド。GUID形式。

各言語での定義

#include <windows.h>

// NTMS_I1_LIBRARYINFORMATION  (x64 120 / x86 120 バイト)
typedef struct NTMS_I1_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;
} NTMS_I1_LIBRARYINFORMATION;
using System;
using System.Runtime.InteropServices;

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

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_I1_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
End Structure
import ctypes
from ctypes import wintypes

class NTMS_I1_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),
    ]
#[repr(C)]
pub struct NTMS_I1_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,
}
import "golang.org/x/sys/windows"

type NTMS_I1_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
}
type
  NTMS_I1_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;
  end;
const NTMS_I1_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,
};
type
  NTMS_I1_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
struct NTMS_I1_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;
}

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_LIBRARYINFORMATION サイズ: 120 バイト(x64)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 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:入れ子/配列)
; ※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_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
#endstruct

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