ホーム › Devices.DeviceAndDriverInstallation › DEVPRIVATE_RESOURCE
DEVPRIVATE_RESOURCE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| PRV_Header | DEVPRIVATE_DES | 24 | +0 | +0 | 私的リソースの記述子ヘッダ(DEVPRIVATE_DES)。 |
| PRV_Data | DEVPRIVATE_RANGE | 12 | +24 | +24 | 私的範囲データの先頭(DEVPRIVATE_RANGE)。可変長配列の起点。 |
各言語での定義
#include <windows.h>
// DEVPRIVATE_DES (x64 24 / x86 24 バイト)
#pragma pack(push, 1)
typedef struct DEVPRIVATE_DES {
DWORD PD_Count;
DWORD PD_Type;
DWORD PD_Data1;
DWORD PD_Data2;
DWORD PD_Data3;
DWORD PD_Flags;
} DEVPRIVATE_DES;
#pragma pack(pop)
// DEVPRIVATE_RANGE (x64 12 / x86 12 バイト)
#pragma pack(push, 1)
typedef struct DEVPRIVATE_RANGE {
DWORD PR_Data1;
DWORD PR_Data2;
DWORD PR_Data3;
} DEVPRIVATE_RANGE;
#pragma pack(pop)
// DEVPRIVATE_RESOURCE (x64 36 / x86 36 バイト)
#pragma pack(push, 1)
typedef struct DEVPRIVATE_RESOURCE {
DEVPRIVATE_DES PRV_Header;
DEVPRIVATE_RANGE PRV_Data[1];
} DEVPRIVATE_RESOURCE;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DEVPRIVATE_DES
{
public uint PD_Count;
public uint PD_Type;
public uint PD_Data1;
public uint PD_Data2;
public uint PD_Data3;
public uint PD_Flags;
}
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DEVPRIVATE_RANGE
{
public uint PR_Data1;
public uint PR_Data2;
public uint PR_Data3;
}
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct DEVPRIVATE_RESOURCE
{
public DEVPRIVATE_DES PRV_Header;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public DEVPRIVATE_RANGE[] PRV_Data;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DEVPRIVATE_DES
Public PD_Count As UInteger
Public PD_Type As UInteger
Public PD_Data1 As UInteger
Public PD_Data2 As UInteger
Public PD_Data3 As UInteger
Public PD_Flags As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DEVPRIVATE_RANGE
Public PR_Data1 As UInteger
Public PR_Data2 As UInteger
Public PR_Data3 As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure DEVPRIVATE_RESOURCE
Public PRV_Header As DEVPRIVATE_DES
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public PRV_Data() As DEVPRIVATE_RANGE
End Structureimport ctypes
from ctypes import wintypes
class DEVPRIVATE_DES(ctypes.Structure):
_pack_ = 1
_fields_ = [
("PD_Count", wintypes.DWORD),
("PD_Type", wintypes.DWORD),
("PD_Data1", wintypes.DWORD),
("PD_Data2", wintypes.DWORD),
("PD_Data3", wintypes.DWORD),
("PD_Flags", wintypes.DWORD),
]
class DEVPRIVATE_RANGE(ctypes.Structure):
_pack_ = 1
_fields_ = [
("PR_Data1", wintypes.DWORD),
("PR_Data2", wintypes.DWORD),
("PR_Data3", wintypes.DWORD),
]
class DEVPRIVATE_RESOURCE(ctypes.Structure):
_pack_ = 1
_fields_ = [
("PRV_Header", DEVPRIVATE_DES),
("PRV_Data", DEVPRIVATE_RANGE * 1),
]#[repr(C, packed(1))]
pub struct DEVPRIVATE_DES {
pub PD_Count: u32,
pub PD_Type: u32,
pub PD_Data1: u32,
pub PD_Data2: u32,
pub PD_Data3: u32,
pub PD_Flags: u32,
}
#[repr(C, packed(1))]
pub struct DEVPRIVATE_RANGE {
pub PR_Data1: u32,
pub PR_Data2: u32,
pub PR_Data3: u32,
}
#[repr(C, packed(1))]
pub struct DEVPRIVATE_RESOURCE {
pub PRV_Header: DEVPRIVATE_DES,
pub PRV_Data: [DEVPRIVATE_RANGE; 1],
}import "golang.org/x/sys/windows"
type DEVPRIVATE_DES struct {
PD_Count uint32
PD_Type uint32
PD_Data1 uint32
PD_Data2 uint32
PD_Data3 uint32
PD_Flags uint32
}
type DEVPRIVATE_RANGE struct {
PR_Data1 uint32
PR_Data2 uint32
PR_Data3 uint32
}
type DEVPRIVATE_RESOURCE struct {
PRV_Header DEVPRIVATE_DES
PRV_Data [1]DEVPRIVATE_RANGE
}type
DEVPRIVATE_DES = packed record
PD_Count: DWORD;
PD_Type: DWORD;
PD_Data1: DWORD;
PD_Data2: DWORD;
PD_Data3: DWORD;
PD_Flags: DWORD;
end;
DEVPRIVATE_RANGE = packed record
PR_Data1: DWORD;
PR_Data2: DWORD;
PR_Data3: DWORD;
end;
DEVPRIVATE_RESOURCE = packed record
PRV_Header: DEVPRIVATE_DES;
PRV_Data: array[0..0] of DEVPRIVATE_RANGE;
end;const DEVPRIVATE_DES = extern struct {
PD_Count: u32,
PD_Type: u32,
PD_Data1: u32,
PD_Data2: u32,
PD_Data3: u32,
PD_Flags: u32,
};
const DEVPRIVATE_RANGE = extern struct {
PR_Data1: u32,
PR_Data2: u32,
PR_Data3: u32,
};
const DEVPRIVATE_RESOURCE = extern struct {
PRV_Header: DEVPRIVATE_DES,
PRV_Data: [1]DEVPRIVATE_RANGE,
};type
DEVPRIVATE_DES {.packed.} = object
PD_Count: uint32
PD_Type: uint32
PD_Data1: uint32
PD_Data2: uint32
PD_Data3: uint32
PD_Flags: uint32
DEVPRIVATE_RANGE {.packed.} = object
PR_Data1: uint32
PR_Data2: uint32
PR_Data3: uint32
DEVPRIVATE_RESOURCE {.packed.} = object
PRV_Header: DEVPRIVATE_DES
PRV_Data: array[1, DEVPRIVATE_RANGE]align(1)
struct DEVPRIVATE_DES
{
uint PD_Count;
uint PD_Type;
uint PD_Data1;
uint PD_Data2;
uint PD_Data3;
uint PD_Flags;
}
align(1)
struct DEVPRIVATE_RANGE
{
uint PR_Data1;
uint PR_Data2;
uint PR_Data3;
}
align(1)
struct DEVPRIVATE_RESOURCE
{
DEVPRIVATE_DES PRV_Header;
DEVPRIVATE_RANGE[1] PRV_Data;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DEVPRIVATE_RESOURCE サイズ: 36 バイト(x64)
dim st, 9 ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; PRV_Header : DEVPRIVATE_DES (+0, 24byte) varptr(st)+0 を基点に操作(24byte:入れ子/配列)
; PRV_Data : DEVPRIVATE_RANGE (+24, 12byte) varptr(st)+24 を基点に操作(12byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DEVPRIVATE_DES, pack=1
#field int PD_Count
#field int PD_Type
#field int PD_Data1
#field int PD_Data2
#field int PD_Data3
#field int PD_Flags
#endstruct
#defstruct global DEVPRIVATE_RANGE, pack=1
#field int PR_Data1
#field int PR_Data2
#field int PR_Data3
#endstruct
#defstruct global DEVPRIVATE_RESOURCE, pack=1
#field DEVPRIVATE_DES PRV_Header
#field DEVPRIVATE_RANGE PRV_Data 1
#endstruct
stdim st, DEVPRIVATE_RESOURCE ; NSTRUCT 変数を確保