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

NetDfsRemoveRootTarget

関数
DFS名前空間ルートからルートターゲットを削除する。
DLLNETAPI32.dll呼出規約winapi対応OSWindows Vista 以降

シグネチャ

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

DWORD NetDfsRemoveRootTarget(
    LPWSTR pDfsPath,
    LPWSTR pTargetPath,   // optional
    DWORD Flags
);

パラメーター

名前型方向説明
pDfsPathLPWSTRin

DFS 名前空間の Universal Naming Convention (UNC) パスを指定する文字列へのポインターです。

スタンドアロン DFS 名前空間の場合、この文字列は次の形式にします。

\\ServerName\DfsName

ここで ServerName は DFS ルートターゲットをホストするサーバーの名前であり、 DfsName は DFS 名前空間の名前です。

ドメインベースの DFS 名前空間の場合、この文字列は次の形式にします。

\\DomainName\DomDfsName

ここで DomainName はドメインベースの DFS 名前空間をホストするドメインの名前であり、 DomDfsName は DFS 名前空間の名前です。

pTargetPathLPWSTRinoptional

pDfsPath パラメーターで指定した DFS 名前空間の DFS ルートターゲットの UNC パスを指定する、 null で終わる Unicode 文字列へのポインターです。

スタンドアロン DFS 名前空間の場合、このパラメーターは NULL でなければなりません。ドメインベースの DFS 名前空間の場合、文字列は次の形式にします。

\\ServerName\RootShare

ここで ServerName は DFS ルートターゲットをホストするサーバーの名前であり、 RootShare はそのサーバー上のフォルダーの名前です。

FlagsDWORDin

削除操作の種類を指定するフラグです。スタンドアロン DFS 名前空間の場合、このパラメーターは 0 でなければなりません。ドメインベースの DFS 名前空間の場合は、0 または次の値を指定できます。0 の場合は、 通常の削除操作を示します。

DFS_FORCE_REMOVE (0x80000000)

ドメインベースの DFS 名前空間に対してこのフラグを指定すると、ルートターゲットにアクセスできない場合でも ルートターゲットが削除されます。

戻り値の型: DWORD

公式ドキュメント

ドメインベースの DFS 名前空間から DFS ルートターゲットを削除します。そのルートターゲットが DFS 名前空間の最後のルートターゲットである場合、この関数は DFS 名前空間自体を削除します。この関数は、スタンドアロン DFS 名前空間を削除するためにも使用できます。

戻り値

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

関数が失敗した場合、戻り値はシステム エラー コードです。エラー コードの一覧については、 システム エラー コードを参照してください。

解説(Remarks)

呼び出し元は、DFS サーバーに対する Administrator 特権を持っている必要があります。

目的の結果に応じて指定すべきパラメーター値を次に示します。

pDfsPath パラメーター pTargetPath パラメーター 結果
\\DomainName\DomDfsName \\ServerName\RootShare Windows 2000 モードまたは Windows Server 2008 モードのドメインベースの DFS ルートターゲットを削除します。その ターゲットが DFS 名前空間の最後のルートターゲットである場合、この関数は DFS 名前空間も削除します。
\\ServerName\DfsName NULL スタンドアロン DFS 名前空間を削除します。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

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

DWORD NetDfsRemoveRootTarget(
    LPWSTR pDfsPath,
    LPWSTR pTargetPath,   // optional
    DWORD Flags
);
[DllImport("NETAPI32.dll", ExactSpelling = true)]
static extern uint NetDfsRemoveRootTarget(
    [MarshalAs(UnmanagedType.LPWStr)] string pDfsPath,   // LPWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string pTargetPath,   // LPWSTR optional
    uint Flags   // DWORD
);
<DllImport("NETAPI32.dll", ExactSpelling:=True)>
Public Shared Function NetDfsRemoveRootTarget(
    <MarshalAs(UnmanagedType.LPWStr)> pDfsPath As String,   ' LPWSTR
    <MarshalAs(UnmanagedType.LPWStr)> pTargetPath As String,   ' LPWSTR optional
    Flags As UInteger   ' DWORD
) As UInteger
End Function
' pDfsPath : LPWSTR
' pTargetPath : LPWSTR optional
' Flags : DWORD
Declare PtrSafe Function NetDfsRemoveRootTarget Lib "netapi32" ( _
    ByVal pDfsPath As LongPtr, _
    ByVal pTargetPath As LongPtr, _
    ByVal Flags As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

NetDfsRemoveRootTarget = ctypes.windll.netapi32.NetDfsRemoveRootTarget
NetDfsRemoveRootTarget.restype = wintypes.DWORD
NetDfsRemoveRootTarget.argtypes = [
    wintypes.LPCWSTR,  # pDfsPath : LPWSTR
    wintypes.LPCWSTR,  # pTargetPath : LPWSTR optional
    wintypes.DWORD,  # Flags : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('NETAPI32.dll')
NetDfsRemoveRootTarget = Fiddle::Function.new(
  lib['NetDfsRemoveRootTarget'],
  [
    Fiddle::TYPE_VOIDP,  # pDfsPath : LPWSTR
    Fiddle::TYPE_VOIDP,  # pTargetPath : LPWSTR optional
    -Fiddle::TYPE_INT,  # Flags : DWORD
  ],
  -Fiddle::TYPE_INT)
#[link(name = "netapi32")]
extern "system" {
    fn NetDfsRemoveRootTarget(
        pDfsPath: *mut u16,  // LPWSTR
        pTargetPath: *mut u16,  // LPWSTR optional
        Flags: u32  // DWORD
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("NETAPI32.dll")]
public static extern uint NetDfsRemoveRootTarget([MarshalAs(UnmanagedType.LPWStr)] string pDfsPath, [MarshalAs(UnmanagedType.LPWStr)] string pTargetPath, uint Flags);
"@
$api = Add-Type -MemberDefinition $sig -Name 'NETAPI32_NetDfsRemoveRootTarget' -Namespace Win32 -PassThru
# $api::NetDfsRemoveRootTarget(pDfsPath, pTargetPath, Flags)
#uselib "NETAPI32.dll"
#func global NetDfsRemoveRootTarget "NetDfsRemoveRootTarget" sptr, sptr, sptr
; NetDfsRemoveRootTarget pDfsPath, pTargetPath, Flags   ; 戻り値は stat
; pDfsPath : LPWSTR -> "sptr"
; pTargetPath : LPWSTR optional -> "sptr"
; Flags : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "NETAPI32.dll"
#cfunc global NetDfsRemoveRootTarget "NetDfsRemoveRootTarget" wstr, wstr, int
; res = NetDfsRemoveRootTarget(pDfsPath, pTargetPath, Flags)
; pDfsPath : LPWSTR -> "wstr"
; pTargetPath : LPWSTR optional -> "wstr"
; Flags : DWORD -> "int"
; DWORD NetDfsRemoveRootTarget(LPWSTR pDfsPath, LPWSTR pTargetPath, DWORD Flags)
#uselib "NETAPI32.dll"
#cfunc global NetDfsRemoveRootTarget "NetDfsRemoveRootTarget" wstr, wstr, int
; res = NetDfsRemoveRootTarget(pDfsPath, pTargetPath, Flags)
; pDfsPath : LPWSTR -> "wstr"
; pTargetPath : LPWSTR optional -> "wstr"
; Flags : DWORD -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	netapi32 = windows.NewLazySystemDLL("NETAPI32.dll")
	procNetDfsRemoveRootTarget = netapi32.NewProc("NetDfsRemoveRootTarget")
)

// pDfsPath (LPWSTR), pTargetPath (LPWSTR optional), Flags (DWORD)
r1, _, err := procNetDfsRemoveRootTarget.Call(
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pDfsPath))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pTargetPath))),
	uintptr(Flags),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function NetDfsRemoveRootTarget(
  pDfsPath: PWideChar;   // LPWSTR
  pTargetPath: PWideChar;   // LPWSTR optional
  Flags: DWORD   // DWORD
): DWORD; stdcall;
  external 'NETAPI32.dll' name 'NetDfsRemoveRootTarget';
result := DllCall("NETAPI32\NetDfsRemoveRootTarget"
    , "WStr", pDfsPath   ; LPWSTR
    , "WStr", pTargetPath   ; LPWSTR optional
    , "UInt", Flags   ; DWORD
    , "UInt")   ; return: DWORD
●NetDfsRemoveRootTarget(pDfsPath, pTargetPath, Flags) = DLL("NETAPI32.dll", "dword NetDfsRemoveRootTarget(char*, char*, dword)")
# 呼び出し: NetDfsRemoveRootTarget(pDfsPath, pTargetPath, Flags)
# pDfsPath : LPWSTR -> "char*"
# pTargetPath : LPWSTR optional -> "char*"
# Flags : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

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

typedef NetDfsRemoveRootTargetNative = Uint32 Function(Pointer<Utf16>, Pointer<Utf16>, Uint32);
typedef NetDfsRemoveRootTargetDart = int Function(Pointer<Utf16>, Pointer<Utf16>, int);
final NetDfsRemoveRootTarget = DynamicLibrary.open('NETAPI32.dll')
    .lookupFunction<NetDfsRemoveRootTargetNative, NetDfsRemoveRootTargetDart>('NetDfsRemoveRootTarget');
// pDfsPath : LPWSTR -> Pointer<Utf16>
// pTargetPath : LPWSTR optional -> Pointer<Utf16>
// Flags : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function NetDfsRemoveRootTarget(
  pDfsPath: PWideChar;   // LPWSTR
  pTargetPath: PWideChar;   // LPWSTR optional
  Flags: DWORD   // DWORD
): DWORD; stdcall;
  external 'NETAPI32.dll' name 'NetDfsRemoveRootTarget';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "NetDfsRemoveRootTarget"
  c_NetDfsRemoveRootTarget :: CWString -> CWString -> Word32 -> IO Word32
-- pDfsPath : LPWSTR -> CWString
-- pTargetPath : LPWSTR optional -> CWString
-- Flags : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let netdfsremoveroottarget =
  foreign "NetDfsRemoveRootTarget"
    ((ptr uint16_t) @-> (ptr uint16_t) @-> uint32_t @-> returning uint32_t)
(* pDfsPath : LPWSTR -> (ptr uint16_t) *)
(* pTargetPath : LPWSTR optional -> (ptr uint16_t) *)
(* Flags : DWORD -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library netapi32 (t "NETAPI32.dll"))
(cffi:use-foreign-library netapi32)

(cffi:defcfun ("NetDfsRemoveRootTarget" net-dfs-remove-root-target :convention :stdcall) :uint32
  (p-dfs-path (:string :encoding :utf-16le))   ; LPWSTR
  (p-target-path (:string :encoding :utf-16le))   ; LPWSTR optional
  (flags :uint32))   ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $NetDfsRemoveRootTarget = Win32::API::More->new('NETAPI32',
    'DWORD NetDfsRemoveRootTarget(LPCWSTR pDfsPath, LPCWSTR pTargetPath, DWORD Flags)');
# my $ret = $NetDfsRemoveRootTarget->Call($pDfsPath, $pTargetPath, $Flags);
# pDfsPath : LPWSTR -> LPCWSTR
# pTargetPath : LPWSTR optional -> LPCWSTR
# Flags : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目