Question

Mon programme doit lire et écrire des dossiers sur d'autres machines qui pourraient être dans un autre domaine. Alors je les System.Runtime.InteropServices pour ajouter des dossiers partagés. Cela a bien fonctionné quand il a été codé en dur dans le menu principal de mon service Windows. Mais depuis quelque chose a mal tourné et je ne sais pas si elle est une erreur de codage ou de configuration.

  • Quelle est la portée d'un dossier partagé? Si un thread dans mon programme ajoute un dossier partagé, toute la machine locale peut le voir?
  • Est-il possible de voir ce que les dossiers partagés a été ajouté? Ou est-il un moyen de voir quand un dossier est ajouté?

    [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);
        }
    }
    
Était-ce utile?

La solution

Chaque thread d'un ordinateur fonctionne sous un compte d'utilisateur spécifique. Dossier partagé ont les paramètres de sécurité, à savoir qu'ils sont soumis à un contrôle d'accès basé ACL, de sorte que certains utilisateurs peuvent avoir l'autorisation d'accès et d'autres non. Cela signifie que le fil de votre programme peut être en mesure de « voir » des dossiers partagés, tandis que d'autres threads dans le même ordinateur (y compris l'utilisateur interactif à l'aide du bureau) pourrait être incapable de « voir » ces dossiers.

. En résumé: vous devriez prendre très peu

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top