ホーム › Storage.FileSystem › NTMS_I1_PARTITIONINFORMATIONA
NTMS_I1_PARTITIONINFORMATIONA
構造体サイズ=各フィールドのバイト数(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 | CHAR | 64 | +299 | +299 | OMIDラベルの種別文字列。ANSI。 |
| szOmidLabelInfo | CHAR | 256 | +363 | +363 | OMIDラベルの情報文字列。ANSI。 |
| dwMountCount | DWORD | 4 | +620 | +620 | パーティションのマウント累計回数。 |
| dwAllocateCount | DWORD | 4 | +624 | +624 | パーティションの割り当て累計回数。 |
各言語での定義
#include <windows.h>
// NTMS_I1_PARTITIONINFORMATIONA (x64 628 / x86 628 バイト)
typedef struct NTMS_I1_PARTITIONINFORMATIONA {
GUID PhysicalMedia;
GUID LogicalMedia;
DWORD State;
WORD Side;
DWORD dwOmidLabelIdLength;
BYTE OmidLabelId[255];
CHAR szOmidLabelType[64];
CHAR szOmidLabelInfo[256];
DWORD dwMountCount;
DWORD dwAllocateCount;
} NTMS_I1_PARTITIONINFORMATIONA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTMS_I1_PARTITIONINFORMATIONA
{
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.ByValArray, SizeConst = 64)] public sbyte[] szOmidLabelType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public sbyte[] szOmidLabelInfo;
public uint dwMountCount;
public uint dwAllocateCount;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTMS_I1_PARTITIONINFORMATIONA
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.ByValArray, SizeConst:=64)> Public szOmidLabelType() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public szOmidLabelInfo() As SByte
Public dwMountCount As UInteger
Public dwAllocateCount As UInteger
End Structureimport ctypes
from ctypes import wintypes
class NTMS_I1_PARTITIONINFORMATIONA(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_byte * 64),
("szOmidLabelInfo", ctypes.c_byte * 256),
("dwMountCount", wintypes.DWORD),
("dwAllocateCount", wintypes.DWORD),
]#[repr(C)]
pub struct NTMS_I1_PARTITIONINFORMATIONA {
pub PhysicalMedia: GUID,
pub LogicalMedia: GUID,
pub State: u32,
pub Side: u16,
pub dwOmidLabelIdLength: u32,
pub OmidLabelId: [u8; 255],
pub szOmidLabelType: [i8; 64],
pub szOmidLabelInfo: [i8; 256],
pub dwMountCount: u32,
pub dwAllocateCount: u32,
}import "golang.org/x/sys/windows"
type NTMS_I1_PARTITIONINFORMATIONA struct {
PhysicalMedia windows.GUID
LogicalMedia windows.GUID
State uint32
Side uint16
dwOmidLabelIdLength uint32
OmidLabelId [255]byte
szOmidLabelType [64]int8
szOmidLabelInfo [256]int8
dwMountCount uint32
dwAllocateCount uint32
}type
NTMS_I1_PARTITIONINFORMATIONA = record
PhysicalMedia: TGUID;
LogicalMedia: TGUID;
State: DWORD;
Side: Word;
dwOmidLabelIdLength: DWORD;
OmidLabelId: array[0..254] of Byte;
szOmidLabelType: array[0..63] of Shortint;
szOmidLabelInfo: array[0..255] of Shortint;
dwMountCount: DWORD;
dwAllocateCount: DWORD;
end;const NTMS_I1_PARTITIONINFORMATIONA = extern struct {
PhysicalMedia: GUID,
LogicalMedia: GUID,
State: u32,
Side: u16,
dwOmidLabelIdLength: u32,
OmidLabelId: [255]u8,
szOmidLabelType: [64]i8,
szOmidLabelInfo: [256]i8,
dwMountCount: u32,
dwAllocateCount: u32,
};type
NTMS_I1_PARTITIONINFORMATIONA {.bycopy.} = object
PhysicalMedia: GUID
LogicalMedia: GUID
State: uint32
Side: uint16
dwOmidLabelIdLength: uint32
OmidLabelId: array[255, uint8]
szOmidLabelType: array[64, int8]
szOmidLabelInfo: array[256, int8]
dwMountCount: uint32
dwAllocateCount: uint32struct NTMS_I1_PARTITIONINFORMATIONA
{
GUID PhysicalMedia;
GUID LogicalMedia;
uint State;
ushort Side;
uint dwOmidLabelIdLength;
ubyte[255] OmidLabelId;
byte[64] szOmidLabelType;
byte[256] szOmidLabelInfo;
uint dwMountCount;
uint dwAllocateCount;
}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_PARTITIONINFORMATIONA サイズ: 628 バイト(x64)
dim st, 157 ; 4byte整数×157(構造体サイズ 628 / 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 : CHAR (+299, 64byte) varptr(st)+299 を基点に操作(64byte:入れ子/配列)
; szOmidLabelInfo : CHAR (+363, 256byte) varptr(st)+363 を基点に操作(256byte:入れ子/配列)
; dwMountCount : DWORD (+620, 4byte) st.155 = 値 / 値 = st.155 (lpoke/lpeek も可)
; dwAllocateCount : DWORD (+624, 4byte) st.156 = 値 / 値 = st.156 (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_I1_PARTITIONINFORMATIONA
#field GUID PhysicalMedia
#field GUID LogicalMedia
#field int State
#field short Side
#field int dwOmidLabelIdLength
#field byte OmidLabelId 255
#field byte szOmidLabelType 64
#field byte szOmidLabelInfo 256
#field int dwMountCount
#field int dwAllocateCount
#endstruct
stdim st, NTMS_I1_PARTITIONINFORMATIONA ; NSTRUCT 変数を確保
st->State = 100
mes "State=" + st->State