次の方法で共有


NetShareEnum 関数 (lmshare.h)

サーバー上の各共有リソースに関する情報を取得します。

WNetEnumResource 関数を使用してリソース情報を取得することもできます。 ただし、 WNetEnumResource では、非表示の共有や共有に接続されているユーザーは列挙されません。

構文

NET_API_STATUS NET_API_FUNCTION NetShareEnum(
  [in]      LMSTR   servername,
  [in]      DWORD   level,
  [out]     LPBYTE  *bufptr,
  [in]      DWORD   prefmaxlen,
  [out]     LPDWORD entriesread,
  [out]     LPDWORD totalentries,
  [in, out] LPDWORD resume_handle
);

パラメーター

[in] servername

関数を実行するリモート サーバーの DNS または NetBIOS 名を指定する文字列へのポインター。 このパラメーターが NULL の場合は、ローカル コンピューターが使用されます。

[in] level

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

説明
0
共有名を返します。 bufptr パラメーターは、SHARE_INFO_0構造体の配列を指します。
1
リソースの名前と種類、リソースに関連付けられているコメントなど、共有リソースに関する情報を返します。

bufptr パラメーターは、SHARE_INFO_1構造体の配列を指します。

2
リソースの名前、種類とアクセス許可、パスワード、接続数など、共有リソースに関する情報を返します。 bufptr パラメーターは、SHARE_INFO_2構造体の配列を指します。
502
リソースの名前、種類とアクセス許可、接続の数、その他の関連情報など、共有リソースに関する情報を返します。 bufptr パラメーターは、SHARE_INFO_502構造体の配列を指します。 異なるスコープの共有は返されません。 スコープの詳細については、 NetServerTransportAddEx 関数のドキュメントの「解説」セクションを参照してください。
503
リソースの名前、種類とアクセス許可、接続の数、その他の関連情報など、共有リソースに関する情報を返します。 bufptr パラメーターは、SHARE_INFO_503構造体の配列を指します。 すべてのスコープからの共有が返されます。 この構造体の shi503_servername メンバーが "*" の場合、構成されたサーバー名はなく、 NetShareEnum 関数はスコープなしのすべての名前の共有を列挙します。

Windows Server 2003 および Windows XP: この情報レベルはサポートされていません。

[out] bufptr

データを受信するバッファーへのポインター。 このデータの形式は 、level パラメーターの値によって異なります。

このバッファーはシステムによって割り当てられ、 NetApiBufferFree 関数を使用して解放する必要があります。 関数が ERROR_MORE_DATA で失敗した場合でも、バッファーを解放する必要があることに注意してください。

[in] prefmaxlen

返されるデータの推奨される最大長をバイト単位で指定します。 MAX_PREFERRED_LENGTHを指定すると、データに必要なメモリ量が関数によって割り当てられます。 このパラメーターに別の値を指定すると、関数から返されるバイト数を制限できます。 バッファー サイズが不十分で、すべてのエントリを保持するには、関数は ERROR_MORE_DATAを返します。 詳細については、「 ネットワーク管理機能バッファー 」および「 ネットワーク管理機能バッファーの長さ」を参照してください。

[out] entriesread

実際に列挙された要素の数を受け取る値へのポインター。

[out] totalentries

列挙された可能性のあるエントリの合計数を受け取る値へのポインター。 アプリケーションでは、この値をヒントとしてのみ考慮する必要があることに注意してください。

[in, out] resume_handle

既存の共有検索を続行するために使用される再開ハンドルを含む値へのポインター。 最初の呼び出しではハンドルを 0 にし、後続の呼び出しでは変更しない必要があります。 resume_handleNULL の場合、再開ハンドルは格納されません。

戻り値

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

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

解説

この関数は、サーバー メッセージ ブロック (SMB) 共有にのみ適用されます。 分散ファイル システム (DFS) 共有や WebDAV 共有など、他の種類の共有の場合は、すべての種類の共有をサポートする Windows ネットワーク (WNet) 関数を使用します。

対話型ユーザー (コンピューターにローカルにログオンしているユーザー) の場合、 NetShareEnum 関数を実行するために特別なグループ メンバーシップは必要ありません。 非対話型ユーザーの場合、レベル 2、502、および 503 で NetShareEnum 関数を正常に実行するには、Administrator、Power User、Print Operator、または Server Operator グループ メンバーシップが必要です。 レベル 0 またはレベル 1 の呼び出しでは、特別なグループ メンバーシップは必要ありません。

Windows Server 2022: 非対話型ユーザーの場合、NetShareEnum 関数をレベル 2、502、503 で正常に実行するには、管理者、存取控制アシスタンス オペレーター、またはサーバー オペレーター グループ メンバーシップが必要です。

Windows Server 2003 および Windows XP: NetShareEnum 関数をレベル 2 および 502 で正常に実行するには、すべてのユーザー、管理者、Power User、Print Operator、または Server Operator グループ メンバーシップが必要です。

共有が DFS ツリー構造のルート ボリュームであるかどうかを示す値を取得するには、 NetShareGetInfo 関数を呼び出し、情報レベル 1005 を指定する必要があります。

Active Directory のプログラミングを行っている場合は、特定の Active Directory サービス インターフェイス (ADSI) メソッドを呼び出して、ネットワーク管理共有関数を呼び出すことで実現できるのと同じ機能を実現できます。 詳細については、「 IADsFileShare」を参照してください。

次のコード サンプルは、 NetShareEnum 関数の呼び出しを使用して、サーバー上の各共有リソースに関する情報を取得する方法を示しています。 このサンプルでは、情報レベル 502 (SHARE_INFO_502) を指定して NetShareEnum を呼び出します。 呼び出しが成功すると、コードはエントリをループ処理し、各共有に関する情報を出力します。 また、このサンプルでは IsValidSecurityDescriptor 関数を呼び出して 、shi502_security_descriptor メンバーを検証します。 最後に、コード サンプルでは、情報バッファーに割り当てられたメモリを解放します。

#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <lm.h>

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

void wmain( int argc, TCHAR *lpszArgv[ ])
{
   PSHARE_INFO_502 BufPtr,p;
   NET_API_STATUS res;
   LPTSTR   lpszServer = NULL;
   DWORD er=0,tr=0,resume=0, i;

   switch(argc)
   {
   case 2:
      lpszServer = lpszArgv[1];
      break;
   default:
      printf("Usage: NetShareEnum <servername>\n");
      return;
   }
   //
   // Print a report header.
   //
   printf("Share:              Local Path:                   Uses:   Descriptor:\n");
   printf("---------------------------------------------------------------------\n");
   //
   // Call the NetShareEnum function; specify level 502.
   //
   do // begin do
   {
      res = NetShareEnum (lpszServer, 502, (LPBYTE *) &BufPtr, MAX_PREFERRED_LENGTH, &er, &tr, &resume);
      //
      // If the call succeeds,
      //
      if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
      {
         p=BufPtr;
         //
         // Loop through the entries;
         //  print retrieved data.
         //
         for(i=1;i<=er;i++)
         {
            printf("%-20S%-30S%-8u",p->shi502_netname, p->shi502_path, p->shi502_current_uses);
            //
            // Validate the value of the 
            //  shi502_security_descriptor member.
            //
            if (IsValidSecurityDescriptor(p->shi502_security_descriptor))
               printf("Yes\n");
            else
               printf("No\n");
            p++;
         }
         //
         // Free the allocated buffer.
         //
         NetApiBufferFree(BufPtr);
      }
      else 
         printf("Error: %ld\n",res);
   }
   // Continue to call NetShareEnum while 
   //  there are more entries. 
   // 
   while (res==ERROR_MORE_DATA); // end do
   return;
}

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー lmshare.h (Lm.h を含む)
Library Netapi32.lib
[DLL] Netapi32.dll

関連項目

ネットワーク管理機能

ネットワーク管理の概要

ネットワーク共有関数

SHARE_INFO_0

SHARE_INFO_1

SHARE_INFO_2

SHARE_INFO_502

SHARE_INFO_503