Access a shared folder using the shared machine's local credential

Rajesh Ambakkat 216 Reputation points
2021-11-04T12:43:15.127+00:00

I am trying to access a shared folder "\machineA\shared", using the credential "machineA\user" from a different machineB. Unfortunately machineA is not in domain as machineB. How can i access the shared folder throgh c#....

tried to use this code not working

NetworkCredential theNetworkCredential = new NetworkCredential(equipment.User, equipment.Password);
CredentialCache theNetCache = new CredentialCache();
theNetCache.Add(new Uri(equipment.SourceFolder), "Basic", theNetworkCredential);
string[] theFiles1 = Directory.GetFiles(equipment.SourceFolder);

.NET Runtime
.NET Runtime
.NET: Microsoft Technologies based on the .NET software framework.Runtime: An environment required to run apps that aren't compiled to machine language.
1,119 questions
{count} votes

Accepted answer
  1. Xingyu Zhao-MSFT 5,356 Reputation points
    2021-11-05T09:10:28.357+00:00

    Hi @RajeshAmb ,
    Since machineA is not in domain as machineB, you could use the mpr.dll to add remote network connection.
    Here’s an example you may need:

            public static class WNetConnectionHelper  
            {  
                [DllImport("mpr.dll", EntryPoint = "WNetAddConnection2")]  
                private static extern uint WNetAddConnection2(NetResource lpNetResource, string lpPassword, string lpUsername, uint dwFlags);  
      
                [DllImport("Mpr.dll", EntryPoint = "WNetCancelConnection2"))]  
                private static extern uint WNetCancelConnection2(string lpName, uint dwFlags, bool fForce);  
      
                [StructLayout(LayoutKind.Sequential)]  
                public class NetResource  
                {  
                    public int dwScope;  
                    public int dwType;  
                    public int dwDisplayType;  
                    public int dwUsage;  
                    public string lpLocalName;  
                    public string lpRemoteName;  
                    public string lpComment;  
                    public string lpProvider;  
                }  
      
                public static uint WNetAddConnection(NetResource netResource, string username, string password)  
                {  
                    uint result = WNetAddConnection2(netResource, password, username, 0);  
                    return result;  
                }  
      
                public static uint WNetAddConnection(string username, string password, string remoteName, string localName)  
                {  
                    NetResource netResource = new NetResource();  
                    netResource.dwScope = 2;       //RESOURCE_GLOBALNET  
                    netResource.dwType = 1;       //RESOURCETYPE_ANY  
                    netResource.dwDisplayType = 3; //RESOURCEDISPLAYTYPE_GENERIC  
                    netResource.dwUsage = 1;       //RESOURCEUSAGE_CONNECTABLE  
                    netResource.lpLocalName = localName;  
                    netResource.lpRemoteName = remoteName.TrimEnd('/');  
      
                    uint result = WNetAddConnection2(netResource, password, username, 0);  
                    return result;  
                }  
      
                public static uint WNetCancelConnection(string name, uint flags, bool force)  
                {  
                    uint nret = WNetCancelConnection2(name, flags, force);  
                    return nret;  
                }  
            }  
    

    Here is another solution which might be helpful.

    Best Regards,
    Xingyu Zhao
    *
    If the answer is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    0 comments No comments

0 additional answers

Sort by: Most helpful