\r
#include "SecMain.h"\r
\r
-\r
+#ifndef SE_TIME_ZONE_NAME\r
+#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")\r
+#endif\r
\r
NT_PEI_LOAD_FILE_PPI mSecNtLoadFilePpi = { SecWinNtPeiLoadFile };\r
\r
--*/\r
{\r
EFI_STATUS Status;\r
+ HANDLE Token;\r
+ TOKEN_PRIVILEGES TokenPrivileges;\r
EFI_PHYSICAL_ADDRESS InitialStackMemory;\r
UINT64 InitialStackMemorySize;\r
UINTN Index;\r
CHAR16 *FirmwareVolumesStr;\r
UINTN *StackPointer;\r
\r
+ //\r
+ // Enable the privilege so that RTC driver can successfully run SetTime()\r
+ //\r
+ OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &Token);\r
+ if (LookupPrivilegeValue(NULL, SE_TIME_ZONE_NAME, &TokenPrivileges.Privileges[0].Luid)) {\r
+ TokenPrivileges.PrivilegeCount = 1;\r
+ TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;\r
+ AdjustTokenPrivileges(Token, FALSE, &TokenPrivileges, 0, (PTOKEN_PRIVILEGES) NULL, 0);\r
+ }\r
+\r
MemorySizeStr = (CHAR16 *) PcdGetPtr (PcdWinNtMemorySizeForSecMain);\r
FirmwareVolumesStr = (CHAR16 *) PcdGetPtr (PcdWinNtFirmwareVolume);\r
\r