Win32 API 日本語リファレンス
ホーム › Storage.InstallableFileSystems › FilterFindFirst

FilterFindFirst

関数
登録済みミニフィルターの列挙を開始する。
DLLFLTLIB.dll呼出規約winapi

シグネチャ

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

HRESULT FilterFindFirst(
    FILTER_INFORMATION_CLASS dwInformationClass,
    void* lpBuffer,
    DWORD dwBufferSize,
    DWORD* lpBytesReturned,
    HANDLE* lpFilterFind
);

パラメーター

名前型方向説明
dwInformationClassFILTER_INFORMATION_CLASSin

要求するフィルタードライバー情報の種類。このパラメーターには、次のいずれかの値を指定する必要があります。

値 意味
FilterFullInformation lpBuffer パラメーターが指すバッファーは、ミニフィルターインスタンスごとに FILTER_FULL_INFORMATION 構造体を受け取ります。レガシーフィルターは無視されます。
FilterAggregateBasicInformation lpBuffer パラメーターが指すバッファーは、ミニフィルターインスタンスまたはレガシーフィルターごとに FILTER_AGGREGATE_BASIC_INFORMATION 構造体を受け取ります。この dwInformationClass の値は、Windows Server 2003 with SP1 および filter manager rollup を適用した Windows XP with SP2 以降で使用できます。Windows XP with SP2 向けの filter manager rollup パッケージの詳細については、Microsoft サポート技術情報の記事 914882「 The filter manager rollup package for Windows XP SP2」を参照してください。
FilterAggregateStandardInformation lpBuffer パラメーターが指すバッファーは、ミニフィルターインスタンスまたはレガシーフィルターごとに FILTER_AGGREGATE_STANDARD_INFORMATION 構造体を受け取ります。この dwInformationClass の値は、Windows Vista 以降で使用できます。
lpBuffervoid*out要求した情報を受け取る、呼び出し元が割り当てたバッファーへのポインター。バッファーに返される情報の型は、dwInformationClass パラメーターによって決まります。
dwBufferSizeDWORDinlpBuffer パラメーターが指すバッファーのサイズ (バイト単位)。呼び出し元は、指定する dwInformationClass に応じてこのパラメーターを設定してください。
lpBytesReturnedDWORD*outFilterFindFirst の呼び出しが成功した場合に、lpBuffer が指すバッファーに返されたバイト数を受け取る、呼び出し元が割り当てた変数へのポインター。このパラメーターは必須であり、NULL にすることはできません。
lpFilterFindHANDLE*outFilterFindFirst の呼び出しが成功した場合にフィルタードライバーの検索ハンドルを受け取る、呼び出し元が割り当てた変数へのポインター。失敗した場合は INVALID_HANDLE_VALUE を受け取ります。この検索ハンドルは、後続の FilterFindNext および FilterFindClose の呼び出しで使用できます。

戻り値の型: HRESULT

公式ドキュメント

FilterFindFirst 関数は、フィルタードライバー (ミニフィルタードライバーインスタンスまたはレガシーフィルタードライバー) に関する情報を返します。この関数は、登録済みフィルターのグローバルリスト内のフィルターの列挙を開始するために使用します。

戻り値

FilterFindFirst は、成功した場合は S_OK を返します。それ以外の場合は、次のような HRESULT エラー値を返します。

戻り値 説明
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
lpBuffer が指すバッファーは、要求された情報を格納するのに十分な大きさではありません。この値が返された場合、lpBytesReturned には、指定した dwInformationClass の構造体に必要なバッファーのサイズ (バイト単位) が格納されます。
HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER)
dwInformationClass パラメーターに無効な値が指定されました。たとえば、Windows Vista より前のオペレーティングシステムで FilterAggregateStandardInformation を指定した場合、FilterFindFirst はこの HRESULT 値を返します。
HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS)
登録済みフィルターのグローバルリスト内にフィルタードライバーが見つかりませんでした。

解説(Remarks)

FilterFindFirst 関数は、検索ハンドルを開き、登録済みフィルターのグローバルリスト内で最初に見つかったフィルタードライバーに関する情報を返します。検索ハンドルを確立した後は、FilterFindNext 関数を呼び出して、グローバルリスト内の他のフィルターを検索します。検索ハンドルが不要になったら、FilterFindClose を呼び出して閉じてください。

Microsoft Windows Server 2003 with SP1 および filter manager rollup を適用した Windows XP with Service Pack 1 (SP1) 以降では、FilterFindFirst と FilterFindNext は、レガシーフィルタードライバーの情報とミニフィルタードライバーインスタンスの情報の両方を提供できます。それ以前のバージョンの Windows では、FilterFindFirst と FilterFindNext はミニフィルターに関する情報しか提供できません (前述の dwInformationClass パラメーターの説明を参照してください)。

FilterFindFirst と FilterFindNext は、ベースファイルシステムから遠い順にフィルタードライバーの情報を返します。ベースファイルシステムから最も遠いフィルターの情報が最初に返されます。2 番目に遠いフィルターの情報が 2 番目に返されます。ベースファイルシステムに最も近いフィルターの情報が最後に返されます。

入力の dwBufferSize が小さすぎる場合、lpFilterFind は INVALID_HANDLE_VALUE を受け取り、lpBytesReturned は要求された情報を格納するのに必要なバイト数を受け取ります。

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

各言語での呼び出し定義

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

HRESULT FilterFindFirst(
    FILTER_INFORMATION_CLASS dwInformationClass,
    void* lpBuffer,
    DWORD dwBufferSize,
    DWORD* lpBytesReturned,
    HANDLE* lpFilterFind
);
[DllImport("FLTLIB.dll", ExactSpelling = true)]
static extern int FilterFindFirst(
    int dwInformationClass,   // FILTER_INFORMATION_CLASS
    IntPtr lpBuffer,   // void* out
    uint dwBufferSize,   // DWORD
    out uint lpBytesReturned,   // DWORD* out
    IntPtr lpFilterFind   // HANDLE* out
);
<DllImport("FLTLIB.dll", ExactSpelling:=True)>
Public Shared Function FilterFindFirst(
    dwInformationClass As Integer,   ' FILTER_INFORMATION_CLASS
    lpBuffer As IntPtr,   ' void* out
    dwBufferSize As UInteger,   ' DWORD
    <Out> ByRef lpBytesReturned As UInteger,   ' DWORD* out
    lpFilterFind As IntPtr   ' HANDLE* out
) As Integer
End Function
' dwInformationClass : FILTER_INFORMATION_CLASS
' lpBuffer : void* out
' dwBufferSize : DWORD
' lpBytesReturned : DWORD* out
' lpFilterFind : HANDLE* out
Declare PtrSafe Function FilterFindFirst Lib "fltlib" ( _
    ByVal dwInformationClass As Long, _
    ByVal lpBuffer As LongPtr, _
    ByVal dwBufferSize As Long, _
    ByRef lpBytesReturned As Long, _
    ByVal lpFilterFind As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

FilterFindFirst = ctypes.windll.fltlib.FilterFindFirst
FilterFindFirst.restype = ctypes.c_int
FilterFindFirst.argtypes = [
    ctypes.c_int,  # dwInformationClass : FILTER_INFORMATION_CLASS
    ctypes.POINTER(None),  # lpBuffer : void* out
    wintypes.DWORD,  # dwBufferSize : DWORD
    ctypes.POINTER(wintypes.DWORD),  # lpBytesReturned : DWORD* out
    ctypes.c_void_p,  # lpFilterFind : HANDLE* out
]
require 'fiddle'
require 'fiddle/import'

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

var (
	fltlib = windows.NewLazySystemDLL("FLTLIB.dll")
	procFilterFindFirst = fltlib.NewProc("FilterFindFirst")
)

// dwInformationClass (FILTER_INFORMATION_CLASS), lpBuffer (void* out), dwBufferSize (DWORD), lpBytesReturned (DWORD* out), lpFilterFind (HANDLE* out)
r1, _, err := procFilterFindFirst.Call(
	uintptr(dwInformationClass),
	uintptr(lpBuffer),
	uintptr(dwBufferSize),
	uintptr(lpBytesReturned),
	uintptr(lpFilterFind),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function FilterFindFirst(
  dwInformationClass: Integer;   // FILTER_INFORMATION_CLASS
  lpBuffer: Pointer;   // void* out
  dwBufferSize: DWORD;   // DWORD
  lpBytesReturned: Pointer;   // DWORD* out
  lpFilterFind: Pointer   // HANDLE* out
): Integer; stdcall;
  external 'FLTLIB.dll' name 'FilterFindFirst';
result := DllCall("FLTLIB\FilterFindFirst"
    , "Int", dwInformationClass   ; FILTER_INFORMATION_CLASS
    , "Ptr", lpBuffer   ; void* out
    , "UInt", dwBufferSize   ; DWORD
    , "Ptr", lpBytesReturned   ; DWORD* out
    , "Ptr", lpFilterFind   ; HANDLE* out
    , "Int")   ; return: HRESULT
●FilterFindFirst(dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind) = DLL("FLTLIB.dll", "int FilterFindFirst(int, void*, dword, void*, void*)")
# 呼び出し: FilterFindFirst(dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind)
# dwInformationClass : FILTER_INFORMATION_CLASS -> "int"
# lpBuffer : void* out -> "void*"
# dwBufferSize : DWORD -> "dword"
# lpBytesReturned : DWORD* out -> "void*"
# lpFilterFind : HANDLE* out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "fltlib" fn FilterFindFirst(
    dwInformationClass: i32, // FILTER_INFORMATION_CLASS
    lpBuffer: ?*anyopaque, // void* out
    dwBufferSize: u32, // DWORD
    lpBytesReturned: [*c]u32, // DWORD* out
    lpFilterFind: ?*anyopaque // HANDLE* out
) callconv(std.os.windows.WINAPI) i32;
proc FilterFindFirst(
    dwInformationClass: int32,  # FILTER_INFORMATION_CLASS
    lpBuffer: pointer,  # void* out
    dwBufferSize: uint32,  # DWORD
    lpBytesReturned: ptr uint32,  # DWORD* out
    lpFilterFind: pointer  # HANDLE* out
): int32 {.importc: "FilterFindFirst", stdcall, dynlib: "FLTLIB.dll".}
pragma(lib, "fltlib");
extern(Windows)
int FilterFindFirst(
    int dwInformationClass,   // FILTER_INFORMATION_CLASS
    void* lpBuffer,   // void* out
    uint dwBufferSize,   // DWORD
    uint* lpBytesReturned,   // DWORD* out
    void* lpFilterFind   // HANDLE* out
);
ccall((:FilterFindFirst, "FLTLIB.dll"), stdcall, Int32,
      (Int32, Ptr{Cvoid}, UInt32, Ptr{UInt32}, Ptr{Cvoid}),
      dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind)
# dwInformationClass : FILTER_INFORMATION_CLASS -> Int32
# lpBuffer : void* out -> Ptr{Cvoid}
# dwBufferSize : DWORD -> UInt32
# lpBytesReturned : DWORD* out -> Ptr{UInt32}
# lpFilterFind : HANDLE* out -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t FilterFindFirst(
    int32_t dwInformationClass,
    void* lpBuffer,
    uint32_t dwBufferSize,
    uint32_t* lpBytesReturned,
    void* lpFilterFind);
]]
local fltlib = ffi.load("fltlib")
-- fltlib.FilterFindFirst(dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind)
-- dwInformationClass : FILTER_INFORMATION_CLASS
-- lpBuffer : void* out
-- dwBufferSize : DWORD
-- lpBytesReturned : DWORD* out
-- lpFilterFind : HANDLE* out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('FLTLIB.dll');
const FilterFindFirst = lib.func('__stdcall', 'FilterFindFirst', 'int32_t', ['int32_t', 'void *', 'uint32_t', 'uint32_t *', 'void *']);
// FilterFindFirst(dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind)
// dwInformationClass : FILTER_INFORMATION_CLASS -> 'int32_t'
// lpBuffer : void* out -> 'void *'
// dwBufferSize : DWORD -> 'uint32_t'
// lpBytesReturned : DWORD* out -> 'uint32_t *'
// lpFilterFind : HANDLE* out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("FLTLIB.dll", {
  FilterFindFirst: { parameters: ["i32", "pointer", "u32", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.FilterFindFirst(dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind)
// dwInformationClass : FILTER_INFORMATION_CLASS -> "i32"
// lpBuffer : void* out -> "pointer"
// dwBufferSize : DWORD -> "u32"
// lpBytesReturned : DWORD* out -> "pointer"
// lpFilterFind : HANDLE* out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t FilterFindFirst(
    int32_t dwInformationClass,
    void* lpBuffer,
    uint32_t dwBufferSize,
    uint32_t* lpBytesReturned,
    void* lpFilterFind);
C, "FLTLIB.dll");
// $ffi->FilterFindFirst(dwInformationClass, lpBuffer, dwBufferSize, lpBytesReturned, lpFilterFind);
// dwInformationClass : FILTER_INFORMATION_CLASS
// lpBuffer : void* out
// dwBufferSize : DWORD
// lpBytesReturned : DWORD* out
// lpFilterFind : HANDLE* 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 Fltlib extends StdCallLibrary {
    Fltlib INSTANCE = Native.load("fltlib", Fltlib.class);
    int FilterFindFirst(
        int dwInformationClass,   // FILTER_INFORMATION_CLASS
        Pointer lpBuffer,   // void* out
        int dwBufferSize,   // DWORD
        IntByReference lpBytesReturned,   // DWORD* out
        Pointer lpFilterFind   // HANDLE* out
    );
}
@[Link("fltlib")]
lib LibFLTLIB
  fun FilterFindFirst = FilterFindFirst(
    dwInformationClass : Int32,   # FILTER_INFORMATION_CLASS
    lpBuffer : Void*,   # void* out
    dwBufferSize : UInt32,   # DWORD
    lpBytesReturned : UInt32*,   # DWORD* out
    lpFilterFind : Void*   # HANDLE* out
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef FilterFindFirstNative = Int32 Function(Int32, Pointer<Void>, Uint32, Pointer<Uint32>, Pointer<Void>);
typedef FilterFindFirstDart = int Function(int, Pointer<Void>, int, Pointer<Uint32>, Pointer<Void>);
final FilterFindFirst = DynamicLibrary.open('FLTLIB.dll')
    .lookupFunction<FilterFindFirstNative, FilterFindFirstDart>('FilterFindFirst');
// dwInformationClass : FILTER_INFORMATION_CLASS -> Int32
// lpBuffer : void* out -> Pointer<Void>
// dwBufferSize : DWORD -> Uint32
// lpBytesReturned : DWORD* out -> Pointer<Uint32>
// lpFilterFind : HANDLE* out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function FilterFindFirst(
  dwInformationClass: Integer;   // FILTER_INFORMATION_CLASS
  lpBuffer: Pointer;   // void* out
  dwBufferSize: DWORD;   // DWORD
  lpBytesReturned: Pointer;   // DWORD* out
  lpFilterFind: Pointer   // HANDLE* out
): Integer; stdcall;
  external 'FLTLIB.dll' name 'FilterFindFirst';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "FilterFindFirst"
  c_FilterFindFirst :: Int32 -> Ptr () -> Word32 -> Ptr Word32 -> Ptr () -> IO Int32
-- dwInformationClass : FILTER_INFORMATION_CLASS -> Int32
-- lpBuffer : void* out -> Ptr ()
-- dwBufferSize : DWORD -> Word32
-- lpBytesReturned : DWORD* out -> Ptr Word32
-- lpFilterFind : HANDLE* out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let filterfindfirst =
  foreign "FilterFindFirst"
    (int32_t @-> (ptr void) @-> uint32_t @-> (ptr uint32_t) @-> (ptr void) @-> returning int32_t)
(* dwInformationClass : FILTER_INFORMATION_CLASS -> int32_t *)
(* lpBuffer : void* out -> (ptr void) *)
(* dwBufferSize : DWORD -> uint32_t *)
(* lpBytesReturned : DWORD* out -> (ptr uint32_t) *)
(* lpFilterFind : HANDLE* out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library fltlib (t "FLTLIB.dll"))
(cffi:use-foreign-library fltlib)

(cffi:defcfun ("FilterFindFirst" filter-find-first :convention :stdcall) :int32
  (dw-information-class :int32)   ; FILTER_INFORMATION_CLASS
  (lp-buffer :pointer)   ; void* out
  (dw-buffer-size :uint32)   ; DWORD
  (lp-bytes-returned :pointer)   ; DWORD* out
  (lp-filter-find :pointer))   ; HANDLE* out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $FilterFindFirst = Win32::API::More->new('FLTLIB',
    'int FilterFindFirst(int dwInformationClass, LPVOID lpBuffer, DWORD dwBufferSize, LPVOID lpBytesReturned, HANDLE lpFilterFind)');
# my $ret = $FilterFindFirst->Call($dwInformationClass, $lpBuffer, $dwBufferSize, $lpBytesReturned, $lpFilterFind);
# dwInformationClass : FILTER_INFORMATION_CLASS -> int
# lpBuffer : void* out -> LPVOID
# dwBufferSize : DWORD -> DWORD
# lpBytesReturned : DWORD* out -> LPVOID
# lpFilterFind : HANDLE* out -> HANDLE
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目
使用する型