0

我的程序需要读取和写入可能在另一个域中的其他机器上的文件夹。所以我使用 System.Runtime.InteropServices 添加共享文件夹。当它在我的 Windows 服务的主菜单中被硬编码时,它工作得很好。但是从那以后出了点问题,我不知道是编码错误还是配置错误。

  • 共享文件夹的范围是什么?如果我的程序中的一个线程添加了一个共享文件夹,整个本地机器都可以看到吗?
  • 有没有办法查看已添加的共享文件夹?或者有没有办法查看何时添加文件夹?

    [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    internal static extern System.UInt32 NetUseAdd(string UncServerName, int Level, ref USE_INFO_2 Buf, out uint ParmError);
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct USE_INFO_2
    {
        internal LPWSTR ui2_local;
        internal LPWSTR ui2_remote;
        internal LPWSTR ui2_password;
        internal DWORD ui2_status;
        internal DWORD ui2_asg_type;
        internal DWORD ui2_refcount;
        internal DWORD ui2_usecount;
        internal LPWSTR ui2_username;
        internal LPWSTR ui2_domainname;
    }
    
    private void AddSharedFolder(string name, string domain, string username, string password)
    {
        if (name == null || domain == null || username == null || password == null)
            return;
    
        USE_INFO_2 useInfo = new USE_INFO_2();
        useInfo.ui2_remote = name;
        useInfo.ui2_password = password;
        useInfo.ui2_asg_type = 0;    //disk drive
        useInfo.ui2_usecount = 1;
        useInfo.ui2_username = username;
        useInfo.ui2_domainname = domain;
        uint paramErrorIndex;
        uint returnCode = NetUseAdd(String.Empty, 2, ref useInfo, out paramErrorIndex);
        if (returnCode != 0)
        {
            throw new Win32Exception((int)returnCode);
        }
    }
    
4

1 回答 1

1

计算机中的每个线程都在特定的用户帐户下运行。共享文件夹有安全设置,即它们受到基于ACL的访问控制,因此一些用户可能有访问权限,而另一些用户可能没有。这意味着您程序中的线程可能能够“看到”某些共享文件夹,而同一台计算机中的其他线程(包括使用桌面的交互式用户)可能无法“看到”这些文件夹。

总之:你应该假设很少。

于 2011-01-14T12:27:36.200 回答