WNetUseConnectionについて – プログラミング – Home

通知
すべてクリア

WNetUseConnectionについて


初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

始めまして、お願いします。

作成中のアプリ(VC2005 MFC)から、ネットワーク接続の共有フォルダへアクセスする際、
①ネットワークリソースに未接続の場合はログイン画面を表示し、ログインさせる
②ネットワークリソースに接続済みの場合は、そのまま。
という動作をしたいと思っています。

以下のサイトを参考に、下記コードを書きました。
http://re-thinkthings.spaces.live.com/Blog/cns!1C5AE98DA3645F42!641.entry

 // WNet API を使い、ネットワークリソースに対して認証を行う
NETRESOURCE nr;
ZeroMemory(&nr, sizeof(NETRESOURCE));

DWORD dwFlags = CONNECT_INTERACTIVE;

nr.dwType = RESOURCETYPE_DISK; // リソースは共有フォルダ(ディスク)
nr.lpRemoteName = ”共有フォルダパス”; // 接続する共有フォルダ名

DWORD dwResult;
TCHAR szAccessName[1024];
DWORD dwBufferSize = lstrlen(lpszShareName) + sizeof(TCHAR);

//接続
DWORD dwRes = WNetUseConnection(hWnd, //オーナーウィンドウ
&nr, //接続の詳細
NULL, //ユーザー
NULL, //パスワード
dwFlags, //接続オプション
szAccessName, //システム要求を保持するバッファ
&dwBufferSize, //バッファサイズ
&dwResult); //接続情報を受け取る

if (dwRes == NO_ERROR)
{
//成功or接続済み
bRet = TRUE;
}
return bRet;

が、アクセス先の共有リソースが、
IPアドレス:192.168.1.XX
ホスト名:HogeHostName
となっている場合、
\\192.168.1.XX\HogeFolder
だとOKなのですが、
\\HogeHostName\HogeFolder
だとNGになってしまいます。

これはなぜでしょうか?


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

エラーコードとか必要ならWNetGetLastErrorの結果とか
そういう情報が足りないと思います。
NGになってしまいますでは、どういうエラーになっているのか
わかりません。

単純に考えれば、ホスト名からアドレスが解決できない為に
エラーになっているのではないかと思いますが、
エラーコードの提示が無いのでなんとも。


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

情報不足でした。

エラーは「ERROR_SESSION_CREDENTIAL_CONFLICT」が
返ってきます。

このエラーは二重ログインエラーらしいですが、
\\192.168.1.XX\HogeFolder
では、先述した①と②の動作が実現できます。

\\HogeHostName\HogeFolder
は、すでにログインしているとERROR_SESSION_CREDENTIAL_CONFLICTが返ってきます。

この違いはなぜでしょうか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

そのPCからその共有名ですでに接続しているからでは?
エクスプローラーとかで覗いたりしていれば、接続していると思います。
ネットワークドライブに割り付けたりしていたら接続済み状態でしょうし。


返信引用
COF
 COF
(@COF)
ゲスト
結合: 15年前
投稿: 53
 

>そのPCからその共有名ですでに接続しているからでは?
既に接続済みの場合は、先述した②の動作をしてほしいのです。
(WNetUseConnection()でNO_ERRORが返ってきてほしいのです)

・IPアドレスで既にログインしている場合、
WNetUseConnection()でIPアドレスでログイン
→二重ログインエラーにならずにNO_ERRORが返ってくる

・ホスト名で既にログインしている場合、
WNetUseConnection()でホスト名でログイン
→二重ログインエラーが返ってくる。

この違いななぜでしょうか?という質問です。
説明下手で申し訳ありません。

個人的にはWNetUseConnection()の第5引数の接続オプションがあやしいと思って
いるのですが、
CONNECT_INTERACTIVE
CONNECT_PROMPT
CONNECT_REDIRECT
CONNECT_UPDATE_PROFILE
の内、その組み合わせが正しいのかヘルプを見ても分かりません。

この辺をお分りになる方、ご教授ください。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

こちらで試してみたら、うまくいきました(^-^)
たぶんですが、コーディングの問題では無いと思います。

ファイル名を指定して実行にて[\\HogeHostName\HogeFolder]で開くことはでき
るでしょうか?

LinuxサーバやVPN接続など、状況によっては、IPアドレスでしかアクセスできな
くなることがあります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました