Enable the SE_TIME_ZONE_NAME privilege for NT32 to fix SetTime function test running in Win7

Fix the GetTime implementation to return the correct Daylight value.

Signed-off-by: niruiyu
Reviewed-by: erictian

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12559 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
niruiyu
2011-10-24 06:57:57 +00:00
parent 32fa3543c9
commit 24e12917a4
3 changed files with 22 additions and 5 deletions

View File

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