00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
#ifndef _STD_TIME_P_
00023 
#define _STD_TIME_P_
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 extern LARGE_INTEGER 
Magic10000;
00037 #define SHIFT10000                       13
00038 
00039 extern LARGE_INTEGER 
Magic10000000;
00040 #define SHIFT10000000                    23
00041 
00042 extern LARGE_INTEGER 
Magic86400000;
00043 #define SHIFT86400000                    26
00044 
00045 
00046 
00047 
00048 
00049 
00050 #define Convert100nsToMilliseconds(LARGE_INTEGER) (                         \
00051 
    RtlExtendedMagicDivide( (LARGE_INTEGER), Magic10000, SHIFT10000 )       \
00052 
    )
00053 
00054 #define ConvertMillisecondsTo100ns(MILLISECONDS) (                 \
00055 
    RtlExtendedIntegerMultiply( (MILLISECONDS), 10000 )            \
00056 
    )
00057 
00058 #define Convert100nsToSeconds(LARGE_INTEGER) (                              \
00059 
    RtlExtendedMagicDivide( (LARGE_INTEGER), Magic10000000, SHIFT10000000 ) \
00060 
    )
00061 
00062 #define ConvertSecondsTo100ns(SECONDS) (                           \
00063 
    RtlExtendedIntegerMultiply( (SECONDS), 10000000L )             \
00064 
    )
00065 
00066 #define ConvertMillisecondsToDays(LARGE_INTEGER) (                          \
00067 
    RtlExtendedMagicDivide( (LARGE_INTEGER), Magic86400000, SHIFT86400000 ) \
00068 
    )
00069 
00071 
00072 
00073 
00075 
00076 
00077 
00078 
00079 
00080 
00081 #define MAX_STDTIME_TDF (780)
00082 #define MIN_STDTIME_TDF (-720)
00083 
00084 
00085 
00086 
00087 
00088 
00089 #define STDTIME_REVISION (4)
00090 
00091 
00092 
00093 
00094 
00095 
00096 
00097 #define STDTIME_REVISION_SHIFT 12
00098 
00099 
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108 
00109 
00110 #define ShiftStandardTimeRevision(Rev)                                        \
00111 
   ((USHORT) ((Rev) << STDTIME_REVISION_SHIFT))
00112 
00113 
00114 
00115 
00116 
00117 
00118 #define SHIFTED_STDTIME_REVISION (ShiftStandardTimeRevision(STDTIME_REVISION))
00119 
00120 
00121 
00122 
00123 
00124 
00125 
00126 #define TDF_MASK ((USHORT) 0x0fff)
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 #define MaskStandardTimeTdf(Tdf) ((USHORT) ((Tdf) & TDF_MASK))
00142 
00143 
00144 
00145 
00146 
00147 
00148 
00149 
00150 
00151 
00152 
00153 
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 #define GetStandardTimeTdf(StdTime)                                           \
00162 
   ((SHORT)                                                                   \
00163 
     (((StdTime)->TdfAndRevision) & 0x0800)                                   \
00164 
        ? (MaskStandardTimeTdf((StdTime)->TdfAndRevision) - 0x1000)           \
00165 
        : MaskStandardTimeTdf((StdTime)->TdfAndRevision)                      \
00166 
   )
00167 
00168 
00169 
00170 
00171 
00172 
00173 
00174 
00175 
00176 
00177 
00178 
00179 #define GetStandardTimeRev(StdTime)                                           \
00180 
   ((USHORT) (((StdTime)->TdfAndRevision) >> STDTIME_REVISION_SHIFT))
00181 
00182 
00183 
00185 
00186 
00187 
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198 
00199 
00200 #define IsPositive(Time)                                                      \
00201 
   ( ((Time).HighPart > 0) || (((Time).HighPart = 0) & ((Time).LowPart > 0)) )
00202 
00203 
00204 
00205 
00206 
00207 
00208 
00209 
00210 
00211 
00212 
00213 #define IsAbsoluteTime(Time)                                                  \
00214 
   ( IsPositive(Time->SimpleTime) )
00215 
00216 
00217 
00218 
00219 
00220 
00221 
00222 
00223 
00224 
00225 
00226 
00227 #define IsDeltaTime(Time)                                                     \
00228 
   ( !IsAbsoluteTime(Time) )
00229 
00230 
00231 
00232 
00233 
00234 
00235 
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00243 
00244 
00245 #define GreaterThanTime(Time1, Time2)                                         \
00246 
   (                                                                          \
00247 
     ((Time1).HighPart > (Time2).HighPart)                                    \
00248 
     ||                                                                       \
00249 
     (                                                                        \
00250 
      ((Time1).HighPart == (Time2).HighPart)                                  \
00251 
      &&                                                                      \
00252 
      ((Time1).LowPart > (Time2).LowPart)                                     \
00253 
     )                                                                        \
00254 
   )
00255 
00256 
00257 
00258 
00259 
00260 
00261 
00262 
00263 
00264 
00265 
00266 
00267 
00268 #define GreaterThanStdTime(Time1, Time2) \
00269 
   GreaterThanTime((Time1).SimpleTime, (Time2).SimpleTime)
00270 
00271 
00272 
00274 
00275 
00276 
00277 
00279 
00280 
00281 
00282 
00283 
00284 #define WEEKDAY_OF_1601                  1
00285 
00286 
00287 
00288 
00289 
00290 
00291 
00292 
00293 
00294 
00295 
00296 
00297 extern LARGE_INTEGER 
SecondsToStartOf1970;
00298 extern LARGE_INTEGER 
SecondsToStartOf1980;
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306 
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314 
00315 
00316 
00317 
00318 
00319 
00320 
00321 
00322 
00323 #define ElapsedDaysToYears(DAYS) ( \
00324 
    ((DAYS) * 128 + 127) / 46751   \
00325 
    )
00326 
00327 
00328 
00329 
00330 
00331 
00332 
00333 
00334 
00335 
00336 
00337 
00338 
00339 #define NumberOfLeapYears(YEARS) (                    \
00340 
    ((YEARS) / 4) - ((YEARS) / 100) + ((YEARS) / 400) \
00341 
    )
00342 
00343 
00344 
00345 
00346 
00347 
00348 
00349 
00350 
00351 
00352 
00353 
00354 #define ElapsedYearsToDays(YEARS) (            \
00355 
    ((YEARS) * 365) + NumberOfLeapYears(YEARS) \
00356 
    )
00357 
00358 
00359 
00360 
00361 
00362 
00363 
00364 
00365 
00366 
00367 
00368 #define IsLeapYear(YEARS) (                        \
00369 
    (((YEARS) % 400 == 0) ||                       \
00370 
     ((YEARS) % 100 != 0) && ((YEARS) % 4 == 0)) ? \
00371 
        TRUE                                       \
00372 
    :                                              \
00373 
        FALSE                                      \
00374 
    )
00375 
00376 
00377 
00378 
00379 
00380 
00381 
00382 
00383 
00384 
00385 
00386 
00387 
00388 #define MaxDaysInMonth(YEAR,MONTH) (                                      \
00389 
    IsLeapYear(YEAR) ?                                                    \
00390 
        LeapYearDaysPrecedingMonth[(MONTH) + 1] -                         \
00391 
                                    LeapYearDaysPrecedingMonth[(MONTH)]   \
00392 
    :                                                                     \
00393 
        NormalYearDaysPrecedingMonth[(MONTH) + 1] -                       \
00394 
                                    NormalYearDaysPrecedingMonth[(MONTH)] \
00395 
    )
00396 
00397 
00398 
00399 
00400 
00401 
00402 
VOID
00403 
RtlpConvert48To64(
00404    IN PSTDTIME_ERROR num48,
00405    OUT LARGE_INTEGER *num64
00406    );
00407 
00408 
NTSTATUS
00409 
RtlpConvert64To48(
00410    IN LARGE_INTEGER num64,
00411    OUT PSTDTIME_ERROR num48
00412    );
00413 
00414 LARGE_INTEGER
00415 
RtlpTimeToLargeInt(
00416    IN LARGE_INTEGER Time
00417    );
00418 
00419 LARGE_INTEGER
00420 
RtlpLargeIntToTime(
00421    IN LARGE_INTEGER Int
00422    );
00423 
00424 
NTSTATUS
00425 
RtlpAdd48Int(
00426    IN PSTDTIME_ERROR First48,
00427    IN PSTDTIME_ERROR Second48,
00428    IN PSTDTIME_ERROR Result48
00429    );
00430 
00431 
NTSTATUS
00432 
RtlpAddTime(
00433    IN LARGE_INTEGER Time1,
00434    IN LARGE_INTEGER Time2,
00435    OUT PLARGE_INTEGER Result
00436    );
00437 
00438 
NTSTATUS
00439 
RtlpSubtractTime(
00440    IN LARGE_INTEGER Time1,
00441    IN LARGE_INTEGER Time2,
00442    OUT PLARGE_INTEGER Result
00443    );
00444 
00445 LARGE_INTEGER
00446 
RtlpAbsTime(
00447    IN LARGE_INTEGER Time
00448    );
00449 
00450 
#endif //_STD_TIME_P_