James Tabor schrieb:
Gdi and User point to the ClientInfo area which is part of thread info
structures and like all thread structures should be place in some sort
of include/reactos/win32k/w32thread.h. This would allow Gdi and User
to access them both. I have placed #ifndef _NTUSRTYP_ so when both
headers are used there will be no compile errors.
Placing an undocumented and partly unknown structure inside two
different headers will lead to problems, like the two different versions
we have now ;-)
Suggestions:
- when ms puts ntgdi.h into the sdk, we could also put ntuser.h there.
- if we want to stay 100% compatible with sdk headers, we can add a
define, like
#ifdef USE_NON_SDK
// put non sdk compatible but still windows compatible definitions here
#endif
If we are compatible why do we need this? All SDK headers should be
compatible and I have pointed this out. When NDK/DDK (WDK) or PSDK
(SDK) changes are made the developer should have access to these and
compare the changes to verify them as correct. I have made changes to
the NDK with some Rtl functions and I had to make logical choices and
assumptions. Since those Rtl functions are unknown and the research
was from Wine, I did go through the steps of verifying and cross
referencing them before I moved them into NDK.
SDK and WDK are open to the public and there is nothing preventing
that developer from referencing them for research and standards.
Well I'm not sure if I got you right, so I just try to make my thinking
more clear:
There's compatible and there's compatible:
A) our sdk headers will contain 100% the same as ms sdk headers, not
less, not more
B) our sdk headers will contain everything that is in ms sdk headers,
but can contain more.
The ms sdk you can download is the public sdk. It's probably not what ms
uses to compile their stuff. It's partly limited. ntgdi.h contains
"typedef struct _POLYPATBLT POLYPATBLT, * PPOLYPATBLT";
But where's the real structure definition? Somewhere else? Does that
make sense? Well it does when ms uses different headers that contain all
the complete types, but then they don't even need this typedef.. So
where do we put it?
I suggested the #ifdef's to have compatibility A when it's not defined
and B when it's defined.
ntuser.h doesn't belong to the ms sdk. But for what reason? Do ms people
really have ntuser stuff somewhere else? Probably not, they just decided
not to ship it (I think they shipped ntuser.h with DDK some time ago)
Timo