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

RtlGetSystemGlobalData

関数
指定IDのシステムグローバルデータを取得する。
DLLntdllk.dll呼出規約winapi

シグネチャ

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

DWORD RtlGetSystemGlobalData(
    RTL_SYSTEM_GLOBAL_DATA_ID DataId,
    void* Buffer,
    DWORD Size
);

パラメーター

名前方向
DataIdRTL_SYSTEM_GLOBAL_DATA_IDin
Buffervoid*inout
SizeDWORDin

戻り値の型: DWORD

各言語での呼び出し定義

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

DWORD RtlGetSystemGlobalData(
    RTL_SYSTEM_GLOBAL_DATA_ID DataId,
    void* Buffer,
    DWORD Size
);
[DllImport("ntdllk.dll", ExactSpelling = true)]
static extern uint RtlGetSystemGlobalData(
    int DataId,   // RTL_SYSTEM_GLOBAL_DATA_ID
    IntPtr Buffer,   // void* in/out
    uint Size   // DWORD
);
<DllImport("ntdllk.dll", ExactSpelling:=True)>
Public Shared Function RtlGetSystemGlobalData(
    DataId As Integer,   ' RTL_SYSTEM_GLOBAL_DATA_ID
    Buffer As IntPtr,   ' void* in/out
    Size As UInteger   ' DWORD
) As UInteger
End Function
' DataId : RTL_SYSTEM_GLOBAL_DATA_ID
' Buffer : void* in/out
' Size : DWORD
Declare PtrSafe Function RtlGetSystemGlobalData Lib "ntdllk" ( _
    ByVal DataId As Long, _
    ByVal Buffer As LongPtr, _
    ByVal Size As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

RtlGetSystemGlobalData = ctypes.windll.ntdllk.RtlGetSystemGlobalData
RtlGetSystemGlobalData.restype = wintypes.DWORD
RtlGetSystemGlobalData.argtypes = [
    ctypes.c_int,  # DataId : RTL_SYSTEM_GLOBAL_DATA_ID
    ctypes.POINTER(None),  # Buffer : void* in/out
    wintypes.DWORD,  # Size : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ntdllk.dll')
RtlGetSystemGlobalData = Fiddle::Function.new(
  lib['RtlGetSystemGlobalData'],
  [
    Fiddle::TYPE_INT,  # DataId : RTL_SYSTEM_GLOBAL_DATA_ID
    Fiddle::TYPE_VOIDP,  # Buffer : void* in/out
    -Fiddle::TYPE_INT,  # Size : DWORD
  ],
  -Fiddle::TYPE_INT)
#[link(name = "ntdllk")]
extern "system" {
    fn RtlGetSystemGlobalData(
        DataId: i32,  // RTL_SYSTEM_GLOBAL_DATA_ID
        Buffer: *mut (),  // void* in/out
        Size: u32  // DWORD
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ntdllk.dll")]
public static extern uint RtlGetSystemGlobalData(int DataId, IntPtr Buffer, uint Size);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ntdllk_RtlGetSystemGlobalData' -Namespace Win32 -PassThru
# $api::RtlGetSystemGlobalData(DataId, Buffer, Size)
#uselib "ntdllk.dll"
#func global RtlGetSystemGlobalData "RtlGetSystemGlobalData" sptr, sptr, sptr
; RtlGetSystemGlobalData DataId, Buffer, Size   ; 戻り値は stat
; DataId : RTL_SYSTEM_GLOBAL_DATA_ID -> "sptr"
; Buffer : void* in/out -> "sptr"
; Size : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "ntdllk.dll"
#cfunc global RtlGetSystemGlobalData "RtlGetSystemGlobalData" int, sptr, int
; res = RtlGetSystemGlobalData(DataId, Buffer, Size)
; DataId : RTL_SYSTEM_GLOBAL_DATA_ID -> "int"
; Buffer : void* in/out -> "sptr"
; Size : DWORD -> "int"
; DWORD RtlGetSystemGlobalData(RTL_SYSTEM_GLOBAL_DATA_ID DataId, void* Buffer, DWORD Size)
#uselib "ntdllk.dll"
#cfunc global RtlGetSystemGlobalData "RtlGetSystemGlobalData" int, intptr, int
; res = RtlGetSystemGlobalData(DataId, Buffer, Size)
; DataId : RTL_SYSTEM_GLOBAL_DATA_ID -> "int"
; Buffer : void* in/out -> "intptr"
; Size : DWORD -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	ntdllk = windows.NewLazySystemDLL("ntdllk.dll")
	procRtlGetSystemGlobalData = ntdllk.NewProc("RtlGetSystemGlobalData")
)

// DataId (RTL_SYSTEM_GLOBAL_DATA_ID), Buffer (void* in/out), Size (DWORD)
r1, _, err := procRtlGetSystemGlobalData.Call(
	uintptr(DataId),
	uintptr(Buffer),
	uintptr(Size),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function RtlGetSystemGlobalData(
  DataId: Integer;   // RTL_SYSTEM_GLOBAL_DATA_ID
  Buffer: Pointer;   // void* in/out
  Size: DWORD   // DWORD
): DWORD; stdcall;
  external 'ntdllk.dll' name 'RtlGetSystemGlobalData';
result := DllCall("ntdllk\RtlGetSystemGlobalData"
    , "Int", DataId   ; RTL_SYSTEM_GLOBAL_DATA_ID
    , "Ptr", Buffer   ; void* in/out
    , "UInt", Size   ; DWORD
    , "UInt")   ; return: DWORD
●RtlGetSystemGlobalData(DataId, Buffer, Size) = DLL("ntdllk.dll", "dword RtlGetSystemGlobalData(int, void*, dword)")
# 呼び出し: RtlGetSystemGlobalData(DataId, Buffer, Size)
# DataId : RTL_SYSTEM_GLOBAL_DATA_ID -> "int"
# Buffer : void* in/out -> "void*"
# Size : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。