Как программно изменить настройки времени BIOS? - PullRequest
0 голосов
/ 22 марта 2012

Как программно изменить настройки времени BIOS? Код должен быть включен в приложение C # Window Forms, чтобы гарантировать, что в настройках BIOS всегда указано время UTC. Я пытался найти решение в WMI, используя Win32_UTCTime, но не смог.

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Вы не можете программно изменить время BIOS ... любым обычным способом.

BIOS хранится в EEPROM, которая не зависит от операционной системы. Единственный способ взаимодействия с ним - через прямые программы, которые пишут напрямую на аппаратное обеспечение. Различные API не предоставляют метод для этого.

0 голосов
/ 22 марта 2012

Перед изменением / манипулированием часами BIOS прочитайте эту статью . Это объясняет, почему Windows полагается на часы, отслеживающие местное время. Так что вы можете не менять его.

Чтобы внести фактические изменения см. Этот пример в PInvoke.NET

class Class1
{
    /// <summary> This structure represents a date and time. </summary>
    public struct SYSTEMTIME 
    {    public ushort wYear,wMonth,wDayOfWeek,wDay,
            wHour,wMinute,wSecond,wMilliseconds;
    }

    /// <summary>
    /// This function retrieves the current system date
    /// and time expressed in Coordinated Universal Time (UTC).
    /// </summary>
    /// <param name="lpSystemTime">[out] Pointer to a SYSTEMTIME structure to
    /// receive the current system date and time.</param>
    [DllImport("kernel32.dll")]
    public extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);

    /// <summary>
    /// This function sets the current system date
    /// and time expressed in Coordinated Universal Time (UTC).
    /// </summary>
    /// <param name="lpSystemTime">[in] Pointer to a SYSTEMTIME structure that
    /// contains the current system date and time.</param>
    [DllImport("kernel32.dll")]
    public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);

    static void Main()
    {    Console.WriteLine(DateTime.Now.ToString());
        SYSTEMTIME st = new SYSTEMTIME();
        GetSystemTime(ref st);
        Console.WriteLine("Adding 1 hour...");
        st.wHour = (ushort)(st.wHour + 1 % 24);
        if (SetSystemTime(ref st) == 0)
            Console.WriteLine("FAILURE: SetSystemTime failed");
        Console.WriteLine(DateTime.Now.ToString());
        Console.WriteLine("Setting time back...");
        st.wHour = (ushort)(st.wHour - 1 % 24);
        SetSystemTime(ref st);
        Console.WriteLine(DateTime.Now.ToString());
        Console.WriteLine("Press Enter to exit");
        Console.Read();
    }
}
...