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

DFS_INFO_9

構造体
サイズx64: 80 バイト / x86: 56 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
EntryPathLPWSTR8/4+0+0

DFS ルートまたはリンクの汎用名前付け規則 (UNC) パスを指定する、null 終端の Unicode 文字列への ポインターです。

リンクの場合、文字列は次の 2 つの形式のいずれかになります。1 つ目の形式は次のとおりです。

\\ServerName\DfsName\link_path

ここで ServerName は、スタンドアロン DFS 名前空間をホストするルートターゲットサーバーの名前、 DfsName は DFS 名前空間の名前、 link_path は DFS リンクです。

2 つ目の形式は次のとおりです。

\\DomainName\DomDfsname\link_path

ここで DomainName は、ドメインベースの DFS 名前空間をホストするドメインの名前、 DomDfsname は DFS 名前空間の名前、 link_path は DFS リンクです。

ルートの場合、文字列は次の 2 つの形式のいずれかになります。

\\ServerName\DfsName

または

\\DomainName\DomDfsname

各名前の意味は前述のとおりです。

CommentLPWSTR8/4+8+4DFS ルートまたはリンクに関連付けられたコメントを格納する、null 終端の Unicode 文字列への ポインターです。
StateDWORD4+16+8

DFS ルートまたはリンクを説明するビットフラグのセットを指定します。DFS_VOLUME_STATE フラグが 1 つ設定され、 DFS_VOLUME_FLAVOR フラグが 1 つ設定されます。DFS 名前空間のフレーバーを取り出すには DFS_VOLUME_FLAVORS ビットマスク (0x00000300) を使用し、このメンバーから DFS ルートまたはリンクの状態を 取り出すには DFS_VOLUME_STATES ビットマスク (0x0000000F) を使用しなければなりません。 フラグの解釈を説明する例については、DFS_INFO_2 の解説セクションを参照してください。

DFS_VOLUME_STATE_OK (0x00000001)

指定された DFS ルートまたはリンクは正常な状態です。

DFS_VOLUME_STATE_INCONSISTENT (0x00000002)

内部の DFS データベースが、指定された DFS ルートまたはリンクと矛盾しています。不整合を修復する 試みは失敗しました。

DFS_VOLUME_STATE_OFFLINE (0x00000003)

指定された DFS ルートまたはリンクはオフラインであるか、利用できません。

DFS_VOLUME_STATE_ONLINE (0x00000004)

指定された DFS ルートまたはリンクは利用可能です。

DFS_VOLUME_FLAVOR_STANDALONE (0x00000100)

ルートがスタンドアロン DFS 名前空間に関連付けられている場合、システムはこのフラグを設定します。

DFS_VOLUME_FLAVOR_AD_BLOB (0x00000200)

ルートがドメインベースの DFS 名前空間に関連付けられている場合、システムはこのフラグを設定します。

TimeoutDWORD4+20+12DFS ルートまたはリンクのタイムアウトを秒単位で指定します。
GuidGUID16+24+16DFS ルートまたはリンクの GUID を指定します。
PropertyFlagsDWORD4+40+32

DFS 名前空間、ルート、またはリンクの固有のプロパティを説明するフラグのセットを指定します。

DFS_PROPERTY_FLAG_INSITE_REFERRALS (0x00000001)

適用範囲: ドメインルート、スタンドアロンルート、およびリンク。このフラグが DFS ルートに設定されている場合は すべてのリンクに適用されます。それ以外の場合、このフラグの値は個々のリンクごとに考慮されます。

このフラグが設定されている場合、「INSITE」オプションが有効な DFS ルートまたはリンクに対して DFS サーバーが返す DFS 参照応答には、参照を要求した DFS クライアントと同じサイトにあるターゲットのみが含まれます。 2 つのグローバル優先度クラスに属するターゲットは、サイトの位置に関係なく常に返されます。

DFS_PROPERTY_FLAG_ROOT_SCALABILITY (0x00000002)

適用範囲: ドメインベースの DFS 名前空間のみを対象とする、DFS 名前空間全体。

既定では、DFS ルートターゲットサーバーは DFS メタデータの変更を検出するために PDC をポーリングします。PDC への 高い負荷を防ぐため、DFS 名前空間に対してルートのスケーラビリティを有効にできます。このフラグを設定すると、 DFS サーバーは共通の名前空間の DFS メタデータの変更について、PDC ではなく最も近いドメインコントローラーを ポーリングするようになります。ただし、メタデータへの変更は引き続き PDC 上で行う必要があります。

DFS_PROPERTY_FLAG_SITE_COSTING (0x00000004)

適用範囲: ドメインベースおよびスタンドアロンの両方の DFS 名前空間を対象とする、DFS 名前空間全体。

既定では、DFS ルートまたはリンクに対して DFS サーバーが DFS クライアントに返す参照応答に含まれるターゲットは、 クライアントと同じサイトにあるターゲットとサイト外のターゲットという 2 つのグループで構成されます。

Active Directory でサイトコストが有効になっている場合、応答には 3 つ以上のグループを含めることができ、各 グループには、参照を要求した特定の DFS クライアントに対して同じサイトコストを持つターゲットが含まれます。 グループはサイトコストの昇順に並べられます。サイトコストを使用してターゲットに優先順位を付ける方法の詳細については、 DFS Server Target Prioritization を参照してください。

DFS_PROPERTY_FLAG_TARGET_FAILBACK (0x00000008)

適用範囲: ドメインベースの DFS ルート、スタンドアロン DFS ルート、および DFS リンク。このフラグが DFS ルートに設定されている場合は、 すべてのリンクに適用されます。それ以外の場合、このフラグの値は個々のリンクごとに考慮されます。

このフラグが設定されている場合、V4 DFS クライアントに対して最適なターゲットへのフェールバックが有効になり、 最適でないターゲットにフェールオーバーした後で最適なターゲットへフェールバックできるようになります。ターゲットの フェールバック設定は、DFS サーバーが V4 参照応答で DFS クライアントに提供します。

DFS_PROPERTY_FLAG_CLUSTER_ENABLED (0x00000010)

適用範囲: スタンドアロン DFS ルートおよびリンクのみ。

DFS ルートは、ストレージのフェールオーバーによる高可用性を提供するためにクラスター化されています。このフラグを NetDfsSetInfo 関数で設定することはできません。

DFS_PROPERTY_FLAG_ABDE (0x00000020)

適用範囲: ドメインベースの DFS ルートおよびスタンドアロン DFS ルート。

このフラグが設定されている場合、DFS 名前空間の DFS ルートターゲット共有全体で、アクセスベースのディレクトリ列挙 (ABDE) モードのサポートが有効になります。このフラグは、DFS_NAMESPACE_CAPABILITY_ABDE 機能フラグが 設定されている DFS 名前空間に対してのみ有効です。詳細については、 DFS_INFO_50 および DFS_SUPPORTED_NAMESPACE_VERSION_INFO を参照してください。

DFS_PROPERTY_FLAG_ABDE フラグは DFS 名前空間のルートに対してのみ有効であり、ルートターゲット、リンク、 リンクターゲットに対しては有効ではありません。DFS リンクにセキュリティ記述子を関連付けるには、このフラグを 有効にしなければなりません。

MetadataSizeDWORD4+44+36

ドメインベースの DFS 名前空間の場合、このメンバーは対応する Active Directory データ blob のサイズをバイト単位で 指定します。スタンドアロン DFS 名前空間の場合、このフィールドはレジストリに格納されたメタデータのサイズを指定します。 これには、キー名と値名のほか、それらに関連付けられた個々のデータ項目も含まれます。

このフィールドは DFS ルートに対してのみ有効です。

SdLengthReservedDWORD4+48+40このメンバーはシステムで使用するために予約済みです。
pSecurityDescriptorPSECURITY_DESCRIPTOR8/4+56+44DFS リンクの再解析ポイントに関連付ける自己相対セキュリティ記述子を指定する SECURITY_DESCRIPTOR 構造体への ポインターです。このフィールドは DFS リンクに対してのみ有効です。
NumberOfStoragesDWORD4+64+48DFS ルートまたはリンクのターゲット数を指定します。これらのターゲットは、この構造体の Storage メンバーに格納されます。
StorageDFS_STORAGE_INFO_1*8/4+72+52DFS ターゲット情報を格納する DFS_STORAGE_INFO_1 構造体の配列を指定します。

公式ドキュメント

ルートまたはリンクの名前、状態、GUID、タイムアウト、プロパティフラグ、メタデータサイズ、DFS ターゲット情報、リンクの 再解析ポイントのセキュリティ記述子、および DFS ターゲットの一覧を格納します。この構造体は NetDfsGetInfo 関数および NetDfsEnum 関数でのみ使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// DFS_INFO_9  (x64 80 / x86 56 バイト)
typedef struct DFS_INFO_9 {
    LPWSTR EntryPath;
    LPWSTR Comment;
    DWORD State;
    DWORD Timeout;
    GUID Guid;
    DWORD PropertyFlags;
    DWORD MetadataSize;
    DWORD SdLengthReserved;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD NumberOfStorages;
    DFS_STORAGE_INFO_1* Storage;
} DFS_INFO_9;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DFS_INFO_9
{
    public IntPtr EntryPath;
    public IntPtr Comment;
    public uint State;
    public uint Timeout;
    public Guid Guid;
    public uint PropertyFlags;
    public uint MetadataSize;
    public uint SdLengthReserved;
    public IntPtr pSecurityDescriptor;
    public uint NumberOfStorages;
    public IntPtr Storage;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DFS_INFO_9
    Public EntryPath As IntPtr
    Public Comment As IntPtr
    Public State As UInteger
    Public Timeout As UInteger
    Public Guid As Guid
    Public PropertyFlags As UInteger
    Public MetadataSize As UInteger
    Public SdLengthReserved As UInteger
    Public pSecurityDescriptor As IntPtr
    Public NumberOfStorages As UInteger
    Public Storage As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class DFS_INFO_9(ctypes.Structure):
    _fields_ = [
        ("EntryPath", ctypes.c_void_p),
        ("Comment", ctypes.c_void_p),
        ("State", wintypes.DWORD),
        ("Timeout", wintypes.DWORD),
        ("Guid", GUID),
        ("PropertyFlags", wintypes.DWORD),
        ("MetadataSize", wintypes.DWORD),
        ("SdLengthReserved", wintypes.DWORD),
        ("pSecurityDescriptor", ctypes.c_void_p),
        ("NumberOfStorages", wintypes.DWORD),
        ("Storage", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct DFS_INFO_9 {
    pub EntryPath: *mut core::ffi::c_void,
    pub Comment: *mut core::ffi::c_void,
    pub State: u32,
    pub Timeout: u32,
    pub Guid: GUID,
    pub PropertyFlags: u32,
    pub MetadataSize: u32,
    pub SdLengthReserved: u32,
    pub pSecurityDescriptor: *mut core::ffi::c_void,
    pub NumberOfStorages: u32,
    pub Storage: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type DFS_INFO_9 struct {
	EntryPath uintptr
	Comment uintptr
	State uint32
	Timeout uint32
	Guid windows.GUID
	PropertyFlags uint32
	MetadataSize uint32
	SdLengthReserved uint32
	pSecurityDescriptor uintptr
	NumberOfStorages uint32
	Storage uintptr
}
type
  DFS_INFO_9 = record
    EntryPath: Pointer;
    Comment: Pointer;
    State: DWORD;
    Timeout: DWORD;
    Guid: TGUID;
    PropertyFlags: DWORD;
    MetadataSize: DWORD;
    SdLengthReserved: DWORD;
    pSecurityDescriptor: Pointer;
    NumberOfStorages: DWORD;
    Storage: Pointer;
  end;
const DFS_INFO_9 = extern struct {
    EntryPath: ?*anyopaque,
    Comment: ?*anyopaque,
    State: u32,
    Timeout: u32,
    Guid: GUID,
    PropertyFlags: u32,
    MetadataSize: u32,
    SdLengthReserved: u32,
    pSecurityDescriptor: ?*anyopaque,
    NumberOfStorages: u32,
    Storage: ?*anyopaque,
};
type
  DFS_INFO_9 {.bycopy.} = object
    EntryPath: pointer
    Comment: pointer
    State: uint32
    Timeout: uint32
    Guid: GUID
    PropertyFlags: uint32
    MetadataSize: uint32
    SdLengthReserved: uint32
    pSecurityDescriptor: pointer
    NumberOfStorages: uint32
    Storage: pointer
struct DFS_INFO_9
{
    void* EntryPath;
    void* Comment;
    uint State;
    uint Timeout;
    GUID Guid;
    uint PropertyFlags;
    uint MetadataSize;
    uint SdLengthReserved;
    void* pSecurityDescriptor;
    uint NumberOfStorages;
    void* Storage;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DFS_INFO_9 サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; EntryPath : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Comment : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; State : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Timeout : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Guid : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; PropertyFlags : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; MetadataSize : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; SdLengthReserved : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; pSecurityDescriptor : PSECURITY_DESCRIPTOR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; NumberOfStorages : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; Storage : DFS_STORAGE_INFO_1* (+52, 4byte)  varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DFS_INFO_9 サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; EntryPath : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Comment : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; State : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; Timeout : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; Guid : GUID (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; PropertyFlags : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; MetadataSize : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; SdLengthReserved : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pSecurityDescriptor : PSECURITY_DESCRIPTOR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; NumberOfStorages : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; Storage : DFS_STORAGE_INFO_1* (+72, 8byte)  varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global DFS_INFO_9
    #field intptr EntryPath
    #field intptr Comment
    #field int State
    #field int Timeout
    #field GUID Guid
    #field int PropertyFlags
    #field int MetadataSize
    #field int SdLengthReserved
    #field intptr pSecurityDescriptor
    #field int NumberOfStorages
    #field intptr Storage
#endstruct

stdim st, DFS_INFO_9        ; NSTRUCT 変数を確保
st->State = 100
mes "State=" + st->State