On 2020-01-29 15:22, Trey Harris wrote:


On Wed, Jan 29, 2020 at 17:52 ToddAndMargo via perl6-users <perl6-us...@perl.org <mailto:perl6-us...@perl.org>> wrote:

    On 2020-01-29 14:20, Trey Harris wrote:
     > I don’t care about IpData or ValueData—those are completely
    unremarkable
     > fields. Showing me more code relating to them—or any other fields
     > besides cData—isn’t helpful to understanding how the 3-bytes UTF
    + null
     > cData field works.

    hi Trey,

    I think what I am missing is your "3-bytes UTF + null" question.

    It is only four bytes long when addressed as a REG_DWORD
    (32 bit unsigned integer).  There is no nul at the end.

    The bounds are 0x0..0xFFFF_FFFF.  No boxing allowed

    $cbData = 4;


    If your are addressing is as a REG_SZ (registry string),
    it can be as many bytes as you want when.  You just have
    to terminate it with a 0x0000

    $cbData = $lpData.elems * 2;  # words are two bytes long

    Does that help?


Could you show the API definition again, please? The copy I see says that field is a `DWORD cbData`. I don’t see the “as many bytes as you want when. You just have to terminate it with a 0x0000” part of the definition. Could you highlight it?


https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexw

   lpData

       The data to be stored.

       For string-based types, such as REG_SZ, the string must
       be null-terminated.

   cbData

       The size of the information pointed to by the lpData
       parameter, in bytes. If the data is of type REG_SZ,
       REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include
       the size of the terminating null character or
       characters.

Any better?

Reply via email to