Win32 API 日本語リファレンス
ホームSystem.Console › RegisterConsoleVDM

RegisterConsoleVDM

関数
仮想DOSマシンをコンソールサブシステムに登録する内部関数。
DLLKERNEL32.dll呼出規約winapi

シグネチャ

// KERNEL32.dll
#include <windows.h>

BOOL RegisterConsoleVDM(
    DWORD dwRegisterFlags,
    HANDLE hStartHardwareEvent,
    HANDLE hEndHardwareEvent,
    HANDLE hErrorhardwareEvent,
    DWORD Reserved,   // optional
    DWORD* lpStateLength,
    void** lpState,
    COORD VDMBufferSize,   // optional
    void** lpVDMBuffer
);

パラメーター

名前方向
dwRegisterFlagsDWORDin
hStartHardwareEventHANDLEin
hEndHardwareEventHANDLEin
hErrorhardwareEventHANDLEin
ReservedDWORDoptional
lpStateLengthDWORD*out
lpStatevoid**out
VDMBufferSizeCOORDinoptional
lpVDMBuffervoid**out

戻り値の型: BOOL

各言語での呼び出し定義

// KERNEL32.dll
#include <windows.h>

BOOL RegisterConsoleVDM(
    DWORD dwRegisterFlags,
    HANDLE hStartHardwareEvent,
    HANDLE hEndHardwareEvent,
    HANDLE hErrorhardwareEvent,
    DWORD Reserved,   // optional
    DWORD* lpStateLength,
    void** lpState,
    COORD VDMBufferSize,   // optional
    void** lpVDMBuffer
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("KERNEL32.dll", ExactSpelling = true)]
static extern bool RegisterConsoleVDM(
    uint dwRegisterFlags,   // DWORD
    IntPtr hStartHardwareEvent,   // HANDLE
    IntPtr hEndHardwareEvent,   // HANDLE
    IntPtr hErrorhardwareEvent,   // HANDLE
    uint Reserved,   // DWORD optional
    out uint lpStateLength,   // DWORD* out
    IntPtr lpState,   // void** out
    COORD VDMBufferSize,   // COORD optional
    IntPtr lpVDMBuffer   // void** out
);
<DllImport("KERNEL32.dll", ExactSpelling:=True)>
Public Shared Function RegisterConsoleVDM(
    dwRegisterFlags As UInteger,   ' DWORD
    hStartHardwareEvent As IntPtr,   ' HANDLE
    hEndHardwareEvent As IntPtr,   ' HANDLE
    hErrorhardwareEvent As IntPtr,   ' HANDLE
    Reserved As UInteger,   ' DWORD optional
    <Out> ByRef lpStateLength As UInteger,   ' DWORD* out
    lpState As IntPtr,   ' void** out
    VDMBufferSize As COORD,   ' COORD optional
    lpVDMBuffer As IntPtr   ' void** out
) As Boolean
End Function
' dwRegisterFlags : DWORD
' hStartHardwareEvent : HANDLE
' hEndHardwareEvent : HANDLE
' hErrorhardwareEvent : HANDLE
' Reserved : DWORD optional
' lpStateLength : DWORD* out
' lpState : void** out
' VDMBufferSize : COORD optional
' lpVDMBuffer : void** out
Declare PtrSafe Function RegisterConsoleVDM Lib "kernel32" ( _
    ByVal dwRegisterFlags As Long, _
    ByVal hStartHardwareEvent As LongPtr, _
    ByVal hEndHardwareEvent As LongPtr, _
    ByVal hErrorhardwareEvent As LongPtr, _
    ByVal Reserved As Long, _
    ByRef lpStateLength As Long, _
    ByVal lpState As LongPtr, _
    ByVal VDMBufferSize As LongPtr, _
    ByVal lpVDMBuffer As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

RegisterConsoleVDM = ctypes.windll.kernel32.RegisterConsoleVDM
RegisterConsoleVDM.restype = wintypes.BOOL
RegisterConsoleVDM.argtypes = [
    wintypes.DWORD,  # dwRegisterFlags : DWORD
    wintypes.HANDLE,  # hStartHardwareEvent : HANDLE
    wintypes.HANDLE,  # hEndHardwareEvent : HANDLE
    wintypes.HANDLE,  # hErrorhardwareEvent : HANDLE
    wintypes.DWORD,  # Reserved : DWORD optional
    ctypes.POINTER(wintypes.DWORD),  # lpStateLength : DWORD* out
    ctypes.c_void_p,  # lpState : void** out
    COORD,  # VDMBufferSize : COORD optional
    ctypes.c_void_p,  # lpVDMBuffer : void** out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('KERNEL32.dll')
RegisterConsoleVDM = Fiddle::Function.new(
  lib['RegisterConsoleVDM'],
  [
    -Fiddle::TYPE_INT,  # dwRegisterFlags : DWORD
    Fiddle::TYPE_VOIDP,  # hStartHardwareEvent : HANDLE
    Fiddle::TYPE_VOIDP,  # hEndHardwareEvent : HANDLE
    Fiddle::TYPE_VOIDP,  # hErrorhardwareEvent : HANDLE
    -Fiddle::TYPE_INT,  # Reserved : DWORD optional
    Fiddle::TYPE_VOIDP,  # lpStateLength : DWORD* out
    Fiddle::TYPE_VOIDP,  # lpState : void** out
    Fiddle::TYPE_VOIDP,  # VDMBufferSize : COORD optional
    Fiddle::TYPE_VOIDP,  # lpVDMBuffer : void** out
  ],
  Fiddle::TYPE_INT)
#[link(name = "kernel32")]
extern "system" {
    fn RegisterConsoleVDM(
        dwRegisterFlags: u32,  // DWORD
        hStartHardwareEvent: *mut core::ffi::c_void,  // HANDLE
        hEndHardwareEvent: *mut core::ffi::c_void,  // HANDLE
        hErrorhardwareEvent: *mut core::ffi::c_void,  // HANDLE
        Reserved: u32,  // DWORD optional
        lpStateLength: *mut u32,  // DWORD* out
        lpState: *mut *mut (),  // void** out
        VDMBufferSize: COORD,  // COORD optional
        lpVDMBuffer: *mut *mut ()  // void** out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("KERNEL32.dll")]
public static extern bool RegisterConsoleVDM(uint dwRegisterFlags, IntPtr hStartHardwareEvent, IntPtr hEndHardwareEvent, IntPtr hErrorhardwareEvent, uint Reserved, out uint lpStateLength, IntPtr lpState, COORD VDMBufferSize, IntPtr lpVDMBuffer);
"@
$api = Add-Type -MemberDefinition $sig -Name 'KERNEL32_RegisterConsoleVDM' -Namespace Win32 -PassThru
# $api::RegisterConsoleVDM(dwRegisterFlags, hStartHardwareEvent, hEndHardwareEvent, hErrorhardwareEvent, Reserved, lpStateLength, lpState, VDMBufferSize, lpVDMBuffer)
#uselib "KERNEL32.dll"
#func global RegisterConsoleVDM "RegisterConsoleVDM" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; RegisterConsoleVDM dwRegisterFlags, hStartHardwareEvent, hEndHardwareEvent, hErrorhardwareEvent, Reserved, varptr(lpStateLength), lpState, VDMBufferSize, lpVDMBuffer   ; 戻り値は stat
; dwRegisterFlags : DWORD -> "sptr"
; hStartHardwareEvent : HANDLE -> "sptr"
; hEndHardwareEvent : HANDLE -> "sptr"
; hErrorhardwareEvent : HANDLE -> "sptr"
; Reserved : DWORD optional -> "sptr"
; lpStateLength : DWORD* out -> "sptr"
; lpState : void** out -> "sptr"
; VDMBufferSize : COORD optional -> "sptr"
; lpVDMBuffer : void** out -> "sptr"
; ※値渡し構造体は直接渡せません。intにパック、または var で構造体変数を渡してください。
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "KERNEL32.dll"
#cfunc global RegisterConsoleVDM "RegisterConsoleVDM" int, sptr, sptr, sptr, int, var, sptr, int, sptr
; res = RegisterConsoleVDM(dwRegisterFlags, hStartHardwareEvent, hEndHardwareEvent, hErrorhardwareEvent, Reserved, lpStateLength, lpState, VDMBufferSize, lpVDMBuffer)
; dwRegisterFlags : DWORD -> "int"
; hStartHardwareEvent : HANDLE -> "sptr"
; hEndHardwareEvent : HANDLE -> "sptr"
; hErrorhardwareEvent : HANDLE -> "sptr"
; Reserved : DWORD optional -> "int"
; lpStateLength : DWORD* out -> "var"
; lpState : void** out -> "sptr"
; VDMBufferSize : COORD optional -> "int"
; lpVDMBuffer : void** out -> "sptr"
; ※値渡し構造体は直接渡せません。intにパック、または var で構造体変数を渡してください。
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; BOOL RegisterConsoleVDM(DWORD dwRegisterFlags, HANDLE hStartHardwareEvent, HANDLE hEndHardwareEvent, HANDLE hErrorhardwareEvent, DWORD Reserved, DWORD* lpStateLength, void** lpState, COORD VDMBufferSize, void** lpVDMBuffer)
#uselib "KERNEL32.dll"
#cfunc global RegisterConsoleVDM "RegisterConsoleVDM" int, intptr, intptr, intptr, int, var, intptr, int, intptr
; res = RegisterConsoleVDM(dwRegisterFlags, hStartHardwareEvent, hEndHardwareEvent, hErrorhardwareEvent, Reserved, lpStateLength, lpState, VDMBufferSize, lpVDMBuffer)
; dwRegisterFlags : DWORD -> "int"
; hStartHardwareEvent : HANDLE -> "intptr"
; hEndHardwareEvent : HANDLE -> "intptr"
; hErrorhardwareEvent : HANDLE -> "intptr"
; Reserved : DWORD optional -> "int"
; lpStateLength : DWORD* out -> "var"
; lpState : void** out -> "intptr"
; VDMBufferSize : COORD optional -> "int"
; lpVDMBuffer : void** out -> "intptr"
; ※値渡し構造体は直接渡せません。intにパック、または var で構造体変数を渡してください。
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	kernel32 = windows.NewLazySystemDLL("KERNEL32.dll")
	procRegisterConsoleVDM = kernel32.NewProc("RegisterConsoleVDM")
)

// dwRegisterFlags (DWORD), hStartHardwareEvent (HANDLE), hEndHardwareEvent (HANDLE), hErrorhardwareEvent (HANDLE), Reserved (DWORD optional), lpStateLength (DWORD* out), lpState (void** out), VDMBufferSize (COORD optional), lpVDMBuffer (void** out)
r1, _, err := procRegisterConsoleVDM.Call(
	uintptr(dwRegisterFlags),
	uintptr(hStartHardwareEvent),
	uintptr(hEndHardwareEvent),
	uintptr(hErrorhardwareEvent),
	uintptr(Reserved),
	uintptr(lpStateLength),
	uintptr(lpState),
	uintptr(VDMBufferSize),
	uintptr(lpVDMBuffer),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // BOOL
function RegisterConsoleVDM(
  dwRegisterFlags: DWORD;   // DWORD
  hStartHardwareEvent: THandle;   // HANDLE
  hEndHardwareEvent: THandle;   // HANDLE
  hErrorhardwareEvent: THandle;   // HANDLE
  Reserved: DWORD;   // DWORD optional
  lpStateLength: Pointer;   // DWORD* out
  lpState: Pointer;   // void** out
  VDMBufferSize: COORD;   // COORD optional
  lpVDMBuffer: Pointer   // void** out
): BOOL; stdcall;
  external 'KERNEL32.dll' name 'RegisterConsoleVDM';
result := DllCall("KERNEL32\RegisterConsoleVDM"
    , "UInt", dwRegisterFlags   ; DWORD
    , "Ptr", hStartHardwareEvent   ; HANDLE
    , "Ptr", hEndHardwareEvent   ; HANDLE
    , "Ptr", hErrorhardwareEvent   ; HANDLE
    , "UInt", Reserved   ; DWORD optional
    , "Ptr", lpStateLength   ; DWORD* out
    , "Ptr", lpState   ; void** out
    , "Ptr", VDMBufferSize   ; COORD optional
    , "Ptr", lpVDMBuffer   ; void** out
    , "Int")   ; return: BOOL
●RegisterConsoleVDM(dwRegisterFlags, hStartHardwareEvent, hEndHardwareEvent, hErrorhardwareEvent, Reserved, lpStateLength, lpState, VDMBufferSize, lpVDMBuffer) = DLL("KERNEL32.dll", "bool RegisterConsoleVDM(dword, void*, void*, void*, dword, void*, void*, void*, void*)")
# 呼び出し: RegisterConsoleVDM(dwRegisterFlags, hStartHardwareEvent, hEndHardwareEvent, hErrorhardwareEvent, Reserved, lpStateLength, lpState, VDMBufferSize, lpVDMBuffer)
# dwRegisterFlags : DWORD -> "dword"
# hStartHardwareEvent : HANDLE -> "void*"
# hEndHardwareEvent : HANDLE -> "void*"
# hErrorhardwareEvent : HANDLE -> "void*"
# Reserved : DWORD optional -> "dword"
# lpStateLength : DWORD* out -> "void*"
# lpState : void** out -> "void*"
# VDMBufferSize : COORD optional -> "void*"
# lpVDMBuffer : void** out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。