Effectue un backup d'un fichier ou d'un répertoire, y compris les informations de sécurité
#include <WinAPIFiles.au3>
_WinAPI_BackupRead ( $hFile, $pBuffer, $iLength, ByRef $iBytes, ByRef $pContext [, $bSecurity = False] )
$hFile |
Handle du fichier ou du répertoire à sauvegarder. Pour obtenir le handle, appelez la fonction _WinAPI_CreateFileEx(). Les SACLs ne sont pas lus à moins que le handle du fichier ait été créé avec le droit d'accès $ACCESS_SYSTEM_SECURITY. |
$pBuffer | Un pointeur vers un tampon qui reçoit les données. |
$iLength | La taille de la mémoire tampon, en octets. La taille de la mémoire tampon doit être supérieure à la taille de la structure $tagWIN32_STREAM_ID. (Voir aussi MSDN pour plus d'informations) |
$iBytes | Le nombre d'octets lus. |
$pContext |
Un pointeur sur une structure de données interne utilisée par cette fonction pour maintenir des informations de contexte pendant l'opération de sauvegarde. Vous devez définir cette variable à 0 avant le premier appel à _WinAPI_BackupRead() pour le fichier ou le répertoire spécifié. La fonction alloue de la mémoire à la structure de données, et définit la variable qui pointe sur cette structure. Vous ne devez pas modifier cette variable ou la variable qui pointe sur elle entre les appels à _WinAPI_BackupRead(). |
$bSecurity | [optionnel] Indique si la fonction doit sauvegarder les données de la liste de contrôle d'accès (ACL), les valeurs valides sont: True - Les données ACL seront sauvegardées. False - Les données ACL seront omises de la sauvegarde (par défaut). |
Succès: | Retourne True. |
Échec: | Retourne False, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur. |
La fonction _WinAPI_BackupRead() n'est pas destiné à être utilisé dans la sauvegarde de fichiers cryptés sous le Encrypted File System (EFS).
Si une erreur se produit lors de la lecture de données, le processus appelant peut sauter les mauvaises données en appelant la fonction _WinAPI_BackupSeek().
Lorsque vous avez fini d'utiliser _WinAPI_BackupRead(), vous devez appeler la fonction _WinAPI_BackupReadAbort() avec le paramètre approprié pour libérer la mémoire occupée par la structure de données interne.
Le fichier ou le répertoire devra être restauré à l'aide de la fonction _WinAPI_BackupWrite().
_WinAPI_BackupReadAbort, _WinAPI_BackupSeek, _WinAPI_BackupWrite
Consultez BackupRead dans la librairie MSDN.
#include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> #include <WinAPIHObj.au3> #include <WinAPIMem.au3> #include <WinAPIProc.au3> #include <WinAPIShPath.au3> Local Const $sFile = @ScriptFullPath ; Active les droits "SeBackupPrivilege" et "SeRestorePrivilege" pour effectuer la sauvegarde et la restauration Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY)) Local $aAdjust, $aPrivileges[2] = [$SE_BACKUP_NAME, $SE_RESTORE_NAME] _WinAPI_AdjustTokenPrivileges($hToken, $aPrivileges, $SE_PRIVILEGE_ENABLED, $aAdjust) If @error Or @extended Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Vous n''avez pas les droits requis.') Exit EndIf ; Crée un tampon de mémoire dans lequel stocker les données de sauvegarde Local $iBytes = 4096 + FileGetSize($sFile) Local $pBuffer = _WinAPI_CreateBuffer($iBytes) ; Sauvegarde un fichier, y compris les informations de sécurité Local $pContext = 0 Local $hFile = _WinAPI_CreateFileEx($sFile, $OPEN_EXISTING, $GENERIC_READ) If Not _WinAPI_BackupRead($hFile, $pBuffer, $iBytes, $iBytes, $pContext, 1) Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Impossible de faire un backup du fichier.') Exit EndIf _WinAPI_BackupReadAbort($pContext) _WinAPI_CloseHandle($hFile) ; Restaure un fichier (.bak) et les données de l'ACL $pContext = 0 $hFile = _WinAPI_CreateFileEx(_WinAPI_PathRenameExtension($sFile, '.bak'), $CREATE_ALWAYS, BitOR($GENERIC_WRITE, $WRITE_DAC, $WRITE_OWNER)) If Not _WinAPI_BackupWrite($hFile, $pBuffer, $iBytes, $iBytes, $pContext, 1) Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Impossible de restaurer le fichier.') Exit EndIf _WinAPI_BackupWriteAbort($pContext) _WinAPI_CloseHandle($hFile) ; Libére la mémoire utilisée _WinAPI_FreeMemory($pBuffer) ; Restaure les droits par défaut "SeBackupPrivilege" et "SeRestorePrivilege _WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust) _WinAPI_CloseHandle($hToken)