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

PxeDhcpv6GetVendorOptionValue

関数
DHCPv6パケットから指定ベンダー固有オプションの値を取得する。
DLLWDSPXE.dll呼出規約winapi対応OSwindows8.0

シグネチャ

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

DWORD PxeDhcpv6GetVendorOptionValue(
    void* pPacket,
    DWORD uPacketLen,
    DWORD dwEnterpriseNumber,
    WORD wOption,
    DWORD uInstance,
    WORD* pwOptionLen,   // optional
    void** ppOptionValue   // optional
);

パラメーター

名前型方向説明
pPacketvoid*in
  <a href="/windows/desktop/api/wdspxe/nf-wdspxe-pxepacketallocate">PxePacketAllocate</a> 関数で割り当てた応答パケットへのポインター。
uPacketLenDWORDinpReplyPacket パラメーターが指すパケットの長さ。
dwEnterpriseNumberDWORDin

Internet Assigned Numbers Authority (IANA) によって、そのオプションのベンダーに割り当てられた Enterprise Number。

割り当て済みの Enterprise Number の詳細については、The Internet Engineering Task Force (IETF) が管理する Dynamic Host Configuration Protocol for IPv6 (RFC 3315) を参照してください。

wOptionWORDin値を取得する対象のオプション。
uInstanceDWORDinwOption パラメーターの何番目のインスタンスを取得するかを指定する、1 から始まるインデックス。
pwOptionLenWORD*outoptionalオプション値の長さを受け取る WORD のアドレス。
ppOptionValuevoid**outoptionalパケット内のオプション値のアドレスを受け取る PVOID のアドレス。

戻り値の型: DWORD

公式ドキュメント

DHCPv6 パケットの OPTION_VENDOR_OPTS (17) フィールドからオプションの値を取得します。

戻り値

一般的な戻り値を次の表に示します。それ以外の失敗の場合は、対応する Windows エラーコードが返されます。

戻り値/値 説明
ERROR_SUCCESS
0 (0x0)
オプションが見つかり、その値へのポインターが返されました。
ERROR_FILE_NOT_FOUND
2 (0x2)
オプションが見つかりませんでした。
ERROR_INVALID_DATA
13 (0xD)
パケットが有効な DHCP パケットではありません。この検査は PxeDhcpv6IsValid 関数で行われる検査ほど厳密ではなく、パケット長とマジッククッキーのみが検証されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

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

DWORD PxeDhcpv6GetVendorOptionValue(
    void* pPacket,
    DWORD uPacketLen,
    DWORD dwEnterpriseNumber,
    WORD wOption,
    DWORD uInstance,
    WORD* pwOptionLen,   // optional
    void** ppOptionValue   // optional
);
[DllImport("WDSPXE.dll", ExactSpelling = true)]
static extern uint PxeDhcpv6GetVendorOptionValue(
    IntPtr pPacket,   // void*
    uint uPacketLen,   // DWORD
    uint dwEnterpriseNumber,   // DWORD
    ushort wOption,   // WORD
    uint uInstance,   // DWORD
    IntPtr pwOptionLen,   // WORD* optional, out
    IntPtr ppOptionValue   // void** optional, out
);
<DllImport("WDSPXE.dll", ExactSpelling:=True)>
Public Shared Function PxeDhcpv6GetVendorOptionValue(
    pPacket As IntPtr,   ' void*
    uPacketLen As UInteger,   ' DWORD
    dwEnterpriseNumber As UInteger,   ' DWORD
    wOption As UShort,   ' WORD
    uInstance As UInteger,   ' DWORD
    pwOptionLen As IntPtr,   ' WORD* optional, out
    ppOptionValue As IntPtr   ' void** optional, out
) As UInteger
End Function
' pPacket : void*
' uPacketLen : DWORD
' dwEnterpriseNumber : DWORD
' wOption : WORD
' uInstance : DWORD
' pwOptionLen : WORD* optional, out
' ppOptionValue : void** optional, out
Declare PtrSafe Function PxeDhcpv6GetVendorOptionValue Lib "wdspxe" ( _
    ByVal pPacket As LongPtr, _
    ByVal uPacketLen As Long, _
    ByVal dwEnterpriseNumber As Long, _
    ByVal wOption As Integer, _
    ByVal uInstance As Long, _
    ByVal pwOptionLen As LongPtr, _
    ByVal ppOptionValue As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

PxeDhcpv6GetVendorOptionValue = ctypes.windll.wdspxe.PxeDhcpv6GetVendorOptionValue
PxeDhcpv6GetVendorOptionValue.restype = wintypes.DWORD
PxeDhcpv6GetVendorOptionValue.argtypes = [
    ctypes.POINTER(None),  # pPacket : void*
    wintypes.DWORD,  # uPacketLen : DWORD
    wintypes.DWORD,  # dwEnterpriseNumber : DWORD
    ctypes.c_ushort,  # wOption : WORD
    wintypes.DWORD,  # uInstance : DWORD
    ctypes.POINTER(ctypes.c_ushort),  # pwOptionLen : WORD* optional, out
    ctypes.c_void_p,  # ppOptionValue : void** optional, out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('WDSPXE.dll')
PxeDhcpv6GetVendorOptionValue = Fiddle::Function.new(
  lib['PxeDhcpv6GetVendorOptionValue'],
  [
    Fiddle::TYPE_VOIDP,  # pPacket : void*
    -Fiddle::TYPE_INT,  # uPacketLen : DWORD
    -Fiddle::TYPE_INT,  # dwEnterpriseNumber : DWORD
    -Fiddle::TYPE_SHORT,  # wOption : WORD
    -Fiddle::TYPE_INT,  # uInstance : DWORD
    Fiddle::TYPE_VOIDP,  # pwOptionLen : WORD* optional, out
    Fiddle::TYPE_VOIDP,  # ppOptionValue : void** optional, out
  ],
  -Fiddle::TYPE_INT)
#[link(name = "wdspxe")]
extern "system" {
    fn PxeDhcpv6GetVendorOptionValue(
        pPacket: *mut (),  // void*
        uPacketLen: u32,  // DWORD
        dwEnterpriseNumber: u32,  // DWORD
        wOption: u16,  // WORD
        uInstance: u32,  // DWORD
        pwOptionLen: *mut u16,  // WORD* optional, out
        ppOptionValue: *mut *mut ()  // void** optional, out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("WDSPXE.dll")]
public static extern uint PxeDhcpv6GetVendorOptionValue(IntPtr pPacket, uint uPacketLen, uint dwEnterpriseNumber, ushort wOption, uint uInstance, IntPtr pwOptionLen, IntPtr ppOptionValue);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WDSPXE_PxeDhcpv6GetVendorOptionValue' -Namespace Win32 -PassThru
# $api::PxeDhcpv6GetVendorOptionValue(pPacket, uPacketLen, dwEnterpriseNumber, wOption, uInstance, pwOptionLen, ppOptionValue)
#uselib "WDSPXE.dll"
#func global PxeDhcpv6GetVendorOptionValue "PxeDhcpv6GetVendorOptionValue" sptr, sptr, sptr, sptr, sptr, sptr, sptr
; PxeDhcpv6GetVendorOptionValue pPacket, uPacketLen, dwEnterpriseNumber, wOption, uInstance, varptr(pwOptionLen), ppOptionValue   ; 戻り値は stat
; pPacket : void* -> "sptr"
; uPacketLen : DWORD -> "sptr"
; dwEnterpriseNumber : DWORD -> "sptr"
; wOption : WORD -> "sptr"
; uInstance : DWORD -> "sptr"
; pwOptionLen : WORD* optional, out -> "sptr"
; ppOptionValue : void** optional, out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "WDSPXE.dll"
#cfunc global PxeDhcpv6GetVendorOptionValue "PxeDhcpv6GetVendorOptionValue" sptr, int, int, int, int, var, sptr
; res = PxeDhcpv6GetVendorOptionValue(pPacket, uPacketLen, dwEnterpriseNumber, wOption, uInstance, pwOptionLen, ppOptionValue)
; pPacket : void* -> "sptr"
; uPacketLen : DWORD -> "int"
; dwEnterpriseNumber : DWORD -> "int"
; wOption : WORD -> "int"
; uInstance : DWORD -> "int"
; pwOptionLen : WORD* optional, out -> "var"
; ppOptionValue : void** optional, out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD PxeDhcpv6GetVendorOptionValue(void* pPacket, DWORD uPacketLen, DWORD dwEnterpriseNumber, WORD wOption, DWORD uInstance, WORD* pwOptionLen, void** ppOptionValue)
#uselib "WDSPXE.dll"
#cfunc global PxeDhcpv6GetVendorOptionValue "PxeDhcpv6GetVendorOptionValue" intptr, int, int, int, int, var, intptr
; res = PxeDhcpv6GetVendorOptionValue(pPacket, uPacketLen, dwEnterpriseNumber, wOption, uInstance, pwOptionLen, ppOptionValue)
; pPacket : void* -> "intptr"
; uPacketLen : DWORD -> "int"
; dwEnterpriseNumber : DWORD -> "int"
; wOption : WORD -> "int"
; uInstance : DWORD -> "int"
; pwOptionLen : WORD* optional, out -> "var"
; ppOptionValue : void** optional, out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	wdspxe = windows.NewLazySystemDLL("WDSPXE.dll")
	procPxeDhcpv6GetVendorOptionValue = wdspxe.NewProc("PxeDhcpv6GetVendorOptionValue")
)

// pPacket (void*), uPacketLen (DWORD), dwEnterpriseNumber (DWORD), wOption (WORD), uInstance (DWORD), pwOptionLen (WORD* optional, out), ppOptionValue (void** optional, out)
r1, _, err := procPxeDhcpv6GetVendorOptionValue.Call(
	uintptr(pPacket),
	uintptr(uPacketLen),
	uintptr(dwEnterpriseNumber),
	uintptr(wOption),
	uintptr(uInstance),
	uintptr(pwOptionLen),
	uintptr(ppOptionValue),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function PxeDhcpv6GetVendorOptionValue(
  pPacket: Pointer;   // void*
  uPacketLen: DWORD;   // DWORD
  dwEnterpriseNumber: DWORD;   // DWORD
  wOption: Word;   // WORD
  uInstance: DWORD;   // DWORD
  pwOptionLen: Pointer;   // WORD* optional, out
  ppOptionValue: Pointer   // void** optional, out
): DWORD; stdcall;
  external 'WDSPXE.dll' name 'PxeDhcpv6GetVendorOptionValue';
result := DllCall("WDSPXE\PxeDhcpv6GetVendorOptionValue"
    , "Ptr", pPacket   ; void*
    , "UInt", uPacketLen   ; DWORD
    , "UInt", dwEnterpriseNumber   ; DWORD
    , "UShort", wOption   ; WORD
    , "UInt", uInstance   ; DWORD
    , "Ptr", pwOptionLen   ; WORD* optional, out
    , "Ptr", ppOptionValue   ; void** optional, out
    , "UInt")   ; return: DWORD
●PxeDhcpv6GetVendorOptionValue(pPacket, uPacketLen, dwEnterpriseNumber, wOption, uInstance, pwOptionLen, ppOptionValue) = DLL("WDSPXE.dll", "dword PxeDhcpv6GetVendorOptionValue(void*, dword, dword, int, dword, void*, void*)")
# 呼び出し: PxeDhcpv6GetVendorOptionValue(pPacket, uPacketLen, dwEnterpriseNumber, wOption, uInstance, pwOptionLen, ppOptionValue)
# pPacket : void* -> "void*"
# uPacketLen : DWORD -> "dword"
# dwEnterpriseNumber : DWORD -> "dword"
# wOption : WORD -> "int"
# uInstance : DWORD -> "dword"
# pwOptionLen : WORD* optional, out -> "void*"
# ppOptionValue : void** optional, out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

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

typedef PxeDhcpv6GetVendorOptionValueNative = Uint32 Function(Pointer<Void>, Uint32, Uint32, Uint16, Uint32, Pointer<Uint16>, Pointer<Void>);
typedef PxeDhcpv6GetVendorOptionValueDart = int Function(Pointer<Void>, int, int, int, int, Pointer<Uint16>, Pointer<Void>);
final PxeDhcpv6GetVendorOptionValue = DynamicLibrary.open('WDSPXE.dll')
    .lookupFunction<PxeDhcpv6GetVendorOptionValueNative, PxeDhcpv6GetVendorOptionValueDart>('PxeDhcpv6GetVendorOptionValue');
// pPacket : void* -> Pointer<Void>
// uPacketLen : DWORD -> Uint32
// dwEnterpriseNumber : DWORD -> Uint32
// wOption : WORD -> Uint16
// uInstance : DWORD -> Uint32
// pwOptionLen : WORD* optional, out -> Pointer<Uint16>
// ppOptionValue : void** optional, out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function PxeDhcpv6GetVendorOptionValue(
  pPacket: Pointer;   // void*
  uPacketLen: DWORD;   // DWORD
  dwEnterpriseNumber: DWORD;   // DWORD
  wOption: Word;   // WORD
  uInstance: DWORD;   // DWORD
  pwOptionLen: Pointer;   // WORD* optional, out
  ppOptionValue: Pointer   // void** optional, out
): DWORD; stdcall;
  external 'WDSPXE.dll' name 'PxeDhcpv6GetVendorOptionValue';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "PxeDhcpv6GetVendorOptionValue"
  c_PxeDhcpv6GetVendorOptionValue :: Ptr () -> Word32 -> Word32 -> Word16 -> Word32 -> Ptr Word16 -> Ptr () -> IO Word32
-- pPacket : void* -> Ptr ()
-- uPacketLen : DWORD -> Word32
-- dwEnterpriseNumber : DWORD -> Word32
-- wOption : WORD -> Word16
-- uInstance : DWORD -> Word32
-- pwOptionLen : WORD* optional, out -> Ptr Word16
-- ppOptionValue : void** optional, out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let pxedhcpv6getvendoroptionvalue =
  foreign "PxeDhcpv6GetVendorOptionValue"
    ((ptr void) @-> uint32_t @-> uint32_t @-> uint16_t @-> uint32_t @-> (ptr uint16_t) @-> (ptr void) @-> returning uint32_t)
(* pPacket : void* -> (ptr void) *)
(* uPacketLen : DWORD -> uint32_t *)
(* dwEnterpriseNumber : DWORD -> uint32_t *)
(* wOption : WORD -> uint16_t *)
(* uInstance : DWORD -> uint32_t *)
(* pwOptionLen : WORD* optional, out -> (ptr uint16_t) *)
(* ppOptionValue : void** optional, out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library wdspxe (t "WDSPXE.dll"))
(cffi:use-foreign-library wdspxe)

(cffi:defcfun ("PxeDhcpv6GetVendorOptionValue" pxe-dhcpv6-get-vendor-option-value :convention :stdcall) :uint32
  (p-packet :pointer)   ; void*
  (u-packet-len :uint32)   ; DWORD
  (dw-enterprise-number :uint32)   ; DWORD
  (w-option :uint16)   ; WORD
  (u-instance :uint32)   ; DWORD
  (pw-option-len :pointer)   ; WORD* optional, out
  (pp-option-value :pointer))   ; void** optional, out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $PxeDhcpv6GetVendorOptionValue = Win32::API::More->new('WDSPXE',
    'DWORD PxeDhcpv6GetVendorOptionValue(LPVOID pPacket, DWORD uPacketLen, DWORD dwEnterpriseNumber, WORD wOption, DWORD uInstance, LPVOID pwOptionLen, LPVOID ppOptionValue)');
# my $ret = $PxeDhcpv6GetVendorOptionValue->Call($pPacket, $uPacketLen, $dwEnterpriseNumber, $wOption, $uInstance, $pwOptionLen, $ppOptionValue);
# pPacket : void* -> LPVOID
# uPacketLen : DWORD -> DWORD
# dwEnterpriseNumber : DWORD -> DWORD
# wOption : WORD -> WORD
# uInstance : DWORD -> DWORD
# pwOptionLen : WORD* optional, out -> LPVOID
# ppOptionValue : void** optional, out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目