Accueil > > > VIRTUALDRIVE - CLASSE DE CRÉATION NON PERSISTANTE ET SUPPRESSION DE LECTEUR VIRTUEL.
VIRTUALDRIVE - CLASSE DE CRÉATION NON PERSISTANTE ET SUPPRESSION DE LECTEUR VIRTUEL.
Information sur la source
Description
Cette classe permet la création non persistante et la suppression d'un lecteur virtuel.
Celui-ci n'est pas conservé après le redémarrage du système, le nom est le même que le lecteur hébergeant le répertoire donné à la fonction de création.
Le lecteur n'est pas référencé sous la clé : HKLM\System\MountedDevices. (cf. SetVolumeMountPoint)
L'API employée est "DefineDosDevice".
NOTA : le "path" indiqué est pris tel quel car j'emploie le flag "DDD_RAW_TARGET_PATH".
Pour une conversion d'un "path" MS-DOS, ce flag ne doit pas être pris en compte...
Emploi : VirtualDrive.Create('Z', @"C:\WINNT\System32");
Bonne utilisation.
Source
- 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
- }
- }
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
}
}
Historique
- 30 juin 2005 11:19:28 :
- Je m'étais trompé sur une annotation expliquant l'attribution du nom au lecteur virtuel... :)])
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Infos lecteur disque [ par Seb206 ]
Comment recuperer des infos sur un lecteur ?Nom du lecteur, type ( disquette, cd, disque dur ...).Avec les classes .net Directory et DirectoryInfo, j'
Type de lecteur / support [ par taharban ]
Comment reconnaitre le type d'un lecteur, "c:" par exemple ?Pour savoir s'il s'agit d'un disque dur, lecteur CD ou DVD, et même un un CD ou DVD dans l
Besoin d'aide pour lecteur video en C# [ par sof_fr ]
Bonjour à tous,Je ne vai pas vous bourrer le crane avec 10 000 lignes alors je serai rapide :)J'ai un projet à mener à bien, et je dois programmer une
Lecteur CD [ par Online ]
Bonjour je suis en train de coder une appli e je voudrais savoir comment faire pour lister UNIQUEMENT les lecteurs CD d'une machine dans une comboboxM
lecteur réseau [ par petitou ]
Bon voila mon problème, je récupère le chemin d'un répertoire qui se trouve sur un lecteur réseau donc le chemin que je récupère est du type "W:\monRe
Lancer une vidéo avec le lecteur par défaut [ par tiju50 ]
Bonjour, J'aimerais savoir comment on peut lancer une vidéo style divx en utilisant le lecteur par défaut sous n'importe quel OS. Déjà, est-ce que c'e
Mapper un lecteur Reseau [ par ChrisTof ]
Bonjour J'aimerai savoir comment faire pour mapper un lecteur réseau en C# sans utiliser : System.Diagnostics.Process.Start("net.exe",@"use b: \\s_ser
windows media player [ par godefrw ]
Bonjour,Je viens d'installer le service pack 2 sur mon ordi. Evidemment cela a mis à jour windows media player, et apparemment il ne faut plus coder d
Comment désactiver l'autostart d'un lecteur window media player? [ par godefrw ]
Bonjour, j'ai incorporé un lecteur windows media player dans mon application. J'a le service pack 2 et la mise à jour de windows media player. Je ch
Obtenir informations lecteur en c# !!! [ par paulien ]
Je recherche déséspérément comment obtenir les informations sur les lecteurs logiques presents dans l'ordinateur, dans un programme c# !!! je precise
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|