Guido Diepen
2007-12-02 17:00:06 UTC
Hi everybody,
it looks like that currently some things are not completely implemented in
librapi2, which should have been according to the list of implemented things.
I am not sure who currently works on librapi, or who has the most knowledge of
this, but currently it just is a bit too difficult for me.
As mentioned before, I got segfaults while querying all values within a given
key. This is done with the function: CeRegEnumValue. Since there are two rapi
directories, I first looked at what happened and under the hood, rapi2 is
used.
When looking at rapi2.c I found the following line that clearly explains my
segfault:
NULL, /* CeRegEnumValue */
in the definition of the rapi2_ops,
while the EnumKey is defined:
_CeRegEnumKeyEx2, /* CeRegEnumKeyEx */
After this I looked in the file rapi2/registry2.c
and there I found the defintion of
_CeRegEnumValue2, unfortunately this was commented out. After uncommenting
this and rebuilding the library, I found a possible reason for the
commenting: it does not work ;)
The rapi context is filled with the request, as far as I know this is done
correctly. After this the context_call is done and now the weird thing is
that in the receiving buffer there are only 8 bytes present for the
last_error and return_value variables. There should be more bytes (when
debugging the _CeRegEnumKeyEx2 method, I can see that all result information
is presented after these standard 8 bytes for the error/return values.
My question is, who is able to understand why this was commented out, why it
is not working. The weird thing is that the code written for the tool
synce-registry really assumes that the EnumValue function is working.
Hope anybody can help out with this. If more information is needed, I will try
to provide this as good as I can :)
Regards,
Guido Diepen
it looks like that currently some things are not completely implemented in
librapi2, which should have been according to the list of implemented things.
I am not sure who currently works on librapi, or who has the most knowledge of
this, but currently it just is a bit too difficult for me.
As mentioned before, I got segfaults while querying all values within a given
key. This is done with the function: CeRegEnumValue. Since there are two rapi
directories, I first looked at what happened and under the hood, rapi2 is
used.
When looking at rapi2.c I found the following line that clearly explains my
segfault:
NULL, /* CeRegEnumValue */
in the definition of the rapi2_ops,
while the EnumKey is defined:
_CeRegEnumKeyEx2, /* CeRegEnumKeyEx */
After this I looked in the file rapi2/registry2.c
and there I found the defintion of
_CeRegEnumValue2, unfortunately this was commented out. After uncommenting
this and rebuilding the library, I found a possible reason for the
commenting: it does not work ;)
The rapi context is filled with the request, as far as I know this is done
correctly. After this the context_call is done and now the weird thing is
that in the receiving buffer there are only 8 bytes present for the
last_error and return_value variables. There should be more bytes (when
debugging the _CeRegEnumKeyEx2 method, I can see that all result information
is presented after these standard 8 bytes for the error/return values.
My question is, who is able to understand why this was commented out, why it
is not working. The weird thing is that the code written for the tool
synce-registry really assumes that the EnumValue function is working.
Hope anybody can help out with this. If more information is needed, I will try
to provide this as good as I can :)
Regards,
Guido Diepen
--
Aviation is proof that given the will, we have the
capacity to achieve the impossible.
--Eddie Rickenbacker
Aviation is proof that given the will, we have the
capacity to achieve the impossible.
--Eddie Rickenbacker