WNetAddConnection2で接続後、切断するには?

解決


豚猫  2005-08-02 11:45:42  No: 91225  IP: [192.*.*.*]

いつも、参考にさせて頂いております。豚猫です。

この度、複数のマシンに対し、コピーを行うツールを開発しております。
そこで、当初は、INIファイル等で接続先のマシン名及びアカウント情報を
管理し、DOSコマンドの【NET USE】にて接続後、そのドライブに対し、
コピーを行うような仕様だったのですが、
他のツールでも指定されたマシンに接続する必要がありますので、
初期処理的なものを作成しようかと検討中です。

そこで、WNetAddConnection2関数を使用し、接続を行おうと思ったのですが。

    Dim udtNetResource        As tagNETRESOURCE
    Dim lngWin32apiResultCode As Long

    ' リソースの詳細を設定
    With udtNetResource
        .dwScope = RESOURCE_GLOBALNET
        ' リソースの種類
        .dwType = RESOURCETYPE_DISK
        ' 空の文字列を代入
        .lpLocalName = vbNullString
        ' ネットワークリソースの共有名
        .lpRemoteName = sPcName
    End With
    
    ' ネットワークリソースに接続
    lngWin32apiResultCode = WNetAddConnection2(udtNetResource, sPassword, sUserName, CONNECT_UPDATE_PROFILE)
                           
    ' 接続に失敗した場合はメッセージボックスを表示
    If lngWin32apiResultCode <> NO_ERROR Then
        MsgBox sPcName & "への接続に失敗しました。", vbExclamation, "エラーメッセージ"
    End If

上記ソース上で、【lpLocalName 】の部分にドライブを指定せずとも
接続を行うことができました。

この場合、切断を行う必要はないのでしょうか?
また、切断を行う場合は、どのように記述すればよろしいのでしょうか。

以上、ご教示よろしくお願いします。

編集 削除
K.J.K.  2005-08-03 10:37:33  No: 91226  IP: [192.*.*.*]

ローカルデバイスへリダイレクトさせずにネットワーク資源に接続
するのであれば、vbNullStringで問題ありません。

で、切断は、WNetDisconnectDialog1辺りが対にはなっています。
実際に切断するかどうかは運用方法にも依存するのでは。

編集 削除
豚猫  2005-08-03 10:48:52  No: 91227  IP: [192.*.*.*]

K.J.K様ご回答ありがとうございます。

>ローカルデバイスへリダイレクトさせずにネットワーク資源に接続
>するのであれば、vbNullStringで問題ありません。
>で、切断は、WNetDisconnectDialog1辺りが対にはなっています。
>実際に切断するかどうかは運用方法にも依存するのでは。

運用方法としては、サーバー上でタスク処理を行うのか、
もしくはクライアント側で、不定期に処理を行うのか
まだ決まっていない状態なのですが、
もし、サーバー上で使用した場合、資源がどんどん溜まっていくのでは
ないのか、と思い不安になりました^^;
資源の解放等、行わずに
イメージとしては、
エクスプローラ上で違うドメイン上のマシンを
参照する際に、ユーザーとパスワードを聞いてくるダイアログで
入力し参照する
と、いったイメージでよろしいでしょうか。
もし、そうなのであれば開放等を意識せずに処理が行えると思います。

以上、重ねてご教示願います。

編集 削除
K.J.K.  2005-08-04 10:09:59  No: 91228  IP: [192.*.*.*]

質問内容の意図が読み取れません。

WNetAddConnection2もWNetDisconnectDialog1も、ハンドルのようなもの
を管理しそれを返す・利用する関数ではありませんよね。

編集 削除
豚猫  2005-08-08 09:37:52  No: 91229  IP: [192.*.*.*]

K.J.K様

質問内容が適切ではなく、伝わりにくい
部分があったようで、申し訳ありません。

上記ソースにて、ローカルドライブを指定せずに、
任意のマシンへ接続を行っております。

lpLocalName = "Z:"

上記のようにドライブを指定する場合には、
切断を行う必要があると思います。

今回記述しました、ソース上では
ドライブを指定していないので、
イメージとしては、

手動で、エクスプローラを開き、
異なるドメインのマシンを開いた場合、
ユーザとパスワードを聞いてくるダイアログが
表示されると思います。

そこで、ユーザーとパスワードを入力すると、
そのマシンの共有されているフォルダの一覧が
表示されると思います。

この、パスワードとユーザーを入力する部分が
上記ソースに該当するのかと、思いました。

ですので、切断などは特に行わずに、
現在使用しているマシンに、上記ソースにて
接続を行ったマシンに、「こういうマシンがあるよ」と
認識させるだけの作業と思っております。

またもや、意図が読みきれない部分があるかと思います。
申し訳ありません。

他のサイトにて、調べたところ、
lpLocalName に指定しない場合は、
特に切断等を意識する必要はないと、記述がありました。

今回の操作において、切断するか、否かということが
問題でしたので、【切断しないでよい】という判断で
解決としたいと思います。

K.J.K様、ご回答ありがとうございました。

編集 削除