Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //******************************************************************************
- //* UNIT: UNT_RegManager
- //* AUTOR: Fakedo0r
- //* FECHA: 15.08.2012
- //* CORREO: Luvel88@gmail.com
- //* BLOG: Sub-Soul.blogspot.com / Sub-Soul.com
- //******************************************************************************
- Unit UNT_RegManager;
- //******************************************************************************
- // DECLARACION LIBRERIAS / CLASES
- //******************************************************************************
- Interface
- Uses
- Winapi.Windows, System.SysUtils,
- System.Classes;
- //******************************************************************************
- // DECLARACION DE FUNCIONES / PROCEDIMIENTOS
- //******************************************************************************
- Function GetRegType(wType: WORD): String;
- Function EnumRegKeysAPI(hRoot: HKEY; sPath: String): TStringList;
- Function EnumRegValuesAPI(hRoot: HKEY; sPath: String; sDel: String)
- : TStringList;
- Function CreateKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
- Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
- Function GetKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
- wKeyType: DWORD): String;
- Function WriteRegKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
- sValue: String; wType: WORD): BOOL;
- Function StringToHex(sCadena: String): String;
- Function ByteArrayToString(bByteArray: Array Of Byte): String;
- //******************************************************************************
- Implementation
- //******************************************************************************
- // <--- CREA LA CLAVE --->
- //******************************************************************************
- Function CreateKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
- Var
- hRes: HKEY;
- iRet: Integer;
- Begin
- If IsReg64 Then
- iRet := RegCreateKeyEx(hRoot, PChar(sPath), 0, Nil, REG_OPTION_NON_VOLATILE,
- KEY_WRITE Or KEY_WOW64_64KEY, Nil, hRes, PDWORD(Nil))
- Else
- iRet := RegCreateKeyEx(hRoot, PChar(sPath), 0, Nil, REG_OPTION_NON_VOLATILE,
- KEY_WRITE Or KEY_WOW64_32KEY, Nil, hRes, PDWORD(Nil));
- RegCloseKey(hRes);
- If iRet = ERROR_SUCCESS Then
- Result := True
- Else
- Result := False;
- End;
- //******************************************************************************
- // <--- ELIMINA LA CLAVE --->
- //******************************************************************************
- Function DeleteKeyAPI(hRoot: HKEY; sPath: String; IsReg64: BOOL): BOOL;
- Var
- iRet: Integer;
- Begin
- If IsReg64 Then
- iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_64KEY, 0)
- Else
- iRet := RegDeleteKeyEx(hRoot, PChar(sPath), KEY_WOW64_32KEY, 0);
- If iRet = ERROR_SUCCESS Then
- Result := True
- Else
- Result := False;
- End;
- //******************************************************************************
- // <--- LEE EL VALOR DE LA CLAVE --->
- //******************************************************************************
- Function GetKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
- wKeyType: DWORD): String;
- Var
- hOpenKey: HKEY;
- sData: String;
- iData: Integer;
- iSize: Integer;
- bData: Array Of Byte;
- Begin
- Result := '';
- If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_READ, hOpenKey) <>
- ERROR_SUCCESS Then
- Exit;
- Case wKeyType Of
- 1:
- Begin
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType, Nil, @iSize);
- SetLength(sData, iSize);
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
- @sData[1], @iSize);
- sData := String(sData);
- End;
- 2:
- Begin
- SetLength(sData, iSize);
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
- @sData[1], @iSize);
- sData := String(sData);
- End;
- 3:
- Begin
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType, Nil, @iSize);
- SetLength(bData, iSize);
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
- @bData[0], @iSize);
- sData := LowerCase(StringToHex(ByteArrayToString(bData)));
- End;
- 4:
- Begin
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
- @iData, @iSize);
- sData := IntToStr(iData);
- End;
- 7:
- Begin
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType, Nil, @iSize);
- SetLength(bData, iSize);
- RegQueryValueEx(hOpenKey, PChar(sKeyName), Nil, @wKeyType,
- @bData[0], @iSize);
- sData := String(sData);
- End;
- End;
- RegCloseKey(hOpenKey);
- Result := sData;
- End;
- //******************************************************************************
- // <--- ESCRIBE LA CLAVE --->
- //******************************************************************************
- Function WriteRegKeyValueAPI(hRoot: HKEY; sPath: String; sKeyName: String;
- sValue: String; wType: WORD): BOOL;
- Var
- hOpenKey: HKEY;
- iValue: Integer;
- Begin
- Result := False;
- If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_WRITE, hOpenKey) <>
- ERROR_SUCCESS Then
- Exit;
- Case wType Of
- 1:
- Begin
- If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_SZ,
- PChar(sValue + #0), (Length(sValue) + 1) * 2) <> ERROR_SUCCESS Then
- Exit;
- End;
- 2:
- Begin
- If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_SZ,
- PChar(sValue + #0), (Length(sValue) + 1) * 2) <> ERROR_SUCCESS Then
- Exit;
- End;
- 4:
- Begin
- iValue := StrToInt(sValue);
- If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_DWORD, @iValue, 4) <>
- ERROR_SUCCESS Then
- Exit;
- End;
- 7:
- Begin
- If RegSetValueEx(hOpenKey, PChar(sKeyName), 0, REG_MULTI_SZ,
- PChar(sValue + #0#0), (Length(sValue) + 2) * 2) <> ERROR_SUCCESS Then
- Exit;
- End;
- End;
- RegCloseKey(hOpenKey);
- Result := True;
- End;
- //******************************************************************************
- // <--- ENUMERA LAS CLAVES --->
- //******************************************************************************
- Function EnumRegKeysAPI(hRoot: HKEY; sPath: String): TStringList;
- Var
- hOpenKey: HKEY;
- dwIndex: DWORD;
- dwBuffSize: DWORD;
- cBuff: Array [0 .. MAX_PATH] Of Char;
- Begin
- Result := TStringList.Create;
- dwIndex := 0;
- dwBuffSize := MAX_PATH;
- If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_READ, hOpenKey) <>
- ERROR_SUCCESS Then
- Exit;
- While RegEnumKeyEx(hOpenKey, dwIndex, cBuff, dwBuffSize, Nil, Nil, Nil, Nil)
- = ERROR_SUCCESS Do
- Begin
- Result.Add(String(cBuff));
- dwBuffSize := MAX_PATH;
- Inc(dwIndex);
- End;
- RegCloseKey(hOpenKey);
- End;
- //******************************************************************************
- // <--- ENUMERA LOS VALORES DE LAS CLAVES --->
- //******************************************************************************
- Function EnumRegValuesAPI(hRoot: HKEY; sPath: String; sDel: String)
- : TStringList;
- Var
- hOpenKey: HKEY;
- dwIndex: DWORD;
- dwBuffSize: DWORD;
- dwType: DWORD;
- dwDataSize: DWORD;
- cBuff: Array [0 .. MAX_PATH] Of Char;
- Begin
- Result := TStringList.Create;
- dwBuffSize := MAX_PATH;
- dwIndex := 0;
- If RegOpenKeyEx(hRoot, PChar(sPath), 0, KEY_READ, hOpenKey) <>
- ERROR_SUCCESS Then
- Exit;
- While RegEnumValue(hOpenKey, dwIndex, cBuff, dwBuffSize, Nil, @dwType, Nil,
- @dwDataSize) <> ERROR_NO_MORE_ITEMS Do
- Begin
- Result.Add(String(cBuff) + sDel + GetRegType(dwType) + sDel +
- GetKeyValueAPI(hRoot, sPath, String(cBuff), dwType));
- dwBuffSize := MAX_PATH;
- Inc(dwIndex);
- End;
- RegCloseKey(hOpenKey);
- End;
- //******************************************************************************
- // <--- OBTIENE EL TIPO DEL VALOR --->
- //******************************************************************************
- Function GetRegType(wType: WORD): String;
- Var
- sTemp: String;
- Begin
- Case wType Of
- 0:
- sTemp := 'REG_NONE';
- 1:
- sTemp := 'REG_SZ';
- 2:
- sTemp := 'REG_EXPAND_SZ';
- 3:
- sTemp := 'REG_BINARY';
- 4:
- sTemp := 'REG_DWORD';
- 5:
- sTemp := 'REG_DWORD_BIG_ENDIAN';
- 6:
- sTemp := 'REG_LINK';
- 7:
- sTemp := 'REG_MULTI_SZ';
- 8:
- sTemp := 'REG_RESOURCE_LIST';
- 9:
- sTemp := 'REG_FULL_RESOURCE_DESCRIPTOR';
- 10:
- sTemp := 'REG_RESOURCE_REQUIREMENTS_LIST';
- 11:
- sTemp := 'REG_QWORD';
- Else
- sTemp := 'UNKNOWN REG TYPE';
- End;
- Result := sTemp;
- End;
- //******************************************************************************
- // <--- CONVERSION DE STRING A HEX --->
- //******************************************************************************
- Function StringToHex(sCadena: String): String;
- Var
- I: Integer;
- Begin
- Result := '';
- For I := 1 To Length(sCadena) Do
- Result := Result + IntToHex(Ord(sCadena[I]), 2) + ' ';
- End;
- //******************************************************************************
- // <--- CONVERSION DE BYTE ARRAY A STRING --->
- //******************************************************************************
- Function ByteArrayToString(bByteArray: Array Of Byte): String;
- Var
- I: Integer;
- Begin
- SetLength(Result, Length(bByteArray));
- For I := 0 To High(bByteArray) Do
- Result[I + 1] := Char(bByteArray[I]);
- End;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement