XL 2016 VBA - Lire et écrire dans System Volume Information

Dudu2

XLDnaute Barbatruc
Bonjour,
Utilisant Macrium pour mes Backups, je suis pénalisé par le fait que les Restores perdent les Points de Restoration.
Macrium utilise le service Windows VSS qui ne les garde pas.

Les fichiers des Points de Restoration sont dans le répertoire System Volume Information des disques très difficiles d'accès en écriture par GUI.
CCleaner sait le faire puisqu'il sait les lister et les supprimer (Outils / Restauration du système).
L'idéal serait de faire une petite application Windows qui ZIP et déZIP ces fichiers pour les sauver / restaurer. Mais je n'ai jamais développé sous Windows.

Si, via l'API il est possible d'accéder ce répertoire en écriture, un code VBA devrait pouvoir le faire.
Mais comment y écrire ?
 

dysorthographie

XLDnaute Accro
Bonsoir,
Pour écrire un code VBA qui accède au répertoire System Volume Information en écriture, vous pouvez utiliser les API Windows pour accéder au système de fichiers. Voici un exemple de code VBA qui vous permettrait de lister les fichiers dans ce répertoire :

Code:
Option Explicit

Declare PtrSafe Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As LongPtr
Declare PtrSafe Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As LongPtr, lpFindFileData As WIN32_FIND_DATA) As Long
Declare PtrSafe Function FindClose Lib "kernel32" (ByVal hFindFile As LongPtr) As Long

Public Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * 260
    cAlternate As String * 14
End Type

Sub ListFilesInSystemVolumeInformation()
    Dim hFindFile As LongPtr
    Dim findData As WIN32_FIND_DATA
    Dim fileName As String
    
    ' Spécifiez le chemin du répertoire System Volume Information
    fileName = "C:\System Volume Information\*"
    
    ' Trouver le premier fichier dans le répertoire
    hFindFile = FindFirstFile(fileName, findData)
    
    ' Vérifier si un fichier a été trouvé
    If hFindFile <> 0 Then
        Do
            ' Afficher le nom du fichier
            Debug.Print TrimNull(findData.cFileName)
            
            ' Trouver le prochain fichier
        Loop While FindNextFile(hFindFile, findData) = 0
        
        ' Fermer la recherche
        FindClose hFindFile
    Else
        Debug.Print "Aucun fichier trouvé."
    End If
End Sub

Function TrimNull(ByVal str As String) As String
    Dim pos As Integer
    pos = InStr(str, vbNullChar)
    If pos > 0 Then
        TrimNull = Left(str, pos - 1)
    Else
        TrimNull = str
    End If
End Function

Ce code utilise les API Windows pour rechercher les fichiers dans le répertoire System Volume Information. Vous pouvez l'adapter pour inclure les fonctionnalités de compression et de décompression que vous souhaitez mettre en œuvre. Assurez-vous de comprendre les implications de modifier les fichiers dans ce répertoire, car cela peut affecter le fonctionnement de votre système.
 

Dudu2

XLDnaute Barbatruc
Merci @dysorthographie pour ce code. Je vais regarder ça.
Lister ces fichiers c'est un premier pas important.
Je vais essayer de faire un code pour les copier et plus délicat, placer des fichiers dans System Volume Information.

Je suis parfaitement conscient du danger à utiliser ce répertoire, mais ça se limitera aux fichiers des Restore Points. J'en ai déjà fait l'expérience en changeant le propriétaire pour que je puisse y accéder en écriture, mais d'une part cela n'a pas fonctionné totalement et d'autre part cela a perturbé les créations / restaurations de Restore Point avec restauration du disque système à la clé pour m'en sortir.
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Ce n'est, à mon avis, pas la meilleure idée que d'aller tripatouiller dans SVI car il faudrait certainement aussi mettre à jour la BDR et peut-être d'autres fichiers système pour que l'OS reste aussi stable que possible.
 

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin