By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,510 Members | 1,815 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,510 IT Pros & Developers. It's quick & easy.

Write Registry, missing some hex

P: n/a
hi everyone

I programm an ISAPI extension with embedded Visual C++ for a Windows
CE device.
I try to write the network settings to the registry.
I am able to write the IpAdress to the registry, but when I compare my
registry entry and the one made with the Windows CE settings, I miss
some hex chars:

The Way I write my registry entry:
LONG iSuccess = RegCreateKeyEx( HKEY_LOCAL_MACHINE, lpstrKey, 0L,NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,lpdwDisp);

if(iSuccess == ERROR_SUCCESS) {
lpstrSubkey = L"IpAddress";
MultiByteToWideChar(CP_ACP, 0, NetValueArray[queryCounter], -1,
lpstrSubkeyValue, sizeof(lpstrSubkeyValue));
/**** WRITE A HEX VALUE IN REGISTRY ****/
DWORD dwDispHex = 0;
LPDWORD lpdwDispHex = &dwDispHex;

iSuccess = RegCreateKeyEx( HKEY_LOCAL_MACHINE, lpstrKey,
0L,NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hKey,lpdwDispHex);
if(iSuccess == ERROR_SUCCESS)
{
RegSetValueEx(hKey, lpstrSubkey, 0, REG_MULTI_SZ,
(LPBYTE)lpstrSubkeyValue, strlen(NetValueArray[queryCounter])*2);
}
}

This results in this Registry Entry:
"IpAddress"=hex(7):\
31,32,33,2e,31,32,33,2e,31,32,33,2e,31,32,33

The same Registry Entry made in the Windows CE settings looks like
that:
"IpAddress"=hex(7):\
31,32,33,2e,31,32,33,2e,31,32,33,2e,31,32,33,00,00

What kind of hexchar is 00?
And how can I add this to my registry entry?

Greetings
Thomas

Aug 14 '07 #1
Share this Question
Share on Google+
8 Replies


P: n/a
On 2007-08-14 10:40, Kniffel wrote:
hi everyone

I programm an ISAPI extension with embedded Visual C++ for a Windows
CE device.
I try to write the network settings to the registry.
I am able to write the IpAdress to the registry, but when I compare my
registry entry and the one made with the Windows CE settings, I miss
some hex chars:

The Way I write my registry entry:
LONG iSuccess = RegCreateKeyEx( HKEY_LOCAL_MACHINE, lpstrKey, 0L,NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,lpdwDisp);

if(iSuccess == ERROR_SUCCESS) {
lpstrSubkey = L"IpAddress";
MultiByteToWideChar(CP_ACP, 0, NetValueArray[queryCounter], -1,
lpstrSubkeyValue, sizeof(lpstrSubkeyValue));
/**** WRITE A HEX VALUE IN REGISTRY ****/
DWORD dwDispHex = 0;
LPDWORD lpdwDispHex = &dwDispHex;

iSuccess = RegCreateKeyEx( HKEY_LOCAL_MACHINE, lpstrKey,
0L,NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hKey,lpdwDispHex);
if(iSuccess == ERROR_SUCCESS)
{
RegSetValueEx(hKey, lpstrSubkey, 0, REG_MULTI_SZ,
(LPBYTE)lpstrSubkeyValue, strlen(NetValueArray[queryCounter])*2);
}
}

This results in this Registry Entry:
"IpAddress"=hex(7):\
31,32,33,2e,31,32,33,2e,31,32,33,2e,31,32,33

The same Registry Entry made in the Windows CE settings looks like
that:
"IpAddress"=hex(7):\
31,32,33,2e,31,32,33,2e,31,32,33,2e,31,32,33,00,00

What kind of hexchar is 00?
00 is 00 is 0 is 0x0.
And how can I add this to my registry entry?
Sorry, but this is off-topic in here, this group is for discussing the
C++ language as defined by the standard, third party libraries should be
discussed in their own groups. Try to post in either

comp.os.ms-windows.programmer.win32 or one of the microsoft.public.*
groups to get in contact with the windows experts.

--
Erik Wikström
Aug 14 '07 #2

P: n/a
Ok
thanks
i will try it then in a other group...

Aug 14 '07 #3

P: n/a
Hi!

Apart from the offtopic issue I spotted something which might be a bug.

Kniffel schrieb:
MultiByteToWideChar(CP_ACP, 0, NetValueArray[queryCounter], -1,
lpstrSubkeyValue, sizeof(lpstrSubkeyValue));
If "lpstrSubkeyValue" is an array, forget my post.

I guess "lpstrSubkeyValue" is a mere pointer (to wide chars). Thus
"sizeof(lpstrSubkeyValue)" will probably return 4. Demonstration:

char* lpstrFoo = "Foobarbaz";
std::cout << sizeof(lpstrFoo); //propably prints "4"
lpstrFoo[2] = 'A'; //not allowed, undefined behaviour

Frank
Aug 14 '07 #4

P: n/a
On 14 Aug., 11:11, Frank Birbacher <bloodymir.c...@gmx.netwrote:
Hi!

Apart from the offtopic issue I spotted something which might be a bug.

Kniffel schrieb:
MultiByteToWideChar(CP_ACP, 0, NetValueArray[queryCounter], -1,
lpstrSubkeyValue, sizeof(lpstrSubkeyValue));

If "lpstrSubkeyValue" is an array, forget my post.

I guess "lpstrSubkeyValue" is a mere pointer (to wide chars). Thus
"sizeof(lpstrSubkeyValue)" will probably return 4. Demonstration:

char* lpstrFoo = "Foobarbaz";
std::cout << sizeof(lpstrFoo); //propably prints "4"
lpstrFoo[2] = 'A'; //not allowed, undefined behaviour

Frank
Yes it returns 4.
The var is defined like that: WCHAR lpstrSubkeyValue[MAX_PATH+1];

How i get the size I should insert here?

Aug 14 '07 #5

P: n/a
Hi!

Kniffel schrieb:
The var is defined like that: WCHAR lpstrSubkeyValue[MAX_PATH+1];

How i get the size I should insert here?
Here sizeof(lpstrSubkeyValue) should not return 4. It should return the
size in bytes (actually the unit is sizeof(char), which is 1 on windows)
of the array. To get the number of elements which you need to pass to
that funtion you need to divide this by the size of a single element:

const DWORD sizeOfSubkeyValue = sizeof(lpstrSubkeyValue) /
sizeof(*lpstrSubkeyValue);

Here "*lpstrSubkeyValue" is the first element of the array. Now just
pass sizeOfSubkeyValue to the function.

Frank
Aug 14 '07 #6

P: n/a
const DWORD sizeOfSubkeyValue = sizeof(lpstrSubkeyValue) /
sizeof(*lpstrSubkeyValue);
This gives me a size of 510... this is way to much. And my registry
value contains things I don´t want.

My calculation gives the correct size, I added "+1" since the first
post:
(strlen(NetValueArray[queryCounter])*2)+1

Aug 14 '07 #7

P: n/a
The var is defined like that: WCHAR lpstrSubkeyValue[MAX_PATH+1];
>
If you're going to use unreadable Microsoft Hungarian prefixes, at least
use them correctly, please.

You're not declaring "long pointer to string", lpstr.

Even better, get rid of that Hungarian notation.
You mean to just write "WCHAR SubkeyValue[MAX_PATH+1];"?

Aug 14 '07 #8

P: n/a
Hi!

Kniffel schrieb:
>const DWORD sizeOfSubkeyValue = sizeof(lpstrSubkeyValue) /
sizeof(*lpstrSubkeyValue);

This gives me a size of 510...
Probably because MAX_PATH is that large.

Frank
Aug 14 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.