<Return[MN]><Top>

NetShareEnum

Declare Function Api_NetShareEnum& Lib "netapi32" Alias "NetShareEnum" (ByVal servername&, ByVal level&, bufptr&, ByVal prefmaxlen&, entriesread&, totalentries&, resume_handle&)

Declare Function NetShareEnum Lib "netapi32" (ByVal servername As Long, ByVal level As Long, bufptr As Long, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, resume_handle As Long) As Long

特定のサーバー上の各共有資源に関する情報を取得する。
Win32 ベースのアプリケーションでは、 関数も利用できる。ただし、WNetEnumResource 関数は隠し共有や、共有に接続されているユーザーを列挙しない。
    セキュリティの要件
        Windows NT:Administrators、Server Operators、Print Operators、Communication Operators のいずれかのグループのメンバだ

        けがレベル 2 を指定してこの関数を実行できる。レベル 0 またはレベル 1 を指定して実行する場合、特別なグループメンバーシップは必

        要ない。
        Windows 2000:Active Directory が動作している Windows 2000 ドメインコントローラで情報レベル 2 を指定してこの関数を実行する

        と、セキュリティで保護することが可能なオブジェクトの ACL(アクセス制御リスト)に基づいて、アクセスが許可または拒否される。既定

        の ACL は、Authenticated Users または Pre-Windows 2000 Compatible Access グループのメンバだけが情報を表示することを許可す

        る。既定では、Everyone グループが、Pre-Windows 2000 Compatible Access グループのメンバになっている。この結果、システムが

        匿名(アノニマス)アクセスを許可している場合、情報への匿名アクセスができる。
        Windows 2000 のメンバサーバーまたはワークステーションで、開発者が情報レベル 2 を指定してこの関数を実行すると、Authenticated

        Users グループのすべてのメンバが情報を表示できるようになる。レジストリ

        の HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa ハイブで restrictanonymous エントリに 1 を割り当てる

        と、匿名アクセスを許可するポリシーが設定される。

パラメータ
servername
    この関数を実行するリモートサーバーの名前を表す、Unicode(Windows NT/2000)または ANSI(Windows 95/98)文字列へのポインタを指定

    する。この文字列の先頭は "\\" でなければならない。このパラメータで NULL を指定すると、ローカルコンピュータが使われる。
level
    データの情報レベルを指定する。次の値のいずれかを指定する。

    値    

意味                                                                                                                      

    0

 

Windows NT/2000:共有の名前を取得する。関数から制御が返ると、bufptr パラメータが指すバッファに、複数の 構造体からなる 1 つの配列が格納される。

    1

リソースの名前、タイプ、リソースに関連付けられているコメントなど、共有リソースに関する情報を取得する。
Windows NT/2000:関数から制御が返ると、bufptr パラメータが指すバッファに、複数の 構造体からなる 1 つの配列が格納される。
Windows 95/98:関数から制御が返ると、pbBuffer パラメータが指すバッファに、複数の 構造体からなる 1 つの配列が格納される。

    2

Windows NT/2000:リソースの名前、タイプ、アクセス許可、パスワード、接続の数など、共有リソースに関する情報を取得する。関数から制御が返ると、bufptr パラメータが指すバッファに、複数の 構造体からなる 1 つの配列が格納される。

    50

Windows 95/98:リソースの名前、タイプ、リソースに関連付けられているコメント、パスワードなど、共有リソースに関する情報を取得する。関数から制御が返ると、pbBuffer パラメータが指すバッファに、複数の 構造体からなる 1 つの配列が格納される。

    502

 

Windows NT/2000:リソースの名前、タイプ、アクセス許可、接続の数、他の固有情報など、共有リソースに関する情報を取得する。関数から制御が返ると、bufptr パラメータが指すバッファに、複数の 構造体からなる 1 つの配列が格納される。

bufptr
    1 個のバッファへのポインタを指定する。関数から制御が返ると、このバッファに、指定したデータが格納される。このデータの形式は、level

    パラメータの値によって異なる。
    Windows NT/2000:このバッファはシステムによって割り当てられたものであり、NetApiBufferFree 関数を使って解放しなければならな

    い。この関数が失敗して ERROR_MORE_DATA が返った場合でも、このバッファを解放しなければならないことに注意する。
    Windows 95/98:呼び出し側は、このバッファの割り当てと割り当て解除を行わなければならない。
prefmaxlen
    取得するべきデータの最大の長さ(上限)をバイト単位で指定する。このパラメータが MAX_PREFERRED_LENGTH の場合、この関数は

    データが必要とする量のメモリを割り当てる。このパラメータで他の値を指定すると、その値は、この関数が返すバイト数に制限を加えること

    がある。バッファサイズが不足して一部のエントリを格納できない場合は、ERROR_MORE_DATA が返る。
entriesread
    1 つの DWORD 値へのポインタを指定する。関数から制御が返ると、この値に、実際に列挙された要素の数が格納される。
totalentries
    Windows NT/2000:1 つの DWORD 値へのポインタを指定する。関数から制御が返ると、この値に、現在のレジューム位置以降で列挙

    できるはずのエントリの総数が格納される。
    Windows 95/98:1 つの DWORD 値へのポインタを指定する。関数から制御が返ると、この値に、列挙できるはずのエントリの総数が格

    納される。
resume_handle
    引き続き既存の共有を検索するために使われるレジュームハンドルを保持している、1 つの DWORD 値へのポインタを指定する。このハンド

    ルは最初の呼び出しのときに 0 であるべきで、それ以降の呼び出しでも変更してはならない。resume_handle パラメータで NULL を指定

    すると、レジュームハンドルは格納されない。

戻り値
    関数が成功すると、NERR_Success が返る。
    関数が失敗すると、Win32 API のエラーコードが返る。

解説
    特定の共有が、DFS ルート内の DFS リンクであるかどうかを示す値を取得するには、情報レベル 1005 を指定して NetShareGetInfo 関数

    を呼び出す。
    Windows 95/98:MSDN ライブラリで、NetShareEnum Sample (Windows 95/98) のトピックを検索し、NetShareEnum 関数の使い方を

    示すサンプルコードを参照のこと。
    Windows NT/2000:次のサンプルコードは、NetShareEnum 関数を呼び出して、1 台のサーバー上の各共有リソースに関する情報を取

    得する方法を示す。このサンプルは、情報レベル 502()を指定して、NetShareEnum 関数を呼び出す。呼び出しが成功すると、各エントリ

    をループ処理し、各共有の情報を出力する。また、 関数を呼び出して、shi502_security_descriptor メンバが有効かどうかを検証する。

    最後に、このサンプルは、情報バッファへ割り当てたメモリを解放する。