2017-07-19 34 views
0

ローカルネットワーク上のネットワーク共有から直接メディアにアクセスしようとしています。 問題は、Windowsの資格情報をURLに渡す必要があることです。 私はログオンタイプ9で偽装を試みたが、私はこのようなURLに資格情報を渡す試してみました:資格情報をIPアドレスに渡す

@"\\username:[email protected]\share_name\path\filename.mkv" 

私はWinフォームプロジェクトでWindowsメディアプレーヤー、プレーヤーでメディアにアクセスしようとしていますちょうど何かをロードし、準備完了状態になります。 エクスプローラにアドレスを入力するときに、予想通りの資格情報が要求されますが、私の場合はどうしたらいいですか?私はメディアプレーヤーのURLにアドレスとしてMACHINENAME /サーバー名を使用する場合、それが動作するいくつかの理由..

token = IntPtr.Zero; 
LogonUser("Username", "NAS-IP", "Password", 
      9, 0, ref token); 
person = new WindowsIdentity(token).Impersonate(); 

axWindowsMediaPlayer1.URL = @"\\ip\camera_share\axis-ACCC8E7B9050\20170712\08\20170712_085720_39AA_ACCC8E7B9050\20170712_08\20170712_085720_0092.mkv"; 

EDIT

すべてを試みてきたような気がします。これは、クライアントが名前ではなくサーバーのIPしか知っていない場合には効率的ではありません。

token = IntPtr.Zero; 
LogonUser("username", "serverip", "password", 
      9, 0, ref token); 
person = new WindowsIdentity(token).Impersonate(); 
axWindowsMediaPlayer1.URL = @"\\servername\camera_share\axis-ACCC8E7B9050\20170719\10\20170719_100732_8084_ACCC8E7B9050\20170719_10\20170719_100732_E5A7.mkv"; 

これを回避する方法はありますか。

+0

[ネットワーク共有に接続する際にユーザー名とパスワードを入力する方法](https://stackoverflow.com/questions/295538/how-to-provide-user-name-and-password-when-ネットワークへの接続 - 共有) – jAC

答えて

0

私はスレッドでは非常に実行可能な答えが見つかりました:私はこのように使用することができ

public class NetworkConnection : IDisposable 
{ 
    string _networkName; 

    public NetworkConnection(string networkName, 
     NetworkCredential credentials) 
    { 
     _networkName = networkName; 

     var netResource = new NetResource() 
     { 
      Scope = ResourceScope.GlobalNetwork, 
      ResourceType = ResourceType.Disk, 
      DisplayType = ResourceDisplaytype.Share, 
      RemoteName = networkName 
     }; 

     var userName = string.IsNullOrEmpty(credentials.Domain) 
      ? credentials.UserName 
      : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName); 

     var result = WNetAddConnection2(
      netResource, 
      credentials.Password, 
      userName, 
      0); 

     if (result != 0) 
     { 
      throw new Win32Exception(result, "Error connecting to remote share"); 
     } 
    } 

    ~NetworkConnection() 
    { 
     Dispose(false); 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     WNetCancelConnection2(_networkName, 0, true); 
    } 

    [DllImport("mpr.dll")] 
    private static extern int WNetAddConnection2(NetResource netResource, 
     string password, string username, int flags); 

    [DllImport("mpr.dll")] 
    private static extern int WNetCancelConnection2(string name, int flags, 
     bool force); 
} 

[StructLayout(LayoutKind.Sequential)] 
public class NetResource 
{ 
    public ResourceScope Scope; 
    public ResourceType ResourceType; 
    public ResourceDisplaytype DisplayType; 
    public int Usage; 
    public string LocalName; 
    public string RemoteName; 
    public string Comment; 
    public string Provider; 
} 

public enum ResourceScope : int 
{ 
    Connected = 1, 
    GlobalNetwork, 
    Remembered, 
    Recent, 
    Context 
}; 

public enum ResourceType : int 
{ 
    Any = 0, 
    Disk = 1, 
    Print = 2, 
    Reserved = 8, 
} 

public enum ResourceDisplaytype : int 
{ 
    Generic = 0x0, 
    Domain = 0x01, 
    Server = 0x02, 
    Share = 0x03, 
    File = 0x04, 
    Group = 0x05, 
    Network = 0x06, 
    Root = 0x07, 
    Shareadmin = 0x08, 
    Directory = 0x09, 
    Tree = 0x0a, 
    Ndscontainer = 0x0b 
} 

How to provide user name and password when connecting to a network share

Luke Quinaneは、次のコードを作っ

using (new NetworkConnection(@"\\IP", new NetworkCredential("Username", "Password", System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName))) 
{ 
    axWindowsMediaPlayer1.URL = @"\\IP\camera_share\axis-ACCC8E7B9050\20170719\10\20170719_100732_8084_ACCC8E7B9050\20170719_10\20170719_100732_E5A7.mkv"; 
} 

ありがとうございました!

0

リモートロケーションにログインするには、NetworkCredentialを使用する必要があります。いくつかの大規模な調査の後

using System.IO; 
using System.Net; 

NetworkCredential theNetworkCredential = new 
NetworkCredential(@"domain\username", "password"); 
CredentialCache theNetCache = new CredentialCache(); 
theNetCache.Add(new Uri(@"\\computer"), "Basic", theNetworkCredential); 
string[] theFolders = Directory.GetDirectories(@"\\computer\share"); 
関連する問題