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


_WinAPI_BackupRead

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] )

Paramètres

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

Valeur de retour

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

Remarques

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

En relation

_WinAPI_BackupReadAbort, _WinAPI_BackupSeek, _WinAPI_BackupWrite

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