ホーム › System.Registry › RegQueryInfoKeyW
RegQueryInfoKeyW
関数指定キーのサブキー数や値数などの情報を取得する。
シグネチャ
// ADVAPI32.dll (Unicode / -W)
#include <windows.h>
WIN32_ERROR RegQueryInfoKeyW(
HKEY hKey,
LPWSTR lpClass, // optional
DWORD* lpcchClass, // optional
DWORD* lpReserved, // optional
DWORD* lpcSubKeys, // optional
DWORD* lpcbMaxSubKeyLen, // optional
DWORD* lpcbMaxClassLen, // optional
DWORD* lpcValues, // optional
DWORD* lpcbMaxValueNameLen, // optional
DWORD* lpcbMaxValueLen, // optional
DWORD* lpcbSecurityDescriptor, // optional
FILETIME* lpftLastWriteTime // optional
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| hKey | HKEY | in |
| lpClass | LPWSTR | outoptional |
| lpcchClass | DWORD* | inoutoptional |
| lpReserved | DWORD* | optional |
| lpcSubKeys | DWORD* | outoptional |
| lpcbMaxSubKeyLen | DWORD* | outoptional |
| lpcbMaxClassLen | DWORD* | outoptional |
| lpcValues | DWORD* | outoptional |
| lpcbMaxValueNameLen | DWORD* | outoptional |
| lpcbMaxValueLen | DWORD* | outoptional |
| lpcbSecurityDescriptor | DWORD* | outoptional |
| lpftLastWriteTime | FILETIME* | outoptional |
戻り値の型: WIN32_ERROR
各言語での呼び出し定義
// ADVAPI32.dll (Unicode / -W)
#include <windows.h>
WIN32_ERROR RegQueryInfoKeyW(
HKEY hKey,
LPWSTR lpClass, // optional
DWORD* lpcchClass, // optional
DWORD* lpReserved, // optional
DWORD* lpcSubKeys, // optional
DWORD* lpcbMaxSubKeyLen, // optional
DWORD* lpcbMaxClassLen, // optional
DWORD* lpcValues, // optional
DWORD* lpcbMaxValueNameLen, // optional
DWORD* lpcbMaxValueLen, // optional
DWORD* lpcbSecurityDescriptor, // optional
FILETIME* lpftLastWriteTime // optional
);[DllImport("ADVAPI32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern uint RegQueryInfoKeyW(
IntPtr hKey, // HKEY
[MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpClass, // LPWSTR optional, out
IntPtr lpcchClass, // DWORD* optional, in/out
IntPtr lpReserved, // DWORD* optional
IntPtr lpcSubKeys, // DWORD* optional, out
IntPtr lpcbMaxSubKeyLen, // DWORD* optional, out
IntPtr lpcbMaxClassLen, // DWORD* optional, out
IntPtr lpcValues, // DWORD* optional, out
IntPtr lpcbMaxValueNameLen, // DWORD* optional, out
IntPtr lpcbMaxValueLen, // DWORD* optional, out
IntPtr lpcbSecurityDescriptor, // DWORD* optional, out
IntPtr lpftLastWriteTime // FILETIME* optional, out
);<DllImport("ADVAPI32.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function RegQueryInfoKeyW(
hKey As IntPtr, ' HKEY
<MarshalAs(UnmanagedType.LPWStr)> lpClass As System.Text.StringBuilder, ' LPWSTR optional, out
lpcchClass As IntPtr, ' DWORD* optional, in/out
lpReserved As IntPtr, ' DWORD* optional
lpcSubKeys As IntPtr, ' DWORD* optional, out
lpcbMaxSubKeyLen As IntPtr, ' DWORD* optional, out
lpcbMaxClassLen As IntPtr, ' DWORD* optional, out
lpcValues As IntPtr, ' DWORD* optional, out
lpcbMaxValueNameLen As IntPtr, ' DWORD* optional, out
lpcbMaxValueLen As IntPtr, ' DWORD* optional, out
lpcbSecurityDescriptor As IntPtr, ' DWORD* optional, out
lpftLastWriteTime As IntPtr ' FILETIME* optional, out
) As UInteger
End Function' hKey : HKEY
' lpClass : LPWSTR optional, out
' lpcchClass : DWORD* optional, in/out
' lpReserved : DWORD* optional
' lpcSubKeys : DWORD* optional, out
' lpcbMaxSubKeyLen : DWORD* optional, out
' lpcbMaxClassLen : DWORD* optional, out
' lpcValues : DWORD* optional, out
' lpcbMaxValueNameLen : DWORD* optional, out
' lpcbMaxValueLen : DWORD* optional, out
' lpcbSecurityDescriptor : DWORD* optional, out
' lpftLastWriteTime : FILETIME* optional, out
Declare PtrSafe Function RegQueryInfoKeyW Lib "advapi32" ( _
ByVal hKey As LongPtr, _
ByVal lpClass As LongPtr, _
ByVal lpcchClass As LongPtr, _
ByVal lpReserved As LongPtr, _
ByVal lpcSubKeys As LongPtr, _
ByVal lpcbMaxSubKeyLen As LongPtr, _
ByVal lpcbMaxClassLen As LongPtr, _
ByVal lpcValues As LongPtr, _
ByVal lpcbMaxValueNameLen As LongPtr, _
ByVal lpcbMaxValueLen As LongPtr, _
ByVal lpcbSecurityDescriptor As LongPtr, _
ByVal lpftLastWriteTime As LongPtr) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
RegQueryInfoKeyW = ctypes.windll.advapi32.RegQueryInfoKeyW
RegQueryInfoKeyW.restype = wintypes.DWORD
RegQueryInfoKeyW.argtypes = [
wintypes.HANDLE, # hKey : HKEY
wintypes.LPWSTR, # lpClass : LPWSTR optional, out
ctypes.POINTER(wintypes.DWORD), # lpcchClass : DWORD* optional, in/out
ctypes.POINTER(wintypes.DWORD), # lpReserved : DWORD* optional
ctypes.POINTER(wintypes.DWORD), # lpcSubKeys : DWORD* optional, out
ctypes.POINTER(wintypes.DWORD), # lpcbMaxSubKeyLen : DWORD* optional, out
ctypes.POINTER(wintypes.DWORD), # lpcbMaxClassLen : DWORD* optional, out
ctypes.POINTER(wintypes.DWORD), # lpcValues : DWORD* optional, out
ctypes.POINTER(wintypes.DWORD), # lpcbMaxValueNameLen : DWORD* optional, out
ctypes.POINTER(wintypes.DWORD), # lpcbMaxValueLen : DWORD* optional, out
ctypes.POINTER(wintypes.DWORD), # lpcbSecurityDescriptor : DWORD* optional, out
ctypes.c_void_p, # lpftLastWriteTime : FILETIME* optional, out
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('ADVAPI32.dll')
RegQueryInfoKeyW = Fiddle::Function.new(
lib['RegQueryInfoKeyW'],
[
Fiddle::TYPE_VOIDP, # hKey : HKEY
Fiddle::TYPE_VOIDP, # lpClass : LPWSTR optional, out
Fiddle::TYPE_VOIDP, # lpcchClass : DWORD* optional, in/out
Fiddle::TYPE_VOIDP, # lpReserved : DWORD* optional
Fiddle::TYPE_VOIDP, # lpcSubKeys : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpcbMaxSubKeyLen : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpcbMaxClassLen : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpcValues : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpcbMaxValueNameLen : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpcbMaxValueLen : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpcbSecurityDescriptor : DWORD* optional, out
Fiddle::TYPE_VOIDP, # lpftLastWriteTime : FILETIME* optional, out
],
-Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"#[link(name = "advapi32")]
extern "system" {
fn RegQueryInfoKeyW(
hKey: *mut core::ffi::c_void, // HKEY
lpClass: *mut u16, // LPWSTR optional, out
lpcchClass: *mut u32, // DWORD* optional, in/out
lpReserved: *mut u32, // DWORD* optional
lpcSubKeys: *mut u32, // DWORD* optional, out
lpcbMaxSubKeyLen: *mut u32, // DWORD* optional, out
lpcbMaxClassLen: *mut u32, // DWORD* optional, out
lpcValues: *mut u32, // DWORD* optional, out
lpcbMaxValueNameLen: *mut u32, // DWORD* optional, out
lpcbMaxValueLen: *mut u32, // DWORD* optional, out
lpcbSecurityDescriptor: *mut u32, // DWORD* optional, out
lpftLastWriteTime: *mut FILETIME // FILETIME* optional, out
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("ADVAPI32.dll", CharSet = CharSet.Unicode)]
public static extern uint RegQueryInfoKeyW(IntPtr hKey, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpClass, IntPtr lpcchClass, IntPtr lpReserved, IntPtr lpcSubKeys, IntPtr lpcbMaxSubKeyLen, IntPtr lpcbMaxClassLen, IntPtr lpcValues, IntPtr lpcbMaxValueNameLen, IntPtr lpcbMaxValueLen, IntPtr lpcbSecurityDescriptor, IntPtr lpftLastWriteTime);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_RegQueryInfoKeyW' -Namespace Win32 -PassThru
# $api::RegQueryInfoKeyW(hKey, lpClass, lpcchClass, lpReserved, lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime)#uselib "ADVAPI32.dll"
#func global RegQueryInfoKeyW "RegQueryInfoKeyW" wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr
; RegQueryInfoKeyW hKey, varptr(lpClass), varptr(lpcchClass), varptr(lpReserved), varptr(lpcSubKeys), varptr(lpcbMaxSubKeyLen), varptr(lpcbMaxClassLen), varptr(lpcValues), varptr(lpcbMaxValueNameLen), varptr(lpcbMaxValueLen), varptr(lpcbSecurityDescriptor), varptr(lpftLastWriteTime) ; 戻り値は stat
; hKey : HKEY -> "wptr"
; lpClass : LPWSTR optional, out -> "wptr"
; lpcchClass : DWORD* optional, in/out -> "wptr"
; lpReserved : DWORD* optional -> "wptr"
; lpcSubKeys : DWORD* optional, out -> "wptr"
; lpcbMaxSubKeyLen : DWORD* optional, out -> "wptr"
; lpcbMaxClassLen : DWORD* optional, out -> "wptr"
; lpcValues : DWORD* optional, out -> "wptr"
; lpcbMaxValueNameLen : DWORD* optional, out -> "wptr"
; lpcbMaxValueLen : DWORD* optional, out -> "wptr"
; lpcbSecurityDescriptor : DWORD* optional, out -> "wptr"
; lpftLastWriteTime : FILETIME* optional, out -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "ADVAPI32.dll" #cfunc global RegQueryInfoKeyW "RegQueryInfoKeyW" sptr, var, var, var, var, var, var, var, var, var, var, var ; res = RegQueryInfoKeyW(hKey, lpClass, lpcchClass, lpReserved, lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime) ; hKey : HKEY -> "sptr" ; lpClass : LPWSTR optional, out -> "var" ; lpcchClass : DWORD* optional, in/out -> "var" ; lpReserved : DWORD* optional -> "var" ; lpcSubKeys : DWORD* optional, out -> "var" ; lpcbMaxSubKeyLen : DWORD* optional, out -> "var" ; lpcbMaxClassLen : DWORD* optional, out -> "var" ; lpcValues : DWORD* optional, out -> "var" ; lpcbMaxValueNameLen : DWORD* optional, out -> "var" ; lpcbMaxValueLen : DWORD* optional, out -> "var" ; lpcbSecurityDescriptor : DWORD* optional, out -> "var" ; lpftLastWriteTime : FILETIME* optional, out -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "ADVAPI32.dll" #cfunc global RegQueryInfoKeyW "RegQueryInfoKeyW" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr ; res = RegQueryInfoKeyW(hKey, varptr(lpClass), varptr(lpcchClass), varptr(lpReserved), varptr(lpcSubKeys), varptr(lpcbMaxSubKeyLen), varptr(lpcbMaxClassLen), varptr(lpcValues), varptr(lpcbMaxValueNameLen), varptr(lpcbMaxValueLen), varptr(lpcbSecurityDescriptor), varptr(lpftLastWriteTime)) ; hKey : HKEY -> "sptr" ; lpClass : LPWSTR optional, out -> "sptr" ; lpcchClass : DWORD* optional, in/out -> "sptr" ; lpReserved : DWORD* optional -> "sptr" ; lpcSubKeys : DWORD* optional, out -> "sptr" ; lpcbMaxSubKeyLen : DWORD* optional, out -> "sptr" ; lpcbMaxClassLen : DWORD* optional, out -> "sptr" ; lpcValues : DWORD* optional, out -> "sptr" ; lpcbMaxValueNameLen : DWORD* optional, out -> "sptr" ; lpcbMaxValueLen : DWORD* optional, out -> "sptr" ; lpcbSecurityDescriptor : DWORD* optional, out -> "sptr" ; lpftLastWriteTime : FILETIME* optional, out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; WIN32_ERROR RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, DWORD* lpcchClass, DWORD* lpReserved, DWORD* lpcSubKeys, DWORD* lpcbMaxSubKeyLen, DWORD* lpcbMaxClassLen, DWORD* lpcValues, DWORD* lpcbMaxValueNameLen, DWORD* lpcbMaxValueLen, DWORD* lpcbSecurityDescriptor, FILETIME* lpftLastWriteTime) #uselib "ADVAPI32.dll" #cfunc global RegQueryInfoKeyW "RegQueryInfoKeyW" intptr, var, var, var, var, var, var, var, var, var, var, var ; res = RegQueryInfoKeyW(hKey, lpClass, lpcchClass, lpReserved, lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime) ; hKey : HKEY -> "intptr" ; lpClass : LPWSTR optional, out -> "var" ; lpcchClass : DWORD* optional, in/out -> "var" ; lpReserved : DWORD* optional -> "var" ; lpcSubKeys : DWORD* optional, out -> "var" ; lpcbMaxSubKeyLen : DWORD* optional, out -> "var" ; lpcbMaxClassLen : DWORD* optional, out -> "var" ; lpcValues : DWORD* optional, out -> "var" ; lpcbMaxValueNameLen : DWORD* optional, out -> "var" ; lpcbMaxValueLen : DWORD* optional, out -> "var" ; lpcbSecurityDescriptor : DWORD* optional, out -> "var" ; lpftLastWriteTime : FILETIME* optional, out -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; WIN32_ERROR RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, DWORD* lpcchClass, DWORD* lpReserved, DWORD* lpcSubKeys, DWORD* lpcbMaxSubKeyLen, DWORD* lpcbMaxClassLen, DWORD* lpcValues, DWORD* lpcbMaxValueNameLen, DWORD* lpcbMaxValueLen, DWORD* lpcbSecurityDescriptor, FILETIME* lpftLastWriteTime) #uselib "ADVAPI32.dll" #cfunc global RegQueryInfoKeyW "RegQueryInfoKeyW" intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr ; res = RegQueryInfoKeyW(hKey, varptr(lpClass), varptr(lpcchClass), varptr(lpReserved), varptr(lpcSubKeys), varptr(lpcbMaxSubKeyLen), varptr(lpcbMaxClassLen), varptr(lpcValues), varptr(lpcbMaxValueNameLen), varptr(lpcbMaxValueLen), varptr(lpcbSecurityDescriptor), varptr(lpftLastWriteTime)) ; hKey : HKEY -> "intptr" ; lpClass : LPWSTR optional, out -> "intptr" ; lpcchClass : DWORD* optional, in/out -> "intptr" ; lpReserved : DWORD* optional -> "intptr" ; lpcSubKeys : DWORD* optional, out -> "intptr" ; lpcbMaxSubKeyLen : DWORD* optional, out -> "intptr" ; lpcbMaxClassLen : DWORD* optional, out -> "intptr" ; lpcValues : DWORD* optional, out -> "intptr" ; lpcbMaxValueNameLen : DWORD* optional, out -> "intptr" ; lpcbMaxValueLen : DWORD* optional, out -> "intptr" ; lpcbSecurityDescriptor : DWORD* optional, out -> "intptr" ; lpftLastWriteTime : FILETIME* optional, out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
procRegQueryInfoKeyW = advapi32.NewProc("RegQueryInfoKeyW")
)
// hKey (HKEY), lpClass (LPWSTR optional, out), lpcchClass (DWORD* optional, in/out), lpReserved (DWORD* optional), lpcSubKeys (DWORD* optional, out), lpcbMaxSubKeyLen (DWORD* optional, out), lpcbMaxClassLen (DWORD* optional, out), lpcValues (DWORD* optional, out), lpcbMaxValueNameLen (DWORD* optional, out), lpcbMaxValueLen (DWORD* optional, out), lpcbSecurityDescriptor (DWORD* optional, out), lpftLastWriteTime (FILETIME* optional, out)
r1, _, err := procRegQueryInfoKeyW.Call(
uintptr(hKey),
uintptr(lpClass),
uintptr(lpcchClass),
uintptr(lpReserved),
uintptr(lpcSubKeys),
uintptr(lpcbMaxSubKeyLen),
uintptr(lpcbMaxClassLen),
uintptr(lpcValues),
uintptr(lpcbMaxValueNameLen),
uintptr(lpcbMaxValueLen),
uintptr(lpcbSecurityDescriptor),
uintptr(lpftLastWriteTime),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // WIN32_ERRORfunction RegQueryInfoKeyW(
hKey: THandle; // HKEY
lpClass: PWideChar; // LPWSTR optional, out
lpcchClass: Pointer; // DWORD* optional, in/out
lpReserved: Pointer; // DWORD* optional
lpcSubKeys: Pointer; // DWORD* optional, out
lpcbMaxSubKeyLen: Pointer; // DWORD* optional, out
lpcbMaxClassLen: Pointer; // DWORD* optional, out
lpcValues: Pointer; // DWORD* optional, out
lpcbMaxValueNameLen: Pointer; // DWORD* optional, out
lpcbMaxValueLen: Pointer; // DWORD* optional, out
lpcbSecurityDescriptor: Pointer; // DWORD* optional, out
lpftLastWriteTime: Pointer // FILETIME* optional, out
): DWORD; stdcall;
external 'ADVAPI32.dll' name 'RegQueryInfoKeyW';result := DllCall("ADVAPI32\RegQueryInfoKeyW"
, "Ptr", hKey ; HKEY
, "Ptr", lpClass ; LPWSTR optional, out
, "Ptr", lpcchClass ; DWORD* optional, in/out
, "Ptr", lpReserved ; DWORD* optional
, "Ptr", lpcSubKeys ; DWORD* optional, out
, "Ptr", lpcbMaxSubKeyLen ; DWORD* optional, out
, "Ptr", lpcbMaxClassLen ; DWORD* optional, out
, "Ptr", lpcValues ; DWORD* optional, out
, "Ptr", lpcbMaxValueNameLen ; DWORD* optional, out
, "Ptr", lpcbMaxValueLen ; DWORD* optional, out
, "Ptr", lpcbSecurityDescriptor ; DWORD* optional, out
, "Ptr", lpftLastWriteTime ; FILETIME* optional, out
, "UInt") ; return: WIN32_ERROR●RegQueryInfoKeyW(hKey, lpClass, lpcchClass, lpReserved, lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime) = DLL("ADVAPI32.dll", "dword RegQueryInfoKeyW(void*, char*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*)")
# 呼び出し: RegQueryInfoKeyW(hKey, lpClass, lpcchClass, lpReserved, lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime)
# hKey : HKEY -> "void*"
# lpClass : LPWSTR optional, out -> "char*"
# lpcchClass : DWORD* optional, in/out -> "void*"
# lpReserved : DWORD* optional -> "void*"
# lpcSubKeys : DWORD* optional, out -> "void*"
# lpcbMaxSubKeyLen : DWORD* optional, out -> "void*"
# lpcbMaxClassLen : DWORD* optional, out -> "void*"
# lpcValues : DWORD* optional, out -> "void*"
# lpcbMaxValueNameLen : DWORD* optional, out -> "void*"
# lpcbMaxValueLen : DWORD* optional, out -> "void*"
# lpcbSecurityDescriptor : DWORD* optional, out -> "void*"
# lpftLastWriteTime : FILETIME* optional, out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。