Por que exceção win32 não são detectados pelo mecanismo de manipulação de exceção c #

Eu tenho um aplicativo winforms.Winforms começar com Program.cs onde temos main () definidos.Eu coloquei este código no bloco try-catch.

 [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmSplash());
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            if (ex.InnerException != null)
            {
                MessageBox.Show(ex.InnerException.ToString());
            }
        }
    }

Sempre que há uma exceção do win32, esse mecanismo falha e a mensagem de exceção não tratada é lançada e o aplicativo falha.
Eu tenho 2 perguntas sobre este código:

1) Por que as exceções do win32 não são capturadas.

2) É uma boa prática pegar exceções no nível mais alto.