いつもお世話になっております。
Windows98、MEでフォルダの共有をしたいのですが、
色々なサイトでサンプル等があったのでそれを使用して
共有することはできたのですが、
再起動すると共有がはずれて(共有しないの状態)しまいます。
ソースには再起動後に再接続と書いているのですが、わからない状態です。
なにとぞよろしくお願いいたします。
環境 VB6 SP-5
'リソースの共有を追加
Private Declare Function NetShareAdd Lib "SVRAPI.DLL" _
(ByVal pszServer As String, _
ByVal sLevel As Integer, _
ByRef pbBuffer As share_info_50, _
ByVal cbBuffer As Integer) As Long
'メモリーコピー
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(ToData As Any, FromData As Any, ByVal Length As Long)
Private Const LM20_NNLEN = 12
Private Const SHPWLEN = 8
'リソースの種類
Private Const STYPE_DISKTREE = 0
'アクセス権限
Private Const SHI50F_FULL = &H2& 'フルアクセス
Private Const SHI50F_PERSIST = &H100& 'OS再起動時に再接続する
Private Type share_info_50
shi50_netname(LM20_NNLEN) As Byte
shi50_type As Byte
shi50_flags As Integer
shi50_remark As Long
shi50_path As Long
shi50_rw_password(SHPWLEN) As Byte
shi50_ro_password(SHPWLEN) As Byte
End Type
Private Sub Command1_Click()
Dim info50 As share_info_50
Dim ShareName As String
Dim SharePath As String
Dim Comment As String
Dim Pass As String
Dim strbuf1 As String
Dim strbuf2 As String
gfunSetFolder_98 = False
'共有名 12バイトまで
ShareName = "test"
'共有フォルダのフルパス
SharePath = UCase("C:\test")
Comment = ""
Pass = ""
With info50
'共有名
Call CopyMemory(.shi50_netname(0), ByVal ShareName, LM20_NNLEN)
.shi50_type = STYPE_DISKTREE
'フルアクセス&再起動時に再接続
.shi50_flags = SHI50F_FULL Or SHI50F_PERSIST
'コメント
If Comment <> "" Then
strbuf1 = StrConv(Comment, vbFromUnicode)
.shi50_remark = StrPtr(strbuf1)
End If
'フォルダのパス
strbuf2 = StrConv(SharePath, vbFromUnicode)
.shi50_path = StrPtr(strbuf2)
'パスワード
If Pass <> "" Then
Call CopyMemory(.shi50_rw_password(0), ByVal Pass, SHPWLEN)
End If
End With
If NetShareAdd(vbNullString, 50, info50, Len(info50)) = 0 Then
MsgBox "フォルダの共有を追加しました", vbInformation
Else
MsgBox "フォルダの共有に失敗しました", vbExclamation
End If
End Sub
WNetAddConnection2 API でできますが・・・
ただ、Win95/98/98SE/Me では環境が無いので
試したことがありません。
尚、起動時の再接続ですが・・・
ネットワークの設定で、優先ログオンが、何になっているか
が影響すると思いますが・・・
以上。
お早いお返事ありがとうございます。
起動時の再接続ですが設定は
Microsoft ネットワーク クライアント
なのですがうまくいきませんでした。
WNetAddConnection2 API でできるとのことですので
少し調べてみたいと思います。
ただ、NT系(Win2000、XP等)は netapi32.dll の NetShareAdd で
うまく動作しているので、できれば現在の API の方で
できるとうれしいのですが・・・。
ヘルプで確認されましたか?
NetShareAdd は・・・
Administrators または Account Operators ローカルグループのメンバ、
あるいは Communication Operators、Print Operators、Server Operators
のいずれかのグループのメンバだけがこの関数を実行できます。
Print Operator はプリンタキューだけを追加できます。
Communication Operator は、通信デバイスキューだけを追加できます。
とあります。
また、NT/2000/XP系と、95/98系とで、4番目のパラメータの扱い
が違いますので、同一のプログラムでは解決できません。
OSの種別を判定して、区別して動作させなければなりません。
※ あくまで環境が無いので推測!
ですので、NT/2000/XP 系と、95/98系とで区別の無いAPIの方が
安全のように思いますが・・・
まぁ〜お試し下さい。
以上。
ヘルプは確認しております。
はじめに書かせていただいたように
プログラム実行後はきちんと共有されているので
権限がなければその段階で共有されていないかな?と思います。
きちんと使用しているOSを判別して
各々のプログラムを走らせるようにはしています。
たしかに同じAPIを使用しないほうが安全かもしれないですね。
まだ少ししか調べれてないのですが、
WNetAddConnection2 はネットワークドライブの割当が
できるのはわかったのですが共有が探せきれてません。
もしよろしければフォルダ共有のサイトでもあれば
教えていただけるとありがたいです。
なにとぞよろしくお願いいたします。