tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: パソコンの共有フォルダ取得
投稿日: 2010/10/19(Tue) 06:34
投稿者魔界の仮面弁士
> Unicode文字列の扱い方の事ですが、これがまたわからないのですが。
Declare の際に、ByVal String として宣言されていますが、
それを ByRef Byte にしてみてください。

呼び出す側では、文字列をバイト配列に変換してから、
その配列の先頭要素を API に渡すようにします。


> NetShareGetInfoの部分を抜き出したのですが、置き換え方法がわからないのですが、
…NetShareEnum ではなく? まぁ、そちらを望むのであればそちらで答えますけれども。


NetShareEnum にサーバー名を渡すと、共有情報が得られます。
NetShareGetInfo にサーバー名と共有名を渡すと、その共有資源の情報を得られます。



具体的には、こんな感じで。

> Private Declare Function NetShareGetInfo Lib "netapi32.dll" ( _
>    ByVal servername As String, _
>    ByVal netname As String, _
>    ByVal level As Long, _
>    bufptr As Any) As Long

  Private Declare Function NetShareGetInfo Lib "netapi32.dll" ( _
     ByRef servername As Byte, _
     ByRef netname As Byte, _
     ByVal level As Long, _
     ByRef bufptr As Any) As Long


> ShareGetInfo502 = NetShareGetInfo(StrConv(strNetShareServer, vbUnicode), _
>                                   StrConv(strShareName, vbUnicode), _
>                                   502, _
>                                   lngBuffer)
> ShareGetInfo2   = NetShareGetInfo(StrConv(strNetShareServer, vbUnicode), _
>                                   StrConv(strShareName, vbUnicode), _
>                                   2, _
>                                   lngBuffer)

  Dim binNetShareServer() As Byte
  binNetShareServer = strNetShareServer & vbNullChar
  Dim binShareName() As Byte
  binShareName = strShareName & vbNullChar
  ShareGetInfo1 = NetShareGetInfo(binNetShareServer(0), _
                                  binShareName(0), _
                                  1, _
                                  lngBuffer)


NetShareEnum にしても NetShareGetInfo にしても、取得する情報レベルを
指定できるようになっています。レベル 0 では、共有名しか得られませんが、
レベルが高くなるにつれて、より多くの情報を得る事ができます。

その反面、多くの情報を得るためには、管理者級の高いアクセス権を必要とします。
限定された情報のみ得るのであれば、特別なグループメンバーシップは必要ありません。


今回は \\PCH のフォルダ共有名のみ得られれば良いのでしょうから、
NetShareEnum の レベル1 で良いかと思います。
レベル0 でも良いのですが、これだと名前しか分からないので、
共有フォルダなのか共有プリンタなのか判断できませんしね。


≪情報レベル≫API/OS/接続先等によって、指定可能なレベルが異なります。

・9x系(98, ME等)
レベル1: 共有名、種類、コメント
レベル50: 共有名、種類、アクセス権、コメント、パス、パスワード、書込パスワード、読取パスワード

・NT系(XP, Vista等)
レベル0: 共有名
レベル1: 共有名、種類、コメント
レベル2: 共有名、種類、アクセス許可、最大接続数、現接続数、パス、パスワード
レベル501: 共有名、種類、コメント
レベル502: 共有名、種類、アクセス許可、最大接続数、現接続数、パス、パスワード、セキュリティ記述子
レベル503: 共有名、種類、アクセス許可、最大接続数、現接続数、パス、パスワード、サーバー名、セキュリティ記述子
レベル1004: コメント
レベル1005: DFSルート内のDFSリンクか否か
レベル1005: 最大接続数
レベル1501: セキュリティ記述子

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。