无法更改Windows Server 2008 R2上的系统区域设置

时间:2010-06-09 04:55:09

标签: windows-server-2008

我有一个MFC应用程序试图更改Windows Server 2008 R2上的系统区域设置。我使用的SetTimeZoneInformation()API失败,错误代码为1314。 “客户不持有所需的特权。”请参考以下示例代码:

TIME_ZONE_INFORMATION l_TimeZoneInfo;
DWORD l_dwRetVal = 0;
ZeroMemory(&l_TimeZoneInfo, sizeof(TIME_ZONE_INFORMATION));
l_TimeZoneInfo.Bias = -330;
l_TimeZoneInfo.StandardBias = 0;
l_TimeZoneInfo.StandardDate.wDay = 0;
l_TimeZoneInfo.StandardDate.wDayOfWeek = 0;
l_TimeZoneInfo.StandardDate.wHour = 0;
l_TimeZoneInfo.StandardDate.wMilliseconds = 0;
l_TimeZoneInfo.StandardDate.wMinute = 0;
l_TimeZoneInfo.StandardDate.wMonth = 0;
l_TimeZoneInfo.StandardDate.wSecond = 0;
l_TimeZoneInfo.StandardDate.wYear = 0;

CString l_csDaylightName = _T("India Daylight Time");
CString l_csStdName = _T("India Standard Time");

wcscpy(l_TimeZoneInfo.DaylightName,l_csDaylightName.GetBuffer(l_csDaylightName.GetLength()));
wcscpy(l_TimeZoneInfo.StandardName,l_csStdName.GetBuffer(l_csStdName.GetLength()));

::SetLastError(0);

if(0 == ::SetTimeZoneInformation(&l_TimeZoneInfo))
{
    l_dwRetVal = ::GetLastError();
    CString l_csErr = _T("");
    l_csErr.Format(_T("%d"),l_dwRetVal);
}

MFC应用程序是使用Visual Studio 2008开发的,并且是UAC感知的,即应用程序在其清单文件中启用了UAC,并且UAC执行级别设置为“HighestAvailable”。我有管理员权限,当我运行应用程序时,它仍然无法更改系统区域设置。

先谢谢, 内甚

1 个答案:

答案 0 :(得分:0)

您无需以管理员身份运行即可更改时区。但是,{<3}}, 需要SE_TIME_ZONE_NAME权限。我链接到的文档有一个如何启用权限的示例,但主要涉及在进程的访问令牌上调用According to the documentation