UDF > WinAPIEx > Registry >


_WinAPI_RegSaveKey

Enregistre la clé spécifiée et toutes ses sous-clés et valeurs dans un nouveau fichier, au format standard

#include <WinAPIReg.au3>
_WinAPI_RegSaveKey ( $hKey, $sFilePath [, $bReplace = False [, $tSecurity = 0]] )

Paramètres

$hKey Handle de la clé de registre ouverte.
$sFilePath Le nom du fichier dans lequel la clé et les sous-clés spécifiées doivent être enregistrées.
$bReplace [optionnel] Spécifie s'il faut remplacer le fichier s'il existe déjà, les valeurs possibles sont:
    True - La fonction tente de remplacer le fichier existant.
    False - La fonction échoue si le fichier existe déjà (par défaut).
$tSecurity [optionnel] La structure $tagSECURITY_ATTRIBUTES qui spécifie un descripteur de sécurité pour le nouveau fichier. Si ce paramètre est 0 (par défaut), le fichier obtient un descripteur de sécurité par défaut.

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0 et définit @error <> 0, @extended peut contenir le code d'erreur du système.

Remarques

Le processus appelant doit avoir le privilège $SE_BACKUP_NAME, sinon, la fonction échoue, et _WinAPI_GetLastError() retourne ERROR_PRIVILEGE_NOT_HELD (1314).

Vous pouvez utiliser le fichier créé par cette fonction dans les appels ultérieurs à la fonction _WinAPI_RegRestoreKey().

En relation

_WinAPI_RegRestoreKey

Voir aussi

Consultez RegSaveKey dans la librairie MSDN.

Exemple

#include <APIRegConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIHObj.au3>
#include <WinAPIProc.au3>
#include <WinAPIReg.au3>

Local $aPrivileges[2] = [$SE_BACKUP_NAME, $SE_RESTORE_NAME]

; Active les privilèges "SeBackupPrivilege" et "SeRestorePrivilege" pour sauver et restaurer la ruche du registre
Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
Local $aAdjust
_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 privilèges nécessaires.')
    Exit
EndIf

; Enregistre "HKEY_CURRENT_USER\Software\AutoIt v3" dans reg.dat
Local $hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\AutoIt v3', $KEY_READ)
If _WinAPI_RegSaveKey($hKey, @TempDir & '\reg.dat', 1) Then
    MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL), '', '"HKEY_CURRENT_USER\Software\AutoIt v3" a été sauvegardé dans reg.dat.')
Else
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), '', _WinAPI_GetErrorMessage(@extended))
EndIf
_WinAPI_RegCloseKey($hKey)

; Restaure "HKEY_CURRENT_USER\Software\AutoIt v3" en "HKEY_CURRENT_USER\Software\AutoIt v3 (Duplicate)"
$hKey = _WinAPI_RegCreateKey($HKEY_CURRENT_USER, 'Software\AutoIt v3 (Duplicate)', $KEY_WRITE)
If _WinAPI_RegRestoreKey($hKey, @TempDir & '\reg.dat') Then
    MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL), '', '"HKEY_CURRENT_USER\Software\AutoIt v3" a été restauré en "HKEY_CURRENT_USER\Software\AutoIt v3 (Duplicate)".')
Else
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), '', _WinAPI_GetErrorMessage(@extended))
EndIf
_WinAPI_RegCloseKey($hKey)

; Restaure les privilèges "SeBackupPrivilege" et "SeRestorePrivilege" par défaut
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)

FileDelete(@TempDir & '\reg.dat')