タイトル | : Re^5: パソコンの共有フォルダ取得 |
記事No | : 14982 |
投稿日 | : 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: セキュリティ記述子
|