
現在、C#(VisualStudio2005)で共有フォルダの認証を行い、
そのフォルダ内のファイルを読み込む処理を行ないたいと考えています。
■動作------------------------------------------------------
1.ボタン押下によってフォルダ(\\aaa)をユーザ(user)、パスワード(pass)で認証を行なう
2.ファイル(bbb.txt)の内容をメッセージボックスに出力する
3.認証を切る
■現在の実装状況--------------------------------------------
private void btnGetShareFileData_Click(object sender, EventArgs e)
{
NETRESOURCE netresource = new NETRESOURCE();
netresource.dwType = 1;
netresource.lpLocalName = null;
netresource.lpRemoteName = "\\\\aaa";
netresource.lpProvider = null;
try
{
int returnNo1 = WNetAddConnection3(IntPtr.Zero, ref netresource, "user", "pass", 0);
System.IO.StreamReader streamReader =
new System.IO.StreamReader("\\\\aaa\\bbb.txt", System.Text.Encoding.GetEncoding(932));
MessageBox.Show(streamReader.ReadToEnd());
int returnNo2 = WNetCancelConnection2("\\\\aaa", "0", true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
[StructLayout(LayoutKind.Sequential)]
public struct NETRESOURCE
{
public int dwType;
public string lpLocalName;
public string lpRemoteName;
public string lpProvider;
}
[DllImport("mpr.dll")]
private static extern int WNetAddConnection3(
System.IntPtr hWndOwner,
ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUserName,
int dwFlags
);
[DllImport("mpr.dll")]
private static extern int WNetCancelConnection2(
string lpName,
string dwFlags,
bool fForce
);
[DllImport("mpr.dll")]
private static extern int WNetAddConnection2(
ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUsername,
int dwFlags
);
■結果------------------------------------------------------
WNetAddConnection3の戻り値が「487」で
System.IO.StreamReader streamReaderを実行されると
「ログオン失敗:ユーザ名を認識できないかまたはパスワードが間違っています。」
とエラーになってします。
WNetAddConnection3でのログオン自体がうまくできていないのでしょうですが、
どうすればよいのかがわかりません。
(ちなみにWNetAddConnection2でやってみても同様です)
どなたか教えていただけないでしょうか?
いろいろなページは参考にさせていただいているのですが、
知識が足らず読み解くことができないので、
できればサンプルコード等を教えていただけると助かります。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
NETRESOURCE構造体の定義が違うからでしょう
メンバーが足りないのです
public struct NETRESOURCE
{
public int dwScope; // Added
public int dwType;
public int dwDisplayType; // Added
public int dwUsage; // Added
public string lpLocalName;
public string lpRemoteName;
public string lpComment; // Added
public string lpProvider;
}
メンバーが足りないためにAPIの中で違う場所を参照してしまうため共有資源の名前が受け取れていないのです
VS2005付属のMSDNなどで NETRESOUSE構造体を確認しましょう
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/wnet/wnet/netresource_str.htm
この回答への補足
早速のご回答、ありがとうございます。
MSDNにある「WNetAddConnection3 関数は、 構造体の上記以外のメンバを無視します。」
というのは宣言をしなくてもいいということではないのですね。
教えていただいた通りに定義をして、特に値を設定することなく実行しました。
WNetAddConnection3の戻り値が「1208」になりましたが、以降は同じエラー結果です。
また、C#で関係するかわかりませんでしたが、どこかでポインタがどうこうという内容を読んだため、
[StructLayout(LayoutKind.Sequential)]
public struct NETRESOURCE
{
public int dwScope; // Added
public int dwType;
public int dwDisplayType; // Added
public int dwUsage; // Added
[MarshalAs(UnmanagedType.LPWStr)]
public string lpLocalName;
[MarshalAs(UnmanagedType.LPWStr)]
public string lpRemoteName;
[MarshalAs(UnmanagedType.LPWStr)]
public string lpComment; // Added
[MarshalAs(UnmanagedType.LPWStr)]
public string lpProvider;
}
で実行してみたところ
WNetAddConnection3の戻り値が「67」になり、以降は同じエラー結果です。
他にはどこを気をつけたほうがいいのでしょうか?
また、WNetAddConnection3の戻り値の内容がどのようなエラーを指しているのかがわかるサイト等を教えていただけたらと思います。
以上、よろしくお願いいたします。
申し訳ありません。
パスワードが間違っていただけのようです。
教えていただいた構造体で正しく動作しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
C#で別のFormへ複数の値を返そ...
-
C#でキーイベントが発生しない...
-
ピクチャボックスのクリックイ...
-
ユーザーコントロールを動的に...
-
vc++ 2005 Pictureboxの透過処理
-
C# バイナリダンプを構造体に簡...
-
コンボボックスを使う時の警告
-
C# 矢印キーの取得
-
オブジェクトの中のプロパティ...
-
JSPでDBからデータ読み込みブラ...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
動的配列が存在(要素が有る)か...
-
javaで質問です。 文字列2023/2...
-
flush()とclose()について
-
1~100までの数字を表示したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
ボタンの複数割り当てについて
-
コンボボックスを使う時の警告
-
C# DataGridView列カスタマイズ
-
Junitテストでvoid戻り値メッソ...
-
C# 矢印キーの取得
-
C# WinForm のDataGridView Cel...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
GOF本のStrategyのJava版での質...
-
イメージボタンを作成したいの...
-
以下のコードのどこが問題なの...
-
Androidでこのエラーを解決した...
-
C#で、定数をフラグ(if文)に...
-
C# 親フォームで指定した値を...
-
Javaでウィンドウ作成について
-
負の数を取得するには?
-
Windowsのリソース作成について
-
javaの同期について
おすすめ情報