アプリ版:「スタンプのみでお礼する」機能のリリースについて

Microsoft Visual C++ 6.0 で、パスワード入力の必要なネットワークリソースのログインを行うようにするため、
WNetAddConnection2()
を使ってみました。様々なサンプルコードを参考にプログラムを書きましたが、エラー1219が返されます。

自分のコンピューター:"MyComputer1"
ユーザー認証によりログインしたいネットワーク上のコンピューター名と共有名
 コンピューター名 : "ServPC02"
 共有名 : "ShareData"
 ユーザー名 : "Admin"
 パスワード : "pass"

こんな感じでプログラムを書きました。

class CMyTest
{
  public:
    void Open();
};

void CMyTest::Open()
{
  NETRESOURCE nr ;

  ZeroMemory(&nr , sizeof(NETRESOURCE) );

  nr.dwType = RESOURCETYPE_DISK ;
  nr.lpLocalName = NULL ;
  nr.lpRemoteName = _T("\\\\ServPC02\\ShareData") ;
  nr.lpProvider = NULL ;

  DWORD dwResult = WNetAddConnection2(&nr , _T("pass") , _T("admin") , 0) ;
}

 戻り値は、dwResult = 1219 です。

 ここで、コンピューター名 "ServPC02"のIPアドレスを gethostbyname() 関数により取得し、
nr.lpRemoteName = _T("\\\\192.168.2.100\\ShareName") ;
としてWNetAddConnection2() を実行すると成功します。戻り値は0になり、この共有リソースの中にあるフォルダを検出することが可能になります。

 なぜこのような現象が起こるのでしょうか?

 IPアドレスを取得してネットワークのユーザー認証を行わせる方法を取ればいいけれど、コンピューター名をそのまま設定するとエラーになる理由が知りたいです。

 ファイアウォールの問題など、プログラミング以外の部分の問題でしょうか。
 OSは、Windows Vista (32bit)です。

A 回答 (1件)

使ったことないのでなんとも言えませんが…



>戻り値は、dwResult = 1219 です。
errlookによると…
「同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。」
だそうです。

http://msdn.microsoft.com/ja-jp/library/cc446983 …
には戻り値としてERROR_SESSION_CREDENTIAL_CONFLICTは記載されていないんですよねぇ。
http://msdn.microsoft.com/en-us/library/windows/ …
英語のページだと戻り値が記載されていないもの(=Ohter)の場合はFormatMessage()で確認してや。
ってことになっているのでerrlook.exe使用したワケですが。

ログオンしているユーザー名とは別に既にコネクション張られている…とか?
# 一定時間の無アクセスで切断される…とか???

> IPアドレスを取得してネットワークのユーザー認証を行わせる方法を取ればいいけれど、コンピューター名をそのまま設定するとエラーになる理由が知りたいです。

ここだけ見るとコンピュータブラウザ関係ですかねぇ…。
とはいえ、ネットワークコンピュータの一覧に出ていなくても名前解決ができれば接続は可能かと思われますが……。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A