- PR -

共有フォルダの作成方法

1
投稿者投稿内容
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2004-06-22 11:55
VB.NET で共有フォルダを作成したいのですが、どうにもうまくいきません。
NetShareAdd API を使えば良いようなのですが、以下のようなコードでエラーとなってしまいます。

環境
OS Windows2000PRO SP4
VB .net 2003

コード:

' サーバー名を設定(空文字の場合はローカルコンピュータ)
'*ppConvUnicode はunicodeを返す関数です
strServerName = ppConvUnicode("")
' 共有情報を設定
With udtShareInfo2
' 共有名
gchNetName = GCHandle.Alloc("ShareTest", GCHandleType.Pinned)
.shi2_netname = gchNetName.AddrOfPinnedObject().ToInt32()
' 共有タイプ
.shi2_type = STYPE_DISKTREE
' コメント
gchRemark = GCHandle.Alloc("test", GCHandleType.Pinned)
.shi2_remark = gchRemark.AddrOfPinnedObject().ToInt32()
' 最大ユーザー数
.shi2_max_uses = 1
' 共有フォルダ
gchPath = GCHandle.Alloc("c:\tmp", GCHandleType.Pinned)
.shi2_path = gchPath.AddrOfPinnedObject().ToInt32()
' パスワード
gchPassword = GCHandle.Alloc("hoge", GCHandleType.Pinned)
.shi2_passwd = gchPassword.AddrOfPinnedObject().ToInt32()
End With
' 指定したフォルダを共有
lngWin32apiResultCode = NetShareAdd(strServerName, 2, udtShareInfo2, lngParmErr)
' フォルダの共有に成功したときは
If lngWin32apiResultCode = NERR_Success Then
MsgBox(strNetName & "の共有を追加しました", MsgBoxStyle.Information)
Else
MsgBox(strNetName & "の共有に失敗しました", MsgBoxStyle.Exclamation)
End If

gchNetName.Free()
gchRemark.Free()
gchPath.Free()
gchPassword.Free()



NetShareAdd は以下のように定義しています。
コード:


Declare Function NetShareAdd Lib "netapi32.dll" (ByVal servername As Object, ByVal level As Long, ByRef buf As SHARE_INFO_2, ByRef parm_err As Integer) As Integer
' 共有情報を格納する構造体
Structure SHARE_INFO_2
Dim shi2_netname As Integer
Dim shi2_type As Integer
Dim shi2_remark As Integer
Dim shi2_permissions As Integer
Dim shi2_max_uses As Integer
Dim shi2_current_uses As Integer
Dim shi2_path As Integer
Dim shi2_passwd As Integer
End Structure

' 共有デバイスのタイプを示す定数の宣言
Public Const STYPE_DISKTREE As Short = 0
Public Const NERR_Success As Short = 0




発生するエラーはコード "124" ERROR_INVALID_LEVEL です。
ヘルプを見るとlevel は "2" でいいよう書いてあるのですが、何か間違っているのでしょうか

どなたか分かる方がいましたら、よろしくお願いいたします

[ メッセージ編集済み 編集者: 最大40 編集日時 2004-06-22 11:57 ]
1

スキルアップ/キャリアアップ(JOB@IT)