ホーム › Storage.FileSystem › NTMS_PARTITIONINFORMATIONW
NTMS_PARTITIONINFORMATIONW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| PhysicalMedia | GUID | 16 | +0 | +0 | 対応する物理メディアを識別するGUID。 |
| LogicalMedia | GUID | 16 | +16 | +16 | 対応する論理メディアを識別するGUID。 |
| State | DWORD | 4 | +32 | +32 | パーティションの状態を示す値。 |
| Side | WORD | 2 | +36 | +36 | メディアのサイド番号。 |
| dwOmidLabelIdLength | DWORD | 4 | +40 | +40 | OMID(オンメディア識別子)ラベルIDのバイト長。 |
| OmidLabelId | BYTE | 255 | +44 | +44 | OMIDラベルIDのバイト配列。 |
| szOmidLabelType | WCHAR | 128 | +300 | +300 | OMIDラベルの種別文字列。Unicode。 |
| szOmidLabelInfo | WCHAR | 512 | +428 | +428 | OMIDラベルの情報文字列。Unicode。 |
| dwMountCount | DWORD | 4 | +940 | +940 | パーティションのマウント累計回数。 |
| dwAllocateCount | DWORD | 4 | +944 | +944 | パーティションの割り当て累計回数。 |
| Capacity | LONGLONG | 8 | +952 | +952 | パーティションの容量。バイト単位。 |
各言語での定義
#include <windows.h>
// NTMS_PARTITIONINFORMATIONW (x64 960 / x86 960 バイト)
typedef struct NTMS_PARTITIONINFORMATIONW {
GUID PhysicalMedia;
GUID LogicalMedia;
DWORD State;
WORD Side;
DWORD dwOmidLabelIdLength;
BYTE OmidLabelId[255];
WCHAR szOmidLabelType[64];
WCHAR szOmidLabelInfo[256];
DWORD dwMountCount;
DWORD dwAllocateCount;
LONGLONG Capacity;
} NTMS_PARTITIONINFORMATIONW;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTMS_PARTITIONINFORMATIONW
{
public Guid PhysicalMedia;
public Guid LogicalMedia;
public uint State;
public ushort Side;
public uint dwOmidLabelIdLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)] public byte[] OmidLabelId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string szOmidLabelType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szOmidLabelInfo;
public uint dwMountCount;
public uint dwAllocateCount;
public long Capacity;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_PARTITIONINFORMATIONW
Public PhysicalMedia As Guid
Public LogicalMedia As Guid
Public State As UInteger
Public Side As UShort
Public dwOmidLabelIdLength As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=255)> Public OmidLabelId() As Byte
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Public szOmidLabelType As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public szOmidLabelInfo As String
Public dwMountCount As UInteger
Public dwAllocateCount As UInteger
Public Capacity As Long
End Structureimport ctypes
from ctypes import wintypes
class NTMS_PARTITIONINFORMATIONW(ctypes.Structure):
_fields_ = [
("PhysicalMedia", GUID),
("LogicalMedia", GUID),
("State", wintypes.DWORD),
("Side", ctypes.c_ushort),
("dwOmidLabelIdLength", wintypes.DWORD),
("OmidLabelId", ctypes.c_ubyte * 255),
("szOmidLabelType", ctypes.c_wchar * 64),
("szOmidLabelInfo", ctypes.c_wchar * 256),
("dwMountCount", wintypes.DWORD),
("dwAllocateCount", wintypes.DWORD),
("Capacity", ctypes.c_longlong),
]#[repr(C)]
pub struct NTMS_PARTITIONINFORMATIONW {
pub PhysicalMedia: GUID,
pub LogicalMedia: GUID,
pub State: u32,
pub Side: u16,
pub dwOmidLabelIdLength: u32,
pub OmidLabelId: [u8; 255],
pub szOmidLabelType: [u16; 64],
pub szOmidLabelInfo: [u16; 256],
pub dwMountCount: u32,
pub dwAllocateCount: u32,
pub Capacity: i64,
}import "golang.org/x/sys/windows"
type NTMS_PARTITIONINFORMATIONW struct {
PhysicalMedia windows.GUID
LogicalMedia windows.GUID
State uint32
Side uint16
dwOmidLabelIdLength uint32
OmidLabelId [255]byte
szOmidLabelType [64]uint16
szOmidLabelInfo [256]uint16
dwMountCount uint32
dwAllocateCount uint32
Capacity int64
}type
NTMS_PARTITIONINFORMATIONW = record
PhysicalMedia: TGUID;
LogicalMedia: TGUID;
State: DWORD;
Side: Word;
dwOmidLabelIdLength: DWORD;
OmidLabelId: array[0..254] of Byte;
szOmidLabelType: array[0..63] of WideChar;
szOmidLabelInfo: array[0..255] of WideChar;
dwMountCount: DWORD;
dwAllocateCount: DWORD;
Capacity: Int64;
end;const NTMS_PARTITIONINFORMATIONW = extern struct {
PhysicalMedia: GUID,
LogicalMedia: GUID,
State: u32,
Side: u16,
dwOmidLabelIdLength: u32,
OmidLabelId: [255]u8,
szOmidLabelType: [64]u16,
szOmidLabelInfo: [256]u16,
dwMountCount: u32,
dwAllocateCount: u32,
Capacity: i64,
};type
NTMS_PARTITIONINFORMATIONW {.bycopy.} = object
PhysicalMedia: GUID
LogicalMedia: GUID
State: uint32
Side: uint16
dwOmidLabelIdLength: uint32
OmidLabelId: array[255, uint8]
szOmidLabelType: array[64, uint16]
szOmidLabelInfo: array[256, uint16]
dwMountCount: uint32
dwAllocateCount: uint32
Capacity: int64struct NTMS_PARTITIONINFORMATIONW
{
GUID PhysicalMedia;
GUID LogicalMedia;
uint State;
ushort Side;
uint dwOmidLabelIdLength;
ubyte[255] OmidLabelId;
wchar[64] szOmidLabelType;
wchar[256] szOmidLabelInfo;
uint dwMountCount;
uint dwAllocateCount;
long Capacity;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NTMS_PARTITIONINFORMATIONW サイズ: 960 バイト(x64)
dim st, 240 ; 4byte整数×240(構造体サイズ 960 / 4 切り上げ)
; PhysicalMedia : GUID (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; LogicalMedia : GUID (+16, 16byte) varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; State : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; Side : WORD (+36, 2byte) wpoke st,36,値 / 値 = wpeek(st,36)
; dwOmidLabelIdLength : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; OmidLabelId : BYTE (+44, 255byte) varptr(st)+44 を基点に操作(255byte:入れ子/配列)
; szOmidLabelType : WCHAR (+300, 128byte) varptr(st)+300 を基点に操作(128byte:入れ子/配列)
; szOmidLabelInfo : WCHAR (+428, 512byte) varptr(st)+428 を基点に操作(512byte:入れ子/配列)
; dwMountCount : DWORD (+940, 4byte) st.235 = 値 / 値 = st.235 (lpoke/lpeek も可)
; dwAllocateCount : DWORD (+944, 4byte) st.236 = 値 / 値 = st.236 (lpoke/lpeek も可)
; Capacity : LONGLONG (+952, 8byte) qpoke st,952,値 / qpeek(st,952) ※IronHSPのみ。3.7/3.8は lpoke st,952,下位 : lpoke st,956,上位
; ※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_PARTITIONINFORMATIONW
#field GUID PhysicalMedia
#field GUID LogicalMedia
#field int State
#field short Side
#field int dwOmidLabelIdLength
#field byte OmidLabelId 255
#field wchar szOmidLabelType 64
#field wchar szOmidLabelInfo 256
#field int dwMountCount
#field int dwAllocateCount
#field int64 Capacity
#endstruct
stdim st, NTMS_PARTITIONINFORMATIONW ; NSTRUCT 変数を確保
st->State = 100
mes "State=" + st->State