WlanHostedNetworkQuerySecondaryKey
関数シグネチャ
// wlanapi.dll
#include <windows.h>
DWORD WlanHostedNetworkQuerySecondaryKey(
HANDLE hClientHandle,
DWORD* pdwKeyLength,
BYTE** ppucKeyData,
BOOL* pbIsPassPhrase,
BOOL* pbPersistent,
WLAN_HOSTED_NETWORK_REASON* pFailReason, // optional
void* pvReserved // optional
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| hClientHandle | HANDLE | in | クライアントのセッション ハンドル。以前の WlanOpenHandle 関数の呼び出しによって返されたものです。 |
| pdwKeyLength | DWORD* | out | WlanHostedNetworkQuerySecondaryKey 関数の呼び出しが成功した場合に、ppucKeyData パラメーターが指すキー データ配列内の有効なデータ バイト数を示す値へのポインター。 キーがパスフレーズの場合、このキー長には終端の ‘\0’ が含まれます。 |
| ppucKeyData | BYTE** | out | WlanHostedNetworkQuerySecondaryKey 関数の呼び出しが成功した場合に、返されたセカンダリ セキュリティ キー データを格納するバッファーへのポインターを受け取る値へのポインター。 |
| pbIsPassPhrase | BOOL* | out | ppucKeyData パラメーターが指すキー データ配列がパスフレーズ形式かどうかを示すブール値へのポインター。 このパラメーターが TRUE の場合、キー データ配列はパスフレーズ形式です。このパラメーターが FALSE の場合、キー データ配列はパスフレーズ形式ではありません。 |
| pbPersistent | BOOL* | out | ppucKeyData パラメーターが指すキー データ配列を保存して後で再利用するのか、1 回限りの使用なのかを示すブール値へのポインター。 このパラメーターが TRUE の場合、キー データ配列は保存されて後で再利用されます。このパラメーターが FALSE の場合、キー データ配列は 1 回限りの使用です。 |
| pFailReason | WLAN_HOSTED_NETWORK_REASON* | outoptional | WlanHostedNetworkSetSecondaryKey 関数の呼び出しが失敗した場合に、失敗の理由を受け取る値への省略可能なポインター。失敗の理由として指定できる値は、Wlanapi.h ヘッダー ファイルで定義されている WLAN_HOSTED_NETWORK_REASON 列挙型の値です。 |
| pvReserved | void* | optional | 将来の使用のために予約されています。このパラメーターは NULL である必要があります。 |
戻り値の型: DWORD
公式ドキュメント
ワイヤレス Hosted Network で使用するように構成されているセカンダリ セキュリティ キーを照会します。
戻り値
関数が成功した場合、戻り値は ERROR_SUCCESS です。
関数が失敗した場合、戻り値は次のいずれかのリターン コードになることがあります。
| リターン コード | 説明 |
|---|---|
| ハンドルが無効です。このエラーは、hClientHandle パラメーターに指定されたハンドルがハンドル テーブル内で見つからなかった場合に返されます。 | |
パラメーターが正しくありません。このエラーは、次のいずれかの条件に該当する場合に返されます。
|
|
| 要求された操作を実行するための正しい状態にリソースがありません。これは、ワイヤレス Hosted Network がシャットダウン処理中であった場合に発生することがあります。 | |
| この操作を完了するために十分なストレージがありません。 | |
| サービスが開始されていません。このエラーは、WLAN AutoConfig サービスが実行されていない場合に返されます。 | |
|
さまざまな RPC エラー コードやその他のエラー コード。返されたエラーのメッセージ文字列を取得するには、 FormatMessage を使用してください。 |
解説(Remarks)
WlanHostedNetworkQuerySecondaryKey 関数は、Windows 7 および Wireless LAN Service がインストールされた Windows Server 2008 R2 でワイヤレス Hosted Network をサポートするために追加された、ネイティブ ワイヤレス API の拡張機能です。
クライアント アプリケーションは、WlanHostedNetworkQuerySecondaryKey 関数を呼び出して、ワイヤレス Hosted Network で使用されるセカンダリ セキュリティ キーを照会します。この関数は、キー データ、キー長、パスフレーズかどうか、永続的か 1 回限りの使用かといったキー情報を返します。この関数は、ワイヤレス Hosted Network の状態やプロパティを変更しません。
pbIsPassPhrase パラメーターが指す値が TRUE の場合、セカンダリ セキュリティ キーはパスフレーズです。 pbIsPassPhrase パラメーターが指す値が FALSE の場合、セカンダリ セキュリティ キーはバイナリ キーです。
ppucKeyData パラメーターが指すバッファーで返されるセカンダリ セキュリティ キーは、WPA2-Personal 認証で使用され、次のいずれかの形式になります。
- 8 文字から 63 文字の ASCII 文字の配列で構成されるキー パスフレーズ。pdwKeyLength パラメーターが指す値には、パスフレーズの終端の ‘\0’ が含まれます。pdwKeyLength パラメーターが指す値は 9 から 64 の範囲になります。
- 32 バイトのバイナリ キー データで構成されるバイナリ キー。バイナリ キーの場合、pdwKeyLength パラメーターが指す値は 32 になります。
pbPersistent パラメーターが指す値が TRUE の場合、セカンダリ セキュリティ キーは永続的です。永続的な場合、Hosted Network が既に開始されていればセカンダリ セキュリティ キーはただちに使用され、さらに今後 Hosted Network が開始されるたびに再利用されます。
セカンダリ セキュリティ キーが永続的として指定されていない場合、Hosted Network が既に開始されていればただちに使用され、そうでなければ次に Hosted Network が開始されるときにのみ使用されます。Hosted Network が停止した後は、このセカンダリ セキュリティ キーが再び使用されることはなく、システムから削除されます。
現在構成されているセカンダリ セキュリティ キーがない場合、pdwKeyLength パラメーターが指す値として返される値は 0 になり、ppucKeyData パラメーターで返される値は NULL になります。この場合、pbIsPassPhrase および pbPersistent パラメーターで返される値は意味を持ちません。
WlanHostedNetworkQuerySecondaryKey 関数が成功した場合、返された ppucKeyData パラメーターのバッファーに使用されたメモリは、使用後に WlanFreeMemory 関数を呼び出して解放する必要があります。
どのユーザーでも、WlanHostedNetworkQuerySecondaryKey 関数を呼び出して、Hosted Network で使用されるセカンダリ セキュリティ キーを照会できます。ただし、ワイヤレス Hosted Network を有効にする機能は、ドメイン内のグループ ポリシーによって制限される場合があります。
Windows 7 以降では、Hosted Network に対応したワイヤレス アダプターがコンピューターに存在する場合、オペレーティング システムは仮想デバイスをインストールします。コンピューターにワイヤレス ネットワーク アダプターが 1 つしかない場合、この仮想デバイスは通常、「ネットワーク接続フォルダー」に、デバイス名が 'Microsoft Virtual WiFi Miniport adapter' の 'ワイヤレス ネットワーク接続 2' として表示されます。この仮想デバイスは、ソフトウェア アクセス ポイント (SoftAP) 接続を実行するためだけに使用され、WlanEnumInterfaces 関数が返す一覧には含まれません。この仮想デバイスの有効期間は、物理的なワイヤレス アダプターに結び付けられています。物理的なワイヤレス アダプターが無効にされると、この仮想デバイスも削除されます。この機能は、Wireless LAN Service がインストールされた Windows Server 2008 R2 でも利用できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// wlanapi.dll
#include <windows.h>
DWORD WlanHostedNetworkQuerySecondaryKey(
HANDLE hClientHandle,
DWORD* pdwKeyLength,
BYTE** ppucKeyData,
BOOL* pbIsPassPhrase,
BOOL* pbPersistent,
WLAN_HOSTED_NETWORK_REASON* pFailReason, // optional
void* pvReserved // optional
);[DllImport("wlanapi.dll", ExactSpelling = true)]
static extern uint WlanHostedNetworkQuerySecondaryKey(
IntPtr hClientHandle, // HANDLE
out uint pdwKeyLength, // DWORD* out
IntPtr ppucKeyData, // BYTE** out
out bool pbIsPassPhrase, // BOOL* out
out bool pbPersistent, // BOOL* out
IntPtr pFailReason, // WLAN_HOSTED_NETWORK_REASON* optional, out
IntPtr pvReserved // void* optional
);<DllImport("wlanapi.dll", ExactSpelling:=True)>
Public Shared Function WlanHostedNetworkQuerySecondaryKey(
hClientHandle As IntPtr, ' HANDLE
<Out> ByRef pdwKeyLength As UInteger, ' DWORD* out
ppucKeyData As IntPtr, ' BYTE** out
<Out> ByRef pbIsPassPhrase As Boolean, ' BOOL* out
<Out> ByRef pbPersistent As Boolean, ' BOOL* out
pFailReason As IntPtr, ' WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved As IntPtr ' void* optional
) As UInteger
End Function' hClientHandle : HANDLE
' pdwKeyLength : DWORD* out
' ppucKeyData : BYTE** out
' pbIsPassPhrase : BOOL* out
' pbPersistent : BOOL* out
' pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
' pvReserved : void* optional
Declare PtrSafe Function WlanHostedNetworkQuerySecondaryKey Lib "wlanapi" ( _
ByVal hClientHandle As LongPtr, _
ByRef pdwKeyLength As Long, _
ByVal ppucKeyData As LongPtr, _
ByRef pbIsPassPhrase As Long, _
ByRef pbPersistent As Long, _
ByVal pFailReason As LongPtr, _
ByVal pvReserved As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
WlanHostedNetworkQuerySecondaryKey = ctypes.windll.wlanapi.WlanHostedNetworkQuerySecondaryKey
WlanHostedNetworkQuerySecondaryKey.restype = wintypes.DWORD
WlanHostedNetworkQuerySecondaryKey.argtypes = [
wintypes.HANDLE, # hClientHandle : HANDLE
ctypes.POINTER(wintypes.DWORD), # pdwKeyLength : DWORD* out
ctypes.c_void_p, # ppucKeyData : BYTE** out
ctypes.c_void_p, # pbIsPassPhrase : BOOL* out
ctypes.c_void_p, # pbPersistent : BOOL* out
ctypes.c_void_p, # pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
ctypes.POINTER(None), # pvReserved : void* optional
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('wlanapi.dll')
WlanHostedNetworkQuerySecondaryKey = Fiddle::Function.new(
lib['WlanHostedNetworkQuerySecondaryKey'],
[
Fiddle::TYPE_VOIDP, # hClientHandle : HANDLE
Fiddle::TYPE_VOIDP, # pdwKeyLength : DWORD* out
Fiddle::TYPE_VOIDP, # ppucKeyData : BYTE** out
Fiddle::TYPE_VOIDP, # pbIsPassPhrase : BOOL* out
Fiddle::TYPE_VOIDP, # pbPersistent : BOOL* out
Fiddle::TYPE_VOIDP, # pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
Fiddle::TYPE_VOIDP, # pvReserved : void* optional
],
-Fiddle::TYPE_INT)#[link(name = "wlanapi")]
extern "system" {
fn WlanHostedNetworkQuerySecondaryKey(
hClientHandle: *mut core::ffi::c_void, // HANDLE
pdwKeyLength: *mut u32, // DWORD* out
ppucKeyData: *mut *mut u8, // BYTE** out
pbIsPassPhrase: *mut i32, // BOOL* out
pbPersistent: *mut i32, // BOOL* out
pFailReason: *mut i32, // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: *mut () // void* optional
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("wlanapi.dll")]
public static extern uint WlanHostedNetworkQuerySecondaryKey(IntPtr hClientHandle, out uint pdwKeyLength, IntPtr ppucKeyData, out bool pbIsPassPhrase, out bool pbPersistent, IntPtr pFailReason, IntPtr pvReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'wlanapi_WlanHostedNetworkQuerySecondaryKey' -Namespace Win32 -PassThru
# $api::WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved)#uselib "wlanapi.dll"
#func global WlanHostedNetworkQuerySecondaryKey "WlanHostedNetworkQuerySecondaryKey" sptr, sptr, sptr, sptr, sptr, sptr, sptr
; WlanHostedNetworkQuerySecondaryKey hClientHandle, varptr(pdwKeyLength), varptr(ppucKeyData), varptr(pbIsPassPhrase), varptr(pbPersistent), varptr(pFailReason), pvReserved ; 戻り値は stat
; hClientHandle : HANDLE -> "sptr"
; pdwKeyLength : DWORD* out -> "sptr"
; ppucKeyData : BYTE** out -> "sptr"
; pbIsPassPhrase : BOOL* out -> "sptr"
; pbPersistent : BOOL* out -> "sptr"
; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "sptr"
; pvReserved : void* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "wlanapi.dll" #cfunc global WlanHostedNetworkQuerySecondaryKey "WlanHostedNetworkQuerySecondaryKey" sptr, var, var, var, var, var, sptr ; res = WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved) ; hClientHandle : HANDLE -> "sptr" ; pdwKeyLength : DWORD* out -> "var" ; ppucKeyData : BYTE** out -> "var" ; pbIsPassPhrase : BOOL* out -> "var" ; pbPersistent : BOOL* out -> "var" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "var" ; pvReserved : void* optional -> "sptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "wlanapi.dll" #cfunc global WlanHostedNetworkQuerySecondaryKey "WlanHostedNetworkQuerySecondaryKey" sptr, sptr, sptr, sptr, sptr, sptr, sptr ; res = WlanHostedNetworkQuerySecondaryKey(hClientHandle, varptr(pdwKeyLength), varptr(ppucKeyData), varptr(pbIsPassPhrase), varptr(pbPersistent), varptr(pFailReason), pvReserved) ; hClientHandle : HANDLE -> "sptr" ; pdwKeyLength : DWORD* out -> "sptr" ; ppucKeyData : BYTE** out -> "sptr" ; pbIsPassPhrase : BOOL* out -> "sptr" ; pbPersistent : BOOL* out -> "sptr" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "sptr" ; pvReserved : void* optional -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; DWORD WlanHostedNetworkQuerySecondaryKey(HANDLE hClientHandle, DWORD* pdwKeyLength, BYTE** ppucKeyData, BOOL* pbIsPassPhrase, BOOL* pbPersistent, WLAN_HOSTED_NETWORK_REASON* pFailReason, void* pvReserved) #uselib "wlanapi.dll" #cfunc global WlanHostedNetworkQuerySecondaryKey "WlanHostedNetworkQuerySecondaryKey" intptr, var, var, var, var, var, intptr ; res = WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved) ; hClientHandle : HANDLE -> "intptr" ; pdwKeyLength : DWORD* out -> "var" ; ppucKeyData : BYTE** out -> "var" ; pbIsPassPhrase : BOOL* out -> "var" ; pbPersistent : BOOL* out -> "var" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "var" ; pvReserved : void* optional -> "intptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD WlanHostedNetworkQuerySecondaryKey(HANDLE hClientHandle, DWORD* pdwKeyLength, BYTE** ppucKeyData, BOOL* pbIsPassPhrase, BOOL* pbPersistent, WLAN_HOSTED_NETWORK_REASON* pFailReason, void* pvReserved) #uselib "wlanapi.dll" #cfunc global WlanHostedNetworkQuerySecondaryKey "WlanHostedNetworkQuerySecondaryKey" intptr, intptr, intptr, intptr, intptr, intptr, intptr ; res = WlanHostedNetworkQuerySecondaryKey(hClientHandle, varptr(pdwKeyLength), varptr(ppucKeyData), varptr(pbIsPassPhrase), varptr(pbPersistent), varptr(pFailReason), pvReserved) ; hClientHandle : HANDLE -> "intptr" ; pdwKeyLength : DWORD* out -> "intptr" ; ppucKeyData : BYTE** out -> "intptr" ; pbIsPassPhrase : BOOL* out -> "intptr" ; pbPersistent : BOOL* out -> "intptr" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "intptr" ; pvReserved : void* optional -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
wlanapi = windows.NewLazySystemDLL("wlanapi.dll")
procWlanHostedNetworkQuerySecondaryKey = wlanapi.NewProc("WlanHostedNetworkQuerySecondaryKey")
)
// hClientHandle (HANDLE), pdwKeyLength (DWORD* out), ppucKeyData (BYTE** out), pbIsPassPhrase (BOOL* out), pbPersistent (BOOL* out), pFailReason (WLAN_HOSTED_NETWORK_REASON* optional, out), pvReserved (void* optional)
r1, _, err := procWlanHostedNetworkQuerySecondaryKey.Call(
uintptr(hClientHandle),
uintptr(pdwKeyLength),
uintptr(ppucKeyData),
uintptr(pbIsPassPhrase),
uintptr(pbPersistent),
uintptr(pFailReason),
uintptr(pvReserved),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction WlanHostedNetworkQuerySecondaryKey(
hClientHandle: THandle; // HANDLE
pdwKeyLength: Pointer; // DWORD* out
ppucKeyData: Pointer; // BYTE** out
pbIsPassPhrase: Pointer; // BOOL* out
pbPersistent: Pointer; // BOOL* out
pFailReason: Pointer; // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: Pointer // void* optional
): DWORD; stdcall;
external 'wlanapi.dll' name 'WlanHostedNetworkQuerySecondaryKey';result := DllCall("wlanapi\WlanHostedNetworkQuerySecondaryKey"
, "Ptr", hClientHandle ; HANDLE
, "Ptr", pdwKeyLength ; DWORD* out
, "Ptr", ppucKeyData ; BYTE** out
, "Ptr", pbIsPassPhrase ; BOOL* out
, "Ptr", pbPersistent ; BOOL* out
, "Ptr", pFailReason ; WLAN_HOSTED_NETWORK_REASON* optional, out
, "Ptr", pvReserved ; void* optional
, "UInt") ; return: DWORD●WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved) = DLL("wlanapi.dll", "dword WlanHostedNetworkQuerySecondaryKey(void*, void*, void*, void*, void*, void*, void*)")
# 呼び出し: WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved)
# hClientHandle : HANDLE -> "void*"
# pdwKeyLength : DWORD* out -> "void*"
# ppucKeyData : BYTE** out -> "void*"
# pbIsPassPhrase : BOOL* out -> "void*"
# pbPersistent : BOOL* out -> "void*"
# pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "void*"
# pvReserved : void* optional -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "wlanapi" fn WlanHostedNetworkQuerySecondaryKey(
hClientHandle: ?*anyopaque, // HANDLE
pdwKeyLength: [*c]u32, // DWORD* out
ppucKeyData: [*c][*c]u8, // BYTE** out
pbIsPassPhrase: [*c]i32, // BOOL* out
pbPersistent: [*c]i32, // BOOL* out
pFailReason: [*c]i32, // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: ?*anyopaque // void* optional
) callconv(std.os.windows.WINAPI) u32;proc WlanHostedNetworkQuerySecondaryKey(
hClientHandle: pointer, # HANDLE
pdwKeyLength: ptr uint32, # DWORD* out
ppucKeyData: ptr uint8, # BYTE** out
pbIsPassPhrase: ptr int32, # BOOL* out
pbPersistent: ptr int32, # BOOL* out
pFailReason: ptr int32, # WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: pointer # void* optional
): uint32 {.importc: "WlanHostedNetworkQuerySecondaryKey", stdcall, dynlib: "wlanapi.dll".}pragma(lib, "wlanapi");
extern(Windows)
uint WlanHostedNetworkQuerySecondaryKey(
void* hClientHandle, // HANDLE
uint* pdwKeyLength, // DWORD* out
ubyte** ppucKeyData, // BYTE** out
int* pbIsPassPhrase, // BOOL* out
int* pbPersistent, // BOOL* out
int* pFailReason, // WLAN_HOSTED_NETWORK_REASON* optional, out
void* pvReserved // void* optional
);ccall((:WlanHostedNetworkQuerySecondaryKey, "wlanapi.dll"), stdcall, UInt32,
(Ptr{Cvoid}, Ptr{UInt32}, Ptr{UInt8}, Ptr{Int32}, Ptr{Int32}, Ptr{Int32}, Ptr{Cvoid}),
hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved)
# hClientHandle : HANDLE -> Ptr{Cvoid}
# pdwKeyLength : DWORD* out -> Ptr{UInt32}
# ppucKeyData : BYTE** out -> Ptr{UInt8}
# pbIsPassPhrase : BOOL* out -> Ptr{Int32}
# pbPersistent : BOOL* out -> Ptr{Int32}
# pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> Ptr{Int32}
# pvReserved : void* optional -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
uint32_t WlanHostedNetworkQuerySecondaryKey(
void* hClientHandle,
uint32_t* pdwKeyLength,
uint8_t** ppucKeyData,
int32_t* pbIsPassPhrase,
int32_t* pbPersistent,
int32_t* pFailReason,
void* pvReserved);
]]
local wlanapi = ffi.load("wlanapi")
-- wlanapi.WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved)
-- hClientHandle : HANDLE
-- pdwKeyLength : DWORD* out
-- ppucKeyData : BYTE** out
-- pbIsPassPhrase : BOOL* out
-- pbPersistent : BOOL* out
-- pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
-- pvReserved : void* optional
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('wlanapi.dll');
const WlanHostedNetworkQuerySecondaryKey = lib.func('__stdcall', 'WlanHostedNetworkQuerySecondaryKey', 'uint32_t', ['void *', 'uint32_t *', 'uint8_t *', 'int32_t *', 'int32_t *', 'int32_t *', 'void *']);
// WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved)
// hClientHandle : HANDLE -> 'void *'
// pdwKeyLength : DWORD* out -> 'uint32_t *'
// ppucKeyData : BYTE** out -> 'uint8_t *'
// pbIsPassPhrase : BOOL* out -> 'int32_t *'
// pbPersistent : BOOL* out -> 'int32_t *'
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> 'int32_t *'
// pvReserved : void* optional -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("wlanapi.dll", {
WlanHostedNetworkQuerySecondaryKey: { parameters: ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer"], result: "u32" },
});
// lib.symbols.WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved)
// hClientHandle : HANDLE -> "pointer"
// pdwKeyLength : DWORD* out -> "pointer"
// ppucKeyData : BYTE** out -> "pointer"
// pbIsPassPhrase : BOOL* out -> "pointer"
// pbPersistent : BOOL* out -> "pointer"
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "pointer"
// pvReserved : void* optional -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
uint32_t WlanHostedNetworkQuerySecondaryKey(
void* hClientHandle,
uint32_t* pdwKeyLength,
uint8_t** ppucKeyData,
int32_t* pbIsPassPhrase,
int32_t* pbPersistent,
int32_t* pFailReason,
void* pvReserved);
C, "wlanapi.dll");
// $ffi->WlanHostedNetworkQuerySecondaryKey(hClientHandle, pdwKeyLength, ppucKeyData, pbIsPassPhrase, pbPersistent, pFailReason, pvReserved);
// hClientHandle : HANDLE
// pdwKeyLength : DWORD* out
// ppucKeyData : BYTE** out
// pbIsPassPhrase : BOOL* out
// pbPersistent : BOOL* out
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
// pvReserved : void* optional
// 構造体/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 Wlanapi extends StdCallLibrary {
Wlanapi INSTANCE = Native.load("wlanapi", Wlanapi.class);
int WlanHostedNetworkQuerySecondaryKey(
Pointer hClientHandle, // HANDLE
IntByReference pdwKeyLength, // DWORD* out
Pointer ppucKeyData, // BYTE** out
IntByReference pbIsPassPhrase, // BOOL* out
IntByReference pbPersistent, // BOOL* out
IntByReference pFailReason, // WLAN_HOSTED_NETWORK_REASON* optional, out
Pointer pvReserved // void* optional
);
}@[Link("wlanapi")]
lib Libwlanapi
fun WlanHostedNetworkQuerySecondaryKey = WlanHostedNetworkQuerySecondaryKey(
hClientHandle : Void*, # HANDLE
pdwKeyLength : UInt32*, # DWORD* out
ppucKeyData : UInt8**, # BYTE** out
pbIsPassPhrase : Int32*, # BOOL* out
pbPersistent : Int32*, # BOOL* out
pFailReason : Int32*, # WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved : Void* # void* optional
) : UInt32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef WlanHostedNetworkQuerySecondaryKeyNative = Uint32 Function(Pointer<Void>, Pointer<Uint32>, Pointer<Uint8>, Pointer<Int32>, Pointer<Int32>, Pointer<Int32>, Pointer<Void>);
typedef WlanHostedNetworkQuerySecondaryKeyDart = int Function(Pointer<Void>, Pointer<Uint32>, Pointer<Uint8>, Pointer<Int32>, Pointer<Int32>, Pointer<Int32>, Pointer<Void>);
final WlanHostedNetworkQuerySecondaryKey = DynamicLibrary.open('wlanapi.dll')
.lookupFunction<WlanHostedNetworkQuerySecondaryKeyNative, WlanHostedNetworkQuerySecondaryKeyDart>('WlanHostedNetworkQuerySecondaryKey');
// hClientHandle : HANDLE -> Pointer<Void>
// pdwKeyLength : DWORD* out -> Pointer<Uint32>
// ppucKeyData : BYTE** out -> Pointer<Uint8>
// pbIsPassPhrase : BOOL* out -> Pointer<Int32>
// pbPersistent : BOOL* out -> Pointer<Int32>
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> Pointer<Int32>
// pvReserved : void* optional -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function WlanHostedNetworkQuerySecondaryKey(
hClientHandle: THandle; // HANDLE
pdwKeyLength: Pointer; // DWORD* out
ppucKeyData: Pointer; // BYTE** out
pbIsPassPhrase: Pointer; // BOOL* out
pbPersistent: Pointer; // BOOL* out
pFailReason: Pointer; // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: Pointer // void* optional
): DWORD; stdcall;
external 'wlanapi.dll' name 'WlanHostedNetworkQuerySecondaryKey';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "WlanHostedNetworkQuerySecondaryKey"
c_WlanHostedNetworkQuerySecondaryKey :: Ptr () -> Ptr Word32 -> Ptr Word8 -> Ptr CInt -> Ptr CInt -> Ptr Int32 -> Ptr () -> IO Word32
-- hClientHandle : HANDLE -> Ptr ()
-- pdwKeyLength : DWORD* out -> Ptr Word32
-- ppucKeyData : BYTE** out -> Ptr Word8
-- pbIsPassPhrase : BOOL* out -> Ptr CInt
-- pbPersistent : BOOL* out -> Ptr CInt
-- pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> Ptr Int32
-- pvReserved : void* optional -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let wlanhostednetworkquerysecondarykey =
foreign "WlanHostedNetworkQuerySecondaryKey"
((ptr void) @-> (ptr uint32_t) @-> (ptr uint8_t) @-> (ptr int32_t) @-> (ptr int32_t) @-> (ptr int32_t) @-> (ptr void) @-> returning uint32_t)
(* hClientHandle : HANDLE -> (ptr void) *)
(* pdwKeyLength : DWORD* out -> (ptr uint32_t) *)
(* ppucKeyData : BYTE** out -> (ptr uint8_t) *)
(* pbIsPassPhrase : BOOL* out -> (ptr int32_t) *)
(* pbPersistent : BOOL* out -> (ptr int32_t) *)
(* pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> (ptr int32_t) *)
(* pvReserved : void* optional -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library wlanapi (t "wlanapi.dll"))
(cffi:use-foreign-library wlanapi)
(cffi:defcfun ("WlanHostedNetworkQuerySecondaryKey" wlan-hosted-network-query-secondary-key :convention :stdcall) :uint32
(h-client-handle :pointer) ; HANDLE
(pdw-key-length :pointer) ; DWORD* out
(ppuc-key-data :pointer) ; BYTE** out
(pb-is-pass-phrase :pointer) ; BOOL* out
(pb-persistent :pointer) ; BOOL* out
(p-fail-reason :pointer) ; WLAN_HOSTED_NETWORK_REASON* optional, out
(pv-reserved :pointer)) ; void* optional
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $WlanHostedNetworkQuerySecondaryKey = Win32::API::More->new('wlanapi',
'DWORD WlanHostedNetworkQuerySecondaryKey(HANDLE hClientHandle, LPVOID pdwKeyLength, LPVOID ppucKeyData, LPVOID pbIsPassPhrase, LPVOID pbPersistent, LPVOID pFailReason, LPVOID pvReserved)');
# my $ret = $WlanHostedNetworkQuerySecondaryKey->Call($hClientHandle, $pdwKeyLength, $ppucKeyData, $pbIsPassPhrase, $pbPersistent, $pFailReason, $pvReserved);
# hClientHandle : HANDLE -> HANDLE
# pdwKeyLength : DWORD* out -> LPVOID
# ppucKeyData : BYTE** out -> LPVOID
# pbIsPassPhrase : BOOL* out -> LPVOID
# pbPersistent : BOOL* out -> LPVOID
# pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> LPVOID
# pvReserved : void* optional -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- f WlanCloseHandle — WLAN APIのクライアントハンドルを閉じる。
- f WlanEnumInterfaces — システム上の無線LANインターフェイス一覧を列挙する。
- f WlanFreeMemory — WLAN APIが返したメモリブロックを解放する。
- f WlanHostedNetworkInitSettings — ホストネットワークの構成設定を初期化する。
- f WlanHostedNetworkQueryProperty — ホストネットワークの指定プロパティ値を照会する。
- f WlanHostedNetworkQueryStatus — ホストネットワークの現在の状態情報を取得する。
- f WlanHostedNetworkRefreshSecuritySettings — ホストネットワークのセキュリティ設定を再読み込みして更新する。
- f WlanHostedNetworkSetProperty — ホストネットワークの指定プロパティ値を設定する。
- f WlanHostedNetworkSetSecondaryKey — ホストネットワークのセカンダリセキュリティキーを設定する。
- f WlanOpenHandle — WLAN APIへのクライアントハンドルを開いて接続する。