REG_BINARY

Iniciado por Kizar, 25 Febrero 2006, 23:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Kizar

Cita de: .Slasher-K. en  2 Marzo 2006, 20:15 PM
Pensé que usabas los espacios (01 00 14 80 90)

Ya no les uso porke el editor hexadecimal no me les pone.

EL codigo esta bastante correcto, solo hay un fallo:

For I = 1 To (Len(strData) \ 2) Step 2
      btData(I) = Val("&H" & Mid$(strData, I, 2))
Next


En ese codigo solo se va llenando la mitad de las partes de un array.
I = 1, I = 3, I = 5
Y los que quedan sin valor en el array les guarda como (00) y desfigura el code.

Salu2

.Slasher-K.

Cierto, es que fue copy paste del code anterior casi. Crea una variable iCnt y aumentala en 1 cada iteracción de bucle.


     Dim iCnt%

  ...

  For ... ....
    btData(iCnt)= ....
    iCnt=iCnt+1
  Next
  ...

Kizar

El codigo que estoy usando para guardar es este:
Citar
Const REG_SZ = 1 ' Unicode nul terminated string
Const REG_BINARY = 3 ' Free form binary
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

'Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegQueryValueExByte Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, szData As Byte, ByRef lpcbData As Long) As Long

Sub SaveStringLong(hKey As Long, strPath As String, strValue As String, strData As String)
    Dim Ret As Long, btData() As Byte, I As Long, B As Long
    RegCreateKey hKey, strPath, Ret
    ReDim btData(Len(strData) \ 2) As Byte
    For I = 1 To (Len(strData) \ 2) Step 2
      btData(B) = Val("&H" & Mid$(strData, I, 2))
      B = B + 1
    Next
    RegSetValueEx Ret, strValue, 0, REG_BINARY, btData(0), Len(strData) \ 2
    RegCloseKey Ret
End Sub

Private Sub Command1_Click()
        SaveStringLong HKEY_CURRENT_USER, "S", "Security", "01001480900000009C000000140000003000000002001C000100000002801400FF010F00010100000000000100000000020060000400000000001400FD01020001010000000000051200000000001800FF010F0001020000000000052000000020020000000014008D01020001010000000000050B00000000001800FD01020001020000000000052000000023020000010100000000000512000000010100000000000512000000"
End Sub

Pero me guarda la primera mitad de los valores, el resto me lo llena de 0´s no se donde puede estar el fallo...

Salu2

.Slasher-K.


    For I = 1 To Len(strData)  Step 2

    Next


Cambia Len(strData) \ 2 por Len(strData)

Kizar

Ya esta, ya funciona todo perfectamente, muchas gracias  Slasher Kepper ;D

Salu2 k1z4r

Kizar

Ya que estamos en este tema:
¿Porque no me deja el registro crear esta clave, ni desde el regedit ni desde mi programa?

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_KIZAR

Es que estoy creando un modulo que registra un servicio, pero sin escribir esa clave no puedo hacerlo y e visto que otros programas como el iunes o el kaspersky pueden hacerlo. ¿que permisos hay k tener, yo en mi equipo soy administrador....

Salu2

Gorky

Juraria haber respondido esto antes pero no se donde ha ido a parar. Bueno el caso.

Esa clave solo puede ser modificada por SYSTEM. Sin embargo si te pones encima de

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root

y le das a permisos... puedes agregarte a ti mismo. Lo he conseguido a mano pero no se como se hara en VB.