Salve, ho un problema con la funzione da DLL ExitWindowsEx.

Dovrei spegnere il pc al termine di un'applicazione, ho fatto un test semplice, ovvero na form con un bottone Spegni, ma non funziona, ecco il primo tentativo:

codice:
[DllImport("user32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool ExitWindowsEx(uint uFlags, uint dwReason);

        [Flags]
        public enum ExitWindows : uint
        {
            // ONE of the following five:
            LogOff = 0x00,
            ShutDown = 0x01,
            Reboot = 0x02,
            PowerOff = 0x08,
            RestartApps = 0x40,
            // plus AT MOST ONE of the following two:
            Force = 0x04,
            ForceIfHung = 0x10,
        }

        [Flags]
        enum ShutdownReason : uint
        {
            MajorApplication = 0x00040000,
            MajorHardware = 0x00010000,
            MajorLegacyApi = 0x00070000,
            MajorOperatingSystem = 0x00020000,
            MajorOther = 0x00000000,
            MajorPower = 0x00060000,
            MajorSoftware = 0x00030000,
            MajorSystem = 0x00050000,

            MinorBlueScreen = 0x0000000F,
            MinorCordUnplugged = 0x0000000b,
            MinorDisk = 0x00000007,
            MinorEnvironment = 0x0000000c,
            MinorHardwareDriver = 0x0000000d,
            MinorHotfix = 0x00000011,
            MinorHung = 0x00000005,
            MinorInstallation = 0x00000002,
            MinorMaintenance = 0x00000001,
            MinorMMC = 0x00000019,
            MinorNetworkConnectivity = 0x00000014,
            MinorNetworkCard = 0x00000009,
            MinorOther = 0x00000000,
            MinorOtherDriver = 0x0000000e,
            MinorPowerSupply = 0x0000000a,
            MinorProcessor = 0x00000008,
            MinorReconfig = 0x00000004,
            MinorSecurity = 0x00000013,
            MinorSecurityFix = 0x00000012,
            MinorSecurityFixUninstall = 0x00000018,
            MinorServicePack = 0x00000010,
            MinorServicePackUninstall = 0x00000016,
            MinorTermSrv = 0x00000020,
            MinorUnstable = 0x00000006,
            MinorUpgrade = 0x00000003,
            MinorWMI = 0x00000015,

            FlagUserDefined = 0x40000000,
            FlagPlanned = 0x80000000
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ExitWindowsEx((uint)ExitWindows.ShutDown, (uint)ShutdownReason.MajorOther & (uint)ShutdownReason.MinorOther);
        }
Dopo un tentativo in debug mi sono accorto che ExitWindowsEx tornava False, allora ho provato così:

codice:
        private void button1_Click(object sender, EventArgs e)
        {
            ExitWindowsEx((uint)ExitWindows.ShutDown & (uint)ExitWindows.Force, (uint)ShutdownReason.MajorOther & (uint)ShutdownReason.MinorOther);
        }
Ora funziona, ma invece di spegnere il pc ha eseguito il logoff.

Oh provato allora con

codice:
        private void button1_Click(object sender, EventArgs e)
        {
            ExitWindowsEx((uint)ExitWindows.PowerOff & (uint)ExitWindows.Force, (uint)ShutdownReason.MajorOther & (uint)ShutdownReason.MinorOther);
        }
Ma anche questo esegue il solo logoff.

Il sistema operativo su cui lo sto testando è Windows 7, forse la causa potrebbe essere questo?

Saluti