00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef _KE_
00022
#define _KE_
00023
00024
00025
00026
00027
00028 #define CLOCK_QUANTUM_DECREMENT 3
00029 #define WAIT_QUANTUM_DECREMENT 1
00030
00031
00032
00033
00034
00035 #define READY_SKIP_QUANTUM 2
00036 #define THREAD_QUANTUM (READY_SKIP_QUANTUM * CLOCK_QUANTUM_DECREMENT)
00037
00038
00039
00040
00041
00042 #define ROUND_TRIP_DECREMENT_COUNT 16
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 typedef struct _KTHREAD_SWITCH_COUNTERS {
00059 ULONG
FindAny;
00060 ULONG
FindIdeal;
00061 ULONG
FindLast;
00062 ULONG
IdleAny;
00063 ULONG
IdleCurrent;
00064 ULONG
IdleIdeal;
00065 ULONG
IdleLast;
00066 ULONG
PreemptAny;
00067 ULONG
PreemptCurrent;
00068 ULONG
PreemptLast;
00069 ULONG
SwitchToIdle;
00070 }
KTHREAD_SWITCH_COUNTERS, *
PKTHREAD_SWITCH_COUNTERS;
00071
00072
00073
00074
00075
00076 #define BASE_PRIORITY_THRESHOLD NORMAL_BASE_PRIORITY // fast path base threshold
00077
00078
00079 #define THREAD_WAIT_OBJECTS 3 // Builtin usable wait blocks
00080
00081
00082 #define EVENT_WAIT_BLOCK 2 // Builtin event pair wait block
00083 #define SEMAPHORE_WAIT_BLOCK 2 // Builtin semaphore wait block
00084 #define TIMER_WAIT_BLOCK 3 // Builtin timer wait block
00085
00086
#if (EVENT_WAIT_BLOCK != SEMAPHORE_WAIT_BLOCK)
00087
#error "wait event and wait semaphore must use same wait block"
00088
#endif
00089
00090
00091
00092
00093
00094 #define TIMER_TABLE_SIZE 128
00095
00096
00097
00098
00099
00100 #define KeGetCurrentApcEnvironment() \
00101
KeGetCurrentThread()->ApcStateIndex
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 #define DISPATCHER_OBJECT_TYPE_MASK 0x7
00121
00122 typedef enum _KOBJECTS {
00123
EventNotificationObject = 0,
00124
EventSynchronizationObject = 1,
00125
MutantObject = 2,
00126
ProcessObject = 3,
00127
QueueObject = 4,
00128
SemaphoreObject = 5,
00129
ThreadObject = 6,
00130
Spare1Object = 7,
00131
TimerNotificationObject = 8,
00132
TimerSynchronizationObject = 9,
00133
Spare2Object = 10,
00134
Spare3Object = 11,
00135
Spare4Object = 12,
00136
Spare5Object = 13,
00137
Spare6Object = 14,
00138
Spare7Object = 15,
00139
Spare8Object = 16,
00140
Spare9Object = 17,
00141
ApcObject,
00142
DpcObject,
00143
DeviceQueueObject,
00144
EventPairObject,
00145
InterruptObject,
00146
ProfileObject
00147 }
KOBJECTS;
00148
00149
00150
00151
00152
00153 typedef enum _KAPC_ENVIRONMENT {
00154
OriginalApcEnvironment,
00155
AttachedApcEnvironment,
00156
CurrentApcEnvironment
00157 }
KAPC_ENVIRONMENT;
00158
00159
00160
00161
00162
00163
00164
00165 typedef enum _KINTERRUPT_MODE {
00166
LevelSensitive,
00167
Latched
00168 }
KINTERRUPT_MODE;
00169
00170
00171
00172
00173
00174
00175
00176 typedef enum _KPROCESS_STATE {
00177
ProcessInMemory,
00178
ProcessOutOfMemory,
00179
ProcessInTransition,
00180
ProcessInSwap,
00181
ProcessOutSwap
00182 }
KPROCESS_STATE;
00183
00184
00185
00186
00187
00188 typedef enum _KTHREAD_STATE {
00189
Initialized,
00190
Ready,
00191
Running,
00192
Standby,
00193
Terminated,
00194
Waiting,
00195
Transition
00196 }
KTHREAD_STATE;
00197
00198
00199
00200
00201
00202
00203 typedef enum _KWAIT_REASON {
00204
Executive,
00205
FreePage,
00206
PageIn,
00207
PoolAllocation,
00208
DelayExecution,
00209
Suspended,
00210
UserRequest,
00211
WrExecutive,
00212
WrFreePage,
00213
WrPageIn,
00214
WrPoolAllocation,
00215
WrDelayExecution,
00216
WrSuspended,
00217
WrUserRequest,
00218
WrEventPair,
00219
WrQueue,
00220
WrLpcReceive,
00221
WrLpcReply,
00222
WrVirtualMemory,
00223
WrPageOut,
00224
WrRendezvous,
00225
Spare2,
00226
Spare3,
00227
Spare4,
00228
Spare5,
00229
Spare6,
00230
WrKernel,
00231
MaximumWaitReason
00232 }
KWAIT_REASON;
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242 typedef struct _KAPC_STATE {
00243 LIST_ENTRY
ApcListHead[
MaximumMode];
00244 struct _KPROCESS *
Process;
00245 BOOLEAN
KernelApcInProgress;
00246 BOOLEAN
KernelApcPending;
00247 BOOLEAN
UserApcPending;
00248 }
KAPC_STATE, *
PKAPC_STATE, *RESTRICTED_POINTER
PRKAPC_STATE;
00249
00250
00251
00252
00253
00254
00255
00256
00257 typedef struct _DISPATCHER_HEADER {
00258 UCHAR
Type;
00259 UCHAR
Absolute;
00260 UCHAR
Size;
00261 UCHAR
Inserted;
00262 LONG
SignalState;
00263 LIST_ENTRY
WaitListHead;
00264 }
DISPATCHER_HEADER;
00265
00266
00267
00268
00269
00270
00271
00272 typedef ULONG
KPAGE_FRAME;
00273
00274
00275
00276
00277
00278
00279 typedef struct _KWAIT_BLOCK {
00280 LIST_ENTRY
WaitListEntry;
00281 struct _KTHREAD *RESTRICTED_POINTER
Thread;
00282 PVOID
Object;
00283 struct _KWAIT_BLOCK *RESTRICTED_POINTER
NextWaitBlock;
00284 USHORT WaitKey;
00285 USHORT WaitType;
00286 }
KWAIT_BLOCK, *
PKWAIT_BLOCK, *RESTRICTED_POINTER
PRKWAIT_BLOCK;
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301 #define NUMBER_SERVICE_TABLES 4
00302 #define SERVICE_NUMBER_MASK ((1 << 12) - 1)
00303
00304
#if defined(_WIN64)
00305
00306
#define SERVICE_TABLE_SHIFT (12 - 5)
00307
#define SERVICE_TABLE_MASK (((1 << 2) - 1) << 5)
00308
#define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << 5)
00309
00310
#else
00311
00312 #define SERVICE_TABLE_SHIFT (12 - 4)
00313 #define SERVICE_TABLE_MASK (((1 << 2) - 1) << 4)
00314 #define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << 4)
00315
00316
#endif
00317
00318 typedef struct _KSERVICE_TABLE_DESCRIPTOR {
00319 PULONG_PTR
Base;
00320 PULONG
Count;
00321 ULONG
Limit;
00322
#if defined(_IA64_)
00323
LONG TableBaseGpOffset;
00324
#endif
00325 PUCHAR
Number;
00326 }
KSERVICE_TABLE_DESCRIPTOR, *
PKSERVICE_TABLE_DESCRIPTOR;
00327
00328
00329
00330
00331
00332
00333
00334
typedef
00335 BOOLEAN
00336 (*PKDEBUG_ROUTINE) (
00337 IN PKTRAP_FRAME TrapFrame,
00338 IN PKEXCEPTION_FRAME ExceptionFrame,
00339 IN PEXCEPTION_RECORD ExceptionRecord,
00340 IN PCONTEXT ContextRecord,
00341 IN
KPROCESSOR_MODE PreviousMode,
00342 IN BOOLEAN SecondChance
00343 );
00344
00345
typedef
00346 BOOLEAN
00347 (*PKDEBUG_SWITCH_ROUTINE) (
00348 IN PEXCEPTION_RECORD ExceptionRecord,
00349 IN PCONTEXT ContextRecord,
00350 IN BOOLEAN SecondChance
00351 );
00352
00353 typedef enum {
00354
ContinueError =
FALSE,
00355
ContinueSuccess =
TRUE,
00356
ContinueProcessorReselected,
00357
ContinueNextProcessor
00358 }
KCONTINUE_STATUS;
00359
00360
00361
00362
00363
00364
00365
typedef
00366
VOID
00367 (*PKSTART_ROUTINE) (
00368 IN PVOID StartContext
00369 );
00370
00371
00372
00373
00374
00375
00376
00377
typedef
00378
VOID
00379 (*PKSYSTEM_ROUTINE) (
00380 IN
PKSTART_ROUTINE StartRoutine OPTIONAL,
00381 IN PVOID StartContext OPTIONAL
00382 );
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393 typedef struct _KDEVICE_QUEUE {
00394 CSHORT
Type;
00395 CSHORT
Size;
00396 LIST_ENTRY
DeviceListHead;
00397 KSPIN_LOCK
Lock;
00398 BOOLEAN
Busy;
00399 }
KDEVICE_QUEUE, *
PKDEVICE_QUEUE, *RESTRICTED_POINTER
PRKDEVICE_QUEUE;
00400
00401 typedef struct _KDEVICE_QUEUE_ENTRY {
00402 LIST_ENTRY
DeviceListEntry;
00403 ULONG
SortKey;
00404 BOOLEAN
Inserted;
00405 }
KDEVICE_QUEUE_ENTRY, *
PKDEVICE_QUEUE_ENTRY, *RESTRICTED_POINTER
PRKDEVICE_QUEUE_ENTRY;
00406
00407
00408
00409
00410
00411
00412 typedef struct _KEVENT {
00413 DISPATCHER_HEADER Header;
00414 }
KEVENT, *
PKEVENT, *RESTRICTED_POINTER
PRKEVENT;
00415
00416
00417
00418
00419
00420
00421 typedef struct _KEVENT_PAIR {
00422 CSHORT
Type;
00423 CSHORT
Size;
00424 KEVENT EventLow;
00425 KEVENT EventHigh;
00426 }
KEVENT_PAIR, *
PKEVENT_PAIR, *RESTRICTED_POINTER
PRKEVENT_PAIR;
00427
00428
00429
00430
00431
00432
00433
00434
00435
struct _KINTERRUPT;
00436
00437
00438
typedef
00439 BOOLEAN
00440 (*PKSERVICE_ROUTINE) (
00441 IN
struct _KINTERRUPT *Interrupt,
00442 IN PVOID ServiceContext
00443 );
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454 typedef struct _KINTERRUPT {
00455 CSHORT
Type;
00456 CSHORT
Size;
00457 LIST_ENTRY
InterruptListEntry;
00458 PKSERVICE_ROUTINE ServiceRoutine;
00459 PVOID
ServiceContext;
00460 KSPIN_LOCK
SpinLock;
00461 ULONG
Spare1;
00462 PKSPIN_LOCK
ActualLock;
00463 PKINTERRUPT_ROUTINE
DispatchAddress;
00464 ULONG
Vector;
00465 KIRQL
Irql;
00466 KIRQL
SynchronizeIrql;
00467 BOOLEAN
FloatingSave;
00468 BOOLEAN
Connected;
00469 CCHAR
Number;
00470 BOOLEAN
ShareVector;
00471 KINTERRUPT_MODE Mode;
00472 ULONG
ServiceCount;
00473 ULONG
Spare3;
00474 ULONG
DispatchCode[DISPATCH_LENGTH];
00475 }
KINTERRUPT;
00476
00477 typedef struct _KINTERRUPT *
PKINTERRUPT, *RESTRICTED_POINTER
PRKINTERRUPT;
00478
00479
00480
00481
00482
00483
00484 typedef struct _KMUTANT {
00485 DISPATCHER_HEADER Header;
00486 LIST_ENTRY
MutantListEntry;
00487 struct _KTHREAD *RESTRICTED_POINTER
OwnerThread;
00488 BOOLEAN
Abandoned;
00489 UCHAR
ApcDisable;
00490 }
KMUTANT, *
PKMUTANT, *RESTRICTED_POINTER
PRKMUTANT,
KMUTEX, *
PKMUTEX, *RESTRICTED_POINTER
PRKMUTEX;
00491
00492
00493
00494
00495
00496
00497 typedef struct _KQUEUE {
00498 DISPATCHER_HEADER Header;
00499 LIST_ENTRY
EntryListHead;
00500 ULONG
CurrentCount;
00501 ULONG
MaximumCount;
00502 LIST_ENTRY
ThreadListHead;
00503 }
KQUEUE, *
PKQUEUE, *RESTRICTED_POINTER
PRKQUEUE;
00504
00505
00506
00507
00508
00509
00510
00511 typedef struct _KSEMAPHORE {
00512 DISPATCHER_HEADER Header;
00513 LONG
Limit;
00514 }
KSEMAPHORE, *
PKSEMAPHORE, *RESTRICTED_POINTER
PRKSEMAPHORE;
00515
00516
00517
00518
00519
00520
00521 typedef struct _KTIMER {
00522 DISPATCHER_HEADER Header;
00523 ULARGE_INTEGER
DueTime;
00524 LIST_ENTRY
TimerListEntry;
00525 struct _KDPC *
Dpc;
00526 LONG
Period;
00527 }
KTIMER, *
PKTIMER, *RESTRICTED_POINTER
PRKTIMER;
00528
00529
00530
00531
00532
00533
00534
00535
struct _ECHANNEL;
00536
00537 typedef struct _KTHREAD {
00538
00539
00540
00541
00542
00543
00544
00545 DISPATCHER_HEADER Header;
00546 LIST_ENTRY
MutantListHead;
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556 PVOID
InitialStack;
00557 PVOID
StackLimit;
00558
#if defined(_IA64_)
00559
PVOID InitialBStore;
00560 PVOID BStoreLimit;
00561
#endif
00562 PVOID
Teb;
00563 PVOID
TlsArray;
00564 PVOID
KernelStack;
00565
#if defined(_IA64_)
00566
PVOID KernelBStore;
00567
#endif
00568 BOOLEAN
DebugActive;
00569 UCHAR
State;
00570 BOOLEAN
Alerted[
MaximumMode];
00571 UCHAR
Iopl;
00572 UCHAR
NpxState;
00573 CHAR Saturation;
00574 SCHAR
Priority;
00575 KAPC_STATE ApcState;
00576 ULONG
ContextSwitches;
00577
00578
00579
00580
00581
00582 LONG_PTR
WaitStatus;
00583 KIRQL
WaitIrql;
00584 KPROCESSOR_MODE WaitMode;
00585 BOOLEAN
WaitNext;
00586 UCHAR
WaitReason;
00587 PRKWAIT_BLOCK WaitBlockList;
00588 LIST_ENTRY
WaitListEntry;
00589 ULONG
WaitTime;
00590 SCHAR
BasePriority;
00591 UCHAR
DecrementCount;
00592 SCHAR
PriorityDecrement;
00593 SCHAR
Quantum;
00594 KWAIT_BLOCK WaitBlock[
THREAD_WAIT_OBJECTS + 1];
00595 PVOID
LegoData;
00596 ULONG
KernelApcDisable;
00597 KAFFINITY
UserAffinity;
00598 BOOLEAN
SystemAffinityActive;
00599 UCHAR
PowerState;
00600 UCHAR
NpxIrql;
00601 UCHAR
Pad[1];
00602 PVOID
ServiceTable;
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612 PRKQUEUE Queue;
00613 KSPIN_LOCK
ApcQueueLock;
00614 KTIMER Timer;
00615 LIST_ENTRY
QueueListEntry;
00616
00617
00618
00619
00620
00621
00622 KAFFINITY
Affinity;
00623 BOOLEAN
Preempted;
00624 BOOLEAN
ProcessReadyQueue;
00625 BOOLEAN
KernelStackResident;
00626 UCHAR
NextProcessor;
00627
00628
00629
00630
00631
00632 PVOID
CallbackStack;
00633
#if defined(_IA64_)
00634
PVOID CallbackBStore;
00635
#endif
00636 PVOID
Win32Thread;
00637 PKTRAP_FRAME TrapFrame;
00638 PKAPC_STATE ApcStatePointer[2];
00639 CCHAR PreviousMode;
00640 UCHAR
EnableStackSwap;
00641 UCHAR
LargeStack;
00642 UCHAR
ResourceIndex;
00643
00644
00645
00646
00647
00648 ULONG
KernelTime;
00649 ULONG
UserTime;
00650
00651
00652
00653
00654
00655
00656 KAPC_STATE SavedApcState;
00657 BOOLEAN
Alertable;
00658 UCHAR
ApcStateIndex;
00659 BOOLEAN
ApcQueueable;
00660 BOOLEAN
AutoAlignment;
00661
00662
00663
00664
00665
00666
00667 PVOID
StackBase;
00668 KAPC SuspendApc;
00669 KSEMAPHORE SuspendSemaphore;
00670 LIST_ENTRY
ThreadListEntry;
00671
00672
00673
00674
00675
00676
00677
00678
00679 CCHAR
FreezeCount;
00680 CCHAR
SuspendCount;
00681 UCHAR
IdealProcessor;
00682 UCHAR
DisableBoost;
00683
00684 }
KTHREAD, *
PKTHREAD, *RESTRICTED_POINTER
PRKTHREAD;
00685
00686
00687
00688
00689
00690 typedef struct _KPROCESS {
00691
00692
00693
00694
00695
00696
00697
00698 DISPATCHER_HEADER Header;
00699 LIST_ENTRY
ProfileListHead;
00700
00701
00702
00703
00704
00705 ULONG_PTR
DirectoryTableBase[2];
00706
00707
#if defined(_X86_)
00708
00709 KGDTENTRY LdtDescriptor;
00710 KIDTENTRY Int21Descriptor;
00711
USHORT IopmOffset;
00712 UCHAR Iopl;
00713 BOOLEAN VdmFlag;
00714
00715
#endif
00716
00717
#if defined(_IA64_)
00718
00719 KGDTENTRY LdtDescriptor;
00720 ULONGLONG UnscrambledLdtDescriptor;
00721 KIDTENTRY Int21Descriptor;
00722 BOOLEAN VdmFlag;
00723
00724 REGION_MAP_INFO ProcessRegion;
00725 REGION_MAP_INFO SessionRegion;
00726 PREGION_MAP_INFO SessionMapInfo;
00727 ULONG_PTR SessionParentBase;
00728
00729
#endif // _IA64_
00730
00731
#if defined(_ALPHA_)
00732
00733
union {
00734
struct {
00735 KAFFINITY
ActiveProcessors;
00736 KAFFINITY RunOnProcessors;
00737 };
00738
00739 ULONGLONG Alignment;
00740 };
00741
00742 ULONGLONG ProcessSequence;
00743 ULONG ProcessAsn;
00744
00745
#else
00746
00747 KAFFINITY
ActiveProcessors;
00748
00749
#endif
00750
00751
00752
00753
00754
00755 ULONG
KernelTime;
00756 ULONG
UserTime;
00757
00758
00759
00760
00761
00762 LIST_ENTRY
ReadyListHead;
00763 LIST_ENTRY
SwapListEntry;
00764 LIST_ENTRY
ThreadListHead;
00765 KSPIN_LOCK
ProcessLock;
00766 KAFFINITY
Affinity;
00767 USHORT StackCount;
00768 SCHAR
BasePriority;
00769 SCHAR
ThreadQuantum;
00770 BOOLEAN
AutoAlignment;
00771 UCHAR
State;
00772 UCHAR
ThreadSeed;
00773 BOOLEAN
DisableBoost;
00774 UCHAR
PowerState;
00775 BOOLEAN
DisableQuantum;
00776 UCHAR
Spare[2];
00777 }
KPROCESS, *
PKPROCESS, *RESTRICTED_POINTER
PRKPROCESS;
00778
00779
00780
00781
00782
00783 typedef struct _KPROFILE {
00784 CSHORT
Type;
00785 CSHORT
Size;
00786 LIST_ENTRY
ProfileListEntry;
00787 PKPROCESS Process;
00788 PVOID
RangeBase;
00789 PVOID
RangeLimit;
00790 ULONG
BucketShift;
00791 PVOID
Buffer;
00792 ULONG
Segment;
00793 KAFFINITY
Affinity;
00794 CSHORT
Source;
00795 BOOLEAN
Started;
00796 }
KPROFILE, *
PKPROFILE, *RESTRICTED_POINTER
PRKPROFILE;
00797
00798
00799
00800
00801
00802 #define LISTEN_CHANNEL 0x1
00803 #define MESSAGE_CHANNEL 0x2
00804
00805 typedef enum _ECHANNEL_STATE {
00806
ClientIdle,
00807
ClientSendWaitReply,
00808
ClientShutdown,
00809
ServerIdle,
00810
ServerReceiveMessage,
00811
ServerShutdown
00812 }
ECHANNEL_STATE;
00813
00814 typedef struct _ECHANNEL {
00815 USHORT Type;
00816 USHORT State;
00817 PKPROCESS OwnerProcess;
00818 PKTHREAD ClientThread;
00819 PKTHREAD ServerThread;
00820 PVOID
ServerContext;
00821 struct _ECHANNEL *
ServerChannel;
00822 KEVENT ReceiveEvent;
00823 KEVENT ClearToSendEvent;
00824 }
ECHANNEL, *
PECHANNEL, *RESTRICTED_POINTER
PRECHANNEL;
00825
00826
00827
00828
00829
00830
00831
00832
00833
NTKERNELAPI
00834
VOID
00835
KeInitializeApc (
00836 IN
PRKAPC Apc,
00837 IN PRKTHREAD Thread,
00838 IN KAPC_ENVIRONMENT Environment,
00839 IN PKKERNEL_ROUTINE KernelRoutine,
00840 IN PKRUNDOWN_ROUTINE RundownRoutine OPTIONAL,
00841 IN PKNORMAL_ROUTINE NormalRoutine OPTIONAL,
00842 IN KPROCESSOR_MODE ProcessorMode OPTIONAL,
00843 IN PVOID NormalContext OPTIONAL
00844 );
00845
00846 PLIST_ENTRY
00847
KeFlushQueueApc (
00848 IN PKTHREAD Thread,
00849 IN KPROCESSOR_MODE ProcessorMode
00850 );
00851
00852
NTKERNELAPI
00853 BOOLEAN
00854
KeInsertQueueApc (
00855 IN
PRKAPC Apc,
00856 IN PVOID SystemArgument1,
00857 IN PVOID SystemArgument2,
00858 IN KPRIORITY Increment
00859 );
00860
00861 BOOLEAN
00862
KeRemoveQueueApc (
00863 IN
PKAPC Apc
00864 );
00865
00866
00867
00868
00869
00870
00871
NTKERNELAPI
00872
VOID
00873
KeInitializeDpc (
00874 IN
PRKDPC Dpc,
00875 IN PKDEFERRED_ROUTINE DeferredRoutine,
00876 IN PVOID DeferredContext
00877 );
00878
00879
NTKERNELAPI
00880 BOOLEAN
00881
KeInsertQueueDpc (
00882 IN
PRKDPC Dpc,
00883 IN PVOID SystemArgument1,
00884 IN PVOID SystemArgument2
00885 );
00886
00887
NTKERNELAPI
00888 BOOLEAN
00889
KeRemoveQueueDpc (
00890 IN
PRKDPC Dpc
00891 );
00892
00893
00894
00895
NTKERNELAPI
00896
VOID
00897
KeSetImportanceDpc (
00898 IN
PRKDPC Dpc,
00899 IN KDPC_IMPORTANCE Importance
00900 );
00901
00902
NTKERNELAPI
00903
VOID
00904
KeSetTargetProcessorDpc (
00905 IN
PRKDPC Dpc,
00906 IN CCHAR Number
00907 );
00908
00909
00910
00911
00912
00913
00914
NTKERNELAPI
00915
VOID
00916
KeInitializeDeviceQueue (
00917 IN PKDEVICE_QUEUE DeviceQueue
00918 );
00919
00920
NTKERNELAPI
00921 BOOLEAN
00922
KeInsertDeviceQueue (
00923 IN PKDEVICE_QUEUE DeviceQueue,
00924 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
00925 );
00926
00927
NTKERNELAPI
00928 BOOLEAN
00929
KeInsertByKeyDeviceQueue (
00930 IN PKDEVICE_QUEUE DeviceQueue,
00931 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
00932 IN ULONG SortKey
00933 );
00934
00935
NTKERNELAPI
00936
PKDEVICE_QUEUE_ENTRY
00937
KeRemoveDeviceQueue (
00938 IN PKDEVICE_QUEUE DeviceQueue
00939 );
00940
00941
NTKERNELAPI
00942
PKDEVICE_QUEUE_ENTRY
00943
KeRemoveByKeyDeviceQueue (
00944 IN PKDEVICE_QUEUE DeviceQueue,
00945 IN ULONG SortKey
00946 );
00947
00948
NTKERNELAPI
00949 BOOLEAN
00950
KeRemoveEntryDeviceQueue (
00951 IN PKDEVICE_QUEUE DeviceQueue,
00952 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
00953 );
00954
00955
00956
00957
00958
00959
00960
00961
NTKERNELAPI
00962
VOID
00963
KeInitializeInterrupt (
00964 IN
PKINTERRUPT Interrupt,
00965 IN PKSERVICE_ROUTINE ServiceRoutine,
00966 IN PVOID ServiceContext,
00967 IN PKSPIN_LOCK SpinLock OPTIONAL,
00968 IN ULONG Vector,
00969 IN KIRQL Irql,
00970 IN KIRQL SynchronizeIrql,
00971 IN KINTERRUPT_MODE InterruptMode,
00972 IN BOOLEAN ShareVector,
00973 IN CCHAR ProcessorNumber,
00974 IN BOOLEAN FloatingSave
00975 );
00976
00977
NTKERNELAPI
00978 BOOLEAN
00979
KeConnectInterrupt (
00980 IN
PKINTERRUPT Interrupt
00981 );
00982
00983
NTKERNELAPI
00984 BOOLEAN
00985
KeDisconnectInterrupt (
00986 IN
PKINTERRUPT Interrupt
00987 );
00988
00989
NTKERNELAPI
00990 BOOLEAN
00991
KeSynchronizeExecution (
00992 IN
PKINTERRUPT Interrupt,
00993 IN
PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
00994 IN PVOID SynchronizeContext
00995 );
00996
00997
00998
00999
01000
01001
VOID
01002
KeInitializeProfile (
01003 IN PKPROFILE Profile,
01004 IN PKPROCESS Process OPTIONAL,
01005 IN PVOID RangeBase,
01006 IN SIZE_T RangeSize,
01007 IN ULONG BucketSize,
01008 IN ULONG Segment,
01009 IN KPROFILE_SOURCE ProfileSource,
01010 IN KAFFINITY Affinity
01011 );
01012
01013 BOOLEAN
01014
KeStartProfile (
01015 IN PKPROFILE Profile,
01016 IN PULONG Buffer
01017 );
01018
01019 BOOLEAN
01020
KeStopProfile (
01021 IN PKPROFILE Profile
01022 );
01023
01024
VOID
01025
KeSetIntervalProfile (
01026 IN ULONG Interval,
01027 IN KPROFILE_SOURCE Source
01028 );
01029
01030 ULONG
01031
KeQueryIntervalProfile (
01032 IN KPROFILE_SOURCE Source
01033 );
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)
01045
01046
01047
01048
NTKERNELAPI
01049
VOID
01050
KeInitializeEvent (
01051 IN PRKEVENT Event,
01052 IN EVENT_TYPE Type,
01053 IN BOOLEAN State
01054 );
01055
01056
NTKERNELAPI
01057
VOID
01058
KeClearEvent (
01059 IN PRKEVENT Event
01060 );
01061
01062
01063
01064
#else
01065
01066 #define KeInitializeEvent(_Event, _Type, _State) \
01067
(_Event)->Header.Type = (UCHAR)_Type; \
01068
(_Event)->Header.Size = sizeof(KEVENT) / sizeof(LONG); \
01069
(_Event)->Header.SignalState = _State; \
01070
InitializeListHead(&(_Event)->Header.WaitListHead)
01071
01072 #define KeClearEvent(Event) (Event)->Header.SignalState = 0
01073
01074
#endif
01075
01076
01077
01078
NTKERNELAPI
01079 LONG
01080
KePulseEvent (
01081 IN PRKEVENT Event,
01082 IN KPRIORITY Increment,
01083 IN BOOLEAN Wait
01084 );
01085
01086
01087
01088
01089
NTKERNELAPI
01090 LONG
01091
KeReadStateEvent (
01092 IN PRKEVENT Event
01093 );
01094
01095
01096
01097
NTKERNELAPI
01098 LONG
01099
KeResetEvent (
01100 IN PRKEVENT Event
01101 );
01102
01103
NTKERNELAPI
01104 LONG
01105
KeSetEvent (
01106 IN PRKEVENT Event,
01107 IN KPRIORITY Increment,
01108 IN BOOLEAN Wait
01109 );
01110
01111
01112
01113
VOID
01114
KeSetEventBoostPriority (
01115 IN PRKEVENT Event,
01116 IN PRKTHREAD *Thread OPTIONAL
01117 );
01118
01119
VOID
01120
KeInitializeEventPair (
01121 IN PKEVENT_PAIR EventPair
01122 );
01123
01124 #define KeSetHighEventPair(EventPair, Increment, Wait) \
01125
KeSetEvent(&((EventPair)->EventHigh), \
01126
Increment, \
01127
Wait)
01128
01129 #define KeSetLowEventPair(EventPair, Increment, Wait) \
01130
KeSetEvent(&((EventPair)->EventLow), \
01131
Increment, \
01132
Wait)
01133
01134
01135
01136
01137
01138
NTKERNELAPI
01139
VOID
01140
KeInitializeMutant (
01141 IN PRKMUTANT Mutant,
01142 IN BOOLEAN InitialOwner
01143 );
01144
01145 LONG
01146
KeReadStateMutant (
01147 IN PRKMUTANT
01148 );
01149
01150
NTKERNELAPI
01151 LONG
01152
KeReleaseMutant (
01153 IN PRKMUTANT Mutant,
01154 IN KPRIORITY Increment,
01155 IN BOOLEAN Abandoned,
01156 IN BOOLEAN Wait
01157 );
01158
01159
01160
01161
01162
01163
01164
NTKERNELAPI
01165
VOID
01166
KeInitializeMutex (
01167 IN PRKMUTEX Mutex,
01168 IN ULONG Level
01169 );
01170
01171 #define KeReadStateMutex(Mutex) KeReadStateMutant(Mutex)
01172
01173
NTKERNELAPI
01174 LONG
01175
KeReleaseMutex (
01176 IN PRKMUTEX Mutex,
01177 IN BOOLEAN Wait
01178 );
01179
01180
01181
01182
01183
01184
01185
NTKERNELAPI
01186
VOID
01187
KeInitializeQueue (
01188 IN PRKQUEUE Queue,
01189 IN ULONG Count OPTIONAL
01190 );
01191
01192
NTKERNELAPI
01193 LONG
01194
KeReadStateQueue (
01195 IN PRKQUEUE Queue
01196 );
01197
01198
NTKERNELAPI
01199 LONG
01200
KeInsertQueue (
01201 IN PRKQUEUE Queue,
01202 IN PLIST_ENTRY Entry
01203 );
01204
01205
NTKERNELAPI
01206 LONG
01207
KeInsertHeadQueue (
01208 IN PRKQUEUE Queue,
01209 IN PLIST_ENTRY Entry
01210 );
01211
01212
NTKERNELAPI
01213 PLIST_ENTRY
01214
KeRemoveQueue (
01215 IN PRKQUEUE Queue,
01216 IN KPROCESSOR_MODE WaitMode,
01217 IN PLARGE_INTEGER Timeout OPTIONAL
01218 );
01219
01220 PLIST_ENTRY
01221
KeRundownQueue (
01222 IN PRKQUEUE Queue
01223 );
01224
01225
01226
01227
01228
01229
01230
NTKERNELAPI
01231
VOID
01232
KeInitializeSemaphore (
01233 IN PRKSEMAPHORE Semaphore,
01234 IN LONG Count,
01235 IN LONG Limit
01236 );
01237
01238
NTKERNELAPI
01239 LONG
01240
KeReadStateSemaphore (
01241 IN PRKSEMAPHORE Semaphore
01242 );
01243
01244
NTKERNELAPI
01245 LONG
01246
KeReleaseSemaphore (
01247 IN PRKSEMAPHORE Semaphore,
01248 IN KPRIORITY Increment,
01249 IN LONG Adjustment,
01250 IN BOOLEAN Wait
01251 );
01252
01253
01254
01255
01256
01257
01258
01259
VOID
01260
KeInitializeProcess (
01261 IN PRKPROCESS Process,
01262 IN KPRIORITY Priority,
01263 IN KAFFINITY Affinity,
01264 IN ULONG_PTR DirectoryTableBase[2],
01265 IN BOOLEAN Enable
01266 );
01267
01268 LOGICAL
01269
KeForceAttachProcess (
01270 IN PKPROCESS Process
01271 );
01272
01273
01274
01275
NTKERNELAPI
01276
VOID
01277
KeAttachProcess (
01278 IN PRKPROCESS Process
01279 );
01280
01281
NTKERNELAPI
01282
VOID
01283
KeDetachProcess (
01284 VOID
01285 );
01286
01287
NTKERNELAPI
01288
VOID
01289
KeStackAttachProcess (
01290 IN PRKPROCESS PROCESS,
01291 OUT PRKAPC_STATE ApcState
01292 );
01293
01294
NTKERNELAPI
01295
VOID
01296
KeUnstackDetachProcess (
01297 IN PRKAPC_STATE ApcState
01298 );
01299
01300
01301
01302 #define KeIsAttachedProcess() \
01303
(KeGetCurrentThread()->ApcStateIndex == AttachedApcEnvironment)
01304
01305 LONG
01306
KeReadStateProcess (
01307 IN PRKPROCESS Process
01308 );
01309
01310 BOOLEAN
01311
KeSetAutoAlignmentProcess (
01312 IN PRKPROCESS Process,
01313 IN BOOLEAN Enable
01314 );
01315
01316 LONG
01317
KeSetProcess (
01318 IN PRKPROCESS Process,
01319 IN KPRIORITY Increment,
01320 IN BOOLEAN Wait
01321 );
01322
01323 KPRIORITY
01324
KeSetPriorityProcess (
01325 IN PKPROCESS Process,
01326 IN KPRIORITY BasePriority
01327 );
01328
01329 LOGICAL
01330
KeSetDisableQuantumProcess (
01331 IN PKPROCESS Process,
01332 IN LOGICAL Disable
01333 );
01334
01335 #define KeTerminateProcess(Process) \
01336
(Process)->StackCount += 1;
01337
01338
01339
01340
01341
01342
VOID
01343
KeInitializeThread (
01344 IN PKTHREAD Thread,
01345 IN PVOID KernelStack,
01346 IN PKSYSTEM_ROUTINE SystemRoutine,
01347 IN PKSTART_ROUTINE StartRoutine OPTIONAL,
01348 IN PVOID StartContext OPTIONAL,
01349 IN PCONTEXT ContextFrame OPTIONAL,
01350 IN PVOID Teb OPTIONAL,
01351 IN PKPROCESS Process
01352 );
01353
01354 BOOLEAN
01355
KeAlertThread (
01356 IN PKTHREAD Thread,
01357 IN KPROCESSOR_MODE ProcessorMode
01358 );
01359
01360 ULONG
01361
KeAlertResumeThread (
01362 IN PKTHREAD Thread
01363 );
01364
01365
NTKERNELAPI
01366
VOID
01367
KeBoostCurrentThread (
01368 VOID
01369 );
01370
01371
VOID
01372
KeBoostPriorityThread (
01373 IN PKTHREAD Thread,
01374 IN KPRIORITY Increment
01375 );
01376
01377 KAFFINITY
01378
KeConfineThread (
01379 VOID
01380 );
01381
01382
NTKERNELAPI
01383
NTSTATUS
01384
KeDelayExecutionThread (
01385 IN KPROCESSOR_MODE WaitMode,
01386 IN BOOLEAN Alertable,
01387 IN PLARGE_INTEGER Interval
01388 );
01389
01390 BOOLEAN
01391
KeDisableApcQueuingThread (
01392 IN PKTHREAD Thread
01393 );
01394
01395 BOOLEAN
01396
KeEnableApcQueuingThread (
01397 IN PKTHREAD
01398 );
01399
01400 LOGICAL
01401
KeSetDisableBoostThread (
01402 IN PKTHREAD Thread,
01403 IN LOGICAL Disable
01404 );
01405
01406 ULONG
01407
KeForceResumeThread (
01408 IN PKTHREAD Thread
01409 );
01410
01411
VOID
01412
KeFreezeAllThreads (
01413 VOID
01414 );
01415
01416 BOOLEAN
01417
KeQueryAutoAlignmentThread (
01418 IN PKTHREAD Thread
01419 );
01420
01421 LONG
01422
KeQueryBasePriorityThread (
01423 IN PKTHREAD Thread
01424 );
01425
01426
NTKERNELAPI
01427 KPRIORITY
01428
KeQueryPriorityThread (
01429 IN PKTHREAD Thread
01430 );
01431
01432 BOOLEAN
01433
KeReadStateThread (
01434 IN PKTHREAD Thread
01435 );
01436
01437
VOID
01438
KeReadyThread (
01439 IN PKTHREAD Thread
01440 );
01441
01442 ULONG
01443
KeResumeThread (
01444 IN PKTHREAD Thread
01445 );
01446
01447
VOID
01448
KeRevertToUserAffinityThread (
01449 VOID
01450 );
01451
01452
VOID
01453
KeRundownThread (
01454 VOID
01455 );
01456
01457 KAFFINITY
01458
KeSetAffinityThread (
01459 IN PKTHREAD Thread,
01460 IN KAFFINITY Affinity
01461 );
01462
01463
VOID
01464
KeSetSystemAffinityThread (
01465 IN KAFFINITY Affinity
01466 );
01467
01468 BOOLEAN
01469
KeSetAutoAlignmentThread (
01470 IN PKTHREAD Thread,
01471 IN BOOLEAN Enable
01472 );
01473
01474
NTKERNELAPI
01475 LONG
01476
KeSetBasePriorityThread (
01477 IN PKTHREAD Thread,
01478 IN LONG Increment
01479 );
01480
01481
01482
01483
01484
NTKERNELAPI
01485 CCHAR
01486
KeSetIdealProcessorThread (
01487 IN PKTHREAD Thread,
01488 IN CCHAR Processor
01489 );
01490
01491
01492
01493
NTKERNELAPI
01494 BOOLEAN
01495
KeSetKernelStackSwapEnable (
01496 IN BOOLEAN Enable
01497 );
01498
01499
NTKERNELAPI
01500 KPRIORITY
01501
KeSetPriorityThread (
01502 IN PKTHREAD Thread,
01503 IN KPRIORITY Priority
01504 );
01505
01506 ULONG
01507
KeSuspendThread (
01508 IN PKTHREAD
01509 );
01510
01511
NTKERNELAPI
01512
VOID
01513
KeTerminateThread (
01514 IN KPRIORITY Increment
01515 );
01516
01517 BOOLEAN
01518
KeTestAlertThread (
01519 IN KPROCESSOR_MODE
01520 );
01521
01522
VOID
01523
KeThawAllThreads (
01524 VOID
01525 );
01526
01527
01528
01529
01530
01531
01532
01533
01534
01535
01536
01537 #define KiLeaveCriticalRegion() { \
01538
PKTHREAD Thread; \
01539
Thread = KeGetCurrentThread(); \
01540
if (((*((volatile ULONG *)&Thread->KernelApcDisable) += 1) == 0) && \
01541
(((volatile LIST_ENTRY *)&Thread->ApcState.ApcListHead[KernelMode])->Flink != \
01542
&Thread->ApcState.ApcListHead[KernelMode])) { \
01543
Thread->ApcState.KernelApcPending = TRUE; \
01544
KiRequestSoftwareInterrupt(APC_LEVEL); \
01545
} \
01546
}
01547
01548
01549
01550
#if (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)) && !defined(_NTSYSTEM_DRIVER_)
01551
01552
01553
01554
NTKERNELAPI
01555
VOID
01556
KeEnterCriticalRegion (
01557 VOID
01558 );
01559
01560
NTKERNELAPI
01561
VOID
01562
KeLeaveCriticalRegion (
01563 VOID
01564 );
01565
01566
01567
01568
#else
01569
01570
01571
01572
01573
01574
01575
01576
01577
01578
01579
01580
01581
01582
01583
01584
01585
01586
01587
01588
01589
01590
01591
01592
01593
01594
01595
01596
01597
01598 #define KeEnterCriticalRegion() KeGetCurrentThread()->KernelApcDisable -= 1;
01599
01600
01601
01602
01603
01604
01605
01606
01607
01608
01609
01610
01611
01612
01613
01614
01615
01616
01617
01618
01619
01620
01621
01622
01623
01624
01625
01626
01627
01628 #define KeLeaveCriticalRegion() KiLeaveCriticalRegion()
01629
01630
#endif
01631
01632
01633
01634
01635
01636
01637
01638
NTKERNELAPI
01639
VOID
01640
KeInitializeTimer (
01641 IN PKTIMER Timer
01642 );
01643
01644
NTKERNELAPI
01645
VOID
01646
KeInitializeTimerEx (
01647 IN PKTIMER Timer,
01648 IN TIMER_TYPE Type
01649 );
01650
01651
NTKERNELAPI
01652 BOOLEAN
01653
KeCancelTimer (
01654 IN PKTIMER
01655 );
01656
01657
NTKERNELAPI
01658 BOOLEAN
01659
KeReadStateTimer (
01660 PKTIMER Timer
01661 );
01662
01663
NTKERNELAPI
01664 BOOLEAN
01665
KeSetTimer (
01666 IN PKTIMER Timer,
01667 IN LARGE_INTEGER DueTime,
01668 IN
PKDPC Dpc OPTIONAL
01669 );
01670
01671
NTKERNELAPI
01672 BOOLEAN
01673
KeSetTimerEx (
01674 IN PKTIMER Timer,
01675 IN LARGE_INTEGER DueTime,
01676 IN LONG Period OPTIONAL,
01677 IN
PKDPC Dpc OPTIONAL
01678 );
01679
01680
01681
01682 PVOID
01683
KeCheckForTimer(
01684 IN PVOID p,
01685 IN ULONG Size
01686 );
01687
01688
VOID
01689
KeClearTimer (
01690 IN PKTIMER Timer
01691 );
01692
01693 ULONGLONG
01694
KeQueryTimerDueTime (
01695 IN PKTIMER Timer
01696 );
01697
01698
01699
01700
01701
01702
01703
NTSTATUS
01704
KiSetServerWaitClientEvent (
01705 IN PKEVENT SeverEvent,
01706 IN PKEVENT ClientEvent,
01707 IN ULONG WaitMode
01708 );
01709
01710
#if 0
01711
NTSTATUS
01712 KeReleaseWaitForSemaphore (
01713 IN PKSEMAPHORE Server,
01714 IN PKSEMAPHORE Client,
01715 IN ULONG WaitReason,
01716 IN ULONG WaitMode
01717 );
01718
#endif
01719
01720 #define KeSetHighWaitLowEventPair(EventPair, WaitMode) \
01721
KiSetServerWaitClientEvent(&((EventPair)->EventHigh), \
01722
&((EventPair)->EventLow), \
01723
WaitMode)
01724
01725 #define KeSetLowWaitHighEventPair(EventPair, WaitMode) \
01726
KiSetServerWaitClientEvent(&((EventPair)->EventLow), \
01727
&((EventPair)->EventHigh), \
01728
WaitMode)
01729
01730 #define KeWaitForHighEventPair(EventPair, WaitMode, Alertable, TimeOut) \
01731
KeWaitForSingleObject(&((EventPair)->EventHigh), \
01732
WrEventPair, \
01733
WaitMode, \
01734
Alertable, \
01735
TimeOut)
01736
01737 #define KeWaitForLowEventPair(EventPair, WaitMode, Alertable, TimeOut) \
01738
KeWaitForSingleObject(&((EventPair)->EventLow), \
01739
WrEventPair, \
01740
WaitMode, \
01741
Alertable, \
01742
TimeOut)
01743
01744
01745
01746 #define KeWaitForMutexObject KeWaitForSingleObject
01747
01748
NTKERNELAPI
01749
NTSTATUS
01750
KeWaitForMultipleObjects (
01751 IN ULONG Count,
01752 IN PVOID Object[],
01753 IN WAIT_TYPE WaitType,
01754 IN KWAIT_REASON WaitReason,
01755 IN KPROCESSOR_MODE WaitMode,
01756 IN BOOLEAN Alertable,
01757 IN PLARGE_INTEGER Timeout OPTIONAL,
01758 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
01759 );
01760
01761
NTKERNELAPI
01762
NTSTATUS
01763
KeWaitForSingleObject (
01764 IN PVOID Object,
01765 IN KWAIT_REASON WaitReason,
01766 IN KPROCESSOR_MODE WaitMode,
01767 IN BOOLEAN Alertable,
01768 IN PLARGE_INTEGER Timeout OPTIONAL
01769 );
01770
01771
01772
01773
01774
01775
01776
01777
01778
01779
01780
01781
01782
01783
01784
01785
01786
01787
#if defined(_X86_) && !defined(_NTHAL_)
01788
01789
#define _DECL_HAL_KE_IMPORT __declspec(dllimport)
01790
01791
#else
01792
01793 #define _DECL_HAL_KE_IMPORT
01794
01795
#endif
01796
01797
01798
01799
#if defined(_ALPHA_) || defined(_X86_)
01800
#if defined(NT_UP)
01801
01802
#define KeAcquireQueuedSpinLockRaiseToSynch(Number) \
01803
KeRaiseIrqlToSynchLevel()
01804
01805
#define KeAcquireQueuedSpinLock(Number) \
01806
KfRaiseIrql(DISPATCH_LEVEL)
01807
01808
#define KeReleaseQueuedSpinLock(Number, OldIrql) \
01809
KeLowerIrql(OldIrql)
01810
01811
#define KeTryToAcquireQueuedSpinLockRaiseToSynch(Number, OldIrql) \
01812
(*(OldIrql) = KeRaiseIrqlToSynchLevel(), TRUE)
01813
01814
#define KeTryToAcquireQueuedSpinLock(Number, OldIrql) \
01815
(KeRaiseIrql(DISPATCH_LEVEL, OldIrql), TRUE)
01816
01817
#define KiAcquireQueuedSpinLock(LockQueue)
01818
01819
#define KiReleaseQueuedSpinLock(LockQueue)
01820
01821
#else // NT_UP
01822
01823
VOID
01824
FASTCALL
01825 KiAcquireQueuedSpinLock (
01826 IN
PKSPIN_LOCK_QUEUE LockQueue
01827 );
01828
01829
VOID
01830
FASTCALL
01831 KiReleaseQueuedSpinLock (
01832 IN
PKSPIN_LOCK_QUEUE LockQueue
01833 );
01834
01835
_DECL_HAL_KE_IMPORT
01836 KIRQL
01837
FASTCALL
01838 KeAcquireQueuedSpinLockRaiseToSynch (
01839 IN
KSPIN_LOCK_QUEUE_NUMBER Number
01840 );
01841
01842
_DECL_HAL_KE_IMPORT
01843 KIRQL
01844
FASTCALL
01845 KeAcquireQueuedSpinLock (
01846 IN KSPIN_LOCK_QUEUE_NUMBER Number
01847 );
01848
01849
_DECL_HAL_KE_IMPORT
01850
VOID
01851
FASTCALL
01852 KeReleaseQueuedSpinLock (
01853 IN KSPIN_LOCK_QUEUE_NUMBER Number,
01854 IN KIRQL OldIrql
01855 );
01856
01857
_DECL_HAL_KE_IMPORT
01858 LOGICAL
01859
FASTCALL
01860 KeTryToAcquireQueuedSpinLockRaiseToSynch(
01861 IN KSPIN_LOCK_QUEUE_NUMBER Number,
01862 IN PKIRQL OldIrql
01863 );
01864
01865
_DECL_HAL_KE_IMPORT
01866 LOGICAL
01867
FASTCALL
01868 KeTryToAcquireQueuedSpinLock(
01869 IN KSPIN_LOCK_QUEUE_NUMBER Number,
01870 IN PKIRQL OldIrql
01871 );
01872
01873
#endif // NT_UP
01874
#endif // _ALPHA_ || _X86_
01875
01876
#if defined(NT_UP)
01877
01878
01879
01880
01881
01882
01883
01884
01885
01886
#if defined(_X86_)
01887
01888
#define KiLockDispatcherDatabase(OldIrql) \
01889
*(OldIrql) = KeRaiseIrqlToDpcLevel()
01890
01891
#else
01892
01893
#define KiLockDispatcherDatabase(OldIrql) \
01894
*(OldIrql) = KeRaiseIrqlToSynchLevel()
01895
01896
#endif
01897
01898
#else // NT_UP
01899
01900
#if defined(_ALPHA_) || defined(_X86_)
01901
01902
#define KiLockDispatcherDatabase(OldIrql) \
01903
*(OldIrql) = KeAcquireQueuedSpinLockRaiseToSynch(LockQueueDispatcherLock)
01904
01905
#else // _ALPHA_ || _X86_
01906
01907 #define KiLockDispatcherDatabase(OldIrql) \
01908
*(OldIrql) = KeAcquireSpinLockRaiseToSynch(&KiDispatcherLock)
01909
01910
#endif // _ALPHA_ || _X86_
01911
#endif // NT_UP
01912
01913
VOID
01914
FASTCALL
01915
KiSetPriorityThread (
01916 IN PRKTHREAD Thread,
01917 IN KPRIORITY Priority
01918 );
01919
01920
01921
01922
01923
01924
01925
NTKERNELAPI
01926
VOID
01927 NTAPI
01928
KeInitializeSpinLock (
01929 IN PKSPIN_LOCK SpinLock
01930 );
01931
01932
#if defined(_X86_)
01933
01934
NTKERNELAPI
01935
VOID
01936
FASTCALL
01937 KefAcquireSpinLockAtDpcLevel (
01938 IN PKSPIN_LOCK SpinLock
01939 );
01940
01941
NTKERNELAPI
01942
VOID
01943
FASTCALL
01944 KefReleaseSpinLockFromDpcLevel (
01945 IN PKSPIN_LOCK SpinLock
01946 );
01947
01948
#define KeAcquireSpinLockAtDpcLevel(a) KefAcquireSpinLockAtDpcLevel(a)
01949
#define KeReleaseSpinLockFromDpcLevel(a) KefReleaseSpinLockFromDpcLevel(a)
01950
01951
_DECL_HAL_KE_IMPORT
01952 KIRQL
01953
FASTCALL
01954 KfAcquireSpinLock (
01955 IN PKSPIN_LOCK SpinLock
01956 );
01957
01958
_DECL_HAL_KE_IMPORT
01959
VOID
01960
FASTCALL
01961 KfReleaseSpinLock (
01962 IN PKSPIN_LOCK SpinLock,
01963 IN KIRQL NewIrql
01964 );
01965
01966
01967
01968
_DECL_HAL_KE_IMPORT
01969 KIRQL
01970
FASTCALL
01971
KeAcquireSpinLockRaiseToSynch (
01972 IN PKSPIN_LOCK SpinLock
01973 );
01974
01975
01976
01977
#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
01978
#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
01979
01980
#else
01981
01982
NTKERNELAPI
01983 KIRQL
01984
FASTCALL
01985
KeAcquireSpinLockRaiseToSynch (
01986 IN PKSPIN_LOCK SpinLock
01987 );
01988
01989
NTKERNELAPI
01990
VOID
01991
KeAcquireSpinLockAtDpcLevel (
01992 IN PKSPIN_LOCK SpinLock
01993 );
01994
01995
NTKERNELAPI
01996
VOID
01997
KeReleaseSpinLockFromDpcLevel (
01998 IN PKSPIN_LOCK SpinLock
01999 );
02000
02001
NTKERNELAPI
02002 KIRQL
02003
KeAcquireSpinLockRaiseToDpc (
02004 IN PKSPIN_LOCK SpinLock
02005 );
02006
02007 #define KeAcquireSpinLock(SpinLock, OldIrql) \
02008
*(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
02009
02010
NTKERNELAPI
02011
VOID
02012
KeReleaseSpinLock (
02013 IN PKSPIN_LOCK SpinLock,
02014 IN KIRQL NewIrql
02015 );
02016
02017
#endif
02018
02019
02020
02021 BOOLEAN
02022
KeTryToAcquireSpinLock (
02023 IN PKSPIN_LOCK SpinLock,
02024 OUT PKIRQL OldIrql
02025 );
02026
02027
02028
02029
02030
02031
02032
02033
#if defined(_X86_)
02034
02035
_DECL_HAL_KE_IMPORT
02036
VOID
02037
FASTCALL
02038 KfLowerIrql (
02039 IN KIRQL NewIrql
02040 );
02041
02042
_DECL_HAL_KE_IMPORT
02043 KIRQL
02044
FASTCALL
02045 KfRaiseIrql (
02046 IN KIRQL NewIrql
02047 );
02048
02049
02050
02051
_DECL_HAL_KE_IMPORT
02052 KIRQL
02053 KeRaiseIrqlToDpcLevel(
02054 VOID
02055 );
02056
02057
_DECL_HAL_KE_IMPORT
02058 KIRQL
02059 KeRaiseIrqlToSynchLevel(
02060 VOID
02061 );
02062
02063
02064
02065
#define KeLowerIrql(a) KfLowerIrql(a)
02066
#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
02067
02068
02069
02070
02071
02072
#elif defined(_ALPHA_)
02073
02074
#define KeLowerIrql(a) __swpirql(a)
02075
#define KeRaiseIrql(a,b) *(b) = __swpirql(a)
02076
02077
02078
02079
#define KfRaiseIrql(a) __swpirql(a)
02080
#define KeRaiseIrqlToDpcLevel() __swpirql(DISPATCH_LEVEL)
02081
#define KeRaiseIrqlToSynchLevel() __swpirql((UCHAR)KiSynchIrql)
02082
02083
02084
02085
#elif defined(_IA64_)
02086
02087
VOID
02088
KeLowerIrql (
02089 IN KIRQL NewIrql
02090 );
02091
02092
VOID
02093
KeRaiseIrql (
02094 IN KIRQL NewIrql,
02095 OUT PKIRQL OldIrql
02096 );
02097
02098
02099
02100 KIRQL
02101 KeRaiseIrqlToDpcLevel (
02102 VOID
02103 );
02104
02105 KIRQL
02106 KeRaiseIrqlToSynchLevel (
02107 VOID
02108 );
02109
02110
02111
02112
#endif
02113
02114
02115
02116
02117
02118
02119
02120
02121 BOOLEAN
02122
KeInitSystem(
02123 VOID
02124 );
02125
02126
02127
02128
02129
02130
02131
02132
02133 BOOLEAN
02134
KeGetBugMessageText(
02135 IN ULONG MessageId,
02136 IN PANSI_STRING ReturnedString OPTIONAL
02137 );
02138
02139 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
02140
BufferEmpty,
02141
BufferInserted,
02142
BufferStarted,
02143
BufferFinished,
02144
BufferIncomplete
02145 }
KBUGCHECK_BUFFER_DUMP_STATE;
02146
02147
typedef
02148
VOID
02149 (*PKBUGCHECK_CALLBACK_ROUTINE) (
02150 IN PVOID
Buffer,
02151 IN ULONG Length
02152 );
02153
02154 typedef struct _KBUGCHECK_CALLBACK_RECORD {
02155 LIST_ENTRY
Entry;
02156 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
02157 PVOID
Buffer;
02158 ULONG
Length;
02159 PUCHAR
Component;
02160 ULONG_PTR
Checksum;
02161 UCHAR
State;
02162 }
KBUGCHECK_CALLBACK_RECORD, *
PKBUGCHECK_CALLBACK_RECORD;
02163
02164
NTKERNELAPI
02165 DECLSPEC_NORETURN
02166
VOID
02167 NTAPI
02168
KeBugCheck (
02169 IN ULONG BugCheckCode
02170 );
02171
02172
02173
02174
NTKERNELAPI
02175 DECLSPEC_NORETURN
02176
VOID
02177
KeBugCheckEx(
02178 IN ULONG BugCheckCode,
02179 IN ULONG_PTR BugCheckParameter1,
02180 IN ULONG_PTR BugCheckParameter2,
02181 IN ULONG_PTR BugCheckParameter3,
02182 IN ULONG_PTR BugCheckParameter4
02183 );
02184
02185
02186
02187 #define KeInitializeCallbackRecord(CallbackRecord) \
02188
(CallbackRecord)->State = BufferEmpty
02189
02190
NTKERNELAPI
02191 BOOLEAN
02192
KeDeregisterBugCheckCallback (
02193 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord
02194 );
02195
02196
NTKERNELAPI
02197 BOOLEAN
02198
KeRegisterBugCheckCallback (
02199 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
02200 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
02201 IN PVOID Buffer,
02202 IN ULONG Length,
02203 IN PUCHAR Component
02204 );
02205
02206
NTKERNELAPI
02207
VOID
02208
KeEnterKernelDebugger (
02209 VOID
02210 );
02211
02212
02213
02214
typedef
02215 PCHAR
02216 (*PKE_BUGCHECK_UNICODE_TO_ANSI) (
02217 IN PUNICODE_STRING UnicodeString,
02218 OUT PCHAR AnsiBuffer,
02219 IN ULONG MaxAnsiLength
02220 );
02221
02222
VOID
02223
KeDumpMachineState (
02224 IN PKPROCESSOR_STATE ProcessorState,
02225 IN PCHAR Buffer,
02226 IN PULONG_PTR BugCheckParameters,
02227 IN ULONG NumberOfParameters,
02228 IN PKE_BUGCHECK_UNICODE_TO_ANSI UnicodeToAnsiRoutine
02229 );
02230
02231
VOID
02232
KeContextFromKframes (
02233 IN PKTRAP_FRAME TrapFrame,
02234 IN PKEXCEPTION_FRAME ExceptionFrame,
02235 IN OUT PCONTEXT ContextFrame
02236 );
02237
02238
VOID
02239
KeContextToKframes (
02240 IN OUT PKTRAP_FRAME TrapFrame,
02241 IN OUT PKEXCEPTION_FRAME ExceptionFrame,
02242 IN PCONTEXT ContextFrame,
02243 IN ULONG ContextFlags,
02244 IN KPROCESSOR_MODE PreviousMode
02245 );
02246
02247
02248
02249
02250
VOID
02251 __cdecl
02252
KeSaveStateForHibernate(
02253 IN PKPROCESSOR_STATE ProcessorState
02254 );
02255
02256
02257
02258
VOID
02259
KeCopyTrapDispatcher (
02260 VOID
02261 );
02262
02263 BOOLEAN
02264
FASTCALL
02265
KeInvalidAccessAllowed (
02266 IN PVOID TrapInformation OPTIONAL
02267 );
02268
02269
02270
02271
02272
02273
typedef
02274
VOID
02275 (*PGDI_BATCHFLUSH_ROUTINE) (
02276
VOID
02277 );
02278
02279
NTKERNELAPI
02280
VOID
02281
KeFlushCurrentTb (
02282 VOID
02283 );
02284
02285
02286
02287
02288
02289
02290
02291
02292
02293 #define KeFindFirstSetRightMember(Set) \
02294
((Set & 0xFF) ? KiFindFirstSetRight[Set & 0xFF] : \
02295
((Set & 0xFF00) ? KiFindFirstSetRight[(Set >> 8) & 0xFF] + 8 : \
02296
((Set & 0xFF0000) ? KiFindFirstSetRight[(Set >> 16) & 0xFF] + 16 : \
02297
KiFindFirstSetRight[Set >> 24] + 24 )))
02298
02299
02300
02301
02302
02303
#if defined(_M_IX86)
02304
02305
#if !defined (_X86PAE_)
02306
#define KI_FILL_PTE(_PointerPte, _PteContents) \
02307
*(_PointerPte) = (_PteContents);
02308
02309
#define KI_SWAP_PTE(_PointerPte, _PteContents, _OldPte) \
02310
(_OldPte) = *(_PointerPte); \
02311
*(_PointerPte) = (_PteContents);
02312
#else
02313
02314 HARDWARE_PTE
02315 KeInterlockedSwapPte (
02316 IN PHARDWARE_PTE PtePointer,
02317 IN PHARDWARE_PTE NewPteContents
02318 );
02319
02320
#define KI_FILL_PTE(_PointerPte, _PteContents) { \
02321
if ((_PointerPte)->Valid == 0) { \
02322
(_PointerPte)->HighPart = ((_PteContents).HighPart); \
02323
(_PointerPte)->LowPart = ((_PteContents).LowPart); \
02324
} \
02325
else if ((_PteContents).Valid == 0) { \
02326
(_PointerPte)->LowPart = ((_PteContents).LowPart); \
02327
(_PointerPte)->HighPart = ((_PteContents).HighPart); \
02328
} \
02329
else { \
02330
(VOID) KeInterlockedSwapPte((_PointerPte), &(_PteContents)); \
02331
} \
02332
}
02333
02334
#define KI_SWAP_PTE(_PointerPte, _PteContents, _OldPte) { \
02335
(_OldPte) = *(_PointerPte); \
02336
if ((_PointerPte)->Valid == 0) { \
02337
(_PointerPte)->HighPart = (_PteContents).HighPart; \
02338
(_PointerPte)->LowPart = (_PteContents).LowPart; \
02339
} \
02340
else if ((_PteContents).Valid == 0) { \
02341
(_PointerPte)->LowPart = (_PteContents).LowPart; \
02342
(_PointerPte)->HighPart = (_PteContents).HighPart; \
02343
} \
02344
else { \
02345
(_OldPte) = KeInterlockedSwapPte(_PointerPte, &(_PteContents)); \
02346
} \
02347
}
02348
#endif
02349
02350
#endif
02351
02352
#if defined(_ALPHA_) && defined(NT_UP) && \
02353
!defined(_NTDRIVER_) && !defined(_NTDDK_) && !defined(_NTIFS_) && !defined(_NTHAL_)
02354
02355
#define KeFlushEntireTb(Invalid, AllProcessors) __tbia()
02356
02357
#define KeFlushMultipleTb(Number, Virtual, Invalid, AllProcessors, PtePointer, PteValue) \
02358
{ \
02359
ULONG _Index_; \
02360
\
02361
if (ARGUMENT_PRESENT(PtePointer)) { \
02362
for (_Index_ = 0; _Index_ < (Number); _Index_ += 1) { \
02363
*((PHARDWARE_PTE *)(PtePointer))[_Index_] = (PteValue); \
02364
} \
02365
} \
02366
KiFlushMultipleTb((Invalid), &(Virtual)[0], (Number)); \
02367
}
02368
02369 __inline
02370 HARDWARE_PTE
02371
KeFlushSingleTb(
02372 IN PVOID Virtual,
02373 IN BOOLEAN Invalid,
02374 IN BOOLEAN AllProcesors,
02375 IN PHARDWARE_PTE PtePointer,
02376 IN HARDWARE_PTE PteValue
02377 )
02378 {
02379 HARDWARE_PTE OldPte;
02380
02381 OldPte = *PtePointer;
02382 *PtePointer = PteValue;
02383 __tbis(Virtual);
02384
return(OldPte);
02385 }
02386
02387
#elif defined(_M_IX86) && defined(NT_UP) && \
02388
!defined(_NTDRIVER_) && !defined(_NTDDK_) && !defined(_NTIFS_) && !defined(_NTHAL_)
02389
02390
#define KeFlushEntireTb(Invalid, AllProcessors) KeFlushCurrentTb()
02391
02392 __inline
02393 HARDWARE_PTE
02394
KeFlushSingleTb(
02395 IN PVOID Virtual,
02396 IN BOOLEAN Invalid,
02397 IN BOOLEAN AllProcesors,
02398 IN PHARDWARE_PTE PtePointer,
02399 IN HARDWARE_PTE PteValue
02400 )
02401 {
02402 HARDWARE_PTE OldPte;
02403
02404 KI_SWAP_PTE (PtePointer, PteValue, OldPte);
02405 __asm {
02406 mov eax,
Virtual
02407 invlpg [eax]
02408 }
02409
return(OldPte);
02410 }
02411
02412
#define KeFlushMultipleTb(Number, Virtual, Invalid, AllProcessors, PtePointer, PteValue) \
02413
{ \
02414
ULONG _Index_; \
02415
PVOID _VA_; \
02416
\
02417
for (_Index_ = 0; _Index_ < (Number); _Index_ += 1) { \
02418
if (ARGUMENT_PRESENT(PtePointer)) { \
02419
KI_FILL_PTE ((((PHARDWARE_PTE *)(PtePointer))[_Index_]), (PteValue)); \
02420
} \
02421
_VA_ = (Virtual)[_Index_]; \
02422
__asm { mov eax, _VA_ } \
02423
__asm { invlpg [eax] } \
02424
} \
02425
}
02426
02427
#else
02428
02429
NTKERNELAPI
02430
VOID
02431
KeFlushEntireTb (
02432 IN BOOLEAN Invalid,
02433 IN BOOLEAN AllProcessors
02434 );
02435
02436
VOID
02437
KeFlushMultipleTb (
02438 IN ULONG Number,
02439 IN PVOID *Virtual,
02440 IN BOOLEAN Invalid,
02441 IN BOOLEAN AllProcesors,
02442 IN PHARDWARE_PTE *PtePointer OPTIONAL,
02443 IN HARDWARE_PTE PteValue
02444 );
02445
02446 HARDWARE_PTE
02447
KeFlushSingleTb (
02448 IN PVOID Virtual,
02449 IN BOOLEAN Invalid,
02450 IN BOOLEAN AllProcesors,
02451 IN PHARDWARE_PTE PtePointer,
02452 IN HARDWARE_PTE PteValue
02453 );
02454
02455
#endif
02456
02457
#if defined(_ALPHA_) || defined(_IA64_)
02458
02459
VOID
02460
KeFlushMultipleTb64 (
02461 IN ULONG Number,
02462 IN PULONG_PTR Virtual,
02463 IN BOOLEAN Invalid,
02464 IN BOOLEAN AllProcesors,
02465 IN PHARDWARE_PTE *PtePointer OPTIONAL,
02466 IN HARDWARE_PTE PteValue
02467 );
02468
02469 HARDWARE_PTE
02470
KeFlushSingleTb64 (
02471 IN ULONG_PTR Virtual,
02472 IN BOOLEAN Invalid,
02473 IN BOOLEAN AllProcesors,
02474 IN PHARDWARE_PTE PtePointer,
02475 IN HARDWARE_PTE PteValue
02476 );
02477
02478
#endif
02479
02480 BOOLEAN
02481
KeFreezeExecution (
02482 IN PKTRAP_FRAME TrapFrame,
02483 IN PKEXCEPTION_FRAME ExceptionFrame
02484 );
02485
02486
KCONTINUE_STATUS
02487
KeSwitchFrozenProcessor (
02488 IN ULONG ProcessorNumber
02489 );
02490
02491
VOID
02492
KeGetNonVolatileContextPointers (
02493 IN PKNONVOLATILE_CONTEXT_POINTERS NonVolatileContext
02494 );
02495
02496 #define DMA_READ_DCACHE_INVALIDATE 0x1 // nthal
02497 #define DMA_READ_ICACHE_INVALIDATE 0x2 // nthal
02498 #define DMA_WRITE_DCACHE_SNOOP 0x4 // nthal
02499
02500
NTKERNELAPI
02501
VOID
02502
KeSetDmaIoCoherency (
02503 IN ULONG Attributes
02504 );
02505
02506
02507
#if defined(i386)
02508
02509
NTKERNELAPI
02510
VOID
02511 KeSetProfileIrql (
02512 IN KIRQL ProfileIrql
02513 );
02514
02515
#endif
02516
02517
#if defined(_ALPHA_)
02518
02519
NTKERNELAPI
02520
VOID
02521 KeSetSynchIrql (
02522 IN KIRQL SynchIrql
02523 );
02524
02525 ULONG
02526 KeReadMbTimeStamp (
02527 VOID
02528 );
02529
02530
VOID
02531
KeSynchronizeMemoryAccess (
02532 VOID
02533 );
02534
02535
#endif
02536
02537
VOID
02538
KeSetSystemTime (
02539 IN PLARGE_INTEGER NewTime,
02540 OUT PLARGE_INTEGER OldTime,
02541 IN BOOLEAN AdjustInterruptTime,
02542 IN PLARGE_INTEGER HalTimeToSet OPTIONAL
02543 );
02544
02545 #define SYSTEM_SERVICE_INDEX 0
02546 #define WIN32K_SERVICE_INDEX 1
02547 #define IIS_SERVICE_INDEX 2
02548
02549
NTKERNELAPI
02550 BOOLEAN
02551
KeAddSystemServiceTable(
02552 IN PULONG_PTR Base,
02553 IN PULONG Count OPTIONAL,
02554 IN ULONG Limit,
02555 IN PUCHAR Number,
02556 IN ULONG Index
02557 );
02558
02559
02560
02561
NTKERNELAPI
02562 ULONGLONG
02563
KeQueryInterruptTime (
02564 VOID
02565 );
02566
02567
NTKERNELAPI
02568
VOID
02569
KeQuerySystemTime (
02570 OUT PLARGE_INTEGER CurrentTime
02571 );
02572
02573
NTKERNELAPI
02574 ULONG
02575
KeQueryTimeIncrement (
02576 VOID
02577 );
02578
02579
02580
NTKERNELAPI
02581 KAFFINITY
02582
KeQueryActiveProcessors (
02583 VOID
02584 );
02585
02586
02587
02588
02589
02590
NTKERNELAPI
02591
VOID
02592
KeSetTimeIncrement (
02593 IN ULONG MaximumIncrement,
02594 IN ULONG MimimumIncrement
02595 );
02596
02597
02598
02599
VOID
02600
KeThawExecution (
02601 IN BOOLEAN Enable
02602 );
02603
02604
02605
02606
02607
02608
02609
02610
02611 typedef enum _FIRMWARE_REENTRY {
02612
HalHaltRoutine,
02613
HalPowerDownRoutine,
02614
HalRestartRoutine,
02615
HalRebootRoutine,
02616
HalInteractiveModeRoutine,
02617
HalMaximumRoutine
02618 }
FIRMWARE_REENTRY, *
PFIRMWARE_REENTRY;
02619
02620
02621
02622
VOID
02623
KeReturnToFirmware (
02624 IN FIRMWARE_REENTRY Routine
02625 );
02626
02627
VOID
02628
KeStartAllProcessors (
02629 VOID
02630 );
02631
02632
02633
02634
02635
02636
VOID
02637
KeBalanceSetManager (
02638 IN PVOID Context
02639 );
02640
02641
VOID
02642
KeSwapProcessOrStack (
02643 IN PVOID Context
02644 );
02645
02646
02647
02648
02649
02650
NTKERNELAPI
02651
NTSTATUS
02652
KeUserModeCallback (
02653 IN ULONG ApiNumber,
02654 IN PVOID InputBuffer,
02655 IN ULONG InputLength,
02656 OUT PVOID *OutputBuffer,
02657 OUT PULONG OutputLength
02658 );
02659
02660
#if defined(_IA64_)
02661
PVOID
02662
KeSwitchKernelStack (
02663 IN PVOID StackBase,
02664 IN PVOID StackLimit,
02665 IN PVOID BStoreLimit
02666 );
02667
#else
02668
PVOID
02669
KeSwitchKernelStack (
02670 IN PVOID StackBase,
02671 IN PVOID StackLimit
02672 );
02673
#endif // defined(_IA64_)
02674
02675
NTSTATUS
02676
KeRaiseUserException(
02677 IN NTSTATUS ExceptionCode
02678 );
02679
02680
02681
02682
02683
02684
02685
NTKERNELAPI
02686
PCONFIGURATION_COMPONENT_DATA
02687
KeFindConfigurationEntry (
02688 IN
PCONFIGURATION_COMPONENT_DATA Child,
02689 IN CONFIGURATION_CLASS Class,
02690 IN CONFIGURATION_TYPE Type,
02691 IN PULONG Key OPTIONAL
02692 );
02693
02694
NTKERNELAPI
02695
PCONFIGURATION_COMPONENT_DATA
02696
KeFindConfigurationNextEntry (
02697 IN
PCONFIGURATION_COMPONENT_DATA Child,
02698 IN CONFIGURATION_CLASS Class,
02699 IN CONFIGURATION_TYPE Type,
02700 IN PULONG Key OPTIONAL,
02701 IN
PCONFIGURATION_COMPONENT_DATA *Resume
02702 );
02703
02704
02705
02706
02707
02708
02709
02710
02711
typedef
02712
VOID
02713 (
FASTCALL *
PSWAP_CONTEXT_NOTIFY_ROUTINE)(
02714 IN HANDLE OldThreadId,
02715 IN HANDLE NewThreadId
02716 );
02717
02718
NTKERNELAPI
02719
VOID
02720
FASTCALL
02721
KeSetSwapContextNotifyRoutine(
02722 IN PSWAP_CONTEXT_NOTIFY_ROUTINE NotifyRoutine
02723 );
02724
02725
02726
02727
02728
02729
typedef
02730 LOGICAL
02731 (
FASTCALL *
PTHREAD_SELECT_NOTIFY_ROUTINE)(
02732 IN HANDLE ThreadId
02733 );
02734
02735
NTKERNELAPI
02736
VOID
02737
FASTCALL
02738
KeSetThreadSelectNotifyRoutine(
02739 IN PTHREAD_SELECT_NOTIFY_ROUTINE NotifyRoutine
02740 );
02741
02742
02743
02744
02745
02746
typedef
02747
VOID
02748 (
FASTCALL *
PTIME_UPDATE_NOTIFY_ROUTINE)(
02749 IN HANDLE ThreadId,
02750 IN
KPROCESSOR_MODE Mode
02751 );
02752
02753
NTKERNELAPI
02754
VOID
02755
FASTCALL
02756
KeSetTimeUpdateNotifyRoutine(
02757 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine
02758 );
02759
02760
02761
02762
02763
02764
02765
02766 extern KAFFINITY
KeActiveProcessors;
02767 extern LARGE_INTEGER
KeBootTime;
02768 extern ULONGLONG
KeBootTimeBias;
02769 extern ULONGLONG
KeInterruptTimeBias;
02770 extern LIST_ENTRY
KeBugCheckCallbackListHead;
02771 extern KSPIN_LOCK
KeBugCheckCallbackLock;
02772 extern PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch;
02773 extern PLOADER_PARAMETER_BLOCK KeLoaderBlock;
02774 extern ULONG
KeMaximumIncrement;
02775 extern ULONG
KeMinimumIncrement;
02776 extern CCHAR
KeNumberProcessors;
02777 extern USHORT KeProcessorArchitecture;
02778 extern USHORT KeProcessorLevel;
02779 extern USHORT KeProcessorRevision;
02780 extern ULONG
KeFeatureBits;
02781 extern CCHAR
KiFindFirstSetRight[256];
02782 extern PKPRCB
KiProcessorBlock[];
02783 extern ULONG
KiStackProtectTime;
02784 extern KTHREAD_SWITCH_COUNTERS KeThreadSwitchCounters;
02785
02786
#if !defined(NT_UP)
02787
02788 extern ULONG
KeRegisteredProcessors;
02789 extern ULONG
KeLicensedProcessors;
02790
02791
#endif
02792
02793 extern PULONG
KeServiceCountTable;
02794 extern KSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable[
NUMBER_SERVICE_TABLES];
02795 extern KSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTableShadow[
NUMBER_SERVICE_TABLES];
02796
02797 extern volatile KSYSTEM_TIME
KeTickCount;
02798
02799
02800
02801
#if defined(_ALPHA_)
02802
02803
extern ULONG KeNumberProcessIds;
02804
extern ULONG KeNumberTbEntries;
02805
02806
#endif
02807
02808 extern PVOID
KeUserApcDispatcher;
02809 extern PVOID
KeUserCallbackDispatcher;
02810 extern PVOID
KeUserExceptionDispatcher;
02811 extern PVOID
KeRaiseUserExceptionDispatcher;
02812 extern ULONG
KeTimeAdjustment;
02813 extern ULONG
KeTimeIncrement;
02814 extern BOOLEAN
KeTimeSynchronization;
02815
02816
02817
02818
02819
02820 typedef enum _MEMORY_CACHING_TYPE_ORIG {
02821
MmFrameBufferCached = 2
02822 }
MEMORY_CACHING_TYPE_ORIG;
02823
02824 typedef enum _MEMORY_CACHING_TYPE {
02825
MmNonCached =
FALSE,
02826
MmCached =
TRUE,
02827
MmWriteCombined =
MmFrameBufferCached,
02828
MmHardwareCoherentCached,
02829
MmNonCachedUnordered,
02830
MmUSWCCached,
02831
MmMaximumCacheType
02832 }
MEMORY_CACHING_TYPE;
02833
02834
02835
02836
#if defined(_X86_)
02837
02838
02839
02840
02841
02842
NTSTATUS
02843
KeSetPhysicalCacheTypeRange (
02844 IN PHYSICAL_ADDRESS PhysicalAddress,
02845 IN ULONG NumberOfBytes,
02846 IN MEMORY_CACHING_TYPE CacheType
02847 );
02848
02849
#endif
02850
02851
#if defined(_X86_)
02852
02853
02854
02855
02856
02857
02858
02859
typedef
02860
VOID
02861 (
FASTCALL *KE_ZERO_PAGE_ROUTINE)(
02862 IN PVOID PageBase
02863 );
02864
02865
extern KE_ZERO_PAGE_ROUTINE
KeZeroPage;
02866
extern KE_ZERO_PAGE_ROUTINE
KeZeroPageFromIdleThread;
02867
02868
#endif
02869
02870
#if defined(_IA64_)
02871
VOID
02872
KeEnableSessionSharing(
02873 PREGION_MAP_INFO SessionMapInfo
02874 );
02875
VOID
02876
KeDetachSessionSpace(
02877 VOID
02878 );
02879
VOID
02880
KeAddSessionSpace(
02881 PKPROCESS Process,
02882 PREGION_MAP_INFO SessionMapInfo
02883 );
02884
VOID
02885
KeAttachSessionSpace(
02886 PREGION_MAP_INFO SessionMapInfo
02887 );
02888
VOID
02889
KeDisableSessionSharing(
02890 PREGION_MAP_INFO SessionMapInfo
02891 );
02892
#endif
02893
02894
#endif // _KE_
02895