#REG_MULTI_SZ auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

#REG_MULTI_SZ auslesen

Beitrag von PureBasic4.0 »

Hi, Leute

Was passt an diesem Code nicht? Habe ihn schon mehrmals verändert. Manchmal gibt es einen Invaild Memory Access und manchmal kommt ein leerer String als Rückgabe heraus

Code: Alles auswählen

GetHandle = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE,"SYSTEM\ControlSet001\Services\{02FA8931-DD7E-4B43-A9D8-C8F846F00D8B}\Parameters\Tcpip\", 0, #KEY_ALL_ACCESS, @hKey) 
If GetHandle = #ERROR_SUCCESS 
  lpcbData = 255 
  lpData = Space(255)
  lType = #REG_MULTI_SZ
  GetHandle = RegQueryValueEx_(#HKEY_LOCAL_MACHINE,"IPAddress", 0, @lType, @lpData, @lpcbData)
  Debug lpData
EndIf
RegCloseKey_(hKey) 
Ich bin mir sicher, dass der Pfad HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\{02FA8931-DD7E-4B43-A9D8-C8F846F00D8B}\Parameters\Tcpip richtig ist

Danke,
PureBasic4.0
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hab deins jetzt nicht getestet, aber #REG_MULTI_SZ kann so nicht
funktionieren. Das sind mehrere Textzeilen durch 0-Byte getrennt.
Space 255 ist auch nicht richtig, sondern einen buffer von 0 und dann
auswerten wie gross er sein muß, danach mit der korrekten größe aufrufen.
Danach die Strings im Speicher wieder trennen.
Beispielcode (ist der Code zur Lib) hier:
http://www.purebasic.fr/german/viewtopi ... t=registry
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke. Die Lib hat funktioniert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

Beitrag von bingo »

Code: Alles auswählen

If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Services\NetBIOS\Linkage", 0, #KEY_ALL_ACCESS, @hKey) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey,"Bind", 0, @lType.l,0,@lpcbData.l) = #ERROR_SUCCESS

Select lType
  Case #REG_MULTI_SZ
  
  membuf = AllocateMemory(lpcbData)
  
  RegQueryValueEx_(hKey,"Bind", 0, @lType,membuf, @lpcbData) 
  nuller.l
  splitmulti.s
  
  Repeat
  splitmulti = PeekS(membuf + nuller)
  Debug splitmulti
  nuller = Len(splitmulti) + nuller + 1
  Until nuller = lpcbData

  FreeMemory(membuf)

EndSelect
EndIf

RegCloseKey_(hKey)

EndIf 

End
:allright:
1:0>1
Antworten