Termine l'utilisation de _WinAPI_BackupRead() sur le handle
#include <WinAPIFiles.au3>
_WinAPI_BackupReadAbort ( ByRef $pContext )
$pContext | Un pointeur sur une structure de données interne utilisée par la fonction _WinAPI_BackupRead() pour conserver les informations de contexte au cours de l'opération de sauvegarde. |
Succès: | Retourne True. |
Échec: | Retourne False, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur. |
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'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)