In Windows Vista, Microsoft changed the definition of SERVICE_CONTROL_SHUTDOWN such that there is a global OS timeout so that machines shutdown faster. In this case, the OS automatically terminates services that exceed the global timeout (typically 3 or 12 seconds). The services cannot veto this.
For data sensitive applications like databases, the correct event to register for is SERVICE_CONTROL_PRESHUTDOWN which allows applications to ask for longer timeouts via ChangeServiceConfig2 during installation, and forces Windows to wait for the service to stop or timeout. The default is 5 minutes.