Comment puis-je voir quels dossiers partagés mon programme a accès?
-
11-10-2019 - |
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); } }
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