Well, have you read the experts-exchange thread? Windows doesn't tell you whether you have a shutdown or reboot. The only way (that I know) to get this information is to hook the shutdown APIs - which is very ugly.
Because hooking APIs system wide is quite a "big thing". It results in a hook dll being injected into all running processes. Sounds a bit like overkill for just wanting to know whether Windows gets shut down or restarted. Whatever, it's the only solution I know.
No. There's a slight danger of instability, if the hook dll does bad things. But if you code it cleanly things should be just fine. Performance should be no problem (= no measureable performance loss).