NetDfsEnum 関数 (lmdfs.h)

サーバーでホストされている分散ファイル システム (DFS) 名前空間、またはサーバーによってホストされている名前空間の DFS リンクを列挙します。

構文

NET_API_STATUS NET_API_FUNCTION NetDfsEnum(
  [in]      LPWSTR  DfsName,
  [in]      DWORD   Level,
  [in]      DWORD   PrefMaxLen,
  [out]     LPBYTE  *Buffer,
  [out]     LPDWORD EntriesRead,
  [in, out] LPDWORD ResumeHandle
);

パラメーター

[in] DfsName

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

情報レベル 200 (DFS_INFO_200) を指定する場合、このパラメーターはドメインの名前です。 情報レベル 300 (DFS_INFO_300) を指定する場合、このパラメーターはサーバーの名前です。

他のすべてのレベルでは、文字列は次の 4 つの形式のいずれかで指定できます。

Servername\DfsName

or

Servername\DfsName\link_path

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

文字列には、次の形式を指定することもできます。

Domainname\DomainName\DomDfsName

or

Domainname\DomDfsName\link_path

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

文字列の前に円記号 (\) を付けることができますが、必須ではありません。 このパラメーターは必須です。

[in] Level

要求の情報レベルを指定します。 このパラメーターには、次の値のいずれかを指定できます。

1

DFS ルートの名前と、ルートの下にあるすべてのリンクを返します。 Buffer パラメーターは、DFS_INFO_1構造体の配列を指します。

2

DFS ルートとルート下のすべてのリンクの名前、コメント、状態、およびターゲットの数を返します。 Buffer パラメーターは、DFS_INFO_2構造体の配列を指します。

3

DFS ルートとルート下のすべてのリンクの名前、コメント、状態、ターゲットの数、および各ターゲットに関する情報を返します。 Buffer パラメーターは、DFS_INFO_3構造体の配列を指します。

4

名前、コメント、状態、 GUID、タイムアウト、ターゲットの数、DFS ルートの各ターゲットとルート下のすべてのリンクに関する情報を返します。 Buffer パラメーターは、DFS_INFO_4構造体の配列を指します。

5

DFS ルートとルート下のすべてのリンクの名前、状態、 GUID、タイムアウト、プロパティ フラグ、メタデータ サイズ、ターゲットの数を返します。 Buffer パラメーターは、DFS_INFO_5構造体の配列を指します。

6

名前、状態、 GUID、タイムアウト、プロパティ フラグ、メタデータ サイズ、ルートまたはリンクの DFS ターゲット情報、および DFS ターゲットの一覧を返します。 Buffer パラメーターは、DFS_INFO_6構造体の配列を指します。

8

DFS ルートとルート下のすべてのリンクの名前、状態、 GUID、タイムアウト、プロパティ フラグ、メタデータ サイズ、ターゲットの数、リンクの再解析ポイントのセキュリティ記述子を返します。 Buffer パラメーターは、DFS_INFO_8構造体の配列を指します。

9

ルートまたはリンクの名前、状態、 GUID、タイムアウト、プロパティ フラグ、メタデータ サイズ、DFS ターゲット情報、リンク再解析ポイントセキュリティ記述子、DFS ターゲットの一覧を返します。 Buffer パラメーターは、DFS_INFO_9構造体の配列を指します。

200

ドメイン内のドメイン ベースの DFS 名前空間の一覧を返します。 Buffer パラメーターは、DFS_INFO_200構造体の配列を指します。

300

サーバーによってホストされているスタンドアロンおよびドメイン ベースの DFS 名前空間を返します。 Buffer パラメーターは、DFS_INFO_300構造体の配列を指します。

[in] PrefMaxLen

情報構造体バッファーで、この関数によって返される必要があるバイト数を指定します。 このパラメーターが MAX_PREFERRED_LENGTH場合、関数はデータに必要なメモリ量を割り当てます。 詳細については、「解説」を参照してください。 レベル 200 またはレベル 300 を指定した場合、このパラメーターは無視されます。

[out] Buffer

要求された情報構造体を受け取るバッファーへのポインター。 このデータの形式は 、Level パラメーターの値によって異なります。 このバッファーはシステムによって割り当てられ、 NetApiBufferFree 関数を使用して解放する必要があります。

[out] EntriesRead

応答で返された実際のエントリ数を受け取る値へのポインター。

[in, out] ResumeHandle

この関数の 1 回の呼び出しで返すことができるデータよりも多くのデータが使用可能な場合に列挙を続行するために使用されるハンドルを含む値へのポインター。 最初の呼び出しではハンドルを 0 にし、後続の呼び出しでは変更せずに残す必要があります。 詳細については、「解説」を参照してください。

戻り値

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

これ以上エントリを列挙できない場合、戻り値は ERROR_NO_MORE_ITEMS

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

解説

NetDfsEnum 関数を使用するために特別なグループ メンバーシップは必要ありません。

列挙を開始するには、ResumeHandle パラメーターを 0 に設定して NetDfsEnum 関数を呼び出します。 列挙操作を続行するには、前の NetDfsEnum 呼び出しによって返された ResumeHandle を使用してこの関数を呼び出します。 この関数が ERROR_NO_MORE_ITEMSを返さない場合、この API の後続の呼び出しは残りのリンクを返します。 ERROR_NO_MORE_ITEMSが返されると、使用可能なすべての DFS リンクが取得されます。

NetDfsEnum 関数は、情報構造体バッファーに必要なメモリを割り当てます。 PrefMaxLen パラメーターに量を指定すると、関数から返されるメモリが制限されます。 ただし、 NetDfsEnum 関数が割り当てるメモリの実際のサイズは、指定した量を超える場合があります。 詳細については、「 ネットワーク管理機能のバッファー長」を参照してください。

DFS 名前空間が同時に更新される可能性があるため、呼び出し元は列挙操作を再開するときに返される結果の完全性または一意性を想定しないでください。

次のコード サンプルでは、 NetDfsEnum 関数を呼び出して、名前付き DFS ルート内の DFS リンクを一覧表示する方法を示します。 このサンプルでは、情報レベル 3 ( DFS_INFO_3) を指定して NetDfsEnum を呼び出します。 このサンプル コードでは、エントリをループ処理し、取得したデータと、DFS リンクによって参照される各ホスト サーバーの状態を出力します。 最後に、このサンプルでは、情報バッファーに割り当てられたメモリを解放します。

#include <windows.h>
#include <lm.h>
#include <lmdfs.h>
#include <stdio.h>

#pragma comment(lib, "Netapi32.lib")

void wmain(int argc, wchar_t *argv[ ])
{
    PDFS_INFO_3 pData, p;
    PDFS_STORAGE_INFO ps;
    DWORD er = 0, hResume = 0, res, i, j;

    if(argc < 2)
        wprintf(L"Syntax: %s \\\\DfsName\n", argv[0]);
    else
    {
        //
        // Call the NetDfsEnum function, specifying level 3.
        //
        res = NetDfsEnum(argv[1], 3, MAX_PREFERRED_LENGTH, (LPBYTE *) &pData, &er, &hResume);

        // Call NetDfsEnum until all available entries are returned.
        // NetDfsEnum will return ERROR_NO_MORE_ITEMS when all entries 
        // have been obtained.
        while (res == ERROR_SUCCESS)
        {
            p = pData;
            //
            // Loop through the entries; print the data.
            //
            for(i = 1; i <= er; i++)
            {
                printf("%-30S%u\n", p->EntryPath, p->NumberOfStorages);
                ps = p->Storage;
                //
                // Loop through each target.
                //
                for(j = 1; j <= p->NumberOfStorages; j++)
                {
                    //
                    // Print the status (Offline/Online) and the name 
                    // of each target referenced by the DFS link.
                    //
                    printf("    %S  ", (ps->State == DFS_STORAGE_STATE_OFFLINE) ? TEXT("Offline"):TEXT("Online "));
                    printf("\\\\%S\\%S\n", ps->ServerName, ps->ShareName);
                    ps++;
                }
                p++;
            }
            // Free the allocated buffer.
            //
            NetApiBufferFree(pData);


            res = NetDfsEnum(argv[1], 3, MAX_PREFERRED_LENGTH, (LPBYTE *) &pData, &er, &hResume);
        }


        if (res == ERROR_NO_MORE_ITEMS)
        {
            // the last of the entries have been processed.
            res = ERROR_SUCCESS;
            printf("Enumeration done\n");
        } 
        else 
        {
            // an error occurred.
            printf("Error: %u\n", res);
        }
    }
    return;
}

要件

   
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー lmdfs.h (LmDfs.h、Lm.h を含む)
Library Netapi32.lib
[DLL] Netapi32.dll

関連項目

DFS_INFO_1

DFS_INFO_2

DFS_INFO_200

DFS_INFO_3

DFS_INFO_300

DFS_INFO_4

DFS_INFO_5

DFS_INFO_6

分散ファイル システム (DFS) 関数

NetDfsAdd

NetDfsRemove

ネットワーク管理機能

ネットワーク管理の概要