So I'm going to go ahead and try this now. If anyone has a issue with this approach, please let me know.
I implemented this approach, only to find that numerous places in ntdll/ write to user_shared_data. I need to move all of that code to server/, which will take a while, since much of it depends on other code (#defines and the like) in the files.
I'm attaching my current diff, which throws an exception as soon as someone tries to read one of the values which is no longer being written from ntdll. The diff is extremely ugly, but shows the approach.
cheers,
Joey