The problems with passing a pointer to a great big structure containing everything are:
- Changing something in it means that *everything* needs to be recompiled.
- DLL's that access it can change the values, either accidentally or deliberately
Instead, I'd suggest that you:
- use different structures for different purposes.
- pass a copy of the information, not the 'real' copy from the kernel.
- pass only what has been requested.
For instance, instead of passing a structure to the main entry point, pass a function pointer or two that the DLL can use to query/command the kernel. See the windows calls GetSystemMetrics/SetSystemMetrics for an example of how this would work.