WlanHostedNetworkSetProperty
関数シグネチャ
// wlanapi.dll
#include <windows.h>
DWORD WlanHostedNetworkSetProperty(
HANDLE hClientHandle,
WLAN_HOSTED_NETWORK_OPCODE OpCode,
DWORD dwDataSize,
void* pvData,
WLAN_HOSTED_NETWORK_REASON* pFailReason, // optional
void* pvReserved // optional
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| hClientHandle | HANDLE | in | クライアントのセッションハンドル。事前に WlanOpenHandle 関数を呼び出して取得します。 |
| OpCode | WLAN_HOSTED_NETWORK_OPCODE | in | 設定するプロパティの識別子。この識別子には、Wlanapi.h ヘッダーファイルで定義されている WLAN_HOSTED_NETWORK_OPCODE 列挙型のうち、次の値のみを指定できます。
Hosted Network の接続設定。
Hosted Network の有効化フラグ。 |
| dwDataSize | DWORD | in | pvData パラメーターが指すバッファーのサイズ (バイト単位) を指定する値。 |
| pvData | void* | in | 設定する静的プロパティを格納したバッファーへのポインター。 このバッファーに関連付けられるデータ型は、OpCode パラメーターの値によって異なります。 |
| pFailReason | WLAN_HOSTED_NETWORK_REASON* | outoptional | WlanHostedNetworkSetProperty 関数の呼び出しが失敗した場合に、失敗の理由を受け取る値への省略可能なポインター。失敗の理由として指定され得る値は、Wlanapi.h ヘッダーファイルで定義されている WLAN_HOSTED_NETWORK_REASON 列挙型の値です。 |
| pvReserved | void* | optional | 将来の使用のために予約されています。このパラメーターは NULL でなければなりません。 |
戻り値の型: DWORD
公式ドキュメント
ワイヤレス Hosted Network の静的プロパティを設定します。
戻り値
関数が成功した場合、戻り値は ERROR_SUCCESS です。
関数が失敗した場合、戻り値は次のいずれかのリターンコードになることがあります。
| リターンコード | 説明 |
|---|---|
| 呼び出し元に十分なアクセス許可がありません。このエラーは、OpCode パラメーターが wlan_hosted_network_opcode_enable であり、かつドメインのグループポリシーによってワイヤレス Hosted Network が無効にされている場合にも返されます。 | |
| ワイヤレス Hosted Network が使用しているネットワーク接続プロファイルが破損しています。 | |
| ハンドルが無効です。このエラーは、hClientHandle パラメーターで指定されたハンドルがハンドルテーブル内に見つからなかった場合に返されます。 | |
パラメーターが正しくありません。このエラーは、次のいずれかの条件に該当する場合に返されます。
|
|
| 要求された操作を実行するのに適切な状態にリソースがありません。これは、ワイヤレス Hosted Network がシャットダウン処理中であった場合に発生することがあります。 | |
| 要求はサポートされていません。このエラーは、アプリケーションが OpCode パラメーターに wlan_hosted_network_opcode_station_profile または wlan_hosted_network_opcode_security_settings を設定して WlanHostedNetworkSetProperty 関数を呼び出した場合に返されます。 | |
| サービスが開始されていません。このエラーは、WLAN AutoConfig サービスが実行されていない場合に返されます。 | |
|
さまざまな RPC エラーおよびその他のエラーコード。返されたエラーに対応するメッセージ文字列を取得するには、 FormatMessage を使用してください。 |
解説(Remarks)
WlanHostedNetworkSetProperty 関数は、Windows 7 および Wireless LAN サービスがインストールされた Windows Server 2008 R2 でワイヤレス Hosted Network をサポートするために追加された、ネイティブ ワイヤレス API の拡張です。
クライアント アプリケーションは、ワイヤレス Hosted Network の現在の静的プロパティを設定するために WlanHostedNetworkSetProperty 関数を呼び出します。 この関数によって生じた Hosted Network のプロパティ変更は、呼び出し元のアプリケーションが (hClientHandle パラメーターを指定して WlanCloseHandle を呼び出して) 呼び出しハンドルを閉じた場合やプロセスが終了した場合でも、自動的に元に戻されることはありません。
pvData パラメーターが指すバッファーに関連付けられるデータ型は、OpCode パラメーターの値に応じて次のようになります。
| OpCode | 説明 |
|---|---|
| wlan_hosted_network_opcode_connection_settings | pvData パラメーターで WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS 構造体へのポインターを渡します。 |
| wlan_hosted_network_opcode_enable | pvData パラメーターで BOOL へのポインターを渡します。 |
WlanHostedNetworkSetProperty 関数を OpCode パラメーターに wlan_hosted_network_opcode_enable を設定して呼び出す場合、ユーザーは対応する適切な特権を持っている必要があります。アクセス許可は、WLAN_SECURABLE_OBJECT に関連付けられた随意アクセス制御リスト (DACL) に格納されます。 OpCode パラメーターに wlan_hosted_network_opcode_enable を指定して WlanHostedNetworkSetProperty 関数を呼び出すには、呼び出し元のクライアント アクセストークンが、WLAN_SECURABLE_OBJECT の次の列挙値によって公開される昇格された特権を持っている必要があります。
- wlan_secure_hosted_network_elevated_access
WlanHostedNetworkSetProperty 関数の OpCode パラメーターに次のいずれかの値が渡された場合、この関数は ERROR_NOT_SUPPORTED で失敗します。
- wlan_hosted_network_opcode_station_profile
- wlan_hosted_network_opcode_connection_settings
WlanHostedNetworkSetProperty 関数が成功するには、新しい設定を永続化する必要があり、そのためには Hosted Network が実行中 (wlan_hosted_network_active) であった場合にその状態を wlan_hosted_network_idle へ遷移させる必要があります。
どのユーザーでもこの関数を呼び出して Hosted Network のプロパティを設定できます。ただし、wlan_hosted_network_opcode_enable フラグを設定するには昇格された特権が必要です。また、ワイヤレス Hosted Network を有効にできるかどうかは、ドメインのグループポリシーによって制限される場合もあります。
Windows 7 以降では、Hosted Network に対応したワイヤレス アダプターがコンピューターに存在する場合、オペレーティングシステムは仮想デバイスをインストールします。コンピューターにワイヤレス ネットワーク アダプターが 1 つだけある場合、この仮想デバイスは通常「ネットワーク接続フォルダー」に、デバイス名が「Microsoft Virtual WiFi Miniport adapter」の「ワイヤレス ネットワーク接続 2」として表示されます。この仮想デバイスはソフトウェア アクセスポイント (SoftAP) 接続を行うためだけに使用され、WlanEnumInterfaces 関数が返す一覧には含まれません。この仮想デバイスの有効期間は物理ワイヤレス アダプターに連動します。物理ワイヤレス アダプターが無効にされると、この仮想デバイスも削除されます。この機能は、Wireless LAN サービスがインストールされた Windows Server 2008 R2 でも利用できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// wlanapi.dll
#include <windows.h>
DWORD WlanHostedNetworkSetProperty(
HANDLE hClientHandle,
WLAN_HOSTED_NETWORK_OPCODE OpCode,
DWORD dwDataSize,
void* pvData,
WLAN_HOSTED_NETWORK_REASON* pFailReason, // optional
void* pvReserved // optional
);[DllImport("wlanapi.dll", ExactSpelling = true)]
static extern uint WlanHostedNetworkSetProperty(
IntPtr hClientHandle, // HANDLE
int OpCode, // WLAN_HOSTED_NETWORK_OPCODE
uint dwDataSize, // DWORD
IntPtr pvData, // void*
IntPtr pFailReason, // WLAN_HOSTED_NETWORK_REASON* optional, out
IntPtr pvReserved // void* optional
);<DllImport("wlanapi.dll", ExactSpelling:=True)>
Public Shared Function WlanHostedNetworkSetProperty(
hClientHandle As IntPtr, ' HANDLE
OpCode As Integer, ' WLAN_HOSTED_NETWORK_OPCODE
dwDataSize As UInteger, ' DWORD
pvData As IntPtr, ' void*
pFailReason As IntPtr, ' WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved As IntPtr ' void* optional
) As UInteger
End Function' hClientHandle : HANDLE
' OpCode : WLAN_HOSTED_NETWORK_OPCODE
' dwDataSize : DWORD
' pvData : void*
' pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
' pvReserved : void* optional
Declare PtrSafe Function WlanHostedNetworkSetProperty Lib "wlanapi" ( _
ByVal hClientHandle As LongPtr, _
ByVal OpCode As Long, _
ByVal dwDataSize As Long, _
ByVal pvData As LongPtr, _
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
WlanHostedNetworkSetProperty = ctypes.windll.wlanapi.WlanHostedNetworkSetProperty
WlanHostedNetworkSetProperty.restype = wintypes.DWORD
WlanHostedNetworkSetProperty.argtypes = [
wintypes.HANDLE, # hClientHandle : HANDLE
ctypes.c_int, # OpCode : WLAN_HOSTED_NETWORK_OPCODE
wintypes.DWORD, # dwDataSize : DWORD
ctypes.POINTER(None), # pvData : void*
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')
WlanHostedNetworkSetProperty = Fiddle::Function.new(
lib['WlanHostedNetworkSetProperty'],
[
Fiddle::TYPE_VOIDP, # hClientHandle : HANDLE
Fiddle::TYPE_INT, # OpCode : WLAN_HOSTED_NETWORK_OPCODE
-Fiddle::TYPE_INT, # dwDataSize : DWORD
Fiddle::TYPE_VOIDP, # pvData : void*
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 WlanHostedNetworkSetProperty(
hClientHandle: *mut core::ffi::c_void, // HANDLE
OpCode: i32, // WLAN_HOSTED_NETWORK_OPCODE
dwDataSize: u32, // DWORD
pvData: *mut (), // void*
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 WlanHostedNetworkSetProperty(IntPtr hClientHandle, int OpCode, uint dwDataSize, IntPtr pvData, IntPtr pFailReason, IntPtr pvReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'wlanapi_WlanHostedNetworkSetProperty' -Namespace Win32 -PassThru
# $api::WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved)#uselib "wlanapi.dll"
#func global WlanHostedNetworkSetProperty "WlanHostedNetworkSetProperty" sptr, sptr, sptr, sptr, sptr, sptr
; WlanHostedNetworkSetProperty hClientHandle, OpCode, dwDataSize, pvData, varptr(pFailReason), pvReserved ; 戻り値は stat
; hClientHandle : HANDLE -> "sptr"
; OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "sptr"
; dwDataSize : DWORD -> "sptr"
; pvData : void* -> "sptr"
; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "sptr"
; pvReserved : void* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "wlanapi.dll" #cfunc global WlanHostedNetworkSetProperty "WlanHostedNetworkSetProperty" sptr, int, int, sptr, var, sptr ; res = WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved) ; hClientHandle : HANDLE -> "sptr" ; OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "int" ; dwDataSize : DWORD -> "int" ; pvData : void* -> "sptr" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "var" ; pvReserved : void* optional -> "sptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "wlanapi.dll" #cfunc global WlanHostedNetworkSetProperty "WlanHostedNetworkSetProperty" sptr, int, int, sptr, sptr, sptr ; res = WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, varptr(pFailReason), pvReserved) ; hClientHandle : HANDLE -> "sptr" ; OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "int" ; dwDataSize : DWORD -> "int" ; pvData : void* -> "sptr" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "sptr" ; pvReserved : void* optional -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; DWORD WlanHostedNetworkSetProperty(HANDLE hClientHandle, WLAN_HOSTED_NETWORK_OPCODE OpCode, DWORD dwDataSize, void* pvData, WLAN_HOSTED_NETWORK_REASON* pFailReason, void* pvReserved) #uselib "wlanapi.dll" #cfunc global WlanHostedNetworkSetProperty "WlanHostedNetworkSetProperty" intptr, int, int, intptr, var, intptr ; res = WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved) ; hClientHandle : HANDLE -> "intptr" ; OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "int" ; dwDataSize : DWORD -> "int" ; pvData : void* -> "intptr" ; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "var" ; pvReserved : void* optional -> "intptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD WlanHostedNetworkSetProperty(HANDLE hClientHandle, WLAN_HOSTED_NETWORK_OPCODE OpCode, DWORD dwDataSize, void* pvData, WLAN_HOSTED_NETWORK_REASON* pFailReason, void* pvReserved) #uselib "wlanapi.dll" #cfunc global WlanHostedNetworkSetProperty "WlanHostedNetworkSetProperty" intptr, int, int, intptr, intptr, intptr ; res = WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, varptr(pFailReason), pvReserved) ; hClientHandle : HANDLE -> "intptr" ; OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "int" ; dwDataSize : DWORD -> "int" ; pvData : void* -> "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")
procWlanHostedNetworkSetProperty = wlanapi.NewProc("WlanHostedNetworkSetProperty")
)
// hClientHandle (HANDLE), OpCode (WLAN_HOSTED_NETWORK_OPCODE), dwDataSize (DWORD), pvData (void*), pFailReason (WLAN_HOSTED_NETWORK_REASON* optional, out), pvReserved (void* optional)
r1, _, err := procWlanHostedNetworkSetProperty.Call(
uintptr(hClientHandle),
uintptr(OpCode),
uintptr(dwDataSize),
uintptr(pvData),
uintptr(pFailReason),
uintptr(pvReserved),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction WlanHostedNetworkSetProperty(
hClientHandle: THandle; // HANDLE
OpCode: Integer; // WLAN_HOSTED_NETWORK_OPCODE
dwDataSize: DWORD; // DWORD
pvData: Pointer; // void*
pFailReason: Pointer; // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: Pointer // void* optional
): DWORD; stdcall;
external 'wlanapi.dll' name 'WlanHostedNetworkSetProperty';result := DllCall("wlanapi\WlanHostedNetworkSetProperty"
, "Ptr", hClientHandle ; HANDLE
, "Int", OpCode ; WLAN_HOSTED_NETWORK_OPCODE
, "UInt", dwDataSize ; DWORD
, "Ptr", pvData ; void*
, "Ptr", pFailReason ; WLAN_HOSTED_NETWORK_REASON* optional, out
, "Ptr", pvReserved ; void* optional
, "UInt") ; return: DWORD●WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved) = DLL("wlanapi.dll", "dword WlanHostedNetworkSetProperty(void*, int, dword, void*, void*, void*)")
# 呼び出し: WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved)
# hClientHandle : HANDLE -> "void*"
# OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "int"
# dwDataSize : DWORD -> "dword"
# pvData : void* -> "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 WlanHostedNetworkSetProperty(
hClientHandle: ?*anyopaque, // HANDLE
OpCode: i32, // WLAN_HOSTED_NETWORK_OPCODE
dwDataSize: u32, // DWORD
pvData: ?*anyopaque, // void*
pFailReason: [*c]i32, // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: ?*anyopaque // void* optional
) callconv(std.os.windows.WINAPI) u32;proc WlanHostedNetworkSetProperty(
hClientHandle: pointer, # HANDLE
OpCode: int32, # WLAN_HOSTED_NETWORK_OPCODE
dwDataSize: uint32, # DWORD
pvData: pointer, # void*
pFailReason: ptr int32, # WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: pointer # void* optional
): uint32 {.importc: "WlanHostedNetworkSetProperty", stdcall, dynlib: "wlanapi.dll".}pragma(lib, "wlanapi");
extern(Windows)
uint WlanHostedNetworkSetProperty(
void* hClientHandle, // HANDLE
int OpCode, // WLAN_HOSTED_NETWORK_OPCODE
uint dwDataSize, // DWORD
void* pvData, // void*
int* pFailReason, // WLAN_HOSTED_NETWORK_REASON* optional, out
void* pvReserved // void* optional
);ccall((:WlanHostedNetworkSetProperty, "wlanapi.dll"), stdcall, UInt32,
(Ptr{Cvoid}, Int32, UInt32, Ptr{Cvoid}, Ptr{Int32}, Ptr{Cvoid}),
hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved)
# hClientHandle : HANDLE -> Ptr{Cvoid}
# OpCode : WLAN_HOSTED_NETWORK_OPCODE -> Int32
# dwDataSize : DWORD -> UInt32
# pvData : void* -> Ptr{Cvoid}
# 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 WlanHostedNetworkSetProperty(
void* hClientHandle,
int32_t OpCode,
uint32_t dwDataSize,
void* pvData,
int32_t* pFailReason,
void* pvReserved);
]]
local wlanapi = ffi.load("wlanapi")
-- wlanapi.WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved)
-- hClientHandle : HANDLE
-- OpCode : WLAN_HOSTED_NETWORK_OPCODE
-- dwDataSize : DWORD
-- pvData : void*
-- 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 WlanHostedNetworkSetProperty = lib.func('__stdcall', 'WlanHostedNetworkSetProperty', 'uint32_t', ['void *', 'int32_t', 'uint32_t', 'void *', 'int32_t *', 'void *']);
// WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved)
// hClientHandle : HANDLE -> 'void *'
// OpCode : WLAN_HOSTED_NETWORK_OPCODE -> 'int32_t'
// dwDataSize : DWORD -> 'uint32_t'
// pvData : void* -> 'void *'
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> 'int32_t *'
// pvReserved : void* optional -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("wlanapi.dll", {
WlanHostedNetworkSetProperty: { parameters: ["pointer", "i32", "u32", "pointer", "pointer", "pointer"], result: "u32" },
});
// lib.symbols.WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved)
// hClientHandle : HANDLE -> "pointer"
// OpCode : WLAN_HOSTED_NETWORK_OPCODE -> "i32"
// dwDataSize : DWORD -> "u32"
// pvData : void* -> "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 WlanHostedNetworkSetProperty(
void* hClientHandle,
int32_t OpCode,
uint32_t dwDataSize,
void* pvData,
int32_t* pFailReason,
void* pvReserved);
C, "wlanapi.dll");
// $ffi->WlanHostedNetworkSetProperty(hClientHandle, OpCode, dwDataSize, pvData, pFailReason, pvReserved);
// hClientHandle : HANDLE
// OpCode : WLAN_HOSTED_NETWORK_OPCODE
// dwDataSize : DWORD
// pvData : void*
// 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 WlanHostedNetworkSetProperty(
Pointer hClientHandle, // HANDLE
int OpCode, // WLAN_HOSTED_NETWORK_OPCODE
int dwDataSize, // DWORD
Pointer pvData, // void*
IntByReference pFailReason, // WLAN_HOSTED_NETWORK_REASON* optional, out
Pointer pvReserved // void* optional
);
}@[Link("wlanapi")]
lib Libwlanapi
fun WlanHostedNetworkSetProperty = WlanHostedNetworkSetProperty(
hClientHandle : Void*, # HANDLE
OpCode : Int32, # WLAN_HOSTED_NETWORK_OPCODE
dwDataSize : UInt32, # DWORD
pvData : Void*, # void*
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 WlanHostedNetworkSetPropertyNative = Uint32 Function(Pointer<Void>, Int32, Uint32, Pointer<Void>, Pointer<Int32>, Pointer<Void>);
typedef WlanHostedNetworkSetPropertyDart = int Function(Pointer<Void>, int, int, Pointer<Void>, Pointer<Int32>, Pointer<Void>);
final WlanHostedNetworkSetProperty = DynamicLibrary.open('wlanapi.dll')
.lookupFunction<WlanHostedNetworkSetPropertyNative, WlanHostedNetworkSetPropertyDart>('WlanHostedNetworkSetProperty');
// hClientHandle : HANDLE -> Pointer<Void>
// OpCode : WLAN_HOSTED_NETWORK_OPCODE -> Int32
// dwDataSize : DWORD -> Uint32
// pvData : void* -> Pointer<Void>
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> Pointer<Int32>
// pvReserved : void* optional -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function WlanHostedNetworkSetProperty(
hClientHandle: THandle; // HANDLE
OpCode: Integer; // WLAN_HOSTED_NETWORK_OPCODE
dwDataSize: DWORD; // DWORD
pvData: Pointer; // void*
pFailReason: Pointer; // WLAN_HOSTED_NETWORK_REASON* optional, out
pvReserved: Pointer // void* optional
): DWORD; stdcall;
external 'wlanapi.dll' name 'WlanHostedNetworkSetProperty';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "WlanHostedNetworkSetProperty"
c_WlanHostedNetworkSetProperty :: Ptr () -> Int32 -> Word32 -> Ptr () -> Ptr Int32 -> Ptr () -> IO Word32
-- hClientHandle : HANDLE -> Ptr ()
-- OpCode : WLAN_HOSTED_NETWORK_OPCODE -> Int32
-- dwDataSize : DWORD -> Word32
-- pvData : void* -> Ptr ()
-- 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 wlanhostednetworksetproperty =
foreign "WlanHostedNetworkSetProperty"
((ptr void) @-> int32_t @-> uint32_t @-> (ptr void) @-> (ptr int32_t) @-> (ptr void) @-> returning uint32_t)
(* hClientHandle : HANDLE -> (ptr void) *)
(* OpCode : WLAN_HOSTED_NETWORK_OPCODE -> int32_t *)
(* dwDataSize : DWORD -> uint32_t *)
(* pvData : void* -> (ptr void) *)
(* 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 ("WlanHostedNetworkSetProperty" wlan-hosted-network-set-property :convention :stdcall) :uint32
(h-client-handle :pointer) ; HANDLE
(op-code :int32) ; WLAN_HOSTED_NETWORK_OPCODE
(dw-data-size :uint32) ; DWORD
(pv-data :pointer) ; void*
(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 $WlanHostedNetworkSetProperty = Win32::API::More->new('wlanapi',
'DWORD WlanHostedNetworkSetProperty(HANDLE hClientHandle, int OpCode, DWORD dwDataSize, LPVOID pvData, LPVOID pFailReason, LPVOID pvReserved)');
# my $ret = $WlanHostedNetworkSetProperty->Call($hClientHandle, $OpCode, $dwDataSize, $pvData, $pFailReason, $pvReserved);
# hClientHandle : HANDLE -> HANDLE
# OpCode : WLAN_HOSTED_NETWORK_OPCODE -> int
# dwDataSize : DWORD -> DWORD
# pvData : void* -> LPVOID
# pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> LPVOID
# pvReserved : void* optional -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- s WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS
- f WlanCloseHandle — WLAN APIのクライアントハンドルを閉じる。
- f WlanEnumInterfaces — システム上の無線LANインターフェイス一覧を列挙する。
- f WlanHostedNetworkInitSettings — ホストネットワークの構成設定を初期化する。
- f WlanHostedNetworkQueryProperty — ホストネットワークの指定プロパティ値を照会する。
- f WlanHostedNetworkQuerySecondaryKey — ホストネットワークのセカンダリセキュリティキーを取得する。
- f WlanHostedNetworkRefreshSecuritySettings — ホストネットワークのセキュリティ設定を再読み込みして更新する。
- f WlanHostedNetworkSetSecondaryKey — ホストネットワークのセカンダリセキュリティキーを設定する。
- f WlanOpenHandle — WLAN APIへのクライアントハンドルを開いて接続する。