0/5 (11 avis)
Snippet vu 15 331 fois - Téléchargée 30 fois
using System; using System.IO; using System.Runtime.InteropServices; namespace AOGie { /// <summary> /// Création non persistante et suppression de lecteur virtuel. /// Ce lecteur devra donc être recréé après un redémarrage du système. /// Celui-ci n'est pas référencé sous la clé : HKLM\System\MountedDevices. /// /// AOGie - 30/06/2005. /// </summary> public class VirtualDrive { #region Win32 private const int DDD_RAW_TARGET_PATH = 0x00000001; private const int DDD_REMOVE_DEFINITION = 0x00000002; private const int DDD_EXACT_MATCH_ON_REMOVE = 0x00000004; [DllImport("kernel32.dll", CharSet=CharSet.Auto)] private static extern bool DefineDosDevice( int dwFlags, string lpDeviceName, string lpTargetPath ); private const int DRIVE_UNKNOWN = 0; private const int DRIVE_NO_ROOT_DIR = 1; private const int DRIVE_FIXED = 3; [DllImport("kernel32.dll", CharSet=CharSet.Auto)] private static extern int GetDriveType( string lpRootPathName ); #endregion #region Méthodes publiques #region Create /// <summary> /// Création d'un lecteur virtuel non persistant. /// </summary> /// <param name="driveChar">Lettre à attribuer au lecteur.</param> /// <param name="path">Chemin d'accès au répertoire.</param> /// <returns>Succès ou échec de l'opération</returns> public static bool Create(char driveChar, string path) { return DDDOperation(driveChar, path, true); } #endregion #region Delete /// <summary> /// Suppression d'un lecteur virtuel non persistant. /// </summary> /// <param name="driveChar">Lettre attribuée au lecteur.</param> /// <param name="path">Chemin d'accès au répertoire.</param> /// <returns>Succès ou échec de l'opération</returns> public static bool Delete(char driveChar, string path) { return DDDOperation(driveChar, path, false); } #endregion #endregion #region Méthodes privées #region DDDOperation private static bool DDDOperation(char driveChar, string path, bool create) { //répertoire valide ? if (!Directory.Exists(path)) return false; string drive = string.Format("{0}:", driveChar.ToString().ToUpper()); //le volume existe ? int type = GetDriveType(string.Format("{0}{1}", drive, Path.DirectorySeparatorChar)); //Nota : un lecteur virtuel est de type DRIVE_FIXED une fois créé. if ((create && type != DRIVE_UNKNOWN && type != DRIVE_NO_ROOT_DIR) || (!create && type != DRIVE_FIXED)) return false; int flags = DDD_RAW_TARGET_PATH; if (!create) flags |= (DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE); return DefineDosDevice( flags, drive, string.Format("{0}??{0}{1}", Path.DirectorySeparatorChar, path) ); } #endregion #endregion } }
19 juin 2009 à 21:45
Certains vont trouver cela bete mais je ne comprend pas pourquoi 100 lignes de code alors que la commande "SUBST" en DOS fait la même chose exactement...
pour reprendre ton exemple:
"subst Z: c:\windows\system32"
Travaillant pour ma part réguilierement avec MICROSOFT (dans une entreprise partenare), je doute serieusement de leur aptitudeasimplifier les choses...
Bel effort tout de même....
++
17 avril 2006 à 20:18
Je voudrais savoir les codes qui peuvent permettre de garder le disque virtuel en redemarant l'ordinateur ? Quels sont les modifications à effectuer sur ton code.
Merci !
19 juil. 2005 à 12:43
1 juil. 2005 à 22:07
1 juil. 2005 à 22:01
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.