Re: Extending the Registry donated-code #2
Morten Andersen <[email protected]> Thu, 30 Jun 2005 21:46:31 +0200
| Newsgroups | gmane.comp.windows.devel.jawin |
|---|---|
| Message-ID | <[email protected]> |
Hi Christophe,
I placed a few comments below, but first thanks for taking the time to
delve into the source. The FuncPtr marshalling string for
DLL-entry-point invocations is unfortunately still work/documentation in
progress :-).
Christophe Bouhier (MC/ECM) wrote:
> Hello again,
>
> I figured out the short-cut methods won't do the job. I have to call the generic
> invoke method. The serialization is very challenging, I managed to do what I want,
> without being to sure of what I am doing :) I would appreciate if someone can check if the
> instruction string is correct and how to process a return value??
>
> here is the code.
>
> fpSKV = new FuncPtr("ADVAPI32.DLL", "RegSetValueExW");
>
> public static void SetKeyValue(int key, String name, String value) throws IOException, COMException {
>
> NakedByteStream nbs = new NakedByteStream();
> // wrap it in a LittleEndianOutputStream
> LittleEndianOutputStream leos = new LittleEndianOutputStream(nbs);
> // and then write the Java arguments
> leos.writeInt(key); // 4 bytes.
> leos.writeStringUnicode(name); // 4 bytes, this is PTR
> leos.writeInt(0); // 4 bytes
> leos.writeInt(1); // type like REG_NONE = 0, REG_SZ =1, REG_EXPAND_SZ=2 etc..
> leos.writeStringUnicode(value);
> leos.writeInt((value.length()*2));
> // System.out.print("Stream length=" + nbs.size() );
> fpSKV.invoke("IGIIGI:T1:", 24, nbs, null, ReturnFlags.CHECK_NONE);
>
> // T1 throws exception with The operation completed successfully.
> // T7 is no exception
I assume that the Tx-out-instruction strings are obsolete by know
(unfortunately I think the *exact knowledge* of this is lost in the
Jawin history, when Stuart left the project). So I would suggest instead
an instruction string like:
"IGIIGI::"
and a returnflags value:
ReturnFlags.CHECK_W32
Please try that with a couple of calls that should
1) Succeed, and verify that it actually succeds.
2) Fail (eg. by writing to key protected by ACL, or to a non-existing
key), and verify that it actually throws an exception.
Unfortunately I am not sitting at a Windows platform pt., so I am unable
to test this for myself.
> }
>
>
> Can I get CVS access to commit the Registry stub?
I can commit it for you, as soon as you declare it ready for commit'ing.
It would be great if you would add a couple of lines javadoc for the
method, eg. with a link to the MSDN API description:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/regsetvalueex.asp
and a short note on the implementation ONLY supporting writing of REG_SZ
values.
If you choose to supply a diff-file, feel free to mail it to me
off-list, as I don't think the maillist forwards any attachments.
Best Regards
Morten