Author: ion
Date: Fri Jul 22 03:21:17 2011
New Revision: 52772
URL:
http://svn.reactos.org/svn/reactos?rev=52772&view=rev
Log:
NO CODE CHANGE
[KERNEL32]: And at last, the final stroke. Move toolhelp.c into client, and split time.c
into timezone.c (wineisms) and time.c (incorrect/buggy ntisms), which goes into client.
Now "misc" truly only contains Wine-code (along with winnls), and the true NT
base API that needs to be focused on is in "client".
Added:
trunk/reactos/dll/win32/kernel32/client/misc/timezone.c
- copied, changed from r52770, trunk/reactos/dll/win32/kernel32/client/misc/time.c
trunk/reactos/dll/win32/kernel32/client/time.c (with props)
trunk/reactos/dll/win32/kernel32/client/toolhelp.c
- copied unchanged from r52758,
trunk/reactos/dll/win32/kernel32/client/misc/toolhelp.c
Removed:
trunk/reactos/dll/win32/kernel32/client/misc/time.c
trunk/reactos/dll/win32/kernel32/client/misc/toolhelp.c
Modified:
trunk/reactos/dll/win32/kernel32/CMakeLists.txt
trunk/reactos/dll/win32/kernel32/kernel32.rbuild
Modified: trunk/reactos/dll/win32/kernel32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/CMakeLi…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/CMakeLists.txt [iso-8859-1] Fri Jul 22 03:21:17 2011
@@ -27,7 +27,9 @@
client/session.c
client/synch.c
client/sysinfo.c
+ client/time.c
client/timerqueue.c
+ client/toolhelp.c
client/utils.c
client/thread.c
client/vdm.c
@@ -65,8 +67,7 @@
client/misc/muldiv.c
client/misc/profile.c
client/misc/res.c
- client/misc/time.c
- client/misc/toolhelp.c
+ client/misc/timezone.c
winnls/string/casemap.c
winnls/string/chartype.c
winnls/string/collation.c
Removed: trunk/reactos/dll/win32/kernel32/client/misc/time.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/misc/time.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/misc/time.c (removed)
@@ -1,810 +1,0 @@
-/* $Id$
- *
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS system libraries
- * FILE: lib/kernel32/misc/time.c
- * PURPOSE: Time conversion functions
- * PROGRAMMER: Ariadne
- * DOSDATE and DOSTIME structures from Onno Hovers
- * UPDATE HISTORY:
- * Created 19/01/99
- */
-
-/* INCLUDES ******************************************************************/
-
-#include <k32.h>
-
-#define NDEBUG
-#include <debug.h>
-
-/* TYPES *********************************************************************/
-
-typedef struct __DOSTIME
-{
- WORD Second:5;
- WORD Minute:6;
- WORD Hour:5;
-} DOSTIME, *PDOSTIME;
-
-typedef struct __DOSDATE
-{
- WORD Day:5;
- WORD Month:4;
- WORD Year:5;
-} DOSDATE, *PDOSDATE;
-
-#define TICKSPERMIN 600000000
-
-#define LL2FILETIME( ll, pft )\
- (pft)->dwLowDateTime = (UINT)(ll); \
- (pft)->dwHighDateTime = (UINT)((ll) >> 32);
-#define FILETIME2LL( pft, ll) \
- ll = (((LONGLONG)((pft)->dwHighDateTime))<<32) + (pft)-> dwLowDateTime ;
-
-static const int MonthLengths[2][12] =
-{
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
- { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
-};
-
-/* STATIC FUNTIONS **********************************************************/
-
-static inline int IsLeapYear(int Year)
-{
- return Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0) ? 1 : 0;
-}
-
-/***********************************************************************
- * TIME_DayLightCompareDate
- *
- * Compares two dates without looking at the year.
- *
- * PARAMS
- * date [in] The local time to compare.
- * compareDate [in] The daylight savings begin or end date.
- *
- * RETURNS
- *
- * -1 if date < compareDate
- * 0 if date == compareDate
- * 1 if date > compareDate
- * -2 if an error occurs
- */
-static int
-TIME_DayLightCompareDate(const SYSTEMTIME *date, const SYSTEMTIME *compareDate)
-{
- int limit_day, dayinsecs;
-
- if (date->wMonth < compareDate->wMonth)
- return -1; /* We are in a month before the date limit. */
-
- if (date->wMonth > compareDate->wMonth)
- return 1; /* We are in a month after the date limit. */
-
- /* if year is 0 then date is in day-of-week format, otherwise
- * it's absolute date.
- */
- if (compareDate->wYear == 0)
- {
- WORD First;
- /* compareDate->wDay is interpreted as number of the week in the month
- * 5 means: the last week in the month */
- int weekofmonth = compareDate->wDay;
- /* calculate the day of the first DayOfWeek in the month */
- First = ( 6 + compareDate->wDayOfWeek - date->wDayOfWeek + date->wDay
- ) % 7 + 1;
- limit_day = First + 7 * (weekofmonth - 1);
- /* check needed for the 5th weekday of the month */
- if(limit_day > MonthLengths[date->wMonth==2 &&
IsLeapYear(date->wYear)]
- [date->wMonth - 1])
- limit_day -= 7;
- }
- else
- {
- limit_day = compareDate->wDay;
- }
-
- /* convert to seconds */
- limit_day = ((limit_day * 24 + compareDate->wHour) * 60 +
- compareDate->wMinute ) * 60;
- dayinsecs = ((date->wDay * 24 + date->wHour) * 60 +
- date->wMinute ) * 60 + date->wSecond;
- /* and compare */
- return dayinsecs < limit_day ? -1 :
- dayinsecs > limit_day ? 1 :
- 0; /* date is equal to the date limit. */
-}
-
-/***********************************************************************
- * TIME_CompTimeZoneID
- *
- * Computes the local time bias for a given time and time zone.
- *
- * PARAMS
- * pTZinfo [in] The time zone data.
- * lpFileTime [in] The system or local time.
- * islocal [in] it is local time.
- *
- * RETURNS
- * TIME_ZONE_ID_INVALID An error occurred
- * TIME_ZONE_ID_UNKNOWN There are no transition time known
- * TIME_ZONE_ID_STANDARD Current time is standard time
- * TIME_ZONE_ID_DAYLIGHT Current time is daylight savings time
- */
-static
-DWORD
-TIME_CompTimeZoneID( const TIME_ZONE_INFORMATION *pTZinfo, FILETIME *lpFileTime, BOOL
islocal )
-{
- int ret;
- BOOL beforeStandardDate, afterDaylightDate;
- DWORD retval = TIME_ZONE_ID_INVALID;
- LONGLONG llTime = 0; /* initialized to prevent gcc complaining */
- SYSTEMTIME SysTime;
- FILETIME ftTemp;
-
- if (pTZinfo->DaylightDate.wMonth != 0)
- {
- /* if year is 0 then date is in day-of-week format, otherwise
- * it's absolute date.
- */
- if (pTZinfo->StandardDate.wMonth == 0 ||
- (pTZinfo->StandardDate.wYear == 0 &&
- (pTZinfo->StandardDate.wDay<1 ||
- pTZinfo->StandardDate.wDay>5 ||
- pTZinfo->DaylightDate.wDay<1 ||
- pTZinfo->DaylightDate.wDay>5)))
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return TIME_ZONE_ID_INVALID;
- }
-
- if (!islocal) {
- FILETIME2LL( lpFileTime, llTime );
- llTime -= ( pTZinfo->Bias + pTZinfo->DaylightBias )
- * (LONGLONG)TICKSPERMIN;
- LL2FILETIME( llTime, &ftTemp)
- lpFileTime = &ftTemp;
- }
-
- FileTimeToSystemTime(lpFileTime, &SysTime);
-
- /* check for daylight savings */
- ret = TIME_DayLightCompareDate( &SysTime, &pTZinfo->StandardDate);
- if (ret == -2)
- return TIME_ZONE_ID_INVALID;
-
- beforeStandardDate = ret < 0;
-
- if (!islocal) {
- llTime -= ( pTZinfo->StandardBias - pTZinfo->DaylightBias )
- * (LONGLONG)TICKSPERMIN;
- LL2FILETIME( llTime, &ftTemp)
- FileTimeToSystemTime(lpFileTime, &SysTime);
- }
-
- ret = TIME_DayLightCompareDate( &SysTime, &pTZinfo->DaylightDate);
- if (ret == -2)
- return TIME_ZONE_ID_INVALID;
-
- afterDaylightDate = ret >= 0;
-
- retval = TIME_ZONE_ID_STANDARD;
- if( pTZinfo->DaylightDate.wMonth < pTZinfo->StandardDate.wMonth ) {
- /* Northern hemisphere */
- if( beforeStandardDate && afterDaylightDate )
- retval = TIME_ZONE_ID_DAYLIGHT;
- } else /* Down south */
- if( beforeStandardDate || afterDaylightDate )
- retval = TIME_ZONE_ID_DAYLIGHT;
- } else
- /* No transition date */
- retval = TIME_ZONE_ID_UNKNOWN;
-
- return retval;
-}
-
-/***********************************************************************
- * TIME_TimeZoneID
- *
- * Calculates whether daylight savings is on now.
- *
- * PARAMS
- * pTzi [in] Timezone info.
- *
- * RETURNS
- * TIME_ZONE_ID_INVALID An error occurred
- * TIME_ZONE_ID_UNKNOWN There are no transition time known
- * TIME_ZONE_ID_STANDARD Current time is standard time
- * TIME_ZONE_ID_DAYLIGHT Current time is daylight savings time
- */
-static DWORD TIME_ZoneID( const TIME_ZONE_INFORMATION *pTzi )
-{
- FILETIME ftTime;
- GetSystemTimeAsFileTime( &ftTime);
- return TIME_CompTimeZoneID( pTzi, &ftTime, FALSE);
-}
-
-/***********************************************************************
- * TIME_GetTimezoneBias
- *
- * Calculates the local time bias for a given time zone.
- *
- * PARAMS
- * pTZinfo [in] The time zone data.
- * lpFileTime [in] The system or local time.
- * islocal [in] It is local time.
- * pBias [out] The calculated bias in minutes.
- *
- * RETURNS
- * TRUE when the time zone bias was calculated.
- */
-static BOOL
-TIME_GetTimezoneBias(const TIME_ZONE_INFORMATION *pTZinfo, FILETIME *lpFileTime, BOOL
islocal, LONG *pBias)
-{
- LONG bias = pTZinfo->Bias;
- DWORD tzid = TIME_CompTimeZoneID(pTZinfo, lpFileTime, islocal);
-
- if( tzid == TIME_ZONE_ID_INVALID)
- return FALSE;
- if (tzid == TIME_ZONE_ID_DAYLIGHT)
- bias += pTZinfo->DaylightBias;
- else if (tzid == TIME_ZONE_ID_STANDARD)
- bias += pTZinfo->StandardBias;
- *pBias = bias;
- return TRUE;
-}
-
-
-/* FUNCTIONS ****************************************************************/
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-FileTimeToDosDateTime(CONST FILETIME *lpFileTime,
- LPWORD lpFatDate,
- LPWORD lpFatTime)
-{
- PDOSTIME pdtime=(PDOSTIME) lpFatTime;
- PDOSDATE pddate=(PDOSDATE) lpFatDate;
- SYSTEMTIME SystemTime = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
- if (lpFileTime == NULL)
- return FALSE;
-
- if (lpFatDate == NULL)
- return FALSE;
-
- if (lpFatTime == NULL)
- return FALSE;
-
- FileTimeToSystemTime(lpFileTime, &SystemTime);
-
- pdtime->Second = SystemTime.wSecond / 2;
- pdtime->Minute = SystemTime.wMinute;
- pdtime->Hour = SystemTime.wHour;
-
- pddate->Day = SystemTime.wDay;
- pddate->Month = SystemTime.wMonth;
- pddate->Year = SystemTime.wYear - 1980;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-DosDateTimeToFileTime(WORD wFatDate,
- WORD wFatTime,
- LPFILETIME lpFileTime)
-{
- PDOSTIME pdtime = (PDOSTIME) &wFatTime;
- PDOSDATE pddate = (PDOSDATE) &wFatDate;
- SYSTEMTIME SystemTime;
-
- if (lpFileTime == NULL)
- return FALSE;
-
- SystemTime.wMilliseconds = 0;
- SystemTime.wSecond = pdtime->Second * 2;
- SystemTime.wMinute = pdtime->Minute;
- SystemTime.wHour = pdtime->Hour;
-
- SystemTime.wDay = pddate->Day;
- SystemTime.wMonth = pddate->Month;
- SystemTime.wYear = 1980 + pddate->Year;
-
- if (SystemTimeToFileTime(&SystemTime, lpFileTime) == FALSE)
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-LONG
-WINAPI
-CompareFileTime(CONST FILETIME *lpFileTime1, CONST FILETIME *lpFileTime2)
-{
- if (lpFileTime1 == NULL)
- return 0;
- if (lpFileTime2 == NULL)
- return 0;
-
- if (*((PLONGLONG)lpFileTime1) > *((PLONGLONG)lpFileTime2))
- return 1;
- else if (*((PLONGLONG)lpFileTime1) < *((PLONGLONG)lpFileTime2))
- return -1;
-
- return 0;
-}
-
-
-/*
- * @implemented
- */
-VOID
-WINAPI
-GetSystemTimeAsFileTime(PFILETIME lpFileTime)
-{
- do
- {
- lpFileTime->dwHighDateTime = SharedUserData->SystemTime.High1Time;
- lpFileTime->dwLowDateTime = SharedUserData->SystemTime.LowPart;
- }
- while (lpFileTime->dwHighDateTime !=
(DWORD)SharedUserData->SystemTime.High2Time);
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime)
-{
- TIME_FIELDS TimeFields;
- LARGE_INTEGER liTime;
-
- TimeFields.Year = lpSystemTime->wYear;
- TimeFields.Month = lpSystemTime->wMonth;
- TimeFields.Day = lpSystemTime->wDay;
- TimeFields.Hour = lpSystemTime->wHour;
- TimeFields.Minute = lpSystemTime->wMinute;
- TimeFields.Second = lpSystemTime->wSecond;
- TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
-
- if (RtlTimeFieldsToTime (&TimeFields, &liTime))
- {
- lpFileTime->dwLowDateTime = liTime.u.LowPart;
- lpFileTime->dwHighDateTime = liTime.u.HighPart;
- return TRUE;
- }
-
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-FileTimeToSystemTime(CONST FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime)
-{
- TIME_FIELDS TimeFields;
- LARGE_INTEGER liTime;
-
- if (lpFileTime->dwHighDateTime & 0x80000000)
- return FALSE;
-
- liTime.u.LowPart = lpFileTime->dwLowDateTime;
- liTime.u.HighPart = lpFileTime->dwHighDateTime;
-
- RtlTimeToTimeFields(&liTime, &TimeFields);
-
- lpSystemTime->wYear = TimeFields.Year;
- lpSystemTime->wMonth = TimeFields.Month;
- lpSystemTime->wDay = TimeFields.Day;
- lpSystemTime->wHour = TimeFields.Hour;
- lpSystemTime->wMinute = TimeFields.Minute;
- lpSystemTime->wSecond = TimeFields.Second;
- lpSystemTime->wMilliseconds = TimeFields.Milliseconds;
- lpSystemTime->wDayOfWeek = TimeFields.Weekday;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-FileTimeToLocalFileTime(CONST FILETIME *lpFileTime, LPFILETIME lpLocalFileTime)
-{
- LARGE_INTEGER TimeZoneBias;
-
- do
- {
- TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
- TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
- }
- while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
-
- *((PLONGLONG)lpLocalFileTime) = *((PLONGLONG)lpFileTime) - TimeZoneBias.QuadPart;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-LocalFileTimeToFileTime(CONST FILETIME *lpLocalFileTime, LPFILETIME lpFileTime)
-{
- LARGE_INTEGER TimeZoneBias;
-
- do
- {
- TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
- TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
- }
- while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
-
- *((PLONGLONG)lpFileTime) = *((PLONGLONG)lpLocalFileTime) + TimeZoneBias.QuadPart;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-VOID
-WINAPI
-GetLocalTime(LPSYSTEMTIME lpSystemTime)
-{
- FILETIME FileTime;
- FILETIME LocalFileTime;
-
- GetSystemTimeAsFileTime(&FileTime);
- FileTimeToLocalFileTime(&FileTime, &LocalFileTime);
- FileTimeToSystemTime(&LocalFileTime, lpSystemTime);
-}
-
-
-/*
- * @implemented
- */
-VOID
-WINAPI
-GetSystemTime(LPSYSTEMTIME lpSystemTime)
-{
- FILETIME FileTime;
-
- GetSystemTimeAsFileTime(&FileTime);
- FileTimeToSystemTime(&FileTime, lpSystemTime);
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetLocalTime(CONST SYSTEMTIME *lpSystemTime)
-{
- FILETIME LocalFileTime;
- LARGE_INTEGER FileTime;
- NTSTATUS Status;
-
- SystemTimeToFileTime(lpSystemTime, &LocalFileTime);
- LocalFileTimeToFileTime(&LocalFileTime, (FILETIME *)&FileTime);
- Status = NtSetSystemTime(&FileTime, &FileTime);
- if (!NT_SUCCESS(Status))
- return FALSE;
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetSystemTime(CONST SYSTEMTIME *lpSystemTime)
-{
- LARGE_INTEGER NewSystemTime;
- NTSTATUS Status;
-
- SystemTimeToFileTime(lpSystemTime, (PFILETIME)&NewSystemTime);
- Status = NtSetSystemTime(&NewSystemTime, &NewSystemTime);
- if (!NT_SUCCESS(Status))
- return FALSE;
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-DWORD
-WINAPI
-GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation)
-{
- NTSTATUS Status;
-
- DPRINT("GetTimeZoneInformation()\n");
-
- Status = NtQuerySystemInformation(SystemCurrentTimeZoneInformation,
- lpTimeZoneInformation,
- sizeof(TIME_ZONE_INFORMATION),
- NULL);
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return TIME_ZONE_ID_INVALID;
- }
-
- return TIME_ZoneID(lpTimeZoneInformation);
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetTimeZoneInformation(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation)
-{
- NTSTATUS Status;
-
- DPRINT("SetTimeZoneInformation()\n");
-
- Status = RtlSetTimeZoneInformation((LPTIME_ZONE_INFORMATION)lpTimeZoneInformation);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("RtlSetTimeZoneInformation() failed (Status %lx)\n", Status);
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- Status = NtSetSystemInformation(SystemCurrentTimeZoneInformation,
- (PVOID)lpTimeZoneInformation,
- sizeof(TIME_ZONE_INFORMATION));
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtSetSystemInformation() failed (Status %lx)\n", Status);
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-DWORD
-WINAPI
-GetTickCount(VOID)
-{
- ULARGE_INTEGER TickCount;
-
- while (TRUE)
- {
- TickCount.HighPart = (ULONG)SharedUserData->TickCount.High1Time;
- TickCount.LowPart = SharedUserData->TickCount.LowPart;
-
- if (TickCount.HighPart == (ULONG)SharedUserData->TickCount.High2Time)
- break;
-
- YieldProcessor();
- }
-
- return (ULONG)((UInt32x32To64(TickCount.LowPart,
SharedUserData->TickCountMultiplier) >> 24) +
- UInt32x32To64((TickCount.HighPart << 8) & 0xFFFFFFFF,
SharedUserData->TickCountMultiplier));
-
-}
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SystemTimeToTzSpecificLocalTime(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation,
- CONST SYSTEMTIME *lpUniversalTime,
- LPSYSTEMTIME lpLocalTime)
-{
- TIME_ZONE_INFORMATION TzInfo;
- FILETIME FileTime;
- LONGLONG llTime;
- LONG lBias;
-
- if (lpTimeZoneInformation != NULL)
- {
- TzInfo = *lpTimeZoneInformation;
- }
- else
- {
- if (GetTimeZoneInformation(&TzInfo) == TIME_ZONE_ID_INVALID)
- return FALSE;
- }
-
- if (!lpUniversalTime || !lpLocalTime)
- return FALSE;
-
- if (!SystemTimeToFileTime(lpUniversalTime, &FileTime))
- return FALSE;
-
- FILETIME2LL(&FileTime, llTime)
-
- if (!TIME_GetTimezoneBias(&TzInfo, &FileTime, FALSE, &lBias))
- return FALSE;
-
- /* convert minutes to 100-nanoseconds-ticks */
- llTime -= (LONGLONG)lBias * TICKSPERMIN;
-
- LL2FILETIME( llTime, &FileTime)
-
- return FileTimeToSystemTime(&FileTime, lpLocalTime);
-}
-
-
-/*
- * @implemented (Wine 13 sep 2008)
- */
-BOOL
-WINAPI
-TzSpecificLocalTimeToSystemTime(LPTIME_ZONE_INFORMATION lpTimeZoneInformation,
- LPSYSTEMTIME lpLocalTime,
- LPSYSTEMTIME lpUniversalTime)
-{
- FILETIME ft;
- LONG lBias;
- LONGLONG t;
- TIME_ZONE_INFORMATION tzinfo;
-
- if (lpTimeZoneInformation != NULL)
- {
- tzinfo = *lpTimeZoneInformation;
- }
- else
- {
- if (GetTimeZoneInformation(&tzinfo) == TIME_ZONE_ID_INVALID)
- return FALSE;
- }
-
- if (!SystemTimeToFileTime(lpLocalTime, &ft))
- return FALSE;
- FILETIME2LL( &ft, t)
- if (!TIME_GetTimezoneBias(&tzinfo, &ft, TRUE, &lBias))
- return FALSE;
- /* convert minutes to 100-nanoseconds-ticks */
- t += (LONGLONG)lBias * TICKSPERMIN;
- LL2FILETIME( t, &ft)
- return FileTimeToSystemTime(&ft, lpUniversalTime);
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-GetSystemTimeAdjustment(PDWORD lpTimeAdjustment,
- PDWORD lpTimeIncrement,
- PBOOL lpTimeAdjustmentDisabled)
-{
- SYSTEM_QUERY_TIME_ADJUST_INFORMATION Buffer;
- NTSTATUS Status;
-
- Status = NtQuerySystemInformation(SystemTimeAdjustmentInformation,
- &Buffer,
- sizeof(SYSTEM_QUERY_TIME_ADJUST_INFORMATION),
- NULL);
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- *lpTimeAdjustment = (DWORD)Buffer.TimeAdjustment;
- *lpTimeIncrement = (DWORD)Buffer.TimeIncrement;
- *lpTimeAdjustmentDisabled = (BOOL)Buffer.Enable;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetSystemTimeAdjustment(DWORD dwTimeAdjustment,
- BOOL bTimeAdjustmentDisabled)
-{
- NTSTATUS Status;
- SYSTEM_SET_TIME_ADJUST_INFORMATION Buffer;
-
- Buffer.TimeAdjustment = (ULONG)dwTimeAdjustment;
- Buffer.Enable = (BOOLEAN)bTimeAdjustmentDisabled;
-
- Status = NtSetSystemInformation(SystemTimeAdjustmentInformation,
- &Buffer,
- sizeof(SYSTEM_SET_TIME_ADJUST_INFORMATION));
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-GetSystemTimes(LPFILETIME lpIdleTime,
- LPFILETIME lpKernelTime,
- LPFILETIME lpUserTime)
-{
- SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SysProcPerfInfo;
- NTSTATUS Status;
-
- Status = ZwQuerySystemInformation(SystemProcessorPerformanceInformation,
- &SysProcPerfInfo,
- sizeof(SysProcPerfInfo),
- NULL);
-
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-/*
- Good only for one processor system.
- */
-
- lpIdleTime->dwLowDateTime = SysProcPerfInfo.IdleTime.LowPart;
- lpIdleTime->dwHighDateTime = SysProcPerfInfo.IdleTime.HighPart;
-
- lpKernelTime->dwLowDateTime = SysProcPerfInfo.KernelTime.LowPart;
- lpKernelTime->dwHighDateTime = SysProcPerfInfo.KernelTime.HighPart;
-
- lpUserTime->dwLowDateTime = SysProcPerfInfo.UserTime.LowPart;
- lpUserTime->dwHighDateTime = SysProcPerfInfo.UserTime.HighPart;
-
- return TRUE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-WINAPI
-SetClientTimeZoneInformation(
- CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation)
-{
- STUB;
- return 0;
-}
-
-/* EOF */
Copied: trunk/reactos/dll/win32/kernel32/client/misc/timezone.c (from r52770,
trunk/reactos/dll/win32/kernel32/client/misc/time.c)
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/misc/time.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/misc/timezone.c [iso-8859-1] Fri Jul 22
03:21:17 2011
@@ -18,20 +18,6 @@
#include <debug.h>
/* TYPES *********************************************************************/
-
-typedef struct __DOSTIME
-{
- WORD Second:5;
- WORD Minute:6;
- WORD Hour:5;
-} DOSTIME, *PDOSTIME;
-
-typedef struct __DOSDATE
-{
- WORD Day:5;
- WORD Month:4;
- WORD Year:5;
-} DOSDATE, *PDOSDATE;
#define TICKSPERMIN 600000000
@@ -260,286 +246,6 @@
/*
* @implemented
*/
-BOOL
-WINAPI
-FileTimeToDosDateTime(CONST FILETIME *lpFileTime,
- LPWORD lpFatDate,
- LPWORD lpFatTime)
-{
- PDOSTIME pdtime=(PDOSTIME) lpFatTime;
- PDOSDATE pddate=(PDOSDATE) lpFatDate;
- SYSTEMTIME SystemTime = { 0, 0, 0, 0, 0, 0, 0, 0 };
-
- if (lpFileTime == NULL)
- return FALSE;
-
- if (lpFatDate == NULL)
- return FALSE;
-
- if (lpFatTime == NULL)
- return FALSE;
-
- FileTimeToSystemTime(lpFileTime, &SystemTime);
-
- pdtime->Second = SystemTime.wSecond / 2;
- pdtime->Minute = SystemTime.wMinute;
- pdtime->Hour = SystemTime.wHour;
-
- pddate->Day = SystemTime.wDay;
- pddate->Month = SystemTime.wMonth;
- pddate->Year = SystemTime.wYear - 1980;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-DosDateTimeToFileTime(WORD wFatDate,
- WORD wFatTime,
- LPFILETIME lpFileTime)
-{
- PDOSTIME pdtime = (PDOSTIME) &wFatTime;
- PDOSDATE pddate = (PDOSDATE) &wFatDate;
- SYSTEMTIME SystemTime;
-
- if (lpFileTime == NULL)
- return FALSE;
-
- SystemTime.wMilliseconds = 0;
- SystemTime.wSecond = pdtime->Second * 2;
- SystemTime.wMinute = pdtime->Minute;
- SystemTime.wHour = pdtime->Hour;
-
- SystemTime.wDay = pddate->Day;
- SystemTime.wMonth = pddate->Month;
- SystemTime.wYear = 1980 + pddate->Year;
-
- if (SystemTimeToFileTime(&SystemTime, lpFileTime) == FALSE)
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-LONG
-WINAPI
-CompareFileTime(CONST FILETIME *lpFileTime1, CONST FILETIME *lpFileTime2)
-{
- if (lpFileTime1 == NULL)
- return 0;
- if (lpFileTime2 == NULL)
- return 0;
-
- if (*((PLONGLONG)lpFileTime1) > *((PLONGLONG)lpFileTime2))
- return 1;
- else if (*((PLONGLONG)lpFileTime1) < *((PLONGLONG)lpFileTime2))
- return -1;
-
- return 0;
-}
-
-
-/*
- * @implemented
- */
-VOID
-WINAPI
-GetSystemTimeAsFileTime(PFILETIME lpFileTime)
-{
- do
- {
- lpFileTime->dwHighDateTime = SharedUserData->SystemTime.High1Time;
- lpFileTime->dwLowDateTime = SharedUserData->SystemTime.LowPart;
- }
- while (lpFileTime->dwHighDateTime !=
(DWORD)SharedUserData->SystemTime.High2Time);
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime)
-{
- TIME_FIELDS TimeFields;
- LARGE_INTEGER liTime;
-
- TimeFields.Year = lpSystemTime->wYear;
- TimeFields.Month = lpSystemTime->wMonth;
- TimeFields.Day = lpSystemTime->wDay;
- TimeFields.Hour = lpSystemTime->wHour;
- TimeFields.Minute = lpSystemTime->wMinute;
- TimeFields.Second = lpSystemTime->wSecond;
- TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
-
- if (RtlTimeFieldsToTime (&TimeFields, &liTime))
- {
- lpFileTime->dwLowDateTime = liTime.u.LowPart;
- lpFileTime->dwHighDateTime = liTime.u.HighPart;
- return TRUE;
- }
-
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-FileTimeToSystemTime(CONST FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime)
-{
- TIME_FIELDS TimeFields;
- LARGE_INTEGER liTime;
-
- if (lpFileTime->dwHighDateTime & 0x80000000)
- return FALSE;
-
- liTime.u.LowPart = lpFileTime->dwLowDateTime;
- liTime.u.HighPart = lpFileTime->dwHighDateTime;
-
- RtlTimeToTimeFields(&liTime, &TimeFields);
-
- lpSystemTime->wYear = TimeFields.Year;
- lpSystemTime->wMonth = TimeFields.Month;
- lpSystemTime->wDay = TimeFields.Day;
- lpSystemTime->wHour = TimeFields.Hour;
- lpSystemTime->wMinute = TimeFields.Minute;
- lpSystemTime->wSecond = TimeFields.Second;
- lpSystemTime->wMilliseconds = TimeFields.Milliseconds;
- lpSystemTime->wDayOfWeek = TimeFields.Weekday;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-FileTimeToLocalFileTime(CONST FILETIME *lpFileTime, LPFILETIME lpLocalFileTime)
-{
- LARGE_INTEGER TimeZoneBias;
-
- do
- {
- TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
- TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
- }
- while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
-
- *((PLONGLONG)lpLocalFileTime) = *((PLONGLONG)lpFileTime) - TimeZoneBias.QuadPart;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-LocalFileTimeToFileTime(CONST FILETIME *lpLocalFileTime, LPFILETIME lpFileTime)
-{
- LARGE_INTEGER TimeZoneBias;
-
- do
- {
- TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
- TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
- }
- while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
-
- *((PLONGLONG)lpFileTime) = *((PLONGLONG)lpLocalFileTime) + TimeZoneBias.QuadPart;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-VOID
-WINAPI
-GetLocalTime(LPSYSTEMTIME lpSystemTime)
-{
- FILETIME FileTime;
- FILETIME LocalFileTime;
-
- GetSystemTimeAsFileTime(&FileTime);
- FileTimeToLocalFileTime(&FileTime, &LocalFileTime);
- FileTimeToSystemTime(&LocalFileTime, lpSystemTime);
-}
-
-
-/*
- * @implemented
- */
-VOID
-WINAPI
-GetSystemTime(LPSYSTEMTIME lpSystemTime)
-{
- FILETIME FileTime;
-
- GetSystemTimeAsFileTime(&FileTime);
- FileTimeToSystemTime(&FileTime, lpSystemTime);
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetLocalTime(CONST SYSTEMTIME *lpSystemTime)
-{
- FILETIME LocalFileTime;
- LARGE_INTEGER FileTime;
- NTSTATUS Status;
-
- SystemTimeToFileTime(lpSystemTime, &LocalFileTime);
- LocalFileTimeToFileTime(&LocalFileTime, (FILETIME *)&FileTime);
- Status = NtSetSystemTime(&FileTime, &FileTime);
- if (!NT_SUCCESS(Status))
- return FALSE;
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetSystemTime(CONST SYSTEMTIME *lpSystemTime)
-{
- LARGE_INTEGER NewSystemTime;
- NTSTATUS Status;
-
- SystemTimeToFileTime(lpSystemTime, (PFILETIME)&NewSystemTime);
- Status = NtSetSystemTime(&NewSystemTime, &NewSystemTime);
- if (!NT_SUCCESS(Status))
- return FALSE;
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
DWORD
WINAPI
GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation)
@@ -594,32 +300,6 @@
return TRUE;
}
-
-/*
- * @implemented
- */
-DWORD
-WINAPI
-GetTickCount(VOID)
-{
- ULARGE_INTEGER TickCount;
-
- while (TRUE)
- {
- TickCount.HighPart = (ULONG)SharedUserData->TickCount.High1Time;
- TickCount.LowPart = SharedUserData->TickCount.LowPart;
-
- if (TickCount.HighPart == (ULONG)SharedUserData->TickCount.High2Time)
- break;
-
- YieldProcessor();
- }
-
- return (ULONG)((UInt32x32To64(TickCount.LowPart,
SharedUserData->TickCountMultiplier) >> 24) +
- UInt32x32To64((TickCount.HighPart << 8) & 0xFFFFFFFF,
SharedUserData->TickCountMultiplier));
-
-}
-
/*
* @implemented
*/
@@ -699,112 +379,4 @@
return FileTimeToSystemTime(&ft, lpUniversalTime);
}
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-GetSystemTimeAdjustment(PDWORD lpTimeAdjustment,
- PDWORD lpTimeIncrement,
- PBOOL lpTimeAdjustmentDisabled)
-{
- SYSTEM_QUERY_TIME_ADJUST_INFORMATION Buffer;
- NTSTATUS Status;
-
- Status = NtQuerySystemInformation(SystemTimeAdjustmentInformation,
- &Buffer,
- sizeof(SYSTEM_QUERY_TIME_ADJUST_INFORMATION),
- NULL);
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- *lpTimeAdjustment = (DWORD)Buffer.TimeAdjustment;
- *lpTimeIncrement = (DWORD)Buffer.TimeIncrement;
- *lpTimeAdjustmentDisabled = (BOOL)Buffer.Enable;
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-SetSystemTimeAdjustment(DWORD dwTimeAdjustment,
- BOOL bTimeAdjustmentDisabled)
-{
- NTSTATUS Status;
- SYSTEM_SET_TIME_ADJUST_INFORMATION Buffer;
-
- Buffer.TimeAdjustment = (ULONG)dwTimeAdjustment;
- Buffer.Enable = (BOOLEAN)bTimeAdjustmentDisabled;
-
- Status = NtSetSystemInformation(SystemTimeAdjustmentInformation,
- &Buffer,
- sizeof(SYSTEM_SET_TIME_ADJUST_INFORMATION));
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-GetSystemTimes(LPFILETIME lpIdleTime,
- LPFILETIME lpKernelTime,
- LPFILETIME lpUserTime)
-{
- SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SysProcPerfInfo;
- NTSTATUS Status;
-
- Status = ZwQuerySystemInformation(SystemProcessorPerformanceInformation,
- &SysProcPerfInfo,
- sizeof(SysProcPerfInfo),
- NULL);
-
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-/*
- Good only for one processor system.
- */
-
- lpIdleTime->dwLowDateTime = SysProcPerfInfo.IdleTime.LowPart;
- lpIdleTime->dwHighDateTime = SysProcPerfInfo.IdleTime.HighPart;
-
- lpKernelTime->dwLowDateTime = SysProcPerfInfo.KernelTime.LowPart;
- lpKernelTime->dwHighDateTime = SysProcPerfInfo.KernelTime.HighPart;
-
- lpUserTime->dwLowDateTime = SysProcPerfInfo.UserTime.LowPart;
- lpUserTime->dwHighDateTime = SysProcPerfInfo.UserTime.HighPart;
-
- return TRUE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-WINAPI
-SetClientTimeZoneInformation(
- CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation)
-{
- STUB;
- return 0;
-}
-
/* EOF */
Removed: trunk/reactos/dll/win32/kernel32/client/misc/toolhelp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/misc/toolhelp.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/misc/toolhelp.c (removed)
@@ -1,1310 +1,0 @@
-/* $Id$
- *
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS system libraries
- * FILE: dll/win32/kernel32/misc/toolhelp.c
- * PURPOSE: Toolhelp functions
- * PROGRAMMER: Thomas Weidenmueller <w3seek(a)reactos.com>
- * Robert Dickenson (robd(a)mok.lvcm.com)
- *
- * NOTES: Do NOT use the heap functions in here because they
- * adulterate the heap statistics!
- *
- * UPDATE HISTORY:
- * 10/30/2004 Implemented some parts (w3)
- * Inspired by the book "Windows NT Native API"
- * Created 05 January 2003 (robd)
- */
-
-#include <k32.h>
-
-#include <tlhelp32.h>
-
-#define NDEBUG
-#include <debug.h>
-
-/* INTERNAL DEFINITIONS *******************************************************/
-
-typedef struct _RTLP_HEAP_ENTRY
-{
- ULONG Size;
- USHORT Flags;
- USHORT Unknown1; /* FIXME */
- ULONG Unknown2; /* FIXME */
- PVOID Address;
-} RTLP_HEAP_ENTRY, *PRTLP_HEAP_ENTRY;
-
-#define CHECK_PARAM_SIZE(ptr, siz) \
- if((ptr) == NULL || (ptr)->dwSize != (siz)) \
- { \
- SetLastError(ERROR_INVALID_PARAMETER); \
- return FALSE; \
- }
-
-/*
- * Tests in win showed that the dwSize field can be greater than the actual size
- * of the structure for the ansi functions. I found this out by accidently
- * forgetting to set the dwSize field in a test application and it just didn't
- * work in ros but in win.
- */
-
-#define CHECK_PARAM_SIZEA(ptr, siz) \
- if((ptr) == NULL || (ptr)->dwSize < (siz)) \
- { \
- SetLastError(ERROR_INVALID_PARAMETER); \
- return FALSE; \
- }
-
-#define OffsetToPtr(Snapshot, Offset) \
- ((ULONG_PTR)((Snapshot) + 1) + (ULONG_PTR)(Offset))
-
-typedef struct _TH32SNAPSHOT
-{
- /* Heap list */
- ULONG HeapListCount;
- ULONG HeapListIndex;
- ULONG_PTR HeapListOffset;
- /* Module list */
- ULONG ModuleListCount;
- ULONG ModuleListIndex;
- ULONG_PTR ModuleListOffset;
- /* Process list */
- ULONG ProcessListCount;
- ULONG ProcessListIndex;
- ULONG_PTR ProcessListOffset;
- /* Thread list */
- ULONG ThreadListCount;
- ULONG ThreadListIndex;
- ULONG_PTR ThreadListOffset;
-} TH32SNAPSHOT, *PTH32SNAPSHOT;
-
-/* INTERNAL FUNCTIONS *********************************************************/
-
-static VOID
-TH32FreeAllocatedResources(PRTL_DEBUG_INFORMATION HeapDebug,
- PRTL_DEBUG_INFORMATION ModuleDebug,
- PVOID ProcThrdInfo,
- SIZE_T ProcThrdInfoSize)
-{
- if(HeapDebug != NULL)
- {
- RtlDestroyQueryDebugBuffer(HeapDebug);
- }
- if(ModuleDebug != NULL)
- {
- RtlDestroyQueryDebugBuffer(ModuleDebug);
- }
-
- if(ProcThrdInfo != NULL)
- {
- NtFreeVirtualMemory(NtCurrentProcess(),
- &ProcThrdInfo,
- &ProcThrdInfoSize,
- MEM_RELEASE);
- }
-}
-
-static NTSTATUS
-TH32CreateSnapshot(DWORD dwFlags,
- DWORD th32ProcessID,
- PRTL_DEBUG_INFORMATION *HeapDebug,
- PRTL_DEBUG_INFORMATION *ModuleDebug,
- PVOID *ProcThrdInfo,
- SIZE_T *ProcThrdInfoSize)
-{
- NTSTATUS Status = STATUS_SUCCESS;
-
- *HeapDebug = NULL;
- *ModuleDebug = NULL;
- *ProcThrdInfo = NULL;
- *ProcThrdInfoSize = 0;
-
- /*
- * Allocate the debug information for a heap snapshot
- */
- if(dwFlags & TH32CS_SNAPHEAPLIST)
- {
- *HeapDebug = RtlCreateQueryDebugBuffer(0, FALSE);
- if(*HeapDebug != NULL)
- {
- Status = RtlQueryProcessDebugInformation(th32ProcessID,
- RTL_DEBUG_QUERY_HEAPS,
- *HeapDebug);
- }
- else
- Status = STATUS_UNSUCCESSFUL;
- }
-
- /*
- * Allocate the debug information for a module snapshot
- */
- if(dwFlags & TH32CS_SNAPMODULE &&
- NT_SUCCESS(Status))
- {
- *ModuleDebug = RtlCreateQueryDebugBuffer(0, FALSE);
- if(*ModuleDebug != NULL)
- {
- Status = RtlQueryProcessDebugInformation(th32ProcessID,
- RTL_DEBUG_QUERY_MODULES,
- *ModuleDebug);
- }
- else
- Status = STATUS_UNSUCCESSFUL;
- }
-
- /*
- * Allocate enough memory for the system's process list
- */
-
- if(dwFlags & (TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD) &&
- NT_SUCCESS(Status))
- {
- for(;;)
- {
- (*ProcThrdInfoSize) += 0x10000;
- Status = NtAllocateVirtualMemory(NtCurrentProcess(),
- ProcThrdInfo,
- 0,
- ProcThrdInfoSize,
- MEM_COMMIT,
- PAGE_READWRITE);
- if(!NT_SUCCESS(Status))
- {
- break;
- }
-
- Status = NtQuerySystemInformation(SystemProcessInformation,
- *ProcThrdInfo,
- *ProcThrdInfoSize,
- NULL);
- if(Status == STATUS_INFO_LENGTH_MISMATCH)
- {
- NtFreeVirtualMemory(NtCurrentProcess(),
- ProcThrdInfo,
- ProcThrdInfoSize,
- MEM_RELEASE);
- *ProcThrdInfo = NULL;
- }
- else
- {
- break;
- }
- }
- }
-
- /*
- * Free resources in case of failure!
- */
-
- if(!NT_SUCCESS(Status))
- {
- TH32FreeAllocatedResources(*HeapDebug,
- *ModuleDebug,
- *ProcThrdInfo,
- *ProcThrdInfoSize);
- }
-
- return Status;
-}
-
-static NTSTATUS
-TH32CreateSnapshotSectionInitialize(DWORD dwFlags,
- DWORD th32ProcessID,
- PRTL_DEBUG_INFORMATION HeapDebug,
- PRTL_DEBUG_INFORMATION ModuleDebug,
- PVOID ProcThrdInfo,
- HANDLE *SectionHandle)
-{
- PSYSTEM_PROCESS_INFORMATION ProcessInfo;
- LPHEAPLIST32 HeapListEntry;
- LPMODULEENTRY32W ModuleListEntry;
- LPPROCESSENTRY32W ProcessListEntry;
- LPTHREADENTRY32 ThreadListEntry;
- OBJECT_ATTRIBUTES ObjectAttributes;
- LARGE_INTEGER SSize, SOffset;
- HANDLE hSection;
- PTH32SNAPSHOT Snapshot;
- ULONG_PTR DataOffset;
- SIZE_T ViewSize;
- ULONG i, nProcesses = 0, nThreads = 0, nHeaps = 0, nModules = 0;
- ULONG RequiredSnapshotSize = sizeof(TH32SNAPSHOT);
- PRTL_PROCESS_HEAPS hi = NULL;
- PRTL_PROCESS_MODULES mi = NULL;
- NTSTATUS Status = STATUS_SUCCESS;
-
- /*
- * Determine the required size for the heap snapshot
- */
- if(dwFlags & TH32CS_SNAPHEAPLIST)
- {
- hi = (PRTL_PROCESS_HEAPS)HeapDebug->Heaps;
- nHeaps = hi->NumberOfHeaps;
- RequiredSnapshotSize += nHeaps * sizeof(HEAPLIST32);
- }
-
- /*
- * Determine the required size for the module snapshot
- */
- if(dwFlags & TH32CS_SNAPMODULE)
- {
- mi = (PRTL_PROCESS_MODULES)ModuleDebug->Modules;
- nModules = mi->NumberOfModules;
- RequiredSnapshotSize += nModules * sizeof(MODULEENTRY32W);
- }
-
- /*
- * Determine the required size for the processes and threads snapshot
- */
- if(dwFlags & (TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD))
- {
- ULONG ProcOffset = 0;
-
- ProcessInfo = (PSYSTEM_PROCESS_INFORMATION)ProcThrdInfo;
- do
- {
- ProcessInfo = (PSYSTEM_PROCESS_INFORMATION)((ULONG_PTR)ProcessInfo + ProcOffset);
- nProcesses++;
- nThreads += ProcessInfo->NumberOfThreads;
- ProcOffset = ProcessInfo->NextEntryOffset;
- } while(ProcOffset != 0);
-
- if(dwFlags & TH32CS_SNAPPROCESS)
- {
- RequiredSnapshotSize += nProcesses * sizeof(PROCESSENTRY32W);
- }
- if(dwFlags & TH32CS_SNAPTHREAD)
- {
- RequiredSnapshotSize += nThreads * sizeof(THREADENTRY32);
- }
- }
-
- /*
- * Create and map the section
- */
-
- SSize.QuadPart = RequiredSnapshotSize;
-
- InitializeObjectAttributes(&ObjectAttributes,
- NULL,
- ((dwFlags & TH32CS_INHERIT) ? OBJ_INHERIT : 0),
- NULL,
- NULL);
-
- Status = NtCreateSection(&hSection,
- SECTION_ALL_ACCESS,
- &ObjectAttributes,
- &SSize,
- PAGE_READWRITE,
- SEC_COMMIT,
- NULL);
- if(!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSection,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(!NT_SUCCESS(Status))
- {
- NtClose(hSection);
- return Status;
- }
-
- RtlZeroMemory(Snapshot, sizeof(TH32SNAPSHOT));
- DataOffset = 0;
-
- /*
- * Initialize the section data and fill it with all the data we collected
- */
-
- /* initialize the heap list */
- if(dwFlags & TH32CS_SNAPHEAPLIST)
- {
- Snapshot->HeapListCount = nHeaps;
- Snapshot->HeapListOffset = DataOffset;
- HeapListEntry = (LPHEAPLIST32)OffsetToPtr(Snapshot, DataOffset);
- for(i = 0; i < nHeaps; i++)
- {
- HeapListEntry->dwSize = sizeof(HEAPLIST32);
- HeapListEntry->th32ProcessID = th32ProcessID;
- HeapListEntry->th32HeapID = (ULONG_PTR)hi->Heaps[i].BaseAddress;
- HeapListEntry->dwFlags = hi->Heaps[i].Flags;
-
- HeapListEntry++;
- }
-
- DataOffset += hi->NumberOfHeaps * sizeof(HEAPLIST32);
- }
-
- /* initialize the module list */
- if(dwFlags & TH32CS_SNAPMODULE)
- {
- Snapshot->ModuleListCount = nModules;
- Snapshot->ModuleListOffset = DataOffset;
- ModuleListEntry = (LPMODULEENTRY32W)OffsetToPtr(Snapshot, DataOffset);
- for(i = 0; i < nModules; i++)
- {
- ModuleListEntry->dwSize = sizeof(MODULEENTRY32W);
- ModuleListEntry->th32ModuleID = 1; /* no longer used, always set to one! */
- ModuleListEntry->th32ProcessID = th32ProcessID;
- ModuleListEntry->GlblcntUsage = mi->Modules[i].LoadCount;
- ModuleListEntry->ProccntUsage = mi->Modules[i].LoadCount;
- ModuleListEntry->modBaseAddr = (BYTE*)mi->Modules[i].ImageBase;
- ModuleListEntry->modBaseSize = mi->Modules[i].ImageSize;
- ModuleListEntry->hModule = (HMODULE)mi->Modules[i].ImageBase;
-
- MultiByteToWideChar(CP_ACP,
- 0,
-
&mi->Modules[i].FullPathName[mi->Modules[i].OffsetToFileName],
- -1,
- ModuleListEntry->szModule,
- sizeof(ModuleListEntry->szModule) /
sizeof(ModuleListEntry->szModule[0]));
-
- MultiByteToWideChar(CP_ACP,
- 0,
- mi->Modules[i].FullPathName,
- -1,
- ModuleListEntry->szExePath,
- sizeof(ModuleListEntry->szExePath) /
sizeof(ModuleListEntry->szExePath[0]));
-
- ModuleListEntry++;
- }
-
- DataOffset += mi->NumberOfModules * sizeof(MODULEENTRY32W);
- }
-
- /* initialize the process list */
- if(dwFlags & TH32CS_SNAPPROCESS)
- {
- ULONG ProcOffset = 0;
-
- Snapshot->ProcessListCount = nProcesses;
- Snapshot->ProcessListOffset = DataOffset;
- ProcessListEntry = (LPPROCESSENTRY32W)OffsetToPtr(Snapshot, DataOffset);
- ProcessInfo = (PSYSTEM_PROCESS_INFORMATION)ProcThrdInfo;
- do
- {
- ProcessInfo = (PSYSTEM_PROCESS_INFORMATION)((ULONG_PTR)ProcessInfo + ProcOffset);
-
- ProcessListEntry->dwSize = sizeof(PROCESSENTRY32W);
- ProcessListEntry->cntUsage = 0; /* no longer used */
- ProcessListEntry->th32ProcessID = (ULONG_PTR)ProcessInfo->UniqueProcessId;
- ProcessListEntry->th32DefaultHeapID = 0; /* no longer used */
- ProcessListEntry->th32ModuleID = 0; /* no longer used */
- ProcessListEntry->cntThreads = ProcessInfo->NumberOfThreads;
- ProcessListEntry->th32ParentProcessID =
(ULONG_PTR)ProcessInfo->InheritedFromUniqueProcessId;
- ProcessListEntry->pcPriClassBase = ProcessInfo->BasePriority;
- ProcessListEntry->dwFlags = 0; /* no longer used */
- if(ProcessInfo->ImageName.Buffer != NULL)
- {
- lstrcpynW(ProcessListEntry->szExeFile,
- ProcessInfo->ImageName.Buffer,
- min(ProcessInfo->ImageName.Length / sizeof(WCHAR),
sizeof(ProcessListEntry->szExeFile) / sizeof(ProcessListEntry->szExeFile[0])));
- }
- else
- {
- lstrcpyW(ProcessListEntry->szExeFile, L"[System Process]");
- }
-
- ProcessListEntry++;
-
- ProcOffset = ProcessInfo->NextEntryOffset;
- } while(ProcOffset != 0);
-
- DataOffset += nProcesses * sizeof(PROCESSENTRY32W);
- }
-
- /* initialize the thread list */
- if(dwFlags & TH32CS_SNAPTHREAD)
- {
- ULONG ProcOffset = 0;
-
- Snapshot->ThreadListCount = nThreads;
- Snapshot->ThreadListOffset = DataOffset;
- ThreadListEntry = (LPTHREADENTRY32)OffsetToPtr(Snapshot, DataOffset);
- ProcessInfo = (PSYSTEM_PROCESS_INFORMATION)ProcThrdInfo;
- do
- {
- PSYSTEM_THREAD_INFORMATION ThreadInfo;
- ULONG n;
-
- ProcessInfo = (PSYSTEM_PROCESS_INFORMATION)((ULONG_PTR)ProcessInfo + ProcOffset);
- ThreadInfo = (PSYSTEM_THREAD_INFORMATION)(ProcessInfo + 1);
-
- for(n = 0; n < ProcessInfo->NumberOfThreads; n++)
- {
- ThreadListEntry->dwSize = sizeof(THREADENTRY32);
- ThreadListEntry->cntUsage = 0; /* no longer used */
- ThreadListEntry->th32ThreadID =
(ULONG_PTR)ThreadInfo->ClientId.UniqueThread;
- ThreadListEntry->th32OwnerProcessID =
(ULONG_PTR)ThreadInfo->ClientId.UniqueProcess;
- ThreadListEntry->tpBasePri = ThreadInfo->BasePriority;
- ThreadListEntry->tpDeltaPri = 0; /* no longer used */
- ThreadListEntry->dwFlags = 0; /* no longer used */
-
- ThreadInfo++;
- ThreadListEntry++;
- }
-
- ProcOffset = ProcessInfo->NextEntryOffset;
- } while(ProcOffset != 0);
- }
-
- /*
- * We're done, unmap the view and return the section handle
- */
-
- Status = NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
-
- if(NT_SUCCESS(Status))
- {
- *SectionHandle = hSection;
- }
- else
- {
- NtClose(hSection);
- }
-
- return Status;
-}
-
-/* PUBLIC FUNCTIONS ***********************************************************/
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Heap32First(LPHEAPENTRY32 lphe, DWORD th32ProcessID, DWORD th32HeapID)
-{
- PRTL_DEBUG_INFORMATION DebugInfo;
- PRTL_HEAP_INFORMATION Heap;
- PRTLP_HEAP_ENTRY Block, LastBlock;
- ULONG i;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lphe, sizeof(HEAPENTRY32));
-
- DebugInfo = RtlCreateQueryDebugBuffer(0,
- FALSE);
- if (DebugInfo == NULL)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
-
- Status = RtlQueryProcessDebugInformation(th32ProcessID,
- RTL_DEBUG_QUERY_HEAPS |
RTL_DEBUG_QUERY_HEAP_BLOCKS,
- DebugInfo);
-
- if (NT_SUCCESS(Status))
- {
- Status = STATUS_NO_MORE_FILES;
-
- for (i = 0;
- i != DebugInfo->Heaps->NumberOfHeaps;
- i++)
- {
- Heap = &DebugInfo->Heaps->Heaps[i];
-
- if ((ULONG_PTR)Heap->BaseAddress == th32HeapID)
- {
- lphe->hHandle = (HANDLE)Heap->BaseAddress;
- lphe->dwAddress = 0;
- lphe->dwBlockSize = 0;
- lphe->dwFlags = 0;
- lphe->dwLockCount = 0;
- lphe->dwResvd = 0;
- lphe->th32ProcessID = th32ProcessID;
- lphe->th32HeapID = (ULONG_PTR)Heap->BaseAddress;
-
- Block = (PRTLP_HEAP_ENTRY)Heap->Entries;
- LastBlock = Block + Heap->NumberOfEntries;
-
- while (Block != LastBlock && (Block->Flags &
PROCESS_HEAP_UNCOMMITTED_RANGE))
- {
- lphe->dwResvd++;
- lphe->dwAddress = (ULONG_PTR)((ULONG_PTR)Block->Address +
Heap->EntryOverhead);
- Block++;
- }
-
- if (Block != LastBlock && lphe->dwResvd != 0)
- {
- lphe->dwBlockSize = Block->Size;
-
- if (Block->Flags & 0x2F1) /* FIXME */
- lphe->dwFlags = LF32_FIXED;
- else if (Block->Flags & 0x20) /* FIXME */
- lphe->dwFlags = LF32_MOVEABLE;
- else if (Block->Flags & 0x100) /* FIXME */
- lphe->dwFlags = LF32_FREE;
-
- Status = STATUS_SUCCESS;
- }
-
- break;
- }
- }
- }
-
- RtlDestroyQueryDebugBuffer(DebugInfo);
-
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Heap32Next(LPHEAPENTRY32 lphe)
-{
- PRTL_DEBUG_INFORMATION DebugInfo;
- PRTL_HEAP_INFORMATION Heap;
- PRTLP_HEAP_ENTRY Block, LastBlock;
- BOOLEAN FoundUncommitted = FALSE;
- ULONG i;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lphe, sizeof(HEAPENTRY32));
-
- DebugInfo = RtlCreateQueryDebugBuffer(0,
- FALSE);
- if (DebugInfo == NULL)
- {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
-
- Status = RtlQueryProcessDebugInformation(lphe->th32ProcessID,
- RTL_DEBUG_QUERY_HEAPS |
RTL_DEBUG_QUERY_HEAP_BLOCKS,
- DebugInfo);
-
- if (NT_SUCCESS(Status))
- {
- Status = STATUS_NO_MORE_FILES;
-
- for (i = 0;
- i != DebugInfo->Heaps->NumberOfHeaps;
- i++)
- {
- Heap = &DebugInfo->Heaps->Heaps[i];
-
- if ((ULONG_PTR)Heap->BaseAddress == lphe->th32HeapID)
- {
- if (++lphe->dwResvd < Heap->NumberOfEntries)
- {
- lphe->dwFlags = 0;
-
- Block = (PRTLP_HEAP_ENTRY)Heap->Entries + lphe->dwResvd;
- LastBlock = (PRTLP_HEAP_ENTRY)Heap->Entries + Heap->NumberOfEntries;
-
- while (Block < LastBlock && (Block->Flags &
PROCESS_HEAP_UNCOMMITTED_RANGE))
- {
- lphe->dwResvd++;
- lphe->dwAddress = (ULONG_PTR)((ULONG_PTR)Block->Address +
Heap->EntryOverhead);
- FoundUncommitted = TRUE;
- Block++;
- }
-
- if (Block < LastBlock)
- {
- if (!FoundUncommitted)
- lphe->dwAddress += lphe->dwBlockSize;
-
- lphe->dwBlockSize = Block->Size;
-
- if (Block->Flags & 0x2F1) /* FIXME */
- lphe->dwFlags = LF32_FIXED;
- else if (Block->Flags & 0x20) /* FIXME */
- lphe->dwFlags = LF32_MOVEABLE;
- else if (Block->Flags & 0x100) /* FIXME */
- lphe->dwFlags = LF32_FREE;
-
- Status = STATUS_SUCCESS;
- }
- }
-
- break;
- }
- }
- }
-
- RtlDestroyQueryDebugBuffer(DebugInfo);
-
- if (!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return FALSE;
- }
-
- return TRUE;
-
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Heap32ListFirst(HANDLE hSnapshot, LPHEAPLIST32 lphl)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->HeapListCount > 0)
- {
- LPHEAPLIST32 Entries = (LPHEAPLIST32)OffsetToPtr(Snapshot,
Snapshot->HeapListOffset);
- Snapshot->HeapListIndex = 1;
- RtlCopyMemory(lphl, &Entries[0], sizeof(HEAPLIST32));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Heap32ListNext(HANDLE hSnapshot, LPHEAPLIST32 lphl)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->HeapListCount > 0 &&
- Snapshot->HeapListIndex < Snapshot->HeapListCount)
- {
- LPHEAPLIST32 Entries = (LPHEAPLIST32)OffsetToPtr(Snapshot,
Snapshot->HeapListOffset);
- RtlCopyMemory(lphl, &Entries[Snapshot->HeapListIndex++],
sizeof(HEAPLIST32));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Module32First(HANDLE hSnapshot, LPMODULEENTRY32 lpme)
-{
- MODULEENTRY32W me;
- BOOL Ret;
-
- CHECK_PARAM_SIZEA(lpme, sizeof(MODULEENTRY32));
-
- me.dwSize = sizeof(MODULEENTRY32W);
-
- Ret = Module32FirstW(hSnapshot, &me);
- if(Ret)
- {
- lpme->th32ModuleID = me.th32ModuleID;
- lpme->th32ProcessID = me.th32ProcessID;
- lpme->GlblcntUsage = me.GlblcntUsage;
- lpme->ProccntUsage = me.ProccntUsage;
- lpme->modBaseAddr = me.modBaseAddr;
- lpme->modBaseSize = me.modBaseSize;
- lpme->hModule = me.hModule;
-
- WideCharToMultiByte(CP_ACP, 0, me.szModule, -1, lpme->szModule,
sizeof(lpme->szModule), 0, 0);
- WideCharToMultiByte(CP_ACP, 0, me.szExePath, -1, lpme->szExePath,
sizeof(lpme->szExePath), 0, 0);
- }
-
- return Ret;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Module32FirstW(HANDLE hSnapshot, LPMODULEENTRY32W lpme)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->ModuleListCount > 0)
- {
- LPMODULEENTRY32W Entries = (LPMODULEENTRY32W)OffsetToPtr(Snapshot,
Snapshot->ModuleListOffset);
- Snapshot->ModuleListIndex = 1;
- RtlCopyMemory(lpme, &Entries[0], sizeof(MODULEENTRY32W));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Module32Next(HANDLE hSnapshot, LPMODULEENTRY32 lpme)
-{
- MODULEENTRY32W me;
- BOOL Ret;
-
- CHECK_PARAM_SIZEA(lpme, sizeof(MODULEENTRY32));
-
- me.dwSize = sizeof(MODULEENTRY32W);
-
- Ret = Module32NextW(hSnapshot, &me);
- if(Ret)
- {
- lpme->th32ModuleID = me.th32ModuleID;
- lpme->th32ProcessID = me.th32ProcessID;
- lpme->GlblcntUsage = me.GlblcntUsage;
- lpme->ProccntUsage = me.ProccntUsage;
- lpme->modBaseAddr = me.modBaseAddr;
- lpme->modBaseSize = me.modBaseSize;
- lpme->hModule = me.hModule;
-
- WideCharToMultiByte(CP_ACP, 0, me.szModule, -1, lpme->szModule,
sizeof(lpme->szModule), 0, 0);
- WideCharToMultiByte(CP_ACP, 0, me.szExePath, -1, lpme->szExePath,
sizeof(lpme->szExePath), 0, 0);
- }
-
- return Ret;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Module32NextW(HANDLE hSnapshot, LPMODULEENTRY32W lpme)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if((Snapshot->ModuleListCount > 0) &&
- (Snapshot->ModuleListIndex < Snapshot->ModuleListCount))
- {
- LPMODULEENTRY32W Entries = (LPMODULEENTRY32W)OffsetToPtr(Snapshot,
Snapshot->ModuleListOffset);
- RtlCopyMemory(lpme, &Entries[Snapshot->ModuleListIndex++],
sizeof(MODULEENTRY32W));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)
-{
- PROCESSENTRY32W pe;
- BOOL Ret;
-
- CHECK_PARAM_SIZEA(lppe, sizeof(PROCESSENTRY32));
-
- pe.dwSize = sizeof(PROCESSENTRY32W);
-
- Ret = Process32FirstW(hSnapshot, &pe);
- if(Ret)
- {
- lppe->cntUsage = pe.cntUsage;
- lppe->th32ProcessID = pe.th32ProcessID;
- lppe->th32DefaultHeapID = pe.th32DefaultHeapID;
- lppe->th32ModuleID = pe.th32ModuleID;
- lppe->cntThreads = pe.cntThreads;
- lppe->th32ParentProcessID = pe.th32ParentProcessID;
- lppe->pcPriClassBase = pe.pcPriClassBase;
- lppe->dwFlags = pe.dwFlags;
-
- WideCharToMultiByte(CP_ACP, 0, pe.szExeFile, -1, lppe->szExeFile,
sizeof(lppe->szExeFile), 0, 0);
- }
-
- return Ret;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Process32FirstW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->ProcessListCount > 0)
- {
- LPPROCESSENTRY32W Entries = (LPPROCESSENTRY32W)OffsetToPtr(Snapshot,
Snapshot->ProcessListOffset);
-
- Snapshot->ProcessListIndex = 1;
- RtlCopyMemory(lppe, &Entries[0], sizeof(PROCESSENTRY32W));
- Ret = TRUE;
- }
- else
- {
-
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)
-{
- PROCESSENTRY32W pe;
- BOOL Ret;
-
- CHECK_PARAM_SIZEA(lppe, sizeof(PROCESSENTRY32));
-
- pe.dwSize = sizeof(PROCESSENTRY32W);
-
- Ret = Process32NextW(hSnapshot, &pe);
- if(Ret)
- {
- lppe->cntUsage = pe.cntUsage;
- lppe->th32ProcessID = pe.th32ProcessID;
- lppe->th32DefaultHeapID = pe.th32DefaultHeapID;
- lppe->th32ModuleID = pe.th32ModuleID;
- lppe->cntThreads = pe.cntThreads;
- lppe->th32ParentProcessID = pe.th32ParentProcessID;
- lppe->pcPriClassBase = pe.pcPriClassBase;
- lppe->dwFlags = pe.dwFlags;
-
- WideCharToMultiByte(CP_ACP, 0, pe.szExeFile, -1, lppe->szExeFile,
sizeof(lppe->szExeFile), 0, 0);
- }
-
- return Ret;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Process32NextW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->ProcessListCount > 0 &&
- Snapshot->ProcessListIndex < Snapshot->ProcessListCount)
- {
- LPPROCESSENTRY32W Entries = (LPPROCESSENTRY32W)OffsetToPtr(Snapshot,
Snapshot->ProcessListOffset);
- RtlCopyMemory(lppe, &Entries[Snapshot->ProcessListIndex++],
sizeof(PROCESSENTRY32W));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->ThreadListCount > 0)
- {
- LPTHREADENTRY32 Entries = (LPTHREADENTRY32)OffsetToPtr(Snapshot,
Snapshot->ThreadListOffset);
- Snapshot->ThreadListIndex = 1;
- RtlCopyMemory(lpte, &Entries[0], sizeof(THREADENTRY32));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
-{
- PTH32SNAPSHOT Snapshot;
- LARGE_INTEGER SOffset;
- SIZE_T ViewSize;
- NTSTATUS Status;
-
- CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32));
-
- SOffset.QuadPart = 0;
- ViewSize = 0;
- Snapshot = NULL;
-
- Status = NtMapViewOfSection(hSnapshot,
- NtCurrentProcess(),
- (PVOID*)&Snapshot,
- 0,
- 0,
- &SOffset,
- &ViewSize,
- ViewShare,
- 0,
- PAGE_READWRITE);
- if(NT_SUCCESS(Status))
- {
- BOOL Ret;
-
- if(Snapshot->ThreadListCount > 0 &&
- Snapshot->ThreadListIndex < Snapshot->ThreadListCount)
- {
- LPTHREADENTRY32 Entries = (LPTHREADENTRY32)OffsetToPtr(Snapshot,
Snapshot->ThreadListOffset);
- RtlCopyMemory(lpte, &Entries[Snapshot->ThreadListIndex++],
sizeof(THREADENTRY32));
- Ret = TRUE;
- }
- else
- {
- SetLastError(ERROR_NO_MORE_FILES);
- Ret = FALSE;
- }
-
- NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)Snapshot);
- return Ret;
- }
-
- SetLastErrorByStatus(Status);
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-Toolhelp32ReadProcessMemory(DWORD th32ProcessID, LPCVOID lpBaseAddress,
- LPVOID lpBuffer, SIZE_T cbRead, SIZE_T* lpNumberOfBytesRead)
-{
- HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, th32ProcessID);
- if(hProcess != NULL)
- {
- BOOL Ret = ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, cbRead,
lpNumberOfBytesRead);
- CloseHandle(hProcess);
- return Ret;
- }
-
- return FALSE;
-}
-
-
-/*
- * @implemented
- */
-HANDLE
-WINAPI
-CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID)
-{
- PRTL_DEBUG_INFORMATION HeapDebug, ModuleDebug;
- PVOID ProcThrdInfo;
- SIZE_T ProcThrdInfoSize;
- NTSTATUS Status;
- HANDLE hSnapShotSection = NULL;
-
- if(th32ProcessID == 0)
- {
- th32ProcessID = GetCurrentProcessId();
- }
-
- /*
- * Get all information required for the snapshot
- */
- Status = TH32CreateSnapshot(dwFlags,
- th32ProcessID,
- &HeapDebug,
- &ModuleDebug,
- &ProcThrdInfo,
- &ProcThrdInfoSize);
- if(!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return NULL;
- }
-
- /*
- * Create a section handle and initialize the collected information
- */
- Status = TH32CreateSnapshotSectionInitialize(dwFlags,
- th32ProcessID,
- HeapDebug,
- ModuleDebug,
- ProcThrdInfo,
- &hSnapShotSection);
-
- /*
- * Free the temporarily allocated memory which is no longer needed
- */
- TH32FreeAllocatedResources(HeapDebug,
- ModuleDebug,
- ProcThrdInfo,
- ProcThrdInfoSize);
-
- if(!NT_SUCCESS(Status))
- {
- SetLastErrorByStatus(Status);
- return NULL;
- }
-
- return hSnapShotSection;
-}
-
-/* EOF */
Added: trunk/reactos/dll/win32/kernel32/client/time.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/time.c (added)
+++ trunk/reactos/dll/win32/kernel32/client/time.c [iso-8859-1] Fri Jul 22 03:21:17 2011
@@ -1,0 +1,451 @@
+/* $Id: time.c 52770 2011-07-22 02:13:57Z ion $
+ *
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS system libraries
+ * FILE: lib/kernel32/misc/time.c
+ * PURPOSE: Time conversion functions
+ * PROGRAMMER: Ariadne
+ * DOSDATE and DOSTIME structures from Onno Hovers
+ * UPDATE HISTORY:
+ * Created 19/01/99
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <k32.h>
+
+#define NDEBUG
+#include <debug.h>
+
+/* TYPES *********************************************************************/
+
+typedef struct __DOSTIME
+{
+ WORD Second:5;
+ WORD Minute:6;
+ WORD Hour:5;
+} DOSTIME, *PDOSTIME;
+
+typedef struct __DOSDATE
+{
+ WORD Day:5;
+ WORD Month:4;
+ WORD Year:5;
+} DOSDATE, *PDOSDATE;
+
+/* FUNCTIONS ******************************************************************/
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+FileTimeToDosDateTime(CONST FILETIME *lpFileTime,
+ LPWORD lpFatDate,
+ LPWORD lpFatTime)
+{
+ PDOSTIME pdtime=(PDOSTIME) lpFatTime;
+ PDOSDATE pddate=(PDOSDATE) lpFatDate;
+ SYSTEMTIME SystemTime = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ if (lpFileTime == NULL)
+ return FALSE;
+
+ if (lpFatDate == NULL)
+ return FALSE;
+
+ if (lpFatTime == NULL)
+ return FALSE;
+
+ FileTimeToSystemTime(lpFileTime, &SystemTime);
+
+ pdtime->Second = SystemTime.wSecond / 2;
+ pdtime->Minute = SystemTime.wMinute;
+ pdtime->Hour = SystemTime.wHour;
+
+ pddate->Day = SystemTime.wDay;
+ pddate->Month = SystemTime.wMonth;
+ pddate->Year = SystemTime.wYear - 1980;
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+DosDateTimeToFileTime(WORD wFatDate,
+ WORD wFatTime,
+ LPFILETIME lpFileTime)
+{
+ PDOSTIME pdtime = (PDOSTIME) &wFatTime;
+ PDOSDATE pddate = (PDOSDATE) &wFatDate;
+ SYSTEMTIME SystemTime;
+
+ if (lpFileTime == NULL)
+ return FALSE;
+
+ SystemTime.wMilliseconds = 0;
+ SystemTime.wSecond = pdtime->Second * 2;
+ SystemTime.wMinute = pdtime->Minute;
+ SystemTime.wHour = pdtime->Hour;
+
+ SystemTime.wDay = pddate->Day;
+ SystemTime.wMonth = pddate->Month;
+ SystemTime.wYear = 1980 + pddate->Year;
+
+ if (SystemTimeToFileTime(&SystemTime, lpFileTime) == FALSE)
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+LONG
+WINAPI
+CompareFileTime(CONST FILETIME *lpFileTime1, CONST FILETIME *lpFileTime2)
+{
+ if (lpFileTime1 == NULL)
+ return 0;
+ if (lpFileTime2 == NULL)
+ return 0;
+
+ if (*((PLONGLONG)lpFileTime1) > *((PLONGLONG)lpFileTime2))
+ return 1;
+ else if (*((PLONGLONG)lpFileTime1) < *((PLONGLONG)lpFileTime2))
+ return -1;
+
+ return 0;
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+WINAPI
+GetSystemTimeAsFileTime(PFILETIME lpFileTime)
+{
+ do
+ {
+ lpFileTime->dwHighDateTime = SharedUserData->SystemTime.High1Time;
+ lpFileTime->dwLowDateTime = SharedUserData->SystemTime.LowPart;
+ }
+ while (lpFileTime->dwHighDateTime !=
(DWORD)SharedUserData->SystemTime.High2Time);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+SystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime)
+{
+ TIME_FIELDS TimeFields;
+ LARGE_INTEGER liTime;
+
+ TimeFields.Year = lpSystemTime->wYear;
+ TimeFields.Month = lpSystemTime->wMonth;
+ TimeFields.Day = lpSystemTime->wDay;
+ TimeFields.Hour = lpSystemTime->wHour;
+ TimeFields.Minute = lpSystemTime->wMinute;
+ TimeFields.Second = lpSystemTime->wSecond;
+ TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
+
+ if (RtlTimeFieldsToTime (&TimeFields, &liTime))
+ {
+ lpFileTime->dwLowDateTime = liTime.u.LowPart;
+ lpFileTime->dwHighDateTime = liTime.u.HighPart;
+ return TRUE;
+ }
+
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+FileTimeToSystemTime(CONST FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime)
+{
+ TIME_FIELDS TimeFields;
+ LARGE_INTEGER liTime;
+
+ if (lpFileTime->dwHighDateTime & 0x80000000)
+ return FALSE;
+
+ liTime.u.LowPart = lpFileTime->dwLowDateTime;
+ liTime.u.HighPart = lpFileTime->dwHighDateTime;
+
+ RtlTimeToTimeFields(&liTime, &TimeFields);
+
+ lpSystemTime->wYear = TimeFields.Year;
+ lpSystemTime->wMonth = TimeFields.Month;
+ lpSystemTime->wDay = TimeFields.Day;
+ lpSystemTime->wHour = TimeFields.Hour;
+ lpSystemTime->wMinute = TimeFields.Minute;
+ lpSystemTime->wSecond = TimeFields.Second;
+ lpSystemTime->wMilliseconds = TimeFields.Milliseconds;
+ lpSystemTime->wDayOfWeek = TimeFields.Weekday;
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+FileTimeToLocalFileTime(CONST FILETIME *lpFileTime, LPFILETIME lpLocalFileTime)
+{
+ LARGE_INTEGER TimeZoneBias;
+
+ do
+ {
+ TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
+ TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
+ }
+ while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
+
+ *((PLONGLONG)lpLocalFileTime) = *((PLONGLONG)lpFileTime) - TimeZoneBias.QuadPart;
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+LocalFileTimeToFileTime(CONST FILETIME *lpLocalFileTime, LPFILETIME lpFileTime)
+{
+ LARGE_INTEGER TimeZoneBias;
+
+ do
+ {
+ TimeZoneBias.HighPart = SharedUserData->TimeZoneBias.High1Time;
+ TimeZoneBias.LowPart = SharedUserData->TimeZoneBias.LowPart;
+ }
+ while (TimeZoneBias.HighPart != SharedUserData->TimeZoneBias.High2Time);
+
+ *((PLONGLONG)lpFileTime) = *((PLONGLONG)lpLocalFileTime) + TimeZoneBias.QuadPart;
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+WINAPI
+GetLocalTime(LPSYSTEMTIME lpSystemTime)
+{
+ FILETIME FileTime;
+ FILETIME LocalFileTime;
+
+ GetSystemTimeAsFileTime(&FileTime);
+ FileTimeToLocalFileTime(&FileTime, &LocalFileTime);
+ FileTimeToSystemTime(&LocalFileTime, lpSystemTime);
+}
+
+
+/*
+ * @implemented
+ */
+VOID
+WINAPI
+GetSystemTime(LPSYSTEMTIME lpSystemTime)
+{
+ FILETIME FileTime;
+
+ GetSystemTimeAsFileTime(&FileTime);
+ FileTimeToSystemTime(&FileTime, lpSystemTime);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+SetLocalTime(CONST SYSTEMTIME *lpSystemTime)
+{
+ FILETIME LocalFileTime;
+ LARGE_INTEGER FileTime;
+ NTSTATUS Status;
+
+ SystemTimeToFileTime(lpSystemTime, &LocalFileTime);
+ LocalFileTimeToFileTime(&LocalFileTime, (FILETIME *)&FileTime);
+ Status = NtSetSystemTime(&FileTime, &FileTime);
+ if (!NT_SUCCESS(Status))
+ return FALSE;
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+SetSystemTime(CONST SYSTEMTIME *lpSystemTime)
+{
+ LARGE_INTEGER NewSystemTime;
+ NTSTATUS Status;
+
+ SystemTimeToFileTime(lpSystemTime, (PFILETIME)&NewSystemTime);
+ Status = NtSetSystemTime(&NewSystemTime, &NewSystemTime);
+ if (!NT_SUCCESS(Status))
+ return FALSE;
+ return TRUE;
+}
+
+/*
+ * @implemented
+ */
+DWORD
+WINAPI
+GetTickCount(VOID)
+{
+ ULARGE_INTEGER TickCount;
+
+ while (TRUE)
+ {
+ TickCount.HighPart = (ULONG)SharedUserData->TickCount.High1Time;
+ TickCount.LowPart = SharedUserData->TickCount.LowPart;
+
+ if (TickCount.HighPart == (ULONG)SharedUserData->TickCount.High2Time)
+ break;
+
+ YieldProcessor();
+ }
+
+ return (ULONG)((UInt32x32To64(TickCount.LowPart,
SharedUserData->TickCountMultiplier) >> 24) +
+ UInt32x32To64((TickCount.HighPart << 8) & 0xFFFFFFFF,
SharedUserData->TickCountMultiplier));
+
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+WINAPI
+SetClientTimeZoneInformation(
+ CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation)
+{
+ STUB;
+ return 0;
+}
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+GetSystemTimeAdjustment(PDWORD lpTimeAdjustment,
+ PDWORD lpTimeIncrement,
+ PBOOL lpTimeAdjustmentDisabled)
+{
+ SYSTEM_QUERY_TIME_ADJUST_INFORMATION Buffer;
+ NTSTATUS Status;
+
+ Status = NtQuerySystemInformation(SystemTimeAdjustmentInformation,
+ &Buffer,
+ sizeof(SYSTEM_QUERY_TIME_ADJUST_INFORMATION),
+ NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastErrorByStatus(Status);
+ return FALSE;
+ }
+
+ *lpTimeAdjustment = (DWORD)Buffer.TimeAdjustment;
+ *lpTimeIncrement = (DWORD)Buffer.TimeIncrement;
+ *lpTimeAdjustmentDisabled = (BOOL)Buffer.Enable;
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+SetSystemTimeAdjustment(DWORD dwTimeAdjustment,
+ BOOL bTimeAdjustmentDisabled)
+{
+ NTSTATUS Status;
+ SYSTEM_SET_TIME_ADJUST_INFORMATION Buffer;
+
+ Buffer.TimeAdjustment = (ULONG)dwTimeAdjustment;
+ Buffer.Enable = (BOOLEAN)bTimeAdjustmentDisabled;
+
+ Status = NtSetSystemInformation(SystemTimeAdjustmentInformation,
+ &Buffer,
+ sizeof(SYSTEM_SET_TIME_ADJUST_INFORMATION));
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastErrorByStatus(Status);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+GetSystemTimes(LPFILETIME lpIdleTime,
+ LPFILETIME lpKernelTime,
+ LPFILETIME lpUserTime)
+{
+ SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SysProcPerfInfo;
+ NTSTATUS Status;
+
+ Status = ZwQuerySystemInformation(SystemProcessorPerformanceInformation,
+ &SysProcPerfInfo,
+ sizeof(SysProcPerfInfo),
+ NULL);
+
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastErrorByStatus(Status);
+ return FALSE;
+ }
+/*
+ Good only for one processor system.
+ */
+
+ lpIdleTime->dwLowDateTime = SysProcPerfInfo.IdleTime.LowPart;
+ lpIdleTime->dwHighDateTime = SysProcPerfInfo.IdleTime.HighPart;
+
+ lpKernelTime->dwLowDateTime = SysProcPerfInfo.KernelTime.LowPart;
+ lpKernelTime->dwHighDateTime = SysProcPerfInfo.KernelTime.HighPart;
+
+ lpUserTime->dwLowDateTime = SysProcPerfInfo.UserTime.LowPart;
+ lpUserTime->dwHighDateTime = SysProcPerfInfo.UserTime.HighPart;
+
+ return TRUE;
+}
+
+
+
+/* EOF */
Propchange: trunk/reactos/dll/win32/kernel32/client/time.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/win32/kernel32/kernel32.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/kernel3…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/kernel32.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/kernel32.rbuild [iso-8859-1] Fri Jul 22 03:21:17
2011
@@ -44,8 +44,10 @@
<file>session.c</file>
<file>synch.c</file>
<file>sysinfo.c</file>
+ <file>time.c</file>
<file>timerqueue.c</file>
<file>thread.c</file>
+ <file>toolhelp.c</file>
<file>utils.c</file>
<file>vdm.c</file>
<file>version.c</file>
@@ -85,8 +87,7 @@
<file>muldiv.c</file>
<file>profile.c</file>
<file>res.c</file>
- <file>time.c</file>
- <file>toolhelp.c</file>
+ <file>timezone.c</file>
</directory>
</directory>
<directory name="winnls">