Hi Huw, Hi Nikolay,
thanks for the quick response!
I suspect how you write the parser will depend to some extent on the format of the binary blob itself, so I'd suggest getting a good understanding of that before you attack the coding.
Actually, I can do both at the same time. I'm working with a tool called Kaitai Struct, basically I'm writing the specification and generate a parser from that. Though I needed to roll my own C-generator, for better or worse.
If it turns out to basically be a binary representation of xml, then it may be appropriate to look at an xml parser (e.g. dlls/ntdll/actct.x).
I'm afraid it's most likely not that simple. The compiler does a lot of rearranging the data, it's not much like the original XML anymore.
Once you start coding, you could send the outline parser or tests to wine-devel as an RFC. The good news is that figuring out the format of the blob is likely to take much longer than actually coding, so any false steps that you might make are not going to affect the overall effort too much.
That's probably very true.
FWIW, I have the complete project on github. The parser is here: https://github.com/ DarkShadow44/UIRibbon-Reversing/blob/master/test/tests/UIRibbon/parser_uiribbon.c Would that code style be okay? As said, this is generated from the file definition format I'm creating. And since I generate this with a small C# program (also part of this repo), I can adjust the code as needed.
Another approach could be to implement the tool that creates such blobs, MS build tools must have something for that. This way you can start with minimal possible ribbon description, then tickle input and see what comes up in the blob.
Yes, there is UICC.exe to turn a xml into a blob. I use that to reverse engineer the format - change the xml, see how the blob changes. Is that what you mean? I don't quite understand why I would want to implement the tools that creates the blob though, that needs to do a lot of validation that isn't really needed to 'just' decode the blob.
I don't know if activation context code is useful for that, it does not use binary xml representation, your case could be closer xaml/baml.Maybe you can check WPF opensource project for that, it supposed to provide Xaml implementation. (WPF has its own Ribbon control by the way, probably separate from win32 one).
Yeah, I looked into baml - but to me it looks completely different. A shame really, would have made it a lot easier.
Regards, Fabian Maurer