begin process at 2010 02 10 07:11:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > 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

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous :virtualdrive, lecteur, virtuel Niveau :Initié Date de création :30/06/2005 Date de mise à jour :30/06/2005 11:19:28 Vu :10 442

Auteur : aogie

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 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

Source avec Zip Source .NET (Dotnet) DEVICENOTIFY
Source avec Zip Source avec une capture Source .NET (Dotnet) DIFFUSED BITMAP - CRÉATION D'UNE IMAGE DIFFUSE.
Source avec Zip Source .NET (Dotnet) UPDATEFORMS - RAFRAÎCHISSEMENT DE TOUTES LES FENÊTRES D'UNE ...
Source avec Zip Source avec une capture Source .NET (Dotnet) GRAPHCONTAINER - CONTAINER POUR MODÉLISATION DE SCHÉMA GRAPH...

 Sources de la même categorie

Source avec Zip PILOTER WORD VIA MICROSOFT.OFFICE.INTEROP.WORD par whismeril
Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) CHECK IDENTICAL FILES par eldim
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX NUMÉROTÉ (NUMÉROS DE LIGNES) par jray
Source avec Zip Source avec une capture SURVEILLER FICHIERS CRÉÉS AVEC FILESYSTEMWATCHER AMÉLIORÉ par TheOnlyMaX

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) QUICKLY MEDIA PLAYER par T_Mehdi
Source avec Zip Source avec une capture Source .NET (Dotnet) LECTEUR/ENREGISTREUR DE RADIOS INTERNET, DESSIN DYNAMIQUE DA... par LUDINSKI
Source avec Zip Source avec une capture Source .NET (Dotnet) CLASSE AUDIO par MaxSoldier
Source avec Zip Source avec une capture Source .NET (Dotnet) LECTEUR MULIMÉDIA : PINKY MEDIA PLAYER V1.0 par lachkar
Source avec Zip Source .NET (Dotnet) USB DETECTOR par sebseb42

Commentaires et avis

Commentaire de sebmafate le 30/06/2005 14:01:28 administrateur CS

sympa.

Commentaire de Patrice99 le 01/07/2005 08:46:46

C'est un RAMDrive ?

Commentaire de aogie le 01/07/2005 08:56:43

Non, la fonction GetDriveType retourne DRIVE_FIXED.

Commentaire de wizad le 01/07/2005 11:58:31

Juste une question : concretemtn ça sert à quoi?

Commentaire de aogie le 01/07/2005 14:12:20

Il faut voir ça comme un raccourci vers un répertoire donné. On fait une ou plusieurs opérations sur une racine.

C'est comme quand on crée une connexion vers un lecteur réseau. Après tout, on pourrait très bien à chaque fois rechercher l'ordinateur, ouvrir le partage puis faire les opérations. Ou alors, si on y accède souvent, on crée cette connexion pour avoir un lecteur accessible tout de suite.

Chacun fait son choix.

Mais au cas où, cette classe sans prétention, peut éventuellement rendre service pour qui souhaite créer un lecteur volatile pour une opération donnée.

Commentaire de wizad le 01/07/2005 19:50:24

Ah okay merci de cette eclaircissement... je ne voyait vraiment pas les application de cette classe maintenant je saisie plus.

Commentaire de yfbf le 01/07/2005 22:01:19

Comment procéder pour accéder à un répertoire d'un PC où il faut mettre un username et password avec votre composant qui est fort interessant

Commentaire de aogie le 01/07/2005 22:07:36

Il s'agit à ce moment là d'un lecteur partagé, ce qui n'est pas le cas de cet exemple de lecteur virtuel...

Commentaire de sebseb42 le 19/07/2005 12:43:06

ca ne fonctionne que pour binder un dossier vers un disque virtuel ? ou est-ce qu'on peut creer un disque virtuel et avoir full-access pour en faire autre chose ? par exemple masquer un montage FTP derriere :) je cherche a faire ce genre de choses depuis pas mal de temps mais je n'ai encore rien trouver... donc au passage si quelqu'un a des infos, je suis preneur, merci

Commentaire de petermadio le 17/04/2006 20:18:22

Salut !
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 !

Commentaire de Toxic64 le 19/06/2009 21:45:14

Salut,

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....

++

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,295 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales