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

NetDfsAddRootTarget

関数
DFS名前空間ルートに新しいルートターゲットを追加する。
DLLNETAPI32.dll呼出規約winapi対応OSWindows Vista 以降

シグネチャ

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

DWORD NetDfsAddRootTarget(
    LPWSTR pDfsPath,
    LPWSTR pTargetPath,   // optional
    DWORD MajorVersion,
    LPWSTR pComment,   // optional
    DWORD Flags
);

パラメーター

名前型方向説明
pDfsPathLPWSTRin

DFS 名前空間の汎用名前付け規則 (UNC) パスを指定する文字列へのポインターです。

スタンドアロン DFS 名前空間の場合、この文字列は次の形式である必要があります。

\\ServerName\DfsName

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

ドメインベース DFS 名前空間の場合、この文字列は次の形式である必要があります。

\\DomainName\DomDfsName

ここで DomainName はドメインベース DFS 名前空間をホストするドメインの名前、DomDfsName は新規または既存のドメインベース DFS 名前空間の名前です。互換性のため、DomDfsName は新しい DFS ルートターゲットをホストするサーバー上の共有フォルダーの名前と同じにしてください。

pTargetPathLPWSTRinoptional

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

スタンドアロン DFS 名前空間の場合、このパラメーターは NULL である必要があります。ドメインベース DFS 名前空間の場合、文字列は次の形式である必要があります。

\\ServerName\RootShare

ここで ServerName は新しい DFS ルートターゲットをホストするサーバーの名前、RootShare はそのサーバー上の共有フォルダーの名前です。RootShare で指定される共有は、新しい DFS ルートターゲットをホストするサーバー上に既に存在している必要があります。この関数は新しい共有を作成しません。

MajorVersionDWORDin

名前空間の DFS メタデータバージョンを指定します。

メモ このパラメーターは、新しい名前空間を作成するときにのみ使用します。
スタンドアロン DFS 名前空間を作成する場合、このパラメーターは 1 に設定する必要があります。

ドメインベース名前空間を作成する場合、このパラメーターは次のように設定します。

  • Windows 2000 モードを指定するには 1 に設定します。
  • Windows Server 2008 モードを指定するには 2 以上に設定します。
既存のドメインベース DFS 名前空間に新しいルートターゲットを追加する場合、このパラメーターは 0 に設定する必要があります。
pCommentLPWSTRinoptionalDFS ルートに関連付けられたコメントを含む、null で終わる Unicode 文字列へのポインターです。
FlagsDWORDinこのパラメーターは予約されており、0 である必要があります。

戻り値の型: DWORD

公式ドキュメント

ドメインベースまたはスタンドアロンの DFS 名前空間を作成するか、既存のドメインベース名前空間に新しいルートターゲットを追加します。

戻り値

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

指定した MajorVersion に必要な機能レベルにドメインが達していない場合、戻り値は ERROR_DS_INCOMPATIBLE です。この戻り値は、ドメインルートで MajorVersion が 2 の場合にのみ適用されます。

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

解説(Remarks)

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

MajorVersion パラメーターに指定できる DFS メタデータバージョンを確認するには、NetDfsGetSupportedNamespaceVersion 関数を使用します。

次の表は、目的の結果に応じて指定するパラメーター値を示しています。

pDfsPath パラメーター pTargetPath パラメーター MajorVersion パラメーター 結果
\\DomainName\DomDfsName \\ServerName\RootShare 1 Windows 2000 モードのドメインベース DFS 名前空間を作成するか、既存のものに新しいルートターゲットを追加します。
\\DomainName\DomDfsName \\ServerName\RootShare 2 Windows Server 2008 モードのドメインベース DFS 名前空間を作成するか、既存のものに新しいルートターゲットを追加します。
\\DomainName\DomDfsName \\ServerName\RootShare 0 既存の Windows 2000 モードまたは Windows Server 2008 モードのドメインベース DFS 名前空間に新しいルートターゲットを追加します。
\\ServerName\DfsName NULL 1 である必要があります。 スタンドアロン 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 NetDfsAddRootTarget(
    LPWSTR pDfsPath,
    LPWSTR pTargetPath,   // optional
    DWORD MajorVersion,
    LPWSTR pComment,   // optional
    DWORD Flags
);
[DllImport("NETAPI32.dll", ExactSpelling = true)]
static extern uint NetDfsAddRootTarget(
    [MarshalAs(UnmanagedType.LPWStr)] string pDfsPath,   // LPWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string pTargetPath,   // LPWSTR optional
    uint MajorVersion,   // DWORD
    [MarshalAs(UnmanagedType.LPWStr)] string pComment,   // LPWSTR optional
    uint Flags   // DWORD
);
<DllImport("NETAPI32.dll", ExactSpelling:=True)>
Public Shared Function NetDfsAddRootTarget(
    <MarshalAs(UnmanagedType.LPWStr)> pDfsPath As String,   ' LPWSTR
    <MarshalAs(UnmanagedType.LPWStr)> pTargetPath As String,   ' LPWSTR optional
    MajorVersion As UInteger,   ' DWORD
    <MarshalAs(UnmanagedType.LPWStr)> pComment As String,   ' LPWSTR optional
    Flags As UInteger   ' DWORD
) As UInteger
End Function
' pDfsPath : LPWSTR
' pTargetPath : LPWSTR optional
' MajorVersion : DWORD
' pComment : LPWSTR optional
' Flags : DWORD
Declare PtrSafe Function NetDfsAddRootTarget Lib "netapi32" ( _
    ByVal pDfsPath As LongPtr, _
    ByVal pTargetPath As LongPtr, _
    ByVal MajorVersion As Long, _
    ByVal pComment 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

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

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

var (
	netapi32 = windows.NewLazySystemDLL("NETAPI32.dll")
	procNetDfsAddRootTarget = netapi32.NewProc("NetDfsAddRootTarget")
)

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

extern "netapi32" fn NetDfsAddRootTarget(
    pDfsPath: [*c]const u16, // LPWSTR
    pTargetPath: [*c]const u16, // LPWSTR optional
    MajorVersion: u32, // DWORD
    pComment: [*c]const u16, // LPWSTR optional
    Flags: u32 // DWORD
) callconv(std.os.windows.WINAPI) u32;
proc NetDfsAddRootTarget(
    pDfsPath: WideCString,  # LPWSTR
    pTargetPath: WideCString,  # LPWSTR optional
    MajorVersion: uint32,  # DWORD
    pComment: WideCString,  # LPWSTR optional
    Flags: uint32  # DWORD
): uint32 {.importc: "NetDfsAddRootTarget", stdcall, dynlib: "NETAPI32.dll".}
pragma(lib, "netapi32");
extern(Windows)
uint NetDfsAddRootTarget(
    const(wchar)* pDfsPath,   // LPWSTR
    const(wchar)* pTargetPath,   // LPWSTR optional
    uint MajorVersion,   // DWORD
    const(wchar)* pComment,   // LPWSTR optional
    uint Flags   // DWORD
);
ccall((:NetDfsAddRootTarget, "NETAPI32.dll"), stdcall, UInt32,
      (Cwstring, Cwstring, UInt32, Cwstring, UInt32),
      pDfsPath, pTargetPath, MajorVersion, pComment, Flags)
# pDfsPath : LPWSTR -> Cwstring
# pTargetPath : LPWSTR optional -> Cwstring
# MajorVersion : DWORD -> UInt32
# pComment : LPWSTR optional -> Cwstring
# Flags : DWORD -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
uint32_t NetDfsAddRootTarget(
    const uint16_t* pDfsPath,
    const uint16_t* pTargetPath,
    uint32_t MajorVersion,
    const uint16_t* pComment,
    uint32_t Flags);
]]
local netapi32 = ffi.load("netapi32")
-- netapi32.NetDfsAddRootTarget(pDfsPath, pTargetPath, MajorVersion, pComment, Flags)
-- pDfsPath : LPWSTR
-- pTargetPath : LPWSTR optional
-- MajorVersion : DWORD
-- pComment : LPWSTR optional
-- Flags : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('NETAPI32.dll');
const NetDfsAddRootTarget = lib.func('__stdcall', 'NetDfsAddRootTarget', 'uint32_t', ['str16', 'str16', 'uint32_t', 'str16', 'uint32_t']);
// NetDfsAddRootTarget(pDfsPath, pTargetPath, MajorVersion, pComment, Flags)
// pDfsPath : LPWSTR -> 'str16'
// pTargetPath : LPWSTR optional -> 'str16'
// MajorVersion : DWORD -> 'uint32_t'
// pComment : LPWSTR optional -> 'str16'
// Flags : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("NETAPI32.dll", {
  NetDfsAddRootTarget: { parameters: ["buffer", "buffer", "u32", "buffer", "u32"], result: "u32" },
});
// lib.symbols.NetDfsAddRootTarget(pDfsPath, pTargetPath, MajorVersion, pComment, Flags)
// pDfsPath : LPWSTR -> "buffer"
// pTargetPath : LPWSTR optional -> "buffer"
// MajorVersion : DWORD -> "u32"
// pComment : LPWSTR optional -> "buffer"
// Flags : DWORD -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
uint32_t NetDfsAddRootTarget(
    const uint16_t* pDfsPath,
    const uint16_t* pTargetPath,
    uint32_t MajorVersion,
    const uint16_t* pComment,
    uint32_t Flags);
C, "NETAPI32.dll");
// $ffi->NetDfsAddRootTarget(pDfsPath, pTargetPath, MajorVersion, pComment, Flags);
// pDfsPath : LPWSTR
// pTargetPath : LPWSTR optional
// MajorVersion : DWORD
// pComment : 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 NetDfsAddRootTarget(
        WString pDfsPath,   // LPWSTR
        WString pTargetPath,   // LPWSTR optional
        int MajorVersion,   // DWORD
        WString pComment,   // LPWSTR optional
        int Flags   // DWORD
    );
}
@[Link("netapi32")]
lib LibNETAPI32
  fun NetDfsAddRootTarget = NetDfsAddRootTarget(
    pDfsPath : UInt16*,   # LPWSTR
    pTargetPath : UInt16*,   # LPWSTR optional
    MajorVersion : UInt32,   # DWORD
    pComment : 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 NetDfsAddRootTargetNative = Uint32 Function(Pointer<Utf16>, Pointer<Utf16>, Uint32, Pointer<Utf16>, Uint32);
typedef NetDfsAddRootTargetDart = int Function(Pointer<Utf16>, Pointer<Utf16>, int, Pointer<Utf16>, int);
final NetDfsAddRootTarget = DynamicLibrary.open('NETAPI32.dll')
    .lookupFunction<NetDfsAddRootTargetNative, NetDfsAddRootTargetDart>('NetDfsAddRootTarget');
// pDfsPath : LPWSTR -> Pointer<Utf16>
// pTargetPath : LPWSTR optional -> Pointer<Utf16>
// MajorVersion : DWORD -> Uint32
// pComment : LPWSTR optional -> Pointer<Utf16>
// Flags : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function NetDfsAddRootTarget(
  pDfsPath: PWideChar;   // LPWSTR
  pTargetPath: PWideChar;   // LPWSTR optional
  MajorVersion: DWORD;   // DWORD
  pComment: PWideChar;   // LPWSTR optional
  Flags: DWORD   // DWORD
): DWORD; stdcall;
  external 'NETAPI32.dll' name 'NetDfsAddRootTarget';
import Foreign
import Foreign.C.Types
import Foreign.C.String

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

let netdfsaddroottarget =
  foreign "NetDfsAddRootTarget"
    ((ptr uint16_t) @-> (ptr uint16_t) @-> uint32_t @-> (ptr uint16_t) @-> uint32_t @-> returning uint32_t)
(* pDfsPath : LPWSTR -> (ptr uint16_t) *)
(* pTargetPath : LPWSTR optional -> (ptr uint16_t) *)
(* MajorVersion : DWORD -> uint32_t *)
(* pComment : 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 ("NetDfsAddRootTarget" net-dfs-add-root-target :convention :stdcall) :uint32
  (p-dfs-path (:string :encoding :utf-16le))   ; LPWSTR
  (p-target-path (:string :encoding :utf-16le))   ; LPWSTR optional
  (major-version :uint32)   ; DWORD
  (p-comment (: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 $NetDfsAddRootTarget = Win32::API::More->new('NETAPI32',
    'DWORD NetDfsAddRootTarget(LPCWSTR pDfsPath, LPCWSTR pTargetPath, DWORD MajorVersion, LPCWSTR pComment, DWORD Flags)');
# my $ret = $NetDfsAddRootTarget->Call($pDfsPath, $pTargetPath, $MajorVersion, $pComment, $Flags);
# pDfsPath : LPWSTR -> LPCWSTR
# pTargetPath : LPWSTR optional -> LPCWSTR
# MajorVersion : DWORD -> DWORD
# pComment : LPWSTR optional -> LPCWSTR
# Flags : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目