The person at MS who recommended that "policy" has qualified it recently
with this comment:
So here is the important clarification. The reason for the message about
"don't directly access system tables" or "don't access fields that are
undocumented or reserved" is to prevent applications from breaking on
version upgrades. It isn't to discourage the use of the system tables for
diagnostic purposes. There are no stability problems with querying the
system tables, and there is generally no desire to hide (even the
undocumented) information from anyone. It's simply that if you go and embed
some check of an undocumented flag in your application, that application may
not work when the next version (or, theoretically, even service pack) comes
out. And that's a bad thing. So the real advice should be "don't put this
in your code". You want to interactively look at this stuff, great. You
want to put it in some version-specific diagnostic toolbag you have, that's
ok too. Just don't put it into application code that you expect others to
rely on. At some point in the (not too distant) future they'll be in for an
unpleasant surprise.