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_