document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. //******************************************************************************
  2. //* UNIT:         UNT_RegManager
  3. //* AUTOR:        Fakedo0r
  4. //* FECHA:        15.08.2012
  5. //* CORREO:       Luvel88@gmail.com
  6. //* BLOG:         Sub-Soul.blogspot.com / Sub-Soul.com
  7. //******************************************************************************
  8. Unit UNT_RegManager;
  9. //******************************************************************************
  10. // DECLARACION LIBRERIAS / CLASES
  11. //******************************************************************************
  12. Interface
  13.  
  14. Uses
  15.   Winapi.Windows, System.SysUtils,
  16.   System.Classes;
  17. //******************************************************************************
  18. // DECLARACION DE FUNCIONES / PROCEDIMIENTOS
  19. //******************************************************************************
  20. Function GetRegType(wType: WORD): String;
  21. Function EnumRegKeysAPI(hRoot: HKEY; sPath: String): TStringList;
  22. Function EnumRegValuesAPI(hRoot: HKEY; sPath: String; sDel: String)
  23.   : TStringList;
  24. Function CreateKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
  25. Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
  26. Function GetKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
  27.   wKeyType: DWORD): String;
  28. Function WriteRegKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
  29.   sValue: String; wType: WORD): BOOL;
  30. Function StringToHex(sCadena: String): String;
  31. Function ByteArrayToString(bByteArray: Array Of Byte): String;
  32. //******************************************************************************
  33. Implementation
  34. //******************************************************************************
  35. // <--- CREA LA CLAVE --->
  36. //******************************************************************************
  37. Function CreateKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
  38. Var
  39.   hRes: HKEY;
  40.   iRet: Integer;
  41. Begin
  42.   If IsReg64 Then
  43.     iRet := RegCreateKeyEx(hRoot, PChar(sPath), 0, Nil, REG_OPTION_NON_VOLATILE,
  44.       KEY_WRITE Or KEY_WOW64_64KEY, Nil, hRes, PDWORD(Nil))
  45.   Else
  46.     iRet := RegCreateKeyEx(hRoot, PChar(sPath), 0, Nil, REG_OPTION_NON_VOLATILE,
  47.       KEY_WRITE Or KEY_WOW64_32KEY, Nil, hRes, PDWORD(Nil));
  48.  
  49.   RegCloseKey(hRes);
  50.  
  51.   If iRet = ERROR_SUCCESS Then
  52.     Result := True
  53.   Else
  54.     Result := False;
  55. End;
  56. //******************************************************************************
  57. // <--- ELIMINA LA CLAVE --->
  58. //******************************************************************************
  59. Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
  60. Var
  61.   iRet: Integer;
  62. Begin
  63.   If IsReg64 Then
  64.     iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_64KEY, 0)
  65.   Else
  66.     iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_32KEY, 0);
  67.  
  68.   If iRet = ERROR_SUCCESS Then
  69.     Result := True
  70.   Else
  71.     Result := False;
  72. End;
  73. //******************************************************************************
  74. // <--- LEE EL VALOR DE LA CLAVE --->
  75. //******************************************************************************
  76. Function GetKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
  77.   wKeyType: DWORD): String;
  78. Var
  79.   hOpenKey: HKEY;
  80.   sData: String;
  81.   iData: Integer;
  82.   iSize: Integer;
  83.   bData: Array Of Byte;
  84. Begin
  85.   Result := \'\';
  86.  
  87.   If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_READ, hOpenKey) <>
  88.     ERROR_SUCCESS Then
  89.     Exit;
  90.  
  91.   Case wKeyType Of
  92.     1:
  93.       Begin
  94.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType, Nil, @iSize);
  95.         SetLength(sData, iSize);
  96.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
  97.           @sData[1], @iSize);
  98.  
  99.         sData := String(sData);
  100.       End;
  101.  
  102.     2:
  103.       Begin
  104.         SetLength(sData, iSize);
  105.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
  106.           @sData[1], @iSize);
  107.         sData := String(sData);
  108.       End;
  109.  
  110.     3:
  111.       Begin
  112.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType, Nil, @iSize);
  113.         SetLength(bData, iSize);
  114.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
  115.           @bData[0], @iSize);
  116.  
  117.         sData := LowerCase(StringToHex(ByteArrayToString(bData)));
  118.       End;
  119.  
  120.     4:
  121.       Begin
  122.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
  123.           @iData, @iSize);
  124.  
  125.         sData := IntToStr(iData);
  126.       End;
  127.  
  128.     7:
  129.       Begin
  130.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType, Nil, @iSize);
  131.         SetLength(bData, iSize);
  132.         RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
  133.           @bData[0], @iSize);
  134.  
  135.         sData := String(sData);
  136.       End;
  137.   End;
  138.  
  139.   RegCloseKey(hOpenKey);
  140.  
  141.   Result := sData;
  142. End;
  143. //******************************************************************************
  144. // <--- ESCRIBE LA CLAVE --->
  145. //******************************************************************************
  146. Function WriteRegKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
  147.   sValue: String; wType: WORD): BOOL;
  148. Var
  149.   hOpenKey: HKEY;
  150.   iValue: Integer;
  151. Begin
  152.   Result := False;
  153.  
  154.   If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_WRITE, hOpenKey) <>
  155.     ERROR_SUCCESS Then
  156.     Exit;
  157.  
  158.   Case wType Of
  159.     1:
  160.       Begin
  161.         If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_SZ,
  162.           PChar(sValue + #0), (Length(sValue) + 1) * 2) <> ERROR_SUCCESS Then
  163.           Exit;
  164.       End;
  165.  
  166.     2:
  167.       Begin
  168.         If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_SZ,
  169.           PChar(sValue + #0), (Length(sValue) + 1) * 2) <> ERROR_SUCCESS Then
  170.           Exit;
  171.       End;
  172.  
  173.     4:
  174.       Begin
  175.         iValue := StrToInt(sValue);
  176.  
  177.         If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_DWORD, @iValue, 4) <>
  178.           ERROR_SUCCESS Then
  179.           Exit;
  180.       End;
  181.  
  182.     7:
  183.       Begin
  184.         If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_MULTI_SZ,
  185.           PChar(sValue + #0#0), (Length(sValue) + 2) * 2) <> ERROR_SUCCESS Then
  186.           Exit;
  187.       End;
  188.   End;
  189.  
  190.   RegCloseKey(hOpenKey);
  191.  
  192.   Result := True;
  193. End;
  194. //******************************************************************************
  195. // <--- ENUMERA LAS CLAVES --->
  196. //******************************************************************************
  197. Function EnumRegKeysAPI(hRoot: HKEY; sPath: String): TStringList;
  198. Var
  199.   hOpenKey: HKEY;
  200.   dwIndex: DWORD;
  201.   dwBuffSize: DWORD;
  202.   cBuff: Array [0 .. MAX_PATH] Of Char;
  203. Begin
  204.   Result := TStringList.Create;
  205.   dwIndex := 0;
  206.   dwBuffSize := MAX_PATH;
  207.  
  208.   If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_READ, hOpenKey) <>
  209.     ERROR_SUCCESS Then
  210.     Exit;
  211.  
  212.   While RegEnumKeyEx(hOpenKey, dwIndex, cBuff, dwBuffSize, Nil, Nil, Nil, Nil)
  213.     = ERROR_SUCCESS Do
  214.   Begin
  215.     Result.Add(String(cBuff));
  216.     dwBuffSize := MAX_PATH;
  217.     Inc(dwIndex);
  218.   End;
  219.  
  220.   RegCloseKey(hOpenKey);
  221. End;
  222. //******************************************************************************
  223. // <--- ENUMERA LOS VALORES DE LAS CLAVES --->
  224. //******************************************************************************
  225. Function EnumRegValuesAPI(hRoot: HKEY; sPath: String; sDel: String)
  226.   : TStringList;
  227. Var
  228.   hOpenKey: HKEY;
  229.   dwIndex: DWORD;
  230.   dwBuffSize: DWORD;
  231.   dwType: DWORD;
  232.   dwDataSize: DWORD;
  233.   cBuff: Array [0 .. MAX_PATH] Of Char;
  234. Begin
  235.   Result := TStringList.Create;
  236.   dwBuffSize := MAX_PATH;
  237.   dwIndex := 0;
  238.  
  239.   If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_READ, hOpenKey) <>
  240.     ERROR_SUCCESS Then
  241.     Exit;
  242.  
  243.   While RegEnumValue(hOpenKey, dwIndex, cBuff, dwBuffSize, Nil, @dwType, Nil,
  244.     @dwDataSize) <> ERROR_NO_MORE_ITEMS Do
  245.   Begin
  246.     Result.Add(String(cBuff) + sDel + GetRegType(dwType) + sDel +
  247.       GetKeyValueAPI(hRoot, sPath, String(cBuff), dwType));
  248.  
  249.     dwBuffSize := MAX_PATH;
  250.     Inc(dwIndex);
  251.   End;
  252.  
  253.   RegCloseKey(hOpenKey);
  254. End;
  255. //******************************************************************************
  256. // <--- OBTIENE EL TIPO DEL VALOR --->
  257. //******************************************************************************
  258. Function GetRegType(wType: WORD): String;
  259. Var
  260.   sTemp: String;
  261. Begin
  262.   Case wType Of
  263.     0:
  264.       sTemp := \'REG_NONE\';
  265.     1:
  266.       sTemp := \'REG_SZ\';
  267.     2:
  268.       sTemp := \'REG_EXPAND_SZ\';
  269.     3:
  270.       sTemp := \'REG_BINARY\';
  271.     4:
  272.       sTemp := \'REG_DWORD\';
  273.     5:
  274.       sTemp := \'REG_DWORD_BIG_ENDIAN\';
  275.     6:
  276.       sTemp := \'REG_LINK\';
  277.     7:
  278.       sTemp := \'REG_MULTI_SZ\';
  279.     8:
  280.       sTemp := \'REG_RESOURCE_LIST\';
  281.     9:
  282.       sTemp := \'REG_FULL_RESOURCE_DESCRIPTOR\';
  283.     10:
  284.       sTemp := \'REG_RESOURCE_REQUIREMENTS_LIST\';
  285.     11:
  286.       sTemp := \'REG_QWORD\';
  287.   Else
  288.     sTemp := \'UNKNOWN REG TYPE\';
  289.   End;
  290.  
  291.   Result := sTemp;
  292. End;
  293. //******************************************************************************
  294. // <--- CONVERSION DE STRING A HEX --->
  295. //******************************************************************************
  296. Function StringToHex(sCadena: String): String;
  297. Var
  298.   I: Integer;
  299. Begin
  300.   Result := \'\';
  301.  
  302.   For I := 1 To Length(sCadena) Do
  303.     Result := Result + IntToHex(Ord(sCadena[I]), 2) + \' \';
  304. End;
  305. //******************************************************************************
  306. // <--- CONVERSION DE BYTE ARRAY A STRING --->
  307. //******************************************************************************
  308. Function ByteArrayToString(bByteArray: Array Of Byte): String;
  309. Var
  310.   I: Integer;
  311. Begin
  312.   SetLength(Result, Length(bByteArray));
  313.  
  314.   For I := 0 To High(bByteArray) Do
  315.     Result[I + 1] := Char(bByteArray[I]);
  316. End;
  317.  
  318. End.
');