ホーム › UI.WindowsAndMessaging › VolLockBroadcast
VolLockBroadcast
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| vlb_dbh | DEV_BROADCAST_HDR | 12 | +0 | +0 | デバイスブロードキャストの共通ヘッダ(DEV_BROADCAST_HDR)である。 |
| vlb_owner | DWORD | 4 | +12 | +12 | ボリュームロックを所有するプロセスの識別子である。 |
| vlb_perms | BYTE | 1 | +16 | +16 | ロックの権限を示すフラグである。 |
| vlb_lockType | BYTE | 1 | +17 | +17 | ロックの種類である。 |
| vlb_drive | BYTE | 1 | +18 | +18 | 対象ドライブを示す値である。 |
| vlb_flags | BYTE | 1 | +19 | +19 | ロックに関する追加フラグである。 |
各言語での定義
#include <windows.h>
// DEV_BROADCAST_HDR (x64 12 / x86 12 バイト)
typedef struct DEV_BROADCAST_HDR {
DWORD dbch_size;
DEV_BROADCAST_HDR_DEVICE_TYPE dbch_devicetype;
DWORD dbch_reserved;
} DEV_BROADCAST_HDR;
// VolLockBroadcast (x64 20 / x86 20 バイト)
typedef struct VolLockBroadcast {
DEV_BROADCAST_HDR vlb_dbh;
DWORD vlb_owner;
BYTE vlb_perms;
BYTE vlb_lockType;
BYTE vlb_drive;
BYTE vlb_flags;
} VolLockBroadcast;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DEV_BROADCAST_HDR
{
public uint dbch_size;
public uint dbch_devicetype;
public uint dbch_reserved;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VolLockBroadcast
{
public DEV_BROADCAST_HDR vlb_dbh;
public uint vlb_owner;
public byte vlb_perms;
public byte vlb_lockType;
public byte vlb_drive;
public byte vlb_flags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DEV_BROADCAST_HDR
Public dbch_size As UInteger
Public dbch_devicetype As UInteger
Public dbch_reserved As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VolLockBroadcast
Public vlb_dbh As DEV_BROADCAST_HDR
Public vlb_owner As UInteger
Public vlb_perms As Byte
Public vlb_lockType As Byte
Public vlb_drive As Byte
Public vlb_flags As Byte
End Structureimport ctypes
from ctypes import wintypes
class DEV_BROADCAST_HDR(ctypes.Structure):
_fields_ = [
("dbch_size", wintypes.DWORD),
("dbch_devicetype", wintypes.DWORD),
("dbch_reserved", wintypes.DWORD),
]
class VolLockBroadcast(ctypes.Structure):
_fields_ = [
("vlb_dbh", DEV_BROADCAST_HDR),
("vlb_owner", wintypes.DWORD),
("vlb_perms", ctypes.c_ubyte),
("vlb_lockType", ctypes.c_ubyte),
("vlb_drive", ctypes.c_ubyte),
("vlb_flags", ctypes.c_ubyte),
]#[repr(C)]
pub struct DEV_BROADCAST_HDR {
pub dbch_size: u32,
pub dbch_devicetype: u32,
pub dbch_reserved: u32,
}
#[repr(C)]
pub struct VolLockBroadcast {
pub vlb_dbh: DEV_BROADCAST_HDR,
pub vlb_owner: u32,
pub vlb_perms: u8,
pub vlb_lockType: u8,
pub vlb_drive: u8,
pub vlb_flags: u8,
}import "golang.org/x/sys/windows"
type DEV_BROADCAST_HDR struct {
dbch_size uint32
dbch_devicetype uint32
dbch_reserved uint32
}
type VolLockBroadcast struct {
vlb_dbh DEV_BROADCAST_HDR
vlb_owner uint32
vlb_perms byte
vlb_lockType byte
vlb_drive byte
vlb_flags byte
}type
DEV_BROADCAST_HDR = record
dbch_size: DWORD;
dbch_devicetype: DWORD;
dbch_reserved: DWORD;
end;
VolLockBroadcast = record
vlb_dbh: DEV_BROADCAST_HDR;
vlb_owner: DWORD;
vlb_perms: Byte;
vlb_lockType: Byte;
vlb_drive: Byte;
vlb_flags: Byte;
end;const DEV_BROADCAST_HDR = extern struct {
dbch_size: u32,
dbch_devicetype: u32,
dbch_reserved: u32,
};
const VolLockBroadcast = extern struct {
vlb_dbh: DEV_BROADCAST_HDR,
vlb_owner: u32,
vlb_perms: u8,
vlb_lockType: u8,
vlb_drive: u8,
vlb_flags: u8,
};type
DEV_BROADCAST_HDR {.bycopy.} = object
dbch_size: uint32
dbch_devicetype: uint32
dbch_reserved: uint32
VolLockBroadcast {.bycopy.} = object
vlb_dbh: DEV_BROADCAST_HDR
vlb_owner: uint32
vlb_perms: uint8
vlb_lockType: uint8
vlb_drive: uint8
vlb_flags: uint8struct DEV_BROADCAST_HDR
{
uint dbch_size;
uint dbch_devicetype;
uint dbch_reserved;
}
struct VolLockBroadcast
{
DEV_BROADCAST_HDR vlb_dbh;
uint vlb_owner;
ubyte vlb_perms;
ubyte vlb_lockType;
ubyte vlb_drive;
ubyte vlb_flags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VolLockBroadcast サイズ: 20 バイト(x64)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; vlb_dbh : DEV_BROADCAST_HDR (+0, 12byte) varptr(st)+0 を基点に操作(12byte:入れ子/配列)
; vlb_owner : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; vlb_perms : BYTE (+16, 1byte) poke st,16,値 / 値 = peek(st,16)
; vlb_lockType : BYTE (+17, 1byte) poke st,17,値 / 値 = peek(st,17)
; vlb_drive : BYTE (+18, 1byte) poke st,18,値 / 値 = peek(st,18)
; vlb_flags : BYTE (+19, 1byte) poke st,19,値 / 値 = peek(st,19)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DEV_BROADCAST_HDR
#field int dbch_size
#field int dbch_devicetype
#field int dbch_reserved
#endstruct
#defstruct global VolLockBroadcast
#field DEV_BROADCAST_HDR vlb_dbh
#field int vlb_owner
#field byte vlb_perms
#field byte vlb_lockType
#field byte vlb_drive
#field byte vlb_flags
#endstruct
stdim st, VolLockBroadcast ; NSTRUCT 変数を確保
st->vlb_owner = 100
mes "vlb_owner=" + st->vlb_owner