mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 21:44:31 +00:00
Implemented RtlFindMessage() and Rtl[Query/Set]TimeZoneInformation().
svn path=/trunk/; revision=1935
This commit is contained in:
parent
efe6366a22
commit
7d15b82aa0
|
@ -1,4 +1,4 @@
|
||||||
# $Id: Makefile,v 1.41 2001/05/27 11:17:01 ekohl Exp $
|
# $Id: Makefile,v 1.42 2001/06/01 17:14:40 ekohl Exp $
|
||||||
#
|
#
|
||||||
# ReactOS Operating System
|
# ReactOS Operating System
|
||||||
#
|
#
|
||||||
|
@ -103,6 +103,7 @@ OBJECTS_RTL = \
|
||||||
rtl/memcpy.o \
|
rtl/memcpy.o \
|
||||||
rtl/memmove.o \
|
rtl/memmove.o \
|
||||||
rtl/memset.o \
|
rtl/memset.o \
|
||||||
|
rtl/message.o \
|
||||||
rtl/nls.o \
|
rtl/nls.o \
|
||||||
rtl/qsort.o \
|
rtl/qsort.o \
|
||||||
rtl/regio.o \
|
rtl/regio.o \
|
||||||
|
@ -111,6 +112,7 @@ OBJECTS_RTL = \
|
||||||
rtl/string.o \
|
rtl/string.o \
|
||||||
rtl/swprintf.o \
|
rtl/swprintf.o \
|
||||||
rtl/time.o \
|
rtl/time.o \
|
||||||
|
rtl/timezone.o \
|
||||||
rtl/unicode.o \
|
rtl/unicode.o \
|
||||||
rtl/wstring.o \
|
rtl/wstring.o \
|
||||||
rtl/bitops.o \
|
rtl/bitops.o \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: registry.c,v 1.59 2001/05/30 14:40:36 ekohl Exp $
|
/* $Id: registry.c,v 1.60 2001/06/01 17:12:33 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -18,6 +18,7 @@
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <internal/pool.h>
|
#include <internal/pool.h>
|
||||||
|
#include <internal/registry.h>
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <internal/debug.h>
|
#include <internal/debug.h>
|
||||||
|
@ -210,12 +211,6 @@ static GENERIC_MAPPING CmiKeyMapping =
|
||||||
|
|
||||||
/* ----------------------------------------- Forward Declarations */
|
/* ----------------------------------------- Forward Declarations */
|
||||||
|
|
||||||
|
|
||||||
static NTSTATUS RtlpGetRegistryHandle(ULONG RelativeTo,
|
|
||||||
PWSTR Path,
|
|
||||||
BOOLEAN Create,
|
|
||||||
PHANDLE KeyHandle);
|
|
||||||
|
|
||||||
static NTSTATUS CmiObjectParse(PVOID ParsedObject,
|
static NTSTATUS CmiObjectParse(PVOID ParsedObject,
|
||||||
PVOID *NextObject,
|
PVOID *NextObject,
|
||||||
PUNICODE_STRING FullPath,
|
PUNICODE_STRING FullPath,
|
||||||
|
@ -1941,10 +1936,11 @@ RtlFormatCurrentUserKeyPath(IN OUT PUNICODE_STRING KeyPath)
|
||||||
/* ------------------------------------------ Private Implementation */
|
/* ------------------------------------------ Private Implementation */
|
||||||
|
|
||||||
|
|
||||||
static NTSTATUS RtlpGetRegistryHandle(ULONG RelativeTo,
|
NTSTATUS
|
||||||
PWSTR Path,
|
RtlpGetRegistryHandle(ULONG RelativeTo,
|
||||||
BOOLEAN Create,
|
PWSTR Path,
|
||||||
PHANDLE KeyHandle)
|
BOOLEAN Create,
|
||||||
|
PHANDLE KeyHandle)
|
||||||
{
|
{
|
||||||
UNICODE_STRING KeyName;
|
UNICODE_STRING KeyName;
|
||||||
WCHAR KeyBuffer[MAX_PATH];
|
WCHAR KeyBuffer[MAX_PATH];
|
||||||
|
|
11
reactos/ntoskrnl/include/internal/registry.h
Normal file
11
reactos/ntoskrnl/include/internal/registry.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
#ifndef __INCLUDE_INTERNAL_REGISTRY_H
|
||||||
|
#define __INCLUDE_INTERNAL_REGISTRY_H
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
RtlpGetRegistryHandle(ULONG RelativeTo,
|
||||||
|
PWSTR Path,
|
||||||
|
BOOLEAN Create,
|
||||||
|
PHANDLE KeyHandle);
|
||||||
|
|
||||||
|
#endif /* __INCLUDE_INTERNAL_REGISTRY_H */
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: ntoskrnl.def,v 1.106 2001/05/04 01:21:42 rex Exp $
|
; $Id: ntoskrnl.def,v 1.107 2001/06/01 17:14:40 ekohl Exp $
|
||||||
;
|
;
|
||||||
; reactos/ntoskrnl/ntoskrnl.def
|
; reactos/ntoskrnl/ntoskrnl.def
|
||||||
;
|
;
|
||||||
|
@ -693,7 +693,7 @@ RtlFindFirstRunClear@8
|
||||||
RtlFindFirstRunSet@8
|
RtlFindFirstRunSet@8
|
||||||
RtlFindLongestRunClear@8
|
RtlFindLongestRunClear@8
|
||||||
RtlFindLongestRunSet@8
|
RtlFindLongestRunSet@8
|
||||||
;RtlFindMessage
|
RtlFindMessage@20
|
||||||
RtlFindSetBits@12
|
RtlFindSetBits@12
|
||||||
RtlFindSetBitsAndClear@12
|
RtlFindSetBitsAndClear@12
|
||||||
;RtlFindUnicodePrefix
|
;RtlFindUnicodePrefix
|
||||||
|
@ -755,7 +755,7 @@ RtlPrefixString@12
|
||||||
RtlPrefixUnicodeString@12
|
RtlPrefixUnicodeString@12
|
||||||
RtlQueryAtomInAtomTable@24
|
RtlQueryAtomInAtomTable@24
|
||||||
RtlQueryRegistryValues@20
|
RtlQueryRegistryValues@20
|
||||||
;RtlQueryTimeZoneInformation
|
RtlQueryTimeZoneInformation@4
|
||||||
RtlRaiseException@4
|
RtlRaiseException@4
|
||||||
;RtlRandom
|
;RtlRandom
|
||||||
;RtlRemoveUnicodePrefix
|
;RtlRemoveUnicodePrefix
|
||||||
|
@ -768,7 +768,7 @@ RtlSetDaclSecurityDescriptor@16
|
||||||
RtlSetGroupSecurityDescriptor@12
|
RtlSetGroupSecurityDescriptor@12
|
||||||
RtlSetOwnerSecurityDescriptor@12
|
RtlSetOwnerSecurityDescriptor@12
|
||||||
RtlSetSaclSecurityDescriptor@16
|
RtlSetSaclSecurityDescriptor@16
|
||||||
;RtlSetTimeZoneInformation
|
RtlSetTimeZoneInformation@4
|
||||||
;RtlSplay
|
;RtlSplay
|
||||||
RtlSubAuthorityCountSid@4
|
RtlSubAuthorityCountSid@4
|
||||||
RtlSubAuthoritySid@8
|
RtlSubAuthoritySid@8
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: ntoskrnl.edf,v 1.93 2001/05/04 01:21:43 rex Exp $
|
; $Id: ntoskrnl.edf,v 1.94 2001/06/01 17:14:40 ekohl Exp $
|
||||||
;
|
;
|
||||||
; reactos/ntoskrnl/ntoskrnl.def
|
; reactos/ntoskrnl/ntoskrnl.def
|
||||||
;
|
;
|
||||||
|
@ -692,7 +692,7 @@ RtlFindFirstRunClear=RtlFindFirstRunClear@8
|
||||||
RtlFindFirstRunSet=RtlFindFirstRunSet@8
|
RtlFindFirstRunSet=RtlFindFirstRunSet@8
|
||||||
RtlFindLongestRunClear=RtlFindLongestRunClear@8
|
RtlFindLongestRunClear=RtlFindLongestRunClear@8
|
||||||
RtlFindLongestRunSet=RtlFindLongestRunSet@8
|
RtlFindLongestRunSet=RtlFindLongestRunSet@8
|
||||||
;RtlFindMessage
|
RtlFindMessage=RtlFindMessage@20
|
||||||
RtlFindSetBits=RtlFindSetBits@12
|
RtlFindSetBits=RtlFindSetBits@12
|
||||||
RtlFindSetBitsAndClear=RtlFindSetBitsAndClear@12
|
RtlFindSetBitsAndClear=RtlFindSetBitsAndClear@12
|
||||||
;RtlFindUnicodePrefix
|
;RtlFindUnicodePrefix
|
||||||
|
@ -753,7 +753,7 @@ RtlPrefixString=RtlPrefixString@12
|
||||||
RtlPrefixUnicodeString=RtlPrefixUnicodeString@12
|
RtlPrefixUnicodeString=RtlPrefixUnicodeString@12
|
||||||
RtlQueryAtomInAtomTable=RtlQueryAtomInAtomTable@24
|
RtlQueryAtomInAtomTable=RtlQueryAtomInAtomTable@24
|
||||||
RtlQueryRegistryValues=RtlQueryRegistryValues@20
|
RtlQueryRegistryValues=RtlQueryRegistryValues@20
|
||||||
;RtlQueryTimeZoneInformation
|
RtlQueryTimeZoneInformation=RtlQueryTimeZoneInformation@4
|
||||||
RtlRaiseException=RtlRaiseException@4
|
RtlRaiseException=RtlRaiseException@4
|
||||||
;RtlRandom
|
;RtlRandom
|
||||||
;RtlRemoveUnicodePrefix
|
;RtlRemoveUnicodePrefix
|
||||||
|
@ -766,7 +766,7 @@ RtlSetDaclSecurityDescriptor=RtlSetDaclSecurityDescriptor@16
|
||||||
RtlSetGroupSecurityDescriptor=RtlSetGroupSecurityDescriptor@12
|
RtlSetGroupSecurityDescriptor=RtlSetGroupSecurityDescriptor@12
|
||||||
RtlSetOwnerSecurityDescriptor=RtlSetOwnerSecurityDescriptor@12
|
RtlSetOwnerSecurityDescriptor=RtlSetOwnerSecurityDescriptor@12
|
||||||
RtlSetSaclSecurityDescriptor=RtlSetSaclSecurityDescriptor@16
|
RtlSetSaclSecurityDescriptor=RtlSetSaclSecurityDescriptor@16
|
||||||
;RtlSetTimeZoneInformation
|
RtlSetTimeZoneInformation=RtlSetTimeZoneInformation@4
|
||||||
;RtlSplay
|
;RtlSplay
|
||||||
RtlSubAuthorityCountSid=RtlSubAuthorityCountSid@4
|
RtlSubAuthorityCountSid=RtlSubAuthorityCountSid@4
|
||||||
RtlSubAuthoritySid=RtlSubAuthoritySid@8
|
RtlSubAuthoritySid=RtlSubAuthoritySid@8
|
||||||
|
|
119
reactos/ntoskrnl/rtl/message.c
Normal file
119
reactos/ntoskrnl/rtl/message.c
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
/* $Id: message.c,v 1.1 2001/06/01 17:13:24 ekohl Exp $
|
||||||
|
*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS kernel
|
||||||
|
* PURPOSE: Message table functions
|
||||||
|
* FILE: ntoskrnl/rtl/message.c
|
||||||
|
* PROGRAMER: Eric Kohl <ekohl@zr-online.de>
|
||||||
|
* REVISION HISTORY:
|
||||||
|
* 29/05/2001: Created
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
#include <ddk/ntddk.h>
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <internal/debug.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
RtlFindMessage(PVOID BaseAddress,
|
||||||
|
ULONG Type,
|
||||||
|
ULONG Language,
|
||||||
|
ULONG MessageId,
|
||||||
|
PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry)
|
||||||
|
{
|
||||||
|
LDR_RESOURCE_INFO ResourceInfo;
|
||||||
|
PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry;
|
||||||
|
PRTL_MESSAGE_RESOURCE_DATA MessageTable;
|
||||||
|
NTSTATUS Status;
|
||||||
|
ULONG EntryOffset, IdOffset;
|
||||||
|
PRTL_MESSAGE_RESOURCE_ENTRY MessageEntry;
|
||||||
|
|
||||||
|
ULONG i;
|
||||||
|
|
||||||
|
DPRINT("RtlFindMessage()\n");
|
||||||
|
|
||||||
|
ResourceInfo.Type = Type;
|
||||||
|
ResourceInfo.Name = 1;
|
||||||
|
ResourceInfo.Language = Language;
|
||||||
|
|
||||||
|
Status = LdrFindResource_U(BaseAddress,
|
||||||
|
&ResourceInfo,
|
||||||
|
RESOURCE_DATA_LEVEL,
|
||||||
|
&ResourceDataEntry);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT("ResourceDataEntry: %p\n", ResourceDataEntry);
|
||||||
|
|
||||||
|
Status = LdrAccessResource(BaseAddress,
|
||||||
|
ResourceDataEntry,
|
||||||
|
(PVOID*)&MessageTable,
|
||||||
|
NULL);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT("MessageTable: %p\n", MessageTable);
|
||||||
|
|
||||||
|
DPRINT("NumberOfBlocks %lu\n", MessageTable->NumberOfBlocks);
|
||||||
|
for (i = 0; i < MessageTable->NumberOfBlocks; i++)
|
||||||
|
{
|
||||||
|
DPRINT("LoId 0x%08lx HiId 0x%08lx Offset 0x%08lx\n",
|
||||||
|
MessageTable->Blocks[i].LowId,
|
||||||
|
MessageTable->Blocks[i].HighId,
|
||||||
|
MessageTable->Blocks[i].OffsetToEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < MessageTable->NumberOfBlocks; i++)
|
||||||
|
{
|
||||||
|
if ((MessageId >= MessageTable->Blocks[i].LowId) &&
|
||||||
|
(MessageId <= MessageTable->Blocks[i].HighId))
|
||||||
|
{
|
||||||
|
EntryOffset = MessageTable->Blocks[i].OffsetToEntries;
|
||||||
|
IdOffset = MessageId - MessageTable->Blocks[i].LowId;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MessageId < MessageTable->Blocks[i].LowId)
|
||||||
|
{
|
||||||
|
return STATUS_MESSAGE_NOT_FOUND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageEntry = (PRTL_MESSAGE_RESOURCE_ENTRY)((ULONG)MessageTable + MessageTable->Blocks[i].OffsetToEntries);
|
||||||
|
|
||||||
|
DPRINT("EntryOffset 0x%08lx\n", EntryOffset);
|
||||||
|
DPRINT("IdOffset 0x%08lx\n", IdOffset);
|
||||||
|
|
||||||
|
DPRINT("MessageEntry: %p\n", MessageEntry);
|
||||||
|
for (i = 0; i < IdOffset; i++)
|
||||||
|
{
|
||||||
|
MessageEntry = (PRTL_MESSAGE_RESOURCE_ENTRY)(MessageEntry + (ULONG)MessageEntry->Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MessageEntry->Flags == 0)
|
||||||
|
{
|
||||||
|
DPRINT("AnsiText: %s\n", MessageEntry->Text);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINT("UnicodeText: %S\n", (PWSTR)MessageEntry->Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MessageResourceEntry != NULL);
|
||||||
|
{
|
||||||
|
*MessageResourceEntry = MessageEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
200
reactos/ntoskrnl/rtl/timezone.c
Normal file
200
reactos/ntoskrnl/rtl/timezone.c
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
/* $Id: timezone.c,v 1.1 2001/06/01 17:13:24 ekohl Exp $
|
||||||
|
*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS kernel
|
||||||
|
* PURPOSE: Timezone functions
|
||||||
|
* FILE: ntoskrnl/rtl/timezone.c
|
||||||
|
* PROGRAMER: Eric Kohl
|
||||||
|
* REVISION HISTORY:
|
||||||
|
* 29/05/2001: Created
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
|
#include <ddk/ntddk.h>
|
||||||
|
#include <internal/registry.h>
|
||||||
|
#include <ntos/time.h>
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <ntdll/ntdll.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
RtlQueryTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation)
|
||||||
|
{
|
||||||
|
HANDLE KeyHandle;
|
||||||
|
RTL_QUERY_REGISTRY_TABLE QueryTable[8];
|
||||||
|
UNICODE_STRING StandardName;
|
||||||
|
UNICODE_STRING DaylightName;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DPRINT("RtlQueryTimeZoneInformation()\n");
|
||||||
|
|
||||||
|
Status = RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL,
|
||||||
|
L"TimeZoneInformation",
|
||||||
|
TRUE,
|
||||||
|
&KeyHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlZeroMemory(QueryTable,
|
||||||
|
sizeof(QueryTable));
|
||||||
|
|
||||||
|
StandardName.Length = 0;
|
||||||
|
StandardName.MaximumLength = 32 * sizeof(WCHAR);
|
||||||
|
StandardName.Buffer = TimeZoneInformation->StandardName;
|
||||||
|
|
||||||
|
DaylightName.Length = 0;
|
||||||
|
DaylightName.MaximumLength = 32 * sizeof(WCHAR);
|
||||||
|
DaylightName.Buffer = TimeZoneInformation->DaylightName;
|
||||||
|
|
||||||
|
QueryTable[0].Name = L"Bias";
|
||||||
|
QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[0].EntryContext = &TimeZoneInformation->Bias;
|
||||||
|
|
||||||
|
QueryTable[1].Name = L"Standard Name";
|
||||||
|
QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[1].EntryContext = &StandardName;
|
||||||
|
|
||||||
|
QueryTable[2].Name = L"Standard Bias";
|
||||||
|
QueryTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[2].EntryContext = &TimeZoneInformation->StandardBias;
|
||||||
|
|
||||||
|
QueryTable[3].Name = L"Standard Start";
|
||||||
|
QueryTable[3].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[3].EntryContext = &TimeZoneInformation->StandardDate;
|
||||||
|
|
||||||
|
QueryTable[4].Name = L"Daylight Name";
|
||||||
|
QueryTable[4].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[4].EntryContext = &DaylightName;
|
||||||
|
|
||||||
|
QueryTable[5].Name = L"Daylight Bias";
|
||||||
|
QueryTable[5].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[5].EntryContext = &TimeZoneInformation->DaylightBias;
|
||||||
|
|
||||||
|
QueryTable[6].Name = L"Daylight Start";
|
||||||
|
QueryTable[6].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
||||||
|
QueryTable[6].EntryContext = &TimeZoneInformation->DaylightDate;
|
||||||
|
|
||||||
|
Status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
QueryTable,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
RtlSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation)
|
||||||
|
{
|
||||||
|
HANDLE KeyHandle;
|
||||||
|
ULONG Length;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
DPRINT("RtlSetTimeZoneInformation()\n");
|
||||||
|
|
||||||
|
Status = RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL,
|
||||||
|
L"TimeZoneInformation",
|
||||||
|
TRUE,
|
||||||
|
&KeyHandle);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Bias",
|
||||||
|
REG_DWORD,
|
||||||
|
&TimeZoneInformation->Bias,
|
||||||
|
sizeof(LONG));
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Length = (wcslen(TimeZoneInformation->StandardName) + 1) * sizeof(WCHAR);
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Standard Name",
|
||||||
|
REG_SZ,
|
||||||
|
TimeZoneInformation->StandardName,
|
||||||
|
Length);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Standard Bias",
|
||||||
|
REG_DWORD,
|
||||||
|
&TimeZoneInformation->StandardBias,
|
||||||
|
sizeof(LONG));
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Standard Start",
|
||||||
|
REG_BINARY,
|
||||||
|
&TimeZoneInformation->StandardDate,
|
||||||
|
sizeof(SYSTEMTIME));
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Length = (wcslen(TimeZoneInformation->DaylightName) + 1) * sizeof(WCHAR);
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Daylight Name",
|
||||||
|
REG_SZ,
|
||||||
|
TimeZoneInformation->DaylightName,
|
||||||
|
Length);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Daylight Bias",
|
||||||
|
REG_DWORD,
|
||||||
|
&TimeZoneInformation->DaylightBias,
|
||||||
|
sizeof(LONG));
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
|
||||||
|
(PWSTR)KeyHandle,
|
||||||
|
L"Daylight Start",
|
||||||
|
REG_BINARY,
|
||||||
|
&TimeZoneInformation->DaylightDate,
|
||||||
|
sizeof(SYSTEMTIME));
|
||||||
|
|
||||||
|
NtClose(KeyHandle);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
Loading…
Reference in a new issue