Disque dur virtuel [Résolu]

Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention - 30 sept. 2013 à 02:43 - Dernière réponse : Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention
- 3 oct. 2013 à 14:38
Bonjour tout le monde!
Voilà, j'ai un projet d'OS virtuel avancé (avec système d'administartion, comptes multiples...), et je voudrais que celui ci soit sécurisé au maximum, et pour cela, je voudrais pouvoir créer un disque dur virtuel pour stocker les fichiers des utilisateurs, qui est monter seulement quand je lance l'OS virtuel, et qui est démonté à son arrêt. J'ai fais des recherches avant de poster sur le forum mais je ne trouve rien de vraiment de clair ou de fonctionnel. Il y a t'il une autre solution, comme par exemple un dossier chiffré? Ou si il n'y a pas d'alternative plus simple comment faire ce disque dur virtuel? Es que je suis sur une piste complétement fausse et que ce qui me conviendrais et complétement autre chose? Quelqu'un pourrait il m'éclairer s'il vous plait? Merci beaucoup!

PS: Je travaille sous Visual Basic 2010 Express.

-{ Visual Basic.NET Developper }-
Afficher la suite 

Votre réponse

7 réponses

Utilisateur anonyme - 30 sept. 2013 à 17:59
+2
Utile
Salut,

J'ai trouvé un code dans mes archives qui permet de monter et démonter un disque virtuel selon un dossier existant donné.

Voici la classe :
Imports System
Imports System.IO
Imports System.Runtime.InteropServices

Public Class clsVirtualDrive

    Private Const DDD_RAW_TARGET_PATH As Integer = &H1
    Private Const DDD_REMOVE_DEFINITION As Integer = &H2
    Private Const DDD_EXACT_MATCH_ON_REMOVE As Integer = &H4

    <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function DefineDosDevice(ByVal dwFlags As Integer, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Boolean
    End Function

    Private Const DRIVE_UNKNOWN As Integer = 0
    Private Const DRIVE_NO_ROOT_DIR As Integer = 1
    Private Const DRIVE_FIXED As Integer = 3

    <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
    Private Shared Function GetDriveType(ByVal lpRootPathName As String) As Integer
    End Function


    Public Function Create(ByVal driveChar As Char, ByVal path As String) As Boolean
        Return DDDOperation(driveChar, path, True)
    End Function

    Public Function Delete(ByVal driveChar As Char, ByVal path As String) As Boolean
        Return DDDOperation(driveChar, path, False)
    End Function

    Private Function DDDOperation(ByVal driveChar As Char, ByVal path As String, ByVal create As Boolean) As Boolean
        'répertoire valide ?
        If Not Directory.Exists(path) Then
            Return False
        End If

        Dim drive As String = String.Format("{0}:", driveChar.ToString().ToUpper())
        'le volume existe ?
        Dim type As Integer = GetDriveType(String.Format("{0}{1}", drive, IO.Path.DirectorySeparatorChar))
        'Nota : un lecteur virtuel est de type DRIVE_FIXED une fois créé.
        If (create AndAlso type <> DRIVE_UNKNOWN AndAlso type <> DRIVE_NO_ROOT_DIR) OrElse (Not create AndAlso type <> DRIVE_FIXED) Then
            Return False
        End If

        Dim flags As Integer = DDD_RAW_TARGET_PATH
        If Not create Then
            flags = flags Or (DDD_REMOVE_DEFINITION Or DDD_EXACT_MATCH_ON_REMOVE)
        End If

        Return DefineDosDevice(flags, drive, String.Format("{0}??{0}{1}", IO.Path.DirectorySeparatorChar, path))
    End Function

End Class


Et voici un exemple d'utilisation :

Option Strict On
Public Class Form1
    Dim vd As clsVirtualDrive

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        vd = New clsVirtualDrive
        If vd.Create("Y"c, Application.StartupPath) = True Then
            MessageBox.Show("lecteur monté")
            'décryptage des fichiers du dossier à faire ici
            '...
            'surveillance du dossier pour ajout, modif, suppression etc...
            Dim fs As New IO.FileSystemWatcher(Application.StartupPath)
            AddHandler fs.Created, AddressOf fichiercree
            AddHandler fs.Changed, AddressOf fichiermodif
            'etc...
            fs.EnableRaisingEvents = True
        End If

    End Sub

    Private Sub fichiercree(ByVal sender As Object, ByVal e As IO.FileSystemEventArgs)
        'cryptage du fichier créé ou ajouté ici
    End Sub

    Private Sub fichiermodif(ByVal sender As Object, ByVal e As IO.FileSystemEventArgs)
        'cryptage du fichier modifié ici
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        vd.Delete("Y"c, Application.StartupPath)
        MessageBox.Show("lecteur démonté")
        'cryptage des fichiers du dossier à faire ici
        '...
    End Sub
End Class


J'ajoute que le framework comprend un espace de noms très utile pour le cryptage des données (voir System.Security.Cryptography).
Cette réponse vous a-t-elle aidé ?  
Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention - 3 oct. 2013 à 14:38
Le code marche super bien! Je n'ai plus qu'a trouver un moyen pour sécuriser toutes les données stocké et c'est bon! Merci beaucoup! :)
Commenter la réponse de Utilisateur anonyme
NHenry 14179 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 30 sept. 2013 à 12:33
0
Utile
Bonjour,

Peut être que TrueCrypt peut te donner des pistes de recherche.
Commenter la réponse de NHenry
Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention - 30 sept. 2013 à 15:03
0
Utile
Oui j'y avait pensé juste après avoir posté le message, mais je n'ai pas trouver d'"api" pour TrueCrypt (.dll...). Je connais bien TrueCrypt et il est clair que de chiffrer un conteneur avec serais parfais, mais je ne vois pas comment le faire avec en VB.net. Au tu une idée? Merci en tout cas pour ta réponse!
Commenter la réponse de Lyc@n
Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention - 30 sept. 2013 à 15:28
0
Utile
J'ai trouvé ça pour TrueCrypt: http://www.truecrypt.org/docs/command-line-usage Y'a pas mal de ligne de commande mais aucne ne permet de créer un conteneur, quelqu'un saurait comment faire? Merci!
Commenter la réponse de Lyc@n
Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention - 30 sept. 2013 à 18:30
0
Utile
Merci pour ce code! Je vais y jeter un coup d'oeil! J'admet ne pas tout comprendre vu que c'est la première fois que je touche à ça. Mais avec de la patience je devrais y arriver! Merci! :)
Commenter la réponse de Lyc@n
Lyc@n 219 Messages postés dimanche 24 octobre 2010Date d'inscription 22 février 2014 Dernière intervention - 2 oct. 2013 à 17:34
0
Utile
Je n'ai pas réussi à trouver beaucoup de doc sur DefineDosDevice, pourrait tu me renseigner s'il te plait? Merci!
Commenter la réponse de Lyc@n

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.