Win32 API 日本語リファレンス
ホーム › Security.Authentication.Identity › LsaEnumerateTrustedDomains

LsaEnumerateTrustedDomains

関数
ポリシーに登録された信頼ドメインの一覧を列挙する。
DLLADVAPI32.dll呼出規約winapi対応OSWindows XP 以降

シグネチャ

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

NTSTATUS LsaEnumerateTrustedDomains(
    LSA_HANDLE PolicyHandle,
    DWORD* EnumerationContext,
    void** Buffer,
    DWORD PreferedMaximumLength,
    DWORD* CountReturned
);

パラメーター

名前型方向説明
PolicyHandleLSA_HANDLEinPolicy オブジェクトへのハンドル。このハンドルには POLICY_VIEW_LOCAL_INFORMATION アクセス権が必要です。詳細については、 ポリシー オブジェクト ハンドルを開くを参照してください。
EnumerationContextDWORD*inoutすべての信頼されたドメインを列挙するために複数回の呼び出しを行えるようにする列挙ハンドルへのポインター。LsaEnumerateTrustedDomains の最初の呼び出しでは、EnumerationContext はゼロに初期化された変数を指している必要があります。以降の LsaEnumerateTrustedDomains の呼び出しでは、EnumerationContext は前回の呼び出しで返された列挙ハンドルを指している必要があります。
Buffervoid**out

1 つ以上の信頼されたドメインの名前と SID を含む LSA_TRUST_INFORMATION 構造体の配列へのポインターを受け取ります。

この情報が不要になったら、返されたポインターを LsaFreeMemory に渡してください。

PreferedMaximumLengthDWORDin返されるバッファーの推奨最大サイズ (バイト単位) を指定します。この値は目安であり、実際に返されるバイト数はこの値より大きくなることがあります。
CountReturnedDWORD*outBuffer パラメーターで返される要素の数を受け取る変数へのポインター。

戻り値の型: NTSTATUS

公式ドキュメント

LsaEnumerateTrustedDomains 関数は、ログオン資格情報の認証を信頼されているドメインの名前と SID を取得します。

戻り値

関数が成功した場合、戻り値は次の NTSTATUS 値のいずれかです。

値 説明
STATUS_SUCCESS
列挙が正常に完了しました。
STATUS_MORE_ENTRIES
呼び出しは成功しましたが、列挙すべき信頼されたドメインがまだ残っています。EnumerationContext パラメーターで返された値を渡して、LsaEnumerateTrustedDomains を再度呼び出してください。
STATUS_NO_MORE_ENTRIES
列挙すべき信頼されたドメインはこれ以上ありません。

関数が失敗した場合、戻り値は NTSTATUS コードです。詳細については、 LSA ポリシー関数の戻り値を参照してください。

LsaNtStatusToWinError 関数を使用して、NTSTATUS コードを Windows エラー コードに変換できます。

解説(Remarks)

ドメイン コントローラーが Windows NT 4.0 以前のバージョンの Windows NT のみで動作しているドメインでは、LsaEnumerateTrustedDomains はすべての信頼されたドメインの一覧を返します。Windows NT 4.0 までのリリースでは、すべての信頼されたドメインは直接信頼されています。

Windows XP および Windows 2000 の混在モード ドメインでは、ドメイン コントローラーは Windows XP、Windows 2000、または Windows NT で動作している可能性があります。そのため、混在モード ドメインでは、直接信頼されているドメインと間接的に信頼されているドメインが混在します。混在モード ドメイン内のシステムの信頼されたドメインを列挙する場合、LsaEnumerateTrustedDomains は直接信頼されているドメインのみを返します。

これに対し、Windows XP および Windows 2000 のネイティブ モード ドメインには Windows 2000 ドメイン コントローラーのみが含まれます (ドメイン内に Windows NT 4.0 以前のバージョンを実行しているメンバーが存在する場合でも同様です)。ネイティブ モードの Windows XP および Windows 2000 ドメイン内のシステムの信頼されたドメインを列挙する場合、LsaEnumerateTrustedDomains は直接信頼されているドメインと間接的に信頼されているドメインの両方を返します。

すべての信頼情報を取得するには、LsaEnumerateTrustedDomains を複数回呼び出す必要がある場合があります。EnumerationContext パラメーターを使用して、次のように複数回の呼び出しを行えます。最初の呼び出しでは、EnumerationContext が指す変数をゼロに設定します。LsaEnumerateTrustedDomains が STATUS_SUCCESS または STATUS_MORE_ENTRIES を返した場合は、前回の呼び出しで返された EnumerationContext の値を渡して関数を再度呼び出します。関数が STATUS_NO_MORE_ENTRIES を返した時点で列挙は完了です。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

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

NTSTATUS LsaEnumerateTrustedDomains(
    LSA_HANDLE PolicyHandle,
    DWORD* EnumerationContext,
    void** Buffer,
    DWORD PreferedMaximumLength,
    DWORD* CountReturned
);
[DllImport("ADVAPI32.dll", ExactSpelling = true)]
static extern int LsaEnumerateTrustedDomains(
    IntPtr PolicyHandle,   // LSA_HANDLE
    ref uint EnumerationContext,   // DWORD* in/out
    IntPtr Buffer,   // void** out
    uint PreferedMaximumLength,   // DWORD
    out uint CountReturned   // DWORD* out
);
<DllImport("ADVAPI32.dll", ExactSpelling:=True)>
Public Shared Function LsaEnumerateTrustedDomains(
    PolicyHandle As IntPtr,   ' LSA_HANDLE
    ByRef EnumerationContext As UInteger,   ' DWORD* in/out
    Buffer As IntPtr,   ' void** out
    PreferedMaximumLength As UInteger,   ' DWORD
    <Out> ByRef CountReturned As UInteger   ' DWORD* out
) As Integer
End Function
' PolicyHandle : LSA_HANDLE
' EnumerationContext : DWORD* in/out
' Buffer : void** out
' PreferedMaximumLength : DWORD
' CountReturned : DWORD* out
Declare PtrSafe Function LsaEnumerateTrustedDomains Lib "advapi32" ( _
    ByVal PolicyHandle As LongPtr, _
    ByRef EnumerationContext As Long, _
    ByVal Buffer As LongPtr, _
    ByVal PreferedMaximumLength As Long, _
    ByRef CountReturned As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

LsaEnumerateTrustedDomains = ctypes.windll.advapi32.LsaEnumerateTrustedDomains
LsaEnumerateTrustedDomains.restype = ctypes.c_int
LsaEnumerateTrustedDomains.argtypes = [
    ctypes.c_ssize_t,  # PolicyHandle : LSA_HANDLE
    ctypes.POINTER(wintypes.DWORD),  # EnumerationContext : DWORD* in/out
    ctypes.c_void_p,  # Buffer : void** out
    wintypes.DWORD,  # PreferedMaximumLength : DWORD
    ctypes.POINTER(wintypes.DWORD),  # CountReturned : DWORD* out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ADVAPI32.dll')
LsaEnumerateTrustedDomains = Fiddle::Function.new(
  lib['LsaEnumerateTrustedDomains'],
  [
    Fiddle::TYPE_INTPTR_T,  # PolicyHandle : LSA_HANDLE
    Fiddle::TYPE_VOIDP,  # EnumerationContext : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # Buffer : void** out
    -Fiddle::TYPE_INT,  # PreferedMaximumLength : DWORD
    Fiddle::TYPE_VOIDP,  # CountReturned : DWORD* out
  ],
  Fiddle::TYPE_INT)
#[link(name = "advapi32")]
extern "system" {
    fn LsaEnumerateTrustedDomains(
        PolicyHandle: isize,  // LSA_HANDLE
        EnumerationContext: *mut u32,  // DWORD* in/out
        Buffer: *mut *mut (),  // void** out
        PreferedMaximumLength: u32,  // DWORD
        CountReturned: *mut u32  // DWORD* out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ADVAPI32.dll")]
public static extern int LsaEnumerateTrustedDomains(IntPtr PolicyHandle, ref uint EnumerationContext, IntPtr Buffer, uint PreferedMaximumLength, out uint CountReturned);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_LsaEnumerateTrustedDomains' -Namespace Win32 -PassThru
# $api::LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
#uselib "ADVAPI32.dll"
#func global LsaEnumerateTrustedDomains "LsaEnumerateTrustedDomains" sptr, sptr, sptr, sptr, sptr
; LsaEnumerateTrustedDomains PolicyHandle, varptr(EnumerationContext), Buffer, PreferedMaximumLength, varptr(CountReturned)   ; 戻り値は stat
; PolicyHandle : LSA_HANDLE -> "sptr"
; EnumerationContext : DWORD* in/out -> "sptr"
; Buffer : void** out -> "sptr"
; PreferedMaximumLength : DWORD -> "sptr"
; CountReturned : DWORD* out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "ADVAPI32.dll"
#cfunc global LsaEnumerateTrustedDomains "LsaEnumerateTrustedDomains" sptr, var, sptr, int, var
; res = LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
; PolicyHandle : LSA_HANDLE -> "sptr"
; EnumerationContext : DWORD* in/out -> "var"
; Buffer : void** out -> "sptr"
; PreferedMaximumLength : DWORD -> "int"
; CountReturned : DWORD* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; NTSTATUS LsaEnumerateTrustedDomains(LSA_HANDLE PolicyHandle, DWORD* EnumerationContext, void** Buffer, DWORD PreferedMaximumLength, DWORD* CountReturned)
#uselib "ADVAPI32.dll"
#cfunc global LsaEnumerateTrustedDomains "LsaEnumerateTrustedDomains" intptr, var, intptr, int, var
; res = LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
; PolicyHandle : LSA_HANDLE -> "intptr"
; EnumerationContext : DWORD* in/out -> "var"
; Buffer : void** out -> "intptr"
; PreferedMaximumLength : DWORD -> "int"
; CountReturned : DWORD* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
	procLsaEnumerateTrustedDomains = advapi32.NewProc("LsaEnumerateTrustedDomains")
)

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

extern "advapi32" fn LsaEnumerateTrustedDomains(
    PolicyHandle: isize, // LSA_HANDLE
    EnumerationContext: [*c]u32, // DWORD* in/out
    Buffer: ?*anyopaque, // void** out
    PreferedMaximumLength: u32, // DWORD
    CountReturned: [*c]u32 // DWORD* out
) callconv(std.os.windows.WINAPI) i32;
proc LsaEnumerateTrustedDomains(
    PolicyHandle: int,  # LSA_HANDLE
    EnumerationContext: ptr uint32,  # DWORD* in/out
    Buffer: pointer,  # void** out
    PreferedMaximumLength: uint32,  # DWORD
    CountReturned: ptr uint32  # DWORD* out
): int32 {.importc: "LsaEnumerateTrustedDomains", stdcall, dynlib: "ADVAPI32.dll".}
pragma(lib, "advapi32");
extern(Windows)
int LsaEnumerateTrustedDomains(
    ptrdiff_t PolicyHandle,   // LSA_HANDLE
    uint* EnumerationContext,   // DWORD* in/out
    void** Buffer,   // void** out
    uint PreferedMaximumLength,   // DWORD
    uint* CountReturned   // DWORD* out
);
ccall((:LsaEnumerateTrustedDomains, "ADVAPI32.dll"), stdcall, Int32,
      (Int, Ptr{UInt32}, Ptr{Cvoid}, UInt32, Ptr{UInt32}),
      PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
# PolicyHandle : LSA_HANDLE -> Int
# EnumerationContext : DWORD* in/out -> Ptr{UInt32}
# Buffer : void** out -> Ptr{Cvoid}
# PreferedMaximumLength : DWORD -> UInt32
# CountReturned : DWORD* out -> Ptr{UInt32}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t LsaEnumerateTrustedDomains(
    intptr_t PolicyHandle,
    uint32_t* EnumerationContext,
    void** Buffer,
    uint32_t PreferedMaximumLength,
    uint32_t* CountReturned);
]]
local advapi32 = ffi.load("advapi32")
-- advapi32.LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
-- PolicyHandle : LSA_HANDLE
-- EnumerationContext : DWORD* in/out
-- Buffer : void** out
-- PreferedMaximumLength : DWORD
-- CountReturned : DWORD* out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('ADVAPI32.dll');
const LsaEnumerateTrustedDomains = lib.func('__stdcall', 'LsaEnumerateTrustedDomains', 'int32_t', ['intptr_t', 'uint32_t *', 'void *', 'uint32_t', 'uint32_t *']);
// LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
// PolicyHandle : LSA_HANDLE -> 'intptr_t'
// EnumerationContext : DWORD* in/out -> 'uint32_t *'
// Buffer : void** out -> 'void *'
// PreferedMaximumLength : DWORD -> 'uint32_t'
// CountReturned : DWORD* out -> 'uint32_t *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("ADVAPI32.dll", {
  LsaEnumerateTrustedDomains: { parameters: ["isize", "pointer", "pointer", "u32", "pointer"], result: "i32" },
});
// lib.symbols.LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned)
// PolicyHandle : LSA_HANDLE -> "isize"
// EnumerationContext : DWORD* in/out -> "pointer"
// Buffer : void** out -> "pointer"
// PreferedMaximumLength : DWORD -> "u32"
// CountReturned : DWORD* out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t LsaEnumerateTrustedDomains(
    intptr_t PolicyHandle,
    uint32_t* EnumerationContext,
    void** Buffer,
    uint32_t PreferedMaximumLength,
    uint32_t* CountReturned);
C, "ADVAPI32.dll");
// $ffi->LsaEnumerateTrustedDomains(PolicyHandle, EnumerationContext, Buffer, PreferedMaximumLength, CountReturned);
// PolicyHandle : LSA_HANDLE
// EnumerationContext : DWORD* in/out
// Buffer : void** out
// PreferedMaximumLength : DWORD
// CountReturned : DWORD* out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Advapi32 extends StdCallLibrary {
    Advapi32 INSTANCE = Native.load("advapi32", Advapi32.class);
    int LsaEnumerateTrustedDomains(
        long PolicyHandle,   // LSA_HANDLE
        IntByReference EnumerationContext,   // DWORD* in/out
        Pointer Buffer,   // void** out
        int PreferedMaximumLength,   // DWORD
        IntByReference CountReturned   // DWORD* out
    );
}
@[Link("advapi32")]
lib LibADVAPI32
  fun LsaEnumerateTrustedDomains = LsaEnumerateTrustedDomains(
    PolicyHandle : LibC::SSizeT,   # LSA_HANDLE
    EnumerationContext : UInt32*,   # DWORD* in/out
    Buffer : Void**,   # void** out
    PreferedMaximumLength : UInt32,   # DWORD
    CountReturned : UInt32*   # DWORD* out
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef LsaEnumerateTrustedDomainsNative = Int32 Function(IntPtr, Pointer<Uint32>, Pointer<Void>, Uint32, Pointer<Uint32>);
typedef LsaEnumerateTrustedDomainsDart = int Function(int, Pointer<Uint32>, Pointer<Void>, int, Pointer<Uint32>);
final LsaEnumerateTrustedDomains = DynamicLibrary.open('ADVAPI32.dll')
    .lookupFunction<LsaEnumerateTrustedDomainsNative, LsaEnumerateTrustedDomainsDart>('LsaEnumerateTrustedDomains');
// PolicyHandle : LSA_HANDLE -> IntPtr
// EnumerationContext : DWORD* in/out -> Pointer<Uint32>
// Buffer : void** out -> Pointer<Void>
// PreferedMaximumLength : DWORD -> Uint32
// CountReturned : DWORD* out -> Pointer<Uint32>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function LsaEnumerateTrustedDomains(
  PolicyHandle: NativeInt;   // LSA_HANDLE
  EnumerationContext: Pointer;   // DWORD* in/out
  Buffer: Pointer;   // void** out
  PreferedMaximumLength: DWORD;   // DWORD
  CountReturned: Pointer   // DWORD* out
): Integer; stdcall;
  external 'ADVAPI32.dll' name 'LsaEnumerateTrustedDomains';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "LsaEnumerateTrustedDomains"
  c_LsaEnumerateTrustedDomains :: CIntPtr -> Ptr Word32 -> Ptr () -> Word32 -> Ptr Word32 -> IO Int32
-- PolicyHandle : LSA_HANDLE -> CIntPtr
-- EnumerationContext : DWORD* in/out -> Ptr Word32
-- Buffer : void** out -> Ptr ()
-- PreferedMaximumLength : DWORD -> Word32
-- CountReturned : DWORD* out -> Ptr Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let lsaenumeratetrusteddomains =
  foreign "LsaEnumerateTrustedDomains"
    (intptr_t @-> (ptr uint32_t) @-> (ptr void) @-> uint32_t @-> (ptr uint32_t) @-> returning int32_t)
(* PolicyHandle : LSA_HANDLE -> intptr_t *)
(* EnumerationContext : DWORD* in/out -> (ptr uint32_t) *)
(* Buffer : void** out -> (ptr void) *)
(* PreferedMaximumLength : DWORD -> uint32_t *)
(* CountReturned : DWORD* out -> (ptr uint32_t) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library advapi32 (t "ADVAPI32.dll"))
(cffi:use-foreign-library advapi32)

(cffi:defcfun ("LsaEnumerateTrustedDomains" lsa-enumerate-trusted-domains :convention :stdcall) :int32
  (policy-handle :int64)   ; LSA_HANDLE
  (enumeration-context :pointer)   ; DWORD* in/out
  (buffer :pointer)   ; void** out
  (prefered-maximum-length :uint32)   ; DWORD
  (count-returned :pointer))   ; DWORD* out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $LsaEnumerateTrustedDomains = Win32::API::More->new('ADVAPI32',
    'int LsaEnumerateTrustedDomains(LPARAM PolicyHandle, LPVOID EnumerationContext, LPVOID Buffer, DWORD PreferedMaximumLength, LPVOID CountReturned)');
# my $ret = $LsaEnumerateTrustedDomains->Call($PolicyHandle, $EnumerationContext, $Buffer, $PreferedMaximumLength, $CountReturned);
# PolicyHandle : LSA_HANDLE -> LPARAM
# EnumerationContext : DWORD* in/out -> LPVOID
# Buffer : void** out -> LPVOID
# PreferedMaximumLength : DWORD -> DWORD
# CountReturned : DWORD* out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

類似 API
公式の関連項目