UDF > WinAPIEx > Files & Devices > DataAccess & Storage >


_WinAPI_BackupWrite

Restaure un fichier ou un répertoire qui a été sauvegardé en utilisant _WinAPI_BackupRead()

#include <WinAPIFiles.au3>
_WinAPI_BackupWrite ( $hFile, $pBuffer, $iLength, ByRef $iBytes, ByRef $pContext [, $bSecurity = False] )

Paramètres

$hFile Handle du fichier ou du répertoire à restaurer. Pour obtenir le handle, appelez la fonction _WinAPI_CreateFileEx().
Les SACL ne sont pas restaurés à moins que le handle du fichier a été créé avec le droit d'accès $ACCESS_SYSTEM_SECURITY.
Pour être sûr que les ACE d'intégrité soient restaurés correctement, le handle du fichier doit également avoir été créé avec le droit d'accès $WRITE_OWNER.
$pBuffer Le pointeur sur la mémoire tampon à partir duquel la fonction écrira 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 MSDN pour plus d'informations)
$iBytes Le nombre d'octets écrit.
$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 restauration.
Vous devez définir cette variable à 0 avant le premier appel à _WinAPI_BackupWrite() pour le fichier ou le répertoire spécifié.
La fonction alloue de la mémoire à la structure de données, puis définit la variable qui pointe sur cette structure.
Vous ne devez pas modifier cette variable ou la variable qui pointe sur cette structure entre les appels à _WinAPI_BackupWrite().
$bSecurity [optionnel] Indique si la fonction restaurera la Liste des Contrôles d'Accès (ACL) des données, les valeurs valides sont:
    True - Les données ACL seront restaurées.
        En outre, vous devez spécifier les accès $WRITE_OWNER et $WRITE_DAC accès lors de l'ouverture du handle du fichier ou du répertoire.
        Si la handle ne possède pas ce droit d'accès, le système d'exploitation refuse l'accès aux données de l'ACL, et la restauration des données de l'ACL ne se produira pas.
    False - Les données de l'ACL seront omis (par défaut).

Valeur de retour

Succès: Retourne True.
Échec: Retourne False, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur.

Remarques

_WinAPI_BackupWrite() n'est pas destinée à la restauration de fichiers cryptés sous le système Encrypted File System (EFS).

Lorsque vous avez fini d'utiliser _WinAPI_BackupWrite(), vous devez appeler la fonction _WinAPI_BackupWriteAbort() avec le paramètre approprié pour libérer la mémoire occupée par la structure de données interne.

En relation

_WinAPI_BackupWriteAbort

Voir aussi

Consultez BackupRead dans la librairie MSDN.

Exemple

#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'vez 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)