Advertisement
AZJIO

_RegExportToData

Aug 4th, 2012
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 4.38 KB | None | 0 0
  1. #Include <_RegFunc.au3>
  2.  
  3. $timer1 = TimerInit()
  4. $sResult1=''
  5. _RegExportToData($sResult1, 'HKEY_LOCAL_MACHINE\HARDWARE')
  6. $timer1 = Round(TimerDiff($timer1), 2)
  7.  
  8.  
  9. If MsgBox(4, "", '_RegExportToData : ' & $timer1)=6 Then
  10.     $file = FileOpen(@ScriptDir&'\я _RegExportToData.reg',2)
  11.     FileWrite($file, $sResult1)
  12.     FileClose($file)
  13. EndIf
  14.  
  15. Func _RegExportToData(ByRef $sData, $s_key, $s_val = Default, $fFirstKey = True)
  16.     If Not _RegKeyExists($s_key) Then Return SetError(1, 0, 0)
  17.     Local $data, $err = 0
  18.     If $fFirstKey Then
  19.         If $s_val <> Default Then
  20.             ; exporting only one value
  21.             If Not _RegValueExists($s_key, $s_val) Then
  22.                 Return SetError(2, 0, 0)
  23.             EndIf
  24.             ; write base key
  25.             $sData &= @CRLF & "[" & _RegFormatHeader($s_key) & "]" &@CRLF
  26.             $data = _RegRead($s_key, $s_val, True)
  27.             If @error Then
  28.                 Return SetError(4, 0, 0) ; unsupported value type
  29.             EndIf
  30.             Switch @extended
  31.                 Case $REG_LINK
  32.                     ; unsupported value type
  33.                     Return SetError(4, 0, 0)
  34.                 Case Else
  35.                     ; format value
  36.                     If $s_val = "" Then $s_val = "@"
  37.                     ; write data
  38.                     _RegWriteData($sData, $s_val, $data, @extended)
  39.                     Return SetError(0, 0, 1)
  40.             EndSwitch
  41.         EndIf
  42.     EndIf
  43.     ; write base key
  44.     $sData &= @CRLF & "[" & _RegFormatHeader($s_key) & "]" &@CRLF
  45.     ; value loop
  46.     Local $i = -1, $val
  47.     While 1
  48.         $i += 1
  49.         $val = _RegEnumValue($s_key, $i)
  50.         If @error Then ExitLoop ; no more values
  51.         $data = _RegRead($s_key, $val, True)
  52.         If @error Then
  53.             ; unsupported value type
  54.             $err = 4
  55.             ContinueLoop
  56.         EndIf
  57.         Switch @extended
  58.             Case $REG_LINK
  59.                 ; unsupported value type
  60.                 $err = 4
  61.                 ContinueLoop
  62.             Case Else
  63.                 ; format value
  64.                 If $val = "" Then $val = "@"
  65.                 ; write data
  66.                 _RegWriteData($sData, $val, $data, @extended)
  67.         EndSwitch
  68.     WEnd
  69.     ; key loop
  70.     Local $key
  71.     $i = -1
  72.     While 1
  73.         $i += 1
  74.         $key = _RegEnumKey($s_key, $i)
  75.         If @error Then ExitLoop ; no more keys
  76.         ; recurse
  77.         _RegExportToData($sData, $s_key & "\" & $key, Default, False)
  78.         If @error Then $err = 4 ; catch recursion errors
  79.     WEnd
  80.     Return SetError($err, 0, Number(Not $err))
  81. EndFunc   ;==>_RegExportToData
  82.  
  83.  
  84.  
  85. Func _RegWriteData(ByRef $sData, $val, $data, $type)
  86.     If $val <> "@" Then $val = '"' & _RegEscape($val) & '"'
  87.     ;
  88.     Switch $type
  89.         Case $REG_NONE
  90.             ; returned as binary
  91.             If Not $data Then
  92.                 $sData &= $val & '=hex(0):' &@CRLF
  93.             Else
  94.                 $sData &=  _RegFormatData($val & '=hex(0):', StringLower($data)) &@CRLF
  95.             EndIf
  96.         Case $REG_SZ
  97.             ; returned as string, not NULL terminated
  98.             $sData &=  $val & '="' & _RegEscape($data) & '"' &@CRLF
  99.         Case $REG_EXPAND_SZ
  100.             ; returned as string, not NULL terminated
  101.             If Not $data Then
  102.                 $sData &=  $val & '=hex(2):00,00' &@CRLF
  103.             Else
  104.                 $sData &=  _RegFormatData($val & '=hex(2):', StringLower(StringToBinary($data, 2)) & "0000") &@CRLF
  105.             EndIf
  106.         Case $REG_BINARY
  107.             ; returned as binary
  108.             If Not $data Then
  109.                 $sData &=  $val & '=hex:' &@CRLF
  110.             Else
  111.                 $sData &=  _RegFormatData($val & '=hex:', StringLower($data)) &@CRLF
  112.             EndIf
  113.         Case $REG_DWORD
  114.             ; returned as dword
  115.             $sData &=  $val & "=dword:" & StringLower(Hex($data, 8)) &@CRLF
  116.         Case $REG_DWORD_BIG_ENDIAN
  117.             ; returned as binary
  118.             $sData &=  _RegFormatData($val & '=hex(5):', StringLower($data)) &@CRLF
  119.         Case $REG_MULTI_SZ
  120.             ; returned as binary, double NULL terminated
  121.             If Not $data Then
  122.                 $sData &=  $val & '=hex(7):00,00' &@CRLF
  123.             Else
  124.                 $sData &=  _RegFormatData($val & '=hex(7):', StringLower($data)) &@CRLF
  125.             EndIf
  126.         Case $REG_RESOURCE_LIST
  127.             ; returned as binary
  128.             If Not $data Then
  129.                 $sData &=  $val & '=hex(8):' &@CRLF
  130.             Else
  131.                 $sData &=  _RegFormatData($val & '=hex(8):', StringLower($data)) &@CRLF
  132.             EndIf
  133.         Case $REG_FULL_RESOURCE_DESCRIPTOR
  134.             ; returned as binary
  135.             If Not $data Then
  136.                 $sData &=  $val & '=hex(9):' &@CRLF
  137.             Else
  138.                 $sData &=  _RegFormatData($val & '=hex(9):', StringLower($data)) &@CRLF
  139.             EndIf
  140.         Case $REG_RESOURCE_REQUIREMENTS_LIST
  141.             ; returned as binary
  142.             If Not $data Then
  143.                 $sData &=  $val & '=hex(a):' &@CRLF
  144.             Else
  145.                 $sData &=  _RegFormatData($val & '=hex(a):', StringLower($data)) &@CRLF
  146.             EndIf
  147.         Case $REG_QWORD
  148.             ; returned as qword
  149.             If Not $data Then
  150.                 $sData &=  $val & '=hex(b):00,00,00,00,00,00,00,00' &@CRLF
  151.             Else
  152.                 $sData &=  _RegFormatData($val & '=hex(b):', StringLower(Binary($data))) &@CRLF
  153.             EndIf
  154.     EndSwitch
  155. EndFunc   ;==>_RegWriteFile
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement