Win32 API 日本語リファレンス
ホーム › NetworkManagement.WiFi › WlanHostedNetworkStopUsing

WlanHostedNetworkStopUsing

関数
ホストネットワークの使用を停止し参照カウントを減らす。
DLLwlanapi.dll呼出規約winapi対応OSWindows 7 以降

シグネチャ

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

DWORD WlanHostedNetworkStopUsing(
    HANDLE hClientHandle,
    WLAN_HOSTED_NETWORK_REASON* pFailReason,   // optional
    void* pvReserved   // optional
);

パラメーター

名前型方向説明
hClientHandleHANDLEinクライアントのセッションハンドル。WlanOpenHandle 関数の以前の呼び出しによって返された値です。
pFailReasonWLAN_HOSTED_NETWORK_REASON*outoptionalWlanHostedNetworkStopUsing 関数の呼び出しが失敗した場合に、失敗の理由を受け取る値への省略可能なポインター。失敗の理由として指定できる値は、Wlanapi.h ヘッダーファイルで定義されている WLAN_HOSTED_NETWORK_REASON 列挙型の値です。
pvReservedvoid*optional将来の使用のために予約されています。このパラメーターは NULL にする必要があります。

戻り値の型: DWORD

公式ドキュメント

ワイヤレス Hosted Network を停止します。

戻り値

関数が成功した場合、戻り値は ERROR_SUCCESS です。

関数が失敗した場合、戻り値は次のいずれかのリターンコードになることがあります。

リターンコード 説明
ERROR_INVALID_HANDLE
ハンドルが無効です。このエラーは、hClientHandle パラメーターに指定されたハンドルがハンドルテーブルに見つからなかった場合に返されます。
ERROR_INVALID_PARAMETER
パラメーターが正しくありません。このエラーは、次のいずれかの条件に該当する場合に返されます。
  • hClientHandle が NULL である。
  • pvReserved が NULL ではない。
ERROR_INVALID_STATE
要求された操作を実行できる正しい状態にリソースがありません。これは、ワイヤレス Hosted Network がシャットダウン処理中であった場合に発生することがあります。
ERROR_SERVICE_NOT_ACTIVE
サービスが開始されていません。このエラーは、WLAN AutoConfig Service が実行されていない場合に返されます。
その他
さまざまな RPC エラーやその他のエラーコード。返されたエラーのメッセージ文字列を取得するには、 FormatMessage を使用します。

解説(Remarks)

WlanHostedNetworkStopUsing 関数は、Windows 7 および Wireless LAN Service がインストールされた Windows Server 2008 R2 でワイヤレス Hosted Network をサポートするために追加された、ネイティブワイヤレス API の拡張機能です。

アプリケーションは、Hosted Network を停止するために WlanHostedNetworkStopUsing 関数を呼び出します。アプリケーションは、それ以前に成功した WlanHostedNetworkStartUsing 関数の呼び出しと対にするために、WlanHostedNetworkStopUsing 関数を呼び出します。ワイヤレス Hosted Network は、すべてのアプリケーションが WlanHostedNetworkStopUsing 関数を呼び出すか、強制的に停止するために WlanHostedNetworkForceStop 関数が呼び出されるまで、アクティブなままになります。ワイヤレス Hosted Network が停止すると、状態は wlan_hosted_network_idle に切り替わります。外部要因によって Hosted Network の状態が変化した場合(たとえば、ワイヤレスインターフェイスカードのミニポートドライバーが利用できなくなった場合など)にも、この呼び出しは失敗することがあります。

どのユーザーでも、この関数を呼び出して 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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

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

DWORD WlanHostedNetworkStopUsing(
    HANDLE hClientHandle,
    WLAN_HOSTED_NETWORK_REASON* pFailReason,   // optional
    void* pvReserved   // optional
);
[DllImport("wlanapi.dll", ExactSpelling = true)]
static extern uint WlanHostedNetworkStopUsing(
    IntPtr hClientHandle,   // HANDLE
    IntPtr pFailReason,   // WLAN_HOSTED_NETWORK_REASON* optional, out
    IntPtr pvReserved   // void* optional
);
<DllImport("wlanapi.dll", ExactSpelling:=True)>
Public Shared Function WlanHostedNetworkStopUsing(
    hClientHandle As IntPtr,   ' HANDLE
    pFailReason As IntPtr,   ' WLAN_HOSTED_NETWORK_REASON* optional, out
    pvReserved As IntPtr   ' void* optional
) As UInteger
End Function
' hClientHandle : HANDLE
' pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out
' pvReserved : void* optional
Declare PtrSafe Function WlanHostedNetworkStopUsing Lib "wlanapi" ( _
    ByVal hClientHandle 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

WlanHostedNetworkStopUsing = ctypes.windll.wlanapi.WlanHostedNetworkStopUsing
WlanHostedNetworkStopUsing.restype = wintypes.DWORD
WlanHostedNetworkStopUsing.argtypes = [
    wintypes.HANDLE,  # hClientHandle : HANDLE
    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')
WlanHostedNetworkStopUsing = Fiddle::Function.new(
  lib['WlanHostedNetworkStopUsing'],
  [
    Fiddle::TYPE_VOIDP,  # hClientHandle : HANDLE
    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 WlanHostedNetworkStopUsing(
        hClientHandle: *mut core::ffi::c_void,  // HANDLE
        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 WlanHostedNetworkStopUsing(IntPtr hClientHandle, IntPtr pFailReason, IntPtr pvReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'wlanapi_WlanHostedNetworkStopUsing' -Namespace Win32 -PassThru
# $api::WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
#uselib "wlanapi.dll"
#func global WlanHostedNetworkStopUsing "WlanHostedNetworkStopUsing" sptr, sptr, sptr
; WlanHostedNetworkStopUsing hClientHandle, varptr(pFailReason), pvReserved   ; 戻り値は stat
; hClientHandle : HANDLE -> "sptr"
; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "sptr"
; pvReserved : void* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "wlanapi.dll"
#cfunc global WlanHostedNetworkStopUsing "WlanHostedNetworkStopUsing" sptr, var, sptr
; res = WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
; hClientHandle : HANDLE -> "sptr"
; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "var"
; pvReserved : void* optional -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD WlanHostedNetworkStopUsing(HANDLE hClientHandle, WLAN_HOSTED_NETWORK_REASON* pFailReason, void* pvReserved)
#uselib "wlanapi.dll"
#cfunc global WlanHostedNetworkStopUsing "WlanHostedNetworkStopUsing" intptr, var, intptr
; res = WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
; hClientHandle : HANDLE -> "intptr"
; pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> "var"
; pvReserved : void* optional -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	wlanapi = windows.NewLazySystemDLL("wlanapi.dll")
	procWlanHostedNetworkStopUsing = wlanapi.NewProc("WlanHostedNetworkStopUsing")
)

// hClientHandle (HANDLE), pFailReason (WLAN_HOSTED_NETWORK_REASON* optional, out), pvReserved (void* optional)
r1, _, err := procWlanHostedNetworkStopUsing.Call(
	uintptr(hClientHandle),
	uintptr(pFailReason),
	uintptr(pvReserved),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function WlanHostedNetworkStopUsing(
  hClientHandle: THandle;   // HANDLE
  pFailReason: Pointer;   // WLAN_HOSTED_NETWORK_REASON* optional, out
  pvReserved: Pointer   // void* optional
): DWORD; stdcall;
  external 'wlanapi.dll' name 'WlanHostedNetworkStopUsing';
result := DllCall("wlanapi\WlanHostedNetworkStopUsing"
    , "Ptr", hClientHandle   ; HANDLE
    , "Ptr", pFailReason   ; WLAN_HOSTED_NETWORK_REASON* optional, out
    , "Ptr", pvReserved   ; void* optional
    , "UInt")   ; return: DWORD
●WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved) = DLL("wlanapi.dll", "dword WlanHostedNetworkStopUsing(void*, void*, void*)")
# 呼び出し: WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
# hClientHandle : HANDLE -> "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 WlanHostedNetworkStopUsing(
    hClientHandle: ?*anyopaque, // HANDLE
    pFailReason: [*c]i32, // WLAN_HOSTED_NETWORK_REASON* optional, out
    pvReserved: ?*anyopaque // void* optional
) callconv(std.os.windows.WINAPI) u32;
proc WlanHostedNetworkStopUsing(
    hClientHandle: pointer,  # HANDLE
    pFailReason: ptr int32,  # WLAN_HOSTED_NETWORK_REASON* optional, out
    pvReserved: pointer  # void* optional
): uint32 {.importc: "WlanHostedNetworkStopUsing", stdcall, dynlib: "wlanapi.dll".}
pragma(lib, "wlanapi");
extern(Windows)
uint WlanHostedNetworkStopUsing(
    void* hClientHandle,   // HANDLE
    int* pFailReason,   // WLAN_HOSTED_NETWORK_REASON* optional, out
    void* pvReserved   // void* optional
);
ccall((:WlanHostedNetworkStopUsing, "wlanapi.dll"), stdcall, UInt32,
      (Ptr{Cvoid}, Ptr{Int32}, Ptr{Cvoid}),
      hClientHandle, pFailReason, pvReserved)
# hClientHandle : HANDLE -> 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 WlanHostedNetworkStopUsing(
    void* hClientHandle,
    int32_t* pFailReason,
    void* pvReserved);
]]
local wlanapi = ffi.load("wlanapi")
-- wlanapi.WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
-- hClientHandle : HANDLE
-- 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 WlanHostedNetworkStopUsing = lib.func('__stdcall', 'WlanHostedNetworkStopUsing', 'uint32_t', ['void *', 'int32_t *', 'void *']);
// WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
// hClientHandle : HANDLE -> 'void *'
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> 'int32_t *'
// pvReserved : void* optional -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("wlanapi.dll", {
  WlanHostedNetworkStopUsing: { parameters: ["pointer", "pointer", "pointer"], result: "u32" },
});
// lib.symbols.WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved)
// hClientHandle : HANDLE -> "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 WlanHostedNetworkStopUsing(
    void* hClientHandle,
    int32_t* pFailReason,
    void* pvReserved);
C, "wlanapi.dll");
// $ffi->WlanHostedNetworkStopUsing(hClientHandle, pFailReason, pvReserved);
// hClientHandle : HANDLE
// 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 WlanHostedNetworkStopUsing(
        Pointer hClientHandle,   // HANDLE
        IntByReference pFailReason,   // WLAN_HOSTED_NETWORK_REASON* optional, out
        Pointer pvReserved   // void* optional
    );
}
@[Link("wlanapi")]
lib Libwlanapi
  fun WlanHostedNetworkStopUsing = WlanHostedNetworkStopUsing(
    hClientHandle : Void*,   # HANDLE
    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 WlanHostedNetworkStopUsingNative = Uint32 Function(Pointer<Void>, Pointer<Int32>, Pointer<Void>);
typedef WlanHostedNetworkStopUsingDart = int Function(Pointer<Void>, Pointer<Int32>, Pointer<Void>);
final WlanHostedNetworkStopUsing = DynamicLibrary.open('wlanapi.dll')
    .lookupFunction<WlanHostedNetworkStopUsingNative, WlanHostedNetworkStopUsingDart>('WlanHostedNetworkStopUsing');
// hClientHandle : HANDLE -> Pointer<Void>
// pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> Pointer<Int32>
// pvReserved : void* optional -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function WlanHostedNetworkStopUsing(
  hClientHandle: THandle;   // HANDLE
  pFailReason: Pointer;   // WLAN_HOSTED_NETWORK_REASON* optional, out
  pvReserved: Pointer   // void* optional
): DWORD; stdcall;
  external 'wlanapi.dll' name 'WlanHostedNetworkStopUsing';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "WlanHostedNetworkStopUsing"
  c_WlanHostedNetworkStopUsing :: Ptr () -> Ptr Int32 -> Ptr () -> IO Word32
-- hClientHandle : HANDLE -> 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 wlanhostednetworkstopusing =
  foreign "WlanHostedNetworkStopUsing"
    ((ptr void) @-> (ptr int32_t) @-> (ptr void) @-> returning uint32_t)
(* hClientHandle : HANDLE -> (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 ("WlanHostedNetworkStopUsing" wlan-hosted-network-stop-using :convention :stdcall) :uint32
  (h-client-handle :pointer)   ; HANDLE
  (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 $WlanHostedNetworkStopUsing = Win32::API::More->new('wlanapi',
    'DWORD WlanHostedNetworkStopUsing(HANDLE hClientHandle, LPVOID pFailReason, LPVOID pvReserved)');
# my $ret = $WlanHostedNetworkStopUsing->Call($hClientHandle, $pFailReason, $pvReserved);
# hClientHandle : HANDLE -> HANDLE
# pFailReason : WLAN_HOSTED_NETWORK_REASON* optional, out -> LPVOID
# pvReserved : void* optional -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

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