SetLocalTime設置本地時間


/*****************************************************************
函數名:EnableSetTimePriviledge
功  能:開放設置時間權限
返回值:布爾類型,權限開放成功返回TRUE,否則返回FALSE
*****************************************************************/
BOOL EnableSetTimePriviledge()
{
    HANDLE           m_hToken;
    TOKEN_PRIVILEGES m_TokenPriv;
    BOOL             m_bTakenPriviledge;

    BOOL bOpenToken = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | 
        TOKEN_QUERY, &m_hToken);

    m_bTakenPriviledge = FALSE;
    if (!bOpenToken) 
    {
        if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) 
        {
            //Must be running on 95 or 98 not NT. In that case just ignore the error
            SetLastError(ERROR_SUCCESS);
            if(!m_hToken)
                CloseHandle(m_hToken);
            return TRUE;
        }
        TRACE(_T("Failed to get Adjust privilege token\n"));
        if(!m_hToken)
            CloseHandle(m_hToken);
        return FALSE;
    }
    ZeroMemory(&m_TokenPriv, sizeof(TOKEN_PRIVILEGES));
    if (!LookupPrivilegeValue(NULL, SE_SYSTEMTIME_NAME, &m_TokenPriv.Privileges[0].Luid))
    {
        TRACE(_T("Failed in callup to lookup privilege\n"));
        if(!m_hToken)
            CloseHandle(m_hToken);
        return FALSE;
    }
    m_TokenPriv.PrivilegeCount = 1;
    m_TokenPriv.Privileges[0].Attributes |= SE_PRIVILEGE_ENABLED;
    m_bTakenPriviledge = TRUE;

    BOOL bSuccess = AdjustTokenPrivileges(m_hToken, FALSE, &m_TokenPriv, 0, NULL, 0);
    if (!bSuccess)
        TRACE(_T("Failed to adjust SetTime privilege\n"));

    if(!m_hToken)
        CloseHandle(m_hToken);

    return bSuccess;
}

啟用進程訪問令牌權限,再進行設置。

SYSTEMTIME sysTime;
    GetLocalTime(&sysTime);
    if(SetLocalTime(&sysTime))
    {
        //設置成功
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM