none
WNetAddConnection2に付いて RRS feed

  • 質問

  • こんにちは
    いつもお世話になります。
    基本的な質問なんですが、WNetAddConnection2の使用方法を教えて下さい。
    言語は、Delphiですが宜しいでしょうか?

    ①②は、リモートマシンで共有設定していません。
    ③は、リモートマシンでC:を共有設定しています。

    共有設定していないマシンのフォルダーの中のファイルを編集したいのですが
    WNetAddConnection2ではできないのでしょうか?

    宜しくお願いします。

    型宣言
      _NETRESOURCEW = record
        dwScope: DWORD;
        dwType: DWORD;
        dwDisplayType: DWORD;
        dwUsage: DWORD;
        lpLocalName: LPWSTR;
        lpRemoteName: LPWSTR;
        lpComment: LPWSTR;
        lpProvider: LPWSTR;
      end;
      TNetResource = _NETRESOURCEW;
    変数宣言
      NetResource          : TNetResource;

    ①実行部
      with NetResource do
      begin
        dwScope       := RESOURCE_GLOBALNET;
        dwType        := RESOURCETYPE_DISK;
        dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC;
        dwUsage       := RESOURCEUSAGE_CONNECTABLE;
        lpLocalName   := '';
        lpRemoteName  := '\\Machine1\C:\Projrct';
        lpComment     := '';
        lpProvider    := '';
      end;

    Ret := WNetAddConnection2(NetResource, PassWord, ShareUser,0);

    上記ではRetに、 
      ERROR_BAD_NETPATH = 53;
    が返されます。


    ②実行部
      with NetResource do
      begin
        dwScope       := RESOURCE_GLOBALNET;
        dwType        := RESOURCETYPE_DISK;
        dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC;
        dwUsage       := RESOURCEUSAGE_CONNECTABLE;
        lpLocalName   := 'C:';
        lpRemoteName  := '\\Machine1\Projrct';
        lpComment     := '';
        lpProvider    := '';
      end;

    Ret := WNetAddConnection2(NetResource, PassWord, ShareUser,0);

    上記ではRetに、 
      ERROR_ALREADY_ASSIGNED = 85;
    が返されます。

    ③実行部
      with NetResource do
      begin
        dwScope       := RESOURCE_GLOBALNET;
        dwType        := RESOURCETYPE_DISK;
        dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC;
        dwUsage       := RESOURCEUSAGE_CONNECTABLE;
        lpLocalName   := '';
        lpRemoteName  := '\\Machine1\共有名\Projrct';
        lpComment     := '';
        lpProvider    := '';
      end;

    Ret := WNetAddConnection2(NetResource, PassWord, ShareUser,0);

    上記ではRetに、 
      NO_ERROR = 0;
    が返されます。

     

    2013年8月21日 5:34

回答

  • 下記のようにしたら、Z:ドライブの設定ができました。

    ローカル側で、コマンドプロンプトから
     『NET.exe USE Z: \\Machine1\共有名\Projrct パスワード /USER:ユーザー /PERSISTENT:NO』
    のコマンドを実行した場合と、同様の効果が得られているかと思います。

    そうではなく、公開するサーバー側において、共有フォルダーを作成する API を探しているという意味であれば、NetShareAdd 関数を使ってみてください。

    リモートマシンで共有設定がなされていないと使用できない見たいですね?

    何かしらの設定は必要でしょうね。一切設定していないのに外部から自由にファイルにアクセスできてしまったら、セキュリティ的に大きな問題を抱えていることになってしまいますので。

    共有設定がされていないマシンに

    『管理共有』の 「\\Machine1\C$\Projrct」などを使って接続するという手法はあります。ただ、最近の OS だと、管理共有(C$やD$など)が初期状態で無効に設定されていたはずです。場合によっては、追加のアクセス権の設定も必要になるでしょう。

    リモートで参照できる権限取得の方法はないのでしょうか?

    共有フォルダーの設定を遠隔操作で行いたいという意味でしょうか? それとも共有フォルダーを使わずにファイル交換を行いたいと言う意図でしょうか?

    WMIスクリプトでできそうな気もするのですが、もうひとつよく解りません。

    WMI というのは、Win32_Share クラスの Create メソッドを リモート実行させるという話でしょうか? だとすれば、相手側が WMI の実行を許可している必要がありますね。

    2013年8月21日 14:27

すべての返信

  • フォーラム オペレーターの星 睦美です。
    Tonbo1 さん、投稿ありがとうございます。

    エラーが出力されていますので、インターネット検索や MSDN のトラブルシューティングとサポート でエラーに関する手がかりをつかむことができそうです。

    もしエラーの内容を調べてみても解決にいたらない場合には、Tonbo1 さんの環境の構成(サーバー・クライアントのOS、ドメインの有無など、ユーザーの権限)に関してできるだけ詳しい情報をお知らせいただくと、回答が集まりやすくなると思います。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年8月21日 6:16
  • 星 睦美さんアドバイスありがとうございます。

    実行しようとしている環境は、2台のマシン両方ともWin7Proです。

    パラメータに指定しているShareUserは、Administrator権限を持ったユーザー名です。

    宜しくお願いします。

    2013年8月21日 6:46
  • WNetAddConnection2の機能を、私が勘違いしてるのみたいですね。

    下記のようにしたら、Z:ドライブの設定ができました。

    WNetAddConnection2は、Machine1で共有設定されたものに対して

    ネットワークドライブを割り当てる事ができる機能なんですね。

    リモートマシンで共有設定がなされていないと使用できない見たいですね?

    共有設定がされていないマシンにリモートで参照できる権限取得の方法はないのでしょうか?

    WMIスクリプトでできそうな気もするのですが、もうひとつよく解りません。

    宜しくお願いします。

    ③実行部
      with NetResource do
      begin
        dwScope       := RESOURCE_GLOBALNET;
        dwType        := RESOURCETYPE_DISK;
        dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC;
        dwUsage       := RESOURCEUSAGE_CONNECTABLE;
        lpLocalName   := 'Z:';
        lpRemoteName  := '\\Machine1\共有名\Projrct';
        lpComment     := '';
        lpProvider    := '';
      end;

    Ret := WNetAddConnection2(NetResource, PassWord, ShareUser,0);

    上記ではRetに、 
      NO_ERROR = 0;
    が返されます。

    2013年8月21日 7:18
  • 下記のようにしたら、Z:ドライブの設定ができました。

    ローカル側で、コマンドプロンプトから
     『NET.exe USE Z: \\Machine1\共有名\Projrct パスワード /USER:ユーザー /PERSISTENT:NO』
    のコマンドを実行した場合と、同様の効果が得られているかと思います。

    そうではなく、公開するサーバー側において、共有フォルダーを作成する API を探しているという意味であれば、NetShareAdd 関数を使ってみてください。

    リモートマシンで共有設定がなされていないと使用できない見たいですね?

    何かしらの設定は必要でしょうね。一切設定していないのに外部から自由にファイルにアクセスできてしまったら、セキュリティ的に大きな問題を抱えていることになってしまいますので。

    共有設定がされていないマシンに

    『管理共有』の 「\\Machine1\C$\Projrct」などを使って接続するという手法はあります。ただ、最近の OS だと、管理共有(C$やD$など)が初期状態で無効に設定されていたはずです。場合によっては、追加のアクセス権の設定も必要になるでしょう。

    リモートで参照できる権限取得の方法はないのでしょうか?

    共有フォルダーの設定を遠隔操作で行いたいという意味でしょうか? それとも共有フォルダーを使わずにファイル交換を行いたいと言う意図でしょうか?

    WMIスクリプトでできそうな気もするのですが、もうひとつよく解りません。

    WMI というのは、Win32_Share クラスの Create メソッドを リモート実行させるという話でしょうか? だとすれば、相手側が WMI の実行を許可している必要がありますね。

    2013年8月21日 14:27
  • 魔界の仮面弁士さん

    色々な情報有難うございます。

    ご教授頂いた方法試してみます。

    結果が出ましたら、ここに報告させて頂きます。

    1.共有設定していなくても、ユーザーID、パスワードを指定しているので

    リモートで設定できるかなとと考えておりました。

    2.C$懐かしいですねぇ。 あまり使ったことないので、すっかり忘れてました。

    3.共有フォルダーを設定する方が、セキュリティ的には危険なような気がするので

    共有設定しないで、ユーザーIDとパスワードでアクセスしたいと考えています。

    4.WMIのクラスまでお教え頂き有難うございます。

    2013年8月22日 8:31
  • 回答下さった皆さん有難うございました。

    今回は、DCOMサーバーに処理を書きDCOMサーバ側で行いたい処理をやらせる事にしました。

    魔界の仮面弁士さんに頂いた情報は、少し落ち着いて調べたいと思います。

    時間がかかると思いますが、おいおいご報告させて頂きます。

    取りあえず、この質問は保留にさせて頂きます。

    新しい、スレッド建てた方がよければそうしますので、ご助言お願いします。

    2013年8月22日 11:21
  • Tonbo1 さん、返信ありがとうございます。

    今回のスレッドで得た情報はフォーラムで参考になると思いますので、私から魔界の仮面弁士 さんのスレッドに[回答としてマーク] させていただきますね。Tonbo1 さんからのご報告をいただければ、さらにスレッドの情報が役立つものになると思います。

    後日質問したい点があれば、こちらのスレッドをリンクして新しく質問をご投稿ください。
    それでは、今後ともMSDN フォーラムをよろしくお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2013年8月23日 0:32