<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Regsitry Binary Werte auslesen]]></title><description><![CDATA[<p>hy da dEUs Tutorial <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39373.html" rel="nofollow">Regsitry</a> nicht das auslesen und verändern und wieder schreiben der Binären Werte behandelt, möchte ich an dEUs tutorial anknüpfen und den beitrag bezüglich Binäre Werte setzen verfollständigen.</p>
<p>Da dEUs die handhabung der Registry schon ausfürlich erklärt hat und die Regeln bezüglich Binärer Daten auslesen nicht viel anderst ist, erspare ich mir hinsichtlich dieser großartige erklärungen.</p>
<p>der einfachste und eigendlich nicht erwähnenswerte weg Bytewerte auszulesen und wieder zu setzen, wäre eben sie auszulesen, unverändert als Bytewert zu lassen und diesen dann wieder zu schreiben.</p>
<p>Aber wer will das schon. dieses tutorial ist dazu da, zu zeigen wie man werte aus der registry holt, verändert, und veränderte werte wieder speichert.<br />
Somit gebrauche ich auch 4 Funktionen die NICHT die registry betreffen aber darauf eingehn den Bytewert aus der registry anzuzeigen zu verändern und wieder als Bytewert zu speichern</p>
<p>Binäre Werte auslesen:</p>
<pre><code>HKEY 	m_hMasterKey 	= HKEY_LOCAL_MACHINE;//Hauptschlüssel
LPCTSTR m_lpSubKey 	= &quot;SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion&quot;;//Schlüssel Pfad
LPCTSTR m_lpValueName	= &quot;DigitalProductId&quot;;//Schlüsselname der ausgelesen wird

HKEY hKey;
BYTE byData[1024]=&quot;&quot;;//Wichtig genügend platz schaffen
DWORD dwDataSize=sizeof(Data);
DWORD dwType=REG_BINARY;

RegOpenKey(m_hMasterKey, m_lpSubKey, &amp;hKey);

RegQueryValueEx(hKey, m_lpValueName, 0, &amp;dwType, byData, &amp;dwDataSize);
</code></pre>
<p>byData enthält nun die Daten aus dem Schlüßel DigitalProductId und dwDataSize beinhaltet die exackte größe von byData</p>
<p>Nun machen wir das ganze sichtbar als Hex &amp; Ascii String wie es auch in der Regsity zu sehen ist wenn wir den Schlüssel öffnen würden.<br />
der Hex String kann dann in einem Editfeld Angezeigt und bearbeitet werden.</p>
<pre><code>LPTSTR lpszHex;
LPTSTR lpszAscii;

ByteToHex(byData, dwDataSize, lpszHex);

ByteToAscii(byData, dwDataSize,lpszAscii);
</code></pre>
<p>der inhalt von lpszHex sieht nun in etwa wie folgt aus</p>
<blockquote>
<p>a4 00 00 00 03 00 00 00 37 36 34 39 37 2d 4f 45 4d 2d 30 30 36 33 30 36 36 2d 30 36 33 38 33 00 2d 00 00 00 41 32 32 2d 30 30 30 30 31 00 00 00 00 00 00 00 5e 94 2c 4b dc a8 28 6e 94 ef 87 09 51 a3 03 00 00 00 00 00 66 c5 68 44 b0 1f 06 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 31 37 32 38 00 00 00 00 00 00 00 de 17 00 00 77 90 bc cc 00 04 00 00 26 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7b cb 2a 93</p>
</blockquote>
<p>und der inhalt von lpszAscii gestalltet sich in etwa so</p>
<blockquote>
<p>¤.......76497-OEM-0063066-06383.-...A22-00001.......^”,KÜ¨(n”ï‡.Q£......fÅhD°...........................81728.......Þ...w.¼Ì....&amp;W..............................{Ë*“</p>
</blockquote>
<p>nun da wir den Bytewert als Hex String vor uns haben, können wir ihn verändern, wie und wo muss jeder benutzer für sich selber wissen, ich zeige jetzt nur noch wie man den Hex String nach bearbeitung wieder zurück in einen Bytewert bekommt und dieser korreckt in der Regsitry abgespeichert wird</p>
<pre><code>BYTE *pBuffer;	//Byte Wert der in die Regsitry geschrieben wird
DWORD dwSize;	//größe des zu schreibenden Bytewertes

HexToByte(lpszHex,pBuffer, dwSize);
</code></pre>
<p>wichtig zum schreiben des Bytewertes ist das der Schlüssel genauso geöffnet wird wie beim lesen, lediglich der Typ REG_BINARY und die größe des Bytewertes in DWORD werden hier nicht als long Pointer übergeben.</p>
<pre><code>RegSetValueEx(hKey, m_lpValueName, 0, dwType, pBuffer, dwSize);
</code></pre>
<pre><code>int HexToInt(char*I)
{
	for(int l=0;*I;l*=16,l+=(!!('@'&amp;*I))*9+*I++&amp;'\17');return l;
} 

void HexToByte(LPTSTR pszIn,BYTE *&amp;pData, DWORD &amp;dwSize)
{
	dwSize = (DWORD)strlen(pszIn) / 3;//Merke wir haben aus einem Byte 3 Stellen gemacht

	pData = new BYTE[dwSize];

	char szHex[3];

	unsigned int j	= 0;//Position
	unsigned int j1 = 0;//Erstes Zeichen
	unsigned int j2 = 0;//Zweites Zeichen

	for (DWORD i = 0; i &lt; dwSize; i++)
	{
		j1 = j++;
		j2 = j++;

		sprintf(szHex,&quot;%c%c&quot;,pszIn[j1],pszIn[j2]);

		BYTE b = (BYTE) HexToInt(szHex);//Wandel Hexwert in Byte

		pData[i] = b;
		j++;//Überspringe Leerstelle
	}

}

void ByteToHex(const BYTE* pData, DWORD dwSize, LPTSTR &amp;pszOut) 
{
	pszOut = new TCHAR[(dwSize * 3) + 1];//Merke wir machen aus einem Byte 3 Stellen

	for(DWORD n = 0; n &lt; dwSize; ++n)
		wsprintf(&amp;pszOut[n * 3], TEXT(&quot;%.02x &quot;), pData[n]); 
}

void ByteToAscii(const BYTE* pData, DWORD dwSize, LPTSTR &amp;pszOut)
{
	pszOut = new char[(dwSize*3) + 1];
	sprintf(pszOut,&quot;&quot;);

	char szDezString[4];
	char szAsciiString[4];
	for (DWORD i = 0; i &lt; dwSize; i++)
	{
		sprintf(szDezString,&quot;%u&quot;,pData[i]);//Dezimaler Byte Wert

		if(atoi(szDezString)&lt;=31 || atoi(szDezString) == 144)//Filter nichtdarstellbare zeichen
				sprintf(szAsciiString,&quot;%c&quot;,'.');
		else
				sprintf(szAsciiString,&quot;%c&quot;,atoi(szDezString));//Dezimaler Wert in Ascii

		strcat(pszOut,szAsciiString);
	}

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/166332/regsitry-binary-werte-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 01:49:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166332.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Nov 2006 12:03:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Regsitry Binary Werte auslesen on Tue, 28 Nov 2006 12:03:02 GMT]]></title><description><![CDATA[<p>hy da dEUs Tutorial <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39373.html" rel="nofollow">Regsitry</a> nicht das auslesen und verändern und wieder schreiben der Binären Werte behandelt, möchte ich an dEUs tutorial anknüpfen und den beitrag bezüglich Binäre Werte setzen verfollständigen.</p>
<p>Da dEUs die handhabung der Registry schon ausfürlich erklärt hat und die Regeln bezüglich Binärer Daten auslesen nicht viel anderst ist, erspare ich mir hinsichtlich dieser großartige erklärungen.</p>
<p>der einfachste und eigendlich nicht erwähnenswerte weg Bytewerte auszulesen und wieder zu setzen, wäre eben sie auszulesen, unverändert als Bytewert zu lassen und diesen dann wieder zu schreiben.</p>
<p>Aber wer will das schon. dieses tutorial ist dazu da, zu zeigen wie man werte aus der registry holt, verändert, und veränderte werte wieder speichert.<br />
Somit gebrauche ich auch 4 Funktionen die NICHT die registry betreffen aber darauf eingehn den Bytewert aus der registry anzuzeigen zu verändern und wieder als Bytewert zu speichern</p>
<p>Binäre Werte auslesen:</p>
<pre><code>HKEY 	m_hMasterKey 	= HKEY_LOCAL_MACHINE;//Hauptschlüssel
LPCTSTR m_lpSubKey 	= &quot;SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion&quot;;//Schlüssel Pfad
LPCTSTR m_lpValueName	= &quot;DigitalProductId&quot;;//Schlüsselname der ausgelesen wird

HKEY hKey;
BYTE byData[1024]=&quot;&quot;;//Wichtig genügend platz schaffen
DWORD dwDataSize=sizeof(Data);
DWORD dwType=REG_BINARY;

RegOpenKey(m_hMasterKey, m_lpSubKey, &amp;hKey);

RegQueryValueEx(hKey, m_lpValueName, 0, &amp;dwType, byData, &amp;dwDataSize);
</code></pre>
<p>byData enthält nun die Daten aus dem Schlüßel DigitalProductId und dwDataSize beinhaltet die exackte größe von byData</p>
<p>Nun machen wir das ganze sichtbar als Hex &amp; Ascii String wie es auch in der Regsity zu sehen ist wenn wir den Schlüssel öffnen würden.<br />
der Hex String kann dann in einem Editfeld Angezeigt und bearbeitet werden.</p>
<pre><code>LPTSTR lpszHex;
LPTSTR lpszAscii;

ByteToHex(byData, dwDataSize, lpszHex);

ByteToAscii(byData, dwDataSize,lpszAscii);
</code></pre>
<p>der inhalt von lpszHex sieht nun in etwa wie folgt aus</p>
<blockquote>
<p>a4 00 00 00 03 00 00 00 37 36 34 39 37 2d 4f 45 4d 2d 30 30 36 33 30 36 36 2d 30 36 33 38 33 00 2d 00 00 00 41 32 32 2d 30 30 30 30 31 00 00 00 00 00 00 00 5e 94 2c 4b dc a8 28 6e 94 ef 87 09 51 a3 03 00 00 00 00 00 66 c5 68 44 b0 1f 06 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 31 37 32 38 00 00 00 00 00 00 00 de 17 00 00 77 90 bc cc 00 04 00 00 26 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7b cb 2a 93</p>
</blockquote>
<p>und der inhalt von lpszAscii gestalltet sich in etwa so</p>
<blockquote>
<p>¤.......76497-OEM-0063066-06383.-...A22-00001.......^”,KÜ¨(n”ï‡.Q£......fÅhD°...........................81728.......Þ...w.¼Ì....&amp;W..............................{Ë*“</p>
</blockquote>
<p>nun da wir den Bytewert als Hex String vor uns haben, können wir ihn verändern, wie und wo muss jeder benutzer für sich selber wissen, ich zeige jetzt nur noch wie man den Hex String nach bearbeitung wieder zurück in einen Bytewert bekommt und dieser korreckt in der Regsitry abgespeichert wird</p>
<pre><code>BYTE *pBuffer;	//Byte Wert der in die Regsitry geschrieben wird
DWORD dwSize;	//größe des zu schreibenden Bytewertes

HexToByte(lpszHex,pBuffer, dwSize);
</code></pre>
<p>wichtig zum schreiben des Bytewertes ist das der Schlüssel genauso geöffnet wird wie beim lesen, lediglich der Typ REG_BINARY und die größe des Bytewertes in DWORD werden hier nicht als long Pointer übergeben.</p>
<pre><code>RegSetValueEx(hKey, m_lpValueName, 0, dwType, pBuffer, dwSize);
</code></pre>
<pre><code>int HexToInt(char*I)
{
	for(int l=0;*I;l*=16,l+=(!!('@'&amp;*I))*9+*I++&amp;'\17');return l;
} 

void HexToByte(LPTSTR pszIn,BYTE *&amp;pData, DWORD &amp;dwSize)
{
	dwSize = (DWORD)strlen(pszIn) / 3;//Merke wir haben aus einem Byte 3 Stellen gemacht

	pData = new BYTE[dwSize];

	char szHex[3];

	unsigned int j	= 0;//Position
	unsigned int j1 = 0;//Erstes Zeichen
	unsigned int j2 = 0;//Zweites Zeichen

	for (DWORD i = 0; i &lt; dwSize; i++)
	{
		j1 = j++;
		j2 = j++;

		sprintf(szHex,&quot;%c%c&quot;,pszIn[j1],pszIn[j2]);

		BYTE b = (BYTE) HexToInt(szHex);//Wandel Hexwert in Byte

		pData[i] = b;
		j++;//Überspringe Leerstelle
	}

}

void ByteToHex(const BYTE* pData, DWORD dwSize, LPTSTR &amp;pszOut) 
{
	pszOut = new TCHAR[(dwSize * 3) + 1];//Merke wir machen aus einem Byte 3 Stellen

	for(DWORD n = 0; n &lt; dwSize; ++n)
		wsprintf(&amp;pszOut[n * 3], TEXT(&quot;%.02x &quot;), pData[n]); 
}

void ByteToAscii(const BYTE* pData, DWORD dwSize, LPTSTR &amp;pszOut)
{
	pszOut = new char[(dwSize*3) + 1];
	sprintf(pszOut,&quot;&quot;);

	char szDezString[4];
	char szAsciiString[4];
	for (DWORD i = 0; i &lt; dwSize; i++)
	{
		sprintf(szDezString,&quot;%u&quot;,pData[i]);//Dezimaler Byte Wert

		if(atoi(szDezString)&lt;=31 || atoi(szDezString) == 144)//Filter nichtdarstellbare zeichen
				sprintf(szAsciiString,&quot;%c&quot;,'.');
		else
				sprintf(szAsciiString,&quot;%c&quot;,atoi(szDezString));//Dezimaler Wert in Ascii

		strcat(pszOut,szAsciiString);
	}

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1182980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182980</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Tue, 28 Nov 2006 12:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to Regsitry Binary Werte auslesen on Tue, 28 Nov 2006 12:14:40 GMT]]></title><description><![CDATA[<p>LowFly schrieb:</p>
<blockquote>
<pre><code>int HexToInt(char*I)
{
	for(int l=0;*I;l*=16,l+=(!!('@'&amp;*I))*9+*I++&amp;'\17');return l;
}
</code></pre>
</blockquote>
<p>und dafür schreibste aber auch ein tutorial, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1182985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1182985</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 28 Nov 2006 12:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Regsitry Binary Werte auslesen on Tue, 28 Nov 2006 13:47:31 GMT]]></title><description><![CDATA[<p>Hallo, sieht cool aus, aber ich versteh auch nur Bahnhof, wenn ich mir das ansehe. Die for-Schleife im hex to int. Machst du darüber auch ein tutorial, wie man das als neuling begreift bzw. angehen muss? Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183068</guid><dc:creator><![CDATA[Nixblicker]]></dc:creator><pubDate>Tue, 28 Nov 2006 13:47:31 GMT</pubDate></item></channel></rss>