ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ketypes.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  *                              Kernel Types                                  *
00003  ******************************************************************************/
00004 $if (_WDMDDK_)
00005 
00006 typedef UCHAR KIRQL, *PKIRQL;
00007 typedef CCHAR KPROCESSOR_MODE;
00008 typedef LONG KPRIORITY;
00009 
00010 typedef enum _MODE {
00011   KernelMode,
00012   UserMode,
00013   MaximumMode
00014 } MODE;
00015 
00016 #define CACHE_FULLY_ASSOCIATIVE 0xFF
00017 #define MAXIMUM_SUSPEND_COUNT   MAXCHAR
00018 
00019 #define EVENT_QUERY_STATE (0x0001)
00020 #define EVENT_MODIFY_STATE (0x0002)
00021 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
00022 
00023 #define LTP_PC_SMT 0x1
00024 
00025 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
00026 #define SINGLE_GROUP_LEGACY_API        1
00027 #endif
00028 
00029 #define SEMAPHORE_QUERY_STATE (0x0001)
00030 #define SEMAPHORE_MODIFY_STATE (0x0002)
00031 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
00032 
00033 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
00034   RelationProcessorCore,
00035   RelationNumaNode,
00036   RelationCache,
00037   RelationProcessorPackage,
00038   RelationGroup,
00039   RelationAll = 0xffff
00040 } LOGICAL_PROCESSOR_RELATIONSHIP;
00041 
00042 typedef enum _PROCESSOR_CACHE_TYPE {
00043   CacheUnified,
00044   CacheInstruction,
00045   CacheData,
00046   CacheTrace
00047 } PROCESSOR_CACHE_TYPE;
00048 
00049 typedef struct _CACHE_DESCRIPTOR {
00050   UCHAR Level;
00051   UCHAR Associativity;
00052   USHORT LineSize;
00053   ULONG Size;
00054   PROCESSOR_CACHE_TYPE Type;
00055 } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
00056 
00057 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
00058   ULONG_PTR ProcessorMask;
00059   LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
00060   _ANONYMOUS_UNION union {
00061     struct {
00062       UCHAR Flags;
00063     } ProcessorCore;
00064     struct {
00065       ULONG NodeNumber;
00066     } NumaNode;
00067     CACHE_DESCRIPTOR Cache;
00068     ULONGLONG Reserved[2];
00069   } DUMMYUNIONNAME;
00070 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
00071 
00072 typedef struct _PROCESSOR_RELATIONSHIP {
00073   UCHAR Flags;
00074   UCHAR Reserved[21];
00075   USHORT GroupCount;
00076   _Field_size_(GroupCount) GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
00077 } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
00078 
00079 typedef struct _NUMA_NODE_RELATIONSHIP {
00080   ULONG NodeNumber;
00081   UCHAR Reserved[20];
00082   GROUP_AFFINITY GroupMask;
00083 } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
00084 
00085 typedef struct _CACHE_RELATIONSHIP {
00086   UCHAR Level;
00087   UCHAR Associativity;
00088   USHORT LineSize;
00089   ULONG CacheSize;
00090   PROCESSOR_CACHE_TYPE Type;
00091   UCHAR Reserved[20];
00092   GROUP_AFFINITY GroupMask;
00093 } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
00094 
00095 typedef struct _PROCESSOR_GROUP_INFO {
00096   UCHAR MaximumProcessorCount;
00097   UCHAR ActiveProcessorCount;
00098   UCHAR Reserved[38];
00099   KAFFINITY ActiveProcessorMask;
00100 } PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
00101 
00102 typedef struct _GROUP_RELATIONSHIP {
00103   USHORT MaximumGroupCount;
00104   USHORT ActiveGroupCount;
00105   UCHAR Reserved[20];
00106   PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
00107 } GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;
00108 
00109 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
00110   LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
00111   ULONG Size;
00112   _ANONYMOUS_UNION union {
00113     PROCESSOR_RELATIONSHIP Processor;
00114     NUMA_NODE_RELATIONSHIP NumaNode;
00115     CACHE_RELATIONSHIP Cache;
00116     GROUP_RELATIONSHIP Group;
00117   } DUMMYUNIONNAME;
00118 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;;
00119 
00120 /* Processor features */
00121 #define PF_FLOATING_POINT_PRECISION_ERRATA  0
00122 #define PF_FLOATING_POINT_EMULATED          1
00123 #define PF_COMPARE_EXCHANGE_DOUBLE          2
00124 #define PF_MMX_INSTRUCTIONS_AVAILABLE       3
00125 #define PF_PPC_MOVEMEM_64BIT_OK             4
00126 #define PF_ALPHA_BYTE_INSTRUCTIONS          5
00127 #define PF_XMMI_INSTRUCTIONS_AVAILABLE      6
00128 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE     7
00129 #define PF_RDTSC_INSTRUCTION_AVAILABLE      8
00130 #define PF_PAE_ENABLED                      9
00131 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE   10
00132 #define PF_SSE_DAZ_MODE_AVAILABLE          11
00133 #define PF_NX_ENABLED                      12
00134 #define PF_SSE3_INSTRUCTIONS_AVAILABLE     13
00135 #define PF_COMPARE_EXCHANGE128             14
00136 #define PF_COMPARE64_EXCHANGE128           15
00137 #define PF_CHANNELS_ENABLED                16
00138 #define PF_XSAVE_ENABLED                   17
00139 
00140 #define MAXIMUM_WAIT_OBJECTS              64
00141 
00142 #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
00143 
00144 #define ASSERT_DPC(Object) \
00145     ASSERT(((Object)->Type == 0) || \
00146            ((Object)->Type == DpcObject) || \
00147            ((Object)->Type == ThreadedDpcObject))
00148 
00149 #define ASSERT_GATE(object) \
00150     NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
00151               (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
00152 
00153 #define ASSERT_DEVICE_QUEUE(Object) \
00154     NT_ASSERT((Object)->Type == DeviceQueueObject)
00155 
00156 #define ASSERT_TIMER(E) \
00157     NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
00158               ((E)->Header.Type == TimerSynchronizationObject))
00159 
00160 #define ASSERT_MUTANT(E) \
00161     NT_ASSERT((E)->Header.Type == MutantObject)
00162 
00163 #define ASSERT_SEMAPHORE(E) \
00164     NT_ASSERT((E)->Header.Type == SemaphoreObject)
00165 
00166 #define ASSERT_EVENT(E) \
00167     NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
00168               ((E)->Header.Type == SynchronizationEvent))
00169 
00170 #define DPC_NORMAL 0
00171 #define DPC_THREADED 1
00172 
00173 #define GM_LOCK_BIT          0x1
00174 #define GM_LOCK_BIT_V        0x0
00175 #define GM_LOCK_WAITER_WOKEN 0x2
00176 #define GM_LOCK_WAITER_INC   0x4
00177 
00178 #define LOCK_QUEUE_WAIT_BIT               0
00179 #define LOCK_QUEUE_OWNER_BIT              1
00180 
00181 #define LOCK_QUEUE_WAIT                   1
00182 #define LOCK_QUEUE_OWNER                  2
00183 #define LOCK_QUEUE_TIMER_LOCK_SHIFT       4
00184 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
00185 
00186 #define PROCESSOR_FEATURE_MAX 64
00187 
00188 #define DBG_STATUS_CONTROL_C              1
00189 #define DBG_STATUS_SYSRQ                  2
00190 #define DBG_STATUS_BUGCHECK_FIRST         3
00191 #define DBG_STATUS_BUGCHECK_SECOND        4
00192 #define DBG_STATUS_FATAL                  5
00193 #define DBG_STATUS_DEBUG_CONTROL          6
00194 #define DBG_STATUS_WORKER                 7
00195 
00196 #if defined(_WIN64)
00197 #define MAXIMUM_PROC_PER_GROUP 64
00198 #else
00199 #define MAXIMUM_PROC_PER_GROUP 32
00200 #endif
00201 #define MAXIMUM_PROCESSORS          MAXIMUM_PROC_PER_GROUP
00202 
00203 /* Exception Records */
00204 #define EXCEPTION_NONCONTINUABLE     1
00205 #define EXCEPTION_MAXIMUM_PARAMETERS 15
00206 
00207 #define EXCEPTION_DIVIDED_BY_ZERO       0
00208 #define EXCEPTION_DEBUG                 1
00209 #define EXCEPTION_NMI                   2
00210 #define EXCEPTION_INT3                  3
00211 #define EXCEPTION_BOUND_CHECK           5
00212 #define EXCEPTION_INVALID_OPCODE        6
00213 #define EXCEPTION_NPX_NOT_AVAILABLE     7
00214 #define EXCEPTION_DOUBLE_FAULT          8
00215 #define EXCEPTION_NPX_OVERRUN           9
00216 #define EXCEPTION_INVALID_TSS           0x0A
00217 #define EXCEPTION_SEGMENT_NOT_PRESENT   0x0B
00218 #define EXCEPTION_STACK_FAULT           0x0C
00219 #define EXCEPTION_GP_FAULT              0x0D
00220 #define EXCEPTION_RESERVED_TRAP         0x0F
00221 #define EXCEPTION_NPX_ERROR             0x010
00222 #define EXCEPTION_ALIGNMENT_CHECK       0x011
00223 
00224 typedef struct _EXCEPTION_RECORD {
00225   NTSTATUS ExceptionCode;
00226   ULONG ExceptionFlags;
00227   struct _EXCEPTION_RECORD *ExceptionRecord;
00228   PVOID ExceptionAddress;
00229   ULONG NumberParameters;
00230   ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
00231 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
00232 
00233 typedef struct _EXCEPTION_RECORD32 {
00234   NTSTATUS ExceptionCode;
00235   ULONG ExceptionFlags;
00236   ULONG ExceptionRecord;
00237   ULONG ExceptionAddress;
00238   ULONG NumberParameters;
00239   ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
00240 } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
00241 
00242 typedef struct _EXCEPTION_RECORD64 {
00243   NTSTATUS ExceptionCode;
00244   ULONG ExceptionFlags;
00245   ULONG64 ExceptionRecord;
00246   ULONG64 ExceptionAddress;
00247   ULONG NumberParameters;
00248   ULONG __unusedAlignment;
00249   ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
00250 } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
00251 
00252 typedef struct _EXCEPTION_POINTERS {
00253   PEXCEPTION_RECORD ExceptionRecord;
00254   PCONTEXT ContextRecord;
00255 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
00256 
00257 typedef enum _KBUGCHECK_CALLBACK_REASON {
00258   KbCallbackInvalid,
00259   KbCallbackReserved1,
00260   KbCallbackSecondaryDumpData,
00261   KbCallbackDumpIo,
00262   KbCallbackAddPages
00263 } KBUGCHECK_CALLBACK_REASON;
00264 
00265 struct _KBUGCHECK_REASON_CALLBACK_RECORD;
00266 
00267 _Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE)
00268 _IRQL_requires_same_
00269 typedef VOID
00270 (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)(
00271     _In_ KBUGCHECK_CALLBACK_REASON Reason,
00272     _In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record,
00273     _Inout_ PVOID ReasonSpecificData,
00274     _In_ ULONG ReasonSpecificDataLength);
00275 typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE;
00276 
00277 typedef struct _KBUGCHECK_ADD_PAGES {
00278   _Inout_ PVOID Context;
00279   _Inout_ ULONG Flags;
00280   _In_ ULONG BugCheckCode;
00281   _Out_ ULONG_PTR Address;
00282   _Out_ ULONG_PTR Count;
00283 } KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES;
00284 
00285 typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA {
00286   _In_ PVOID InBuffer;
00287   _In_ ULONG InBufferLength;
00288   _In_ ULONG MaximumAllowed;
00289   _Out_ GUID Guid;
00290   _Out_ PVOID OutBuffer;
00291   _Out_ ULONG OutBufferLength;
00292 } KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA;
00293 
00294 typedef enum _KBUGCHECK_DUMP_IO_TYPE {
00295   KbDumpIoInvalid,
00296   KbDumpIoHeader,
00297   KbDumpIoBody,
00298   KbDumpIoSecondaryData,
00299   KbDumpIoComplete
00300 } KBUGCHECK_DUMP_IO_TYPE;
00301 
00302 typedef struct _KBUGCHECK_DUMP_IO {
00303   _In_ ULONG64 Offset;
00304   _In_ PVOID Buffer;
00305   _In_ ULONG BufferLength;
00306   _In_ KBUGCHECK_DUMP_IO_TYPE Type;
00307 } KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO;
00308 
00309 #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS         0x00000001UL
00310 #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS        0x00000002UL
00311 #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
00312 
00313 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
00314   LIST_ENTRY Entry;
00315   PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
00316   PUCHAR Component;
00317   ULONG_PTR Checksum;
00318   KBUGCHECK_CALLBACK_REASON Reason;
00319   UCHAR State;
00320 } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
00321 
00322 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
00323   BufferEmpty,
00324   BufferInserted,
00325   BufferStarted,
00326   BufferFinished,
00327   BufferIncomplete
00328 } KBUGCHECK_BUFFER_DUMP_STATE;
00329 
00330 _Function_class_(KBUGCHECK_CALLBACK_ROUTINE)
00331 _IRQL_requires_same_
00332 typedef VOID
00333 (NTAPI KBUGCHECK_CALLBACK_ROUTINE)(
00334   IN PVOID Buffer,
00335   IN ULONG Length);
00336 typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE;
00337 
00338 typedef struct _KBUGCHECK_CALLBACK_RECORD {
00339   LIST_ENTRY Entry;
00340   PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
00341   _Field_size_bytes_opt_(Length) PVOID Buffer;
00342   ULONG Length;
00343   PUCHAR Component;
00344   ULONG_PTR Checksum;
00345   UCHAR State;
00346 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
00347 
00348 _Function_class_(NMI_CALLBACK)
00349 _IRQL_requires_same_
00350 typedef BOOLEAN
00351 (NTAPI NMI_CALLBACK)(
00352   _In_opt_ PVOID Context,
00353   _In_ BOOLEAN Handled);
00354 typedef NMI_CALLBACK *PNMI_CALLBACK;
00355 
00356 typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE {
00357   KeProcessorAddStartNotify = 0,
00358   KeProcessorAddCompleteNotify,
00359   KeProcessorAddFailureNotify
00360 } KE_PROCESSOR_CHANGE_NOTIFY_STATE;
00361 
00362 typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT {
00363   KE_PROCESSOR_CHANGE_NOTIFY_STATE State;
00364   ULONG NtNumber;
00365   NTSTATUS Status;
00366 #if (NTDDI_VERSION >= NTDDI_WIN7)
00367   PROCESSOR_NUMBER ProcNumber;
00368 #endif
00369 } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT;
00370 
00371 _IRQL_requires_same_
00372 _Function_class_(PROCESSOR_CALLBACK_FUNCTION)
00373 typedef VOID
00374 (NTAPI PROCESSOR_CALLBACK_FUNCTION)(
00375   _In_ PVOID CallbackContext,
00376   _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext,
00377   _Inout_ PNTSTATUS OperationStatus);
00378 typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION;
00379 
00380 #define KE_PROCESSOR_CHANGE_ADD_EXISTING         1
00381 
00382 #define INVALID_PROCESSOR_INDEX     0xffffffff
00383 
00384 typedef enum _KINTERRUPT_POLARITY {
00385   InterruptPolarityUnknown,
00386   InterruptActiveHigh,
00387   InterruptActiveLow
00388 } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
00389 
00390 typedef enum _KPROFILE_SOURCE {
00391   ProfileTime,
00392   ProfileAlignmentFixup,
00393   ProfileTotalIssues,
00394   ProfilePipelineDry,
00395   ProfileLoadInstructions,
00396   ProfilePipelineFrozen,
00397   ProfileBranchInstructions,
00398   ProfileTotalNonissues,
00399   ProfileDcacheMisses,
00400   ProfileIcacheMisses,
00401   ProfileCacheMisses,
00402   ProfileBranchMispredictions,
00403   ProfileStoreInstructions,
00404   ProfileFpInstructions,
00405   ProfileIntegerInstructions,
00406   Profile2Issue,
00407   Profile3Issue,
00408   Profile4Issue,
00409   ProfileSpecialInstructions,
00410   ProfileTotalCycles,
00411   ProfileIcacheIssues,
00412   ProfileDcacheAccesses,
00413   ProfileMemoryBarrierCycles,
00414   ProfileLoadLinkedIssues,
00415   ProfileMaximum
00416 } KPROFILE_SOURCE;
00417 
00418 typedef enum _KWAIT_REASON {
00419   Executive,
00420   FreePage,
00421   PageIn,
00422   PoolAllocation,
00423   DelayExecution,
00424   Suspended,
00425   UserRequest,
00426   WrExecutive,
00427   WrFreePage,
00428   WrPageIn,
00429   WrPoolAllocation,
00430   WrDelayExecution,
00431   WrSuspended,
00432   WrUserRequest,
00433   WrEventPair,
00434   WrQueue,
00435   WrLpcReceive,
00436   WrLpcReply,
00437   WrVirtualMemory,
00438   WrPageOut,
00439   WrRendezvous,
00440   WrKeyedEvent,
00441   WrTerminated,
00442   WrProcessInSwap,
00443   WrCpuRateControl,
00444   WrCalloutStack,
00445   WrKernel,
00446   WrResource,
00447   WrPushLock,
00448   WrMutex,
00449   WrQuantumEnd,
00450   WrDispatchInt,
00451   WrPreempted,
00452   WrYieldExecution,
00453   WrFastMutex,
00454   WrGuardedMutex,
00455   WrRundown,
00456   MaximumWaitReason
00457 } KWAIT_REASON;
00458 
00459 typedef struct _KWAIT_BLOCK {
00460   LIST_ENTRY WaitListEntry;
00461   struct _KTHREAD *Thread;
00462   PVOID Object;
00463   struct _KWAIT_BLOCK *NextWaitBlock;
00464   USHORT WaitKey;
00465   UCHAR WaitType;
00466 #if (NTDDI_VERSION >= NTDDI_WIN7)
00467   volatile UCHAR BlockState;
00468 #else
00469   UCHAR SpareByte;
00470 #endif
00471 #if defined(_WIN64)
00472   LONG SpareLong;
00473 #endif
00474 } KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK;
00475 
00476 typedef enum _KINTERRUPT_MODE {
00477   LevelSensitive,
00478   Latched
00479 } KINTERRUPT_MODE;
00480 
00481 #define THREAD_WAIT_OBJECTS 3
00482 
00483 _IRQL_requires_same_
00484 _Function_class_(KSTART_ROUTINE)
00485 typedef VOID
00486 (NTAPI KSTART_ROUTINE)(
00487   _In_ PVOID StartContext);
00488 typedef KSTART_ROUTINE *PKSTART_ROUTINE;
00489 
00490 typedef VOID
00491 (NTAPI *PKINTERRUPT_ROUTINE)(
00492   VOID);
00493 
00494 _Function_class_(KSERVICE_ROUTINE)
00495 _IRQL_requires_(HIGH_LEVEL)
00496 _IRQL_requires_same_
00497 typedef BOOLEAN
00498 (NTAPI KSERVICE_ROUTINE)(
00499   _In_ struct _KINTERRUPT *Interrupt,
00500   _In_ PVOID ServiceContext);
00501 typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
00502 
00503 _Function_class_(KMESSAGE_SERVICE_ROUTINE)
00504 _IRQL_requires_same_
00505 typedef BOOLEAN
00506 (NTAPI KMESSAGE_SERVICE_ROUTINE)(
00507   _In_ struct _KINTERRUPT *Interrupt,
00508   _In_ PVOID ServiceContext,
00509   _In_ ULONG MessageID);
00510 typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE;
00511 
00512 typedef enum _KD_OPTION {
00513   KD_OPTION_SET_BLOCK_ENABLE,
00514 } KD_OPTION;
00515 
00516 typedef VOID
00517 (NTAPI *PKNORMAL_ROUTINE)(
00518   IN PVOID NormalContext OPTIONAL,
00519   IN PVOID SystemArgument1 OPTIONAL,
00520   IN PVOID SystemArgument2 OPTIONAL);
00521 
00522 typedef VOID
00523 (NTAPI *PKRUNDOWN_ROUTINE)(
00524   IN struct _KAPC *Apc);
00525 
00526 typedef VOID
00527 (NTAPI *PKKERNEL_ROUTINE)(
00528   IN struct _KAPC *Apc,
00529   IN OUT PKNORMAL_ROUTINE *NormalRoutine OPTIONAL,
00530   IN OUT PVOID *NormalContext OPTIONAL,
00531   IN OUT PVOID *SystemArgument1 OPTIONAL,
00532   IN OUT PVOID *SystemArgument2 OPTIONAL);
00533 
00534 typedef struct _KAPC {
00535   UCHAR Type;
00536   UCHAR SpareByte0;
00537   UCHAR Size;
00538   UCHAR SpareByte1;
00539   ULONG SpareLong0;
00540   struct _KTHREAD *Thread;
00541   LIST_ENTRY ApcListEntry;
00542   PKKERNEL_ROUTINE KernelRoutine;
00543   PKRUNDOWN_ROUTINE RundownRoutine;
00544   PKNORMAL_ROUTINE NormalRoutine;
00545   PVOID NormalContext;
00546   PVOID SystemArgument1;
00547   PVOID SystemArgument2;
00548   CCHAR ApcStateIndex;
00549   KPROCESSOR_MODE ApcMode;
00550   BOOLEAN Inserted;
00551 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
00552 
00553 #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
00554 #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
00555 #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
00556 #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
00557 #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
00558 #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
00559 #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
00560 
00561 typedef struct _KDEVICE_QUEUE_ENTRY {
00562   LIST_ENTRY DeviceListEntry;
00563   ULONG SortKey;
00564   BOOLEAN Inserted;
00565 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
00566 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
00567 
00568 typedef PVOID PKIPI_CONTEXT;
00569 
00570 typedef VOID
00571 (NTAPI *PKIPI_WORKER)(
00572   IN OUT PKIPI_CONTEXT PacketContext,
00573   IN PVOID Parameter1 OPTIONAL,
00574   IN PVOID Parameter2 OPTIONAL,
00575   IN PVOID Parameter3 OPTIONAL);
00576 
00577 typedef struct _KIPI_COUNTS {
00578   ULONG Freeze;
00579   ULONG Packet;
00580   ULONG DPC;
00581   ULONG APC;
00582   ULONG FlushSingleTb;
00583   ULONG FlushMultipleTb;
00584   ULONG FlushEntireTb;
00585   ULONG GenericCall;
00586   ULONG ChangeColor;
00587   ULONG SweepDcache;
00588   ULONG SweepIcache;
00589   ULONG SweepIcacheRange;
00590   ULONG FlushIoBuffers;
00591   ULONG GratuitousDPC;
00592 } KIPI_COUNTS, *PKIPI_COUNTS;
00593 
00594 _IRQL_requires_same_
00595 _Function_class_(KIPI_BROADCAST_WORKER)
00596 _IRQL_requires_(IPI_LEVEL)
00597 typedef ULONG_PTR
00598 (NTAPI KIPI_BROADCAST_WORKER)(
00599   _In_ ULONG_PTR Argument);
00600 typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER;
00601 
00602 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
00603 
00604 typedef struct _KSPIN_LOCK_QUEUE {
00605   struct _KSPIN_LOCK_QUEUE *volatile Next;
00606   PKSPIN_LOCK volatile Lock;
00607 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
00608 
00609 typedef struct _KLOCK_QUEUE_HANDLE {
00610   KSPIN_LOCK_QUEUE LockQueue;
00611   KIRQL OldIrql;
00612 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
00613 
00614 #if defined(_AMD64_)
00615 
00616 typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER;
00617 
00618 #define LockQueueDispatcherLock 0
00619 #define LockQueueExpansionLock 1
00620 #define LockQueuePfnLock 2
00621 #define LockQueueSystemSpaceLock 3
00622 #define LockQueueVacbLock 4
00623 #define LockQueueMasterLock 5
00624 #define LockQueueNonPagedPoolLock 6
00625 #define LockQueueIoCancelLock 7
00626 #define LockQueueWorkQueueLock 8
00627 #define LockQueueIoVpbLock 9
00628 #define LockQueueIoDatabaseLock 10
00629 #define LockQueueIoCompletionLock 11
00630 #define LockQueueNtfsStructLock 12
00631 #define LockQueueAfdWorkQueueLock 13
00632 #define LockQueueBcbLock 14
00633 #define LockQueueMmNonPagedPoolLock 15
00634 #define LockQueueUnusedSpare16 16
00635 #define LockQueueTimerTableLock 17
00636 #define LockQueueMaximumLock (LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS)
00637 
00638 #else
00639 
00640 typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
00641   LockQueueDispatcherLock,
00642   LockQueueExpansionLock,
00643   LockQueuePfnLock,
00644   LockQueueSystemSpaceLock,
00645   LockQueueVacbLock,
00646   LockQueueMasterLock,
00647   LockQueueNonPagedPoolLock,
00648   LockQueueIoCancelLock,
00649   LockQueueWorkQueueLock,
00650   LockQueueIoVpbLock,
00651   LockQueueIoDatabaseLock,
00652   LockQueueIoCompletionLock,
00653   LockQueueNtfsStructLock,
00654   LockQueueAfdWorkQueueLock,
00655   LockQueueBcbLock,
00656   LockQueueMmNonPagedPoolLock,
00657   LockQueueUnusedSpare16,
00658   LockQueueTimerTableLock,
00659   LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS
00660 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
00661 
00662 #endif /* defined(_AMD64_) */
00663 
00664 _Function_class_(KDEFERRED_ROUTINE)
00665 _IRQL_requires_(DISPATCH_LEVEL)
00666 _IRQL_requires_same_
00667 typedef VOID
00668 (NTAPI KDEFERRED_ROUTINE)(
00669   _In_ struct _KDPC *Dpc,
00670   _In_opt_ PVOID DeferredContext,
00671   _In_opt_ PVOID SystemArgument1,
00672   _In_opt_ PVOID SystemArgument2);
00673 typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE;
00674 
00675 typedef enum _KDPC_IMPORTANCE {
00676   LowImportance,
00677   MediumImportance,
00678   HighImportance,
00679   MediumHighImportance
00680 } KDPC_IMPORTANCE;
00681 
00682 typedef struct _KDPC {
00683   UCHAR Type;
00684   UCHAR Importance;
00685   volatile USHORT Number;
00686   LIST_ENTRY DpcListEntry;
00687   PKDEFERRED_ROUTINE DeferredRoutine;
00688   PVOID DeferredContext;
00689   PVOID SystemArgument1;
00690   PVOID SystemArgument2;
00691   volatile PVOID DpcData;
00692 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
00693 
00694 typedef struct _KDPC_WATCHDOG_INFORMATION {
00695   ULONG DpcTimeLimit;
00696   ULONG DpcTimeCount;
00697   ULONG DpcWatchdogLimit;
00698   ULONG DpcWatchdogCount;
00699   ULONG Reserved;
00700 } KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;
00701 
00702 typedef struct _KDEVICE_QUEUE {
00703   CSHORT Type;
00704   CSHORT Size;
00705   LIST_ENTRY DeviceListHead;
00706   KSPIN_LOCK Lock;
00707 # if defined(_AMD64_)
00708   _ANONYMOUS_UNION union {
00709     BOOLEAN Busy;
00710     _ANONYMOUS_STRUCT struct {
00711       LONG64 Reserved:8;
00712       LONG64 Hint:56;
00713     } DUMMYSTRUCTNAME;
00714   } DUMMYUNIONNAME;
00715 # else
00716   BOOLEAN Busy;
00717 # endif
00718 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
00719 
00720 #define TIMER_EXPIRED_INDEX_BITS        6
00721 #define TIMER_PROCESSOR_INDEX_BITS      5
00722 
00723 typedef struct _DISPATCHER_HEADER {
00724   _ANONYMOUS_UNION union {
00725     _ANONYMOUS_STRUCT struct {
00726       UCHAR Type;
00727       _ANONYMOUS_UNION union {
00728         _ANONYMOUS_UNION union {
00729           UCHAR TimerControlFlags;
00730           _ANONYMOUS_STRUCT struct {
00731             UCHAR Absolute:1;
00732             UCHAR Coalescable:1;
00733             UCHAR KeepShifting:1;
00734             UCHAR EncodedTolerableDelay:5;
00735           } DUMMYSTRUCTNAME;
00736         } DUMMYUNIONNAME;
00737         UCHAR Abandoned;
00738 #if (NTDDI_VERSION < NTDDI_WIN7)
00739         UCHAR NpxIrql;
00740 #endif
00741         BOOLEAN Signalling;
00742       } DUMMYUNIONNAME;
00743       _ANONYMOUS_UNION union {
00744         _ANONYMOUS_UNION union {
00745           UCHAR ThreadControlFlags;
00746           _ANONYMOUS_STRUCT struct {
00747             UCHAR CpuThrottled:1;
00748             UCHAR CycleProfiling:1;
00749             UCHAR CounterProfiling:1;
00750             UCHAR Reserved:5;
00751           } DUMMYSTRUCTNAME;
00752         } DUMMYUNIONNAME;
00753         UCHAR Size;
00754         UCHAR Hand;
00755       } DUMMYUNIONNAME2;
00756       _ANONYMOUS_UNION union {
00757 #if (NTDDI_VERSION >= NTDDI_WIN7)
00758         _ANONYMOUS_UNION union {
00759           UCHAR TimerMiscFlags;
00760           _ANONYMOUS_STRUCT struct {
00761 #if !defined(_X86_)
00762             UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
00763 #else
00764             UCHAR Index:1;
00765             UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
00766 #endif
00767             UCHAR Inserted:1;
00768             volatile UCHAR Expired:1;
00769           } DUMMYSTRUCTNAME;
00770         } DUMMYUNIONNAME;
00771 #else
00772         /* Pre Win7 compatibility fix to latest WDK */
00773         UCHAR Inserted;
00774 #endif
00775         _ANONYMOUS_UNION union {
00776           BOOLEAN DebugActive;
00777           _ANONYMOUS_STRUCT struct {
00778             BOOLEAN ActiveDR7:1;
00779             BOOLEAN Instrumented:1;
00780             BOOLEAN Reserved2:4;
00781             BOOLEAN UmsScheduled:1;
00782             BOOLEAN UmsPrimary:1;
00783           } DUMMYSTRUCTNAME;
00784         } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
00785         BOOLEAN DpcActive;
00786       } DUMMYUNIONNAME3;
00787     } DUMMYSTRUCTNAME;
00788     volatile LONG Lock;
00789   } DUMMYUNIONNAME;
00790   LONG SignalState;
00791   LIST_ENTRY WaitListHead;
00792 } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
00793 
00794 typedef struct _KEVENT {
00795   DISPATCHER_HEADER Header;
00796 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
00797 
00798 typedef struct _KSEMAPHORE {
00799   DISPATCHER_HEADER Header;
00800   LONG Limit;
00801 } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
00802 
00803 #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
00804 
00805 typedef struct _KGATE {
00806   DISPATCHER_HEADER Header;
00807 } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
00808 
00809 typedef struct _KGUARDED_MUTEX {
00810   volatile LONG Count;
00811   PKTHREAD Owner;
00812   ULONG Contention;
00813   KGATE Gate;
00814   _ANONYMOUS_UNION union {
00815     _ANONYMOUS_STRUCT struct {
00816       SHORT KernelApcDisable;
00817       SHORT SpecialApcDisable;
00818     } DUMMYSTRUCTNAME;
00819     ULONG CombinedApcDisable;
00820   } DUMMYUNIONNAME;
00821 } KGUARDED_MUTEX, *PKGUARDED_MUTEX;
00822 
00823 typedef struct _KMUTANT {
00824   DISPATCHER_HEADER Header;
00825   LIST_ENTRY MutantListEntry;
00826   struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
00827   BOOLEAN Abandoned;
00828   UCHAR ApcDisable;
00829 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
00830 
00831 #define TIMER_TABLE_SIZE 512
00832 #define TIMER_TABLE_SHIFT 9
00833 
00834 typedef struct _KTIMER {
00835   DISPATCHER_HEADER Header;
00836   ULARGE_INTEGER DueTime;
00837   LIST_ENTRY TimerListEntry;
00838   struct _KDPC *Dpc;
00839 #if (NTDDI_VERSION >= NTDDI_WIN7) && !defined(_X86_)
00840   ULONG Processor;
00841 #endif
00842   ULONG Period;
00843 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
00844 
00845 typedef enum _LOCK_OPERATION {
00846   IoReadAccess,
00847   IoWriteAccess,
00848   IoModifyAccess
00849 } LOCK_OPERATION;
00850 
00851 #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
00852 
00853 _Function_class_(KSYNCHRONIZE_ROUTINE)
00854 _IRQL_requires_same_
00855 typedef BOOLEAN
00856 (NTAPI KSYNCHRONIZE_ROUTINE)(
00857   _In_ PVOID SynchronizeContext);
00858 typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE;
00859 
00860 typedef enum _POOL_TYPE {
00861   NonPagedPool,
00862   PagedPool,
00863   NonPagedPoolMustSucceed,
00864   DontUseThisType,
00865   NonPagedPoolCacheAligned,
00866   PagedPoolCacheAligned,
00867   NonPagedPoolCacheAlignedMustS,
00868   MaxPoolType,
00869   NonPagedPoolSession = 32,
00870   PagedPoolSession,
00871   NonPagedPoolMustSucceedSession,
00872   DontUseThisTypeSession,
00873   NonPagedPoolCacheAlignedSession,
00874   PagedPoolCacheAlignedSession,
00875   NonPagedPoolCacheAlignedMustSSession
00876 } POOL_TYPE;
00877 
00878 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
00879   StandardDesign,
00880   NEC98x86,
00881   EndAlternatives
00882 } ALTERNATIVE_ARCHITECTURE_TYPE;
00883 
00884 #ifndef _X86_
00885 
00886 #ifndef IsNEC_98
00887 #define IsNEC_98 (FALSE)
00888 #endif
00889 
00890 #ifndef IsNotNEC_98
00891 #define IsNotNEC_98 (TRUE)
00892 #endif
00893 
00894 #ifndef SetNEC_98
00895 #define SetNEC_98
00896 #endif
00897 
00898 #ifndef SetNotNEC_98
00899 #define SetNotNEC_98
00900 #endif
00901 
00902 #endif
00903 
00904 typedef struct _KSYSTEM_TIME {
00905   ULONG LowPart;
00906   LONG High1Time;
00907   LONG High2Time;
00908 } KSYSTEM_TIME, *PKSYSTEM_TIME;
00909 
00910 typedef struct DECLSPEC_ALIGN(16) _M128A {
00911   ULONGLONG Low;
00912   LONGLONG High;
00913 } M128A, *PM128A;
00914 
00915 typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
00916   USHORT ControlWord;
00917   USHORT StatusWord;
00918   UCHAR TagWord;
00919   UCHAR Reserved1;
00920   USHORT ErrorOpcode;
00921   ULONG ErrorOffset;
00922   USHORT ErrorSelector;
00923   USHORT Reserved2;
00924   ULONG DataOffset;
00925   USHORT DataSelector;
00926   USHORT Reserved3;
00927   ULONG MxCsr;
00928   ULONG MxCsr_Mask;
00929   M128A FloatRegisters[8];
00930 #if defined(_WIN64)
00931   M128A XmmRegisters[16];
00932   UCHAR Reserved4[96];
00933 #else
00934   M128A XmmRegisters[8];
00935   UCHAR Reserved4[192];
00936   ULONG StackControl[7];
00937   ULONG Cr0NpxState;
00938 #endif
00939 } XSAVE_FORMAT, *PXSAVE_FORMAT;
00940 
00941 typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER {
00942   ULONG64 Mask;
00943   ULONG64 Reserved[7];
00944 } XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER;
00945 
00946 typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA {
00947   XSAVE_FORMAT LegacyState;
00948   XSAVE_AREA_HEADER Header;
00949 } XSAVE_AREA, *PXSAVE_AREA;
00950 
00951 typedef struct _XSTATE_CONTEXT {
00952   ULONG64 Mask;
00953   ULONG Length;
00954   ULONG Reserved1;
00955   _Field_size_bytes_opt_(Length) PXSAVE_AREA Area;
00956 #if defined(_X86_)
00957   ULONG Reserved2;
00958 #endif
00959   PVOID Buffer;
00960 #if defined(_X86_)
00961   ULONG Reserved3;
00962 #endif
00963 } XSTATE_CONTEXT, *PXSTATE_CONTEXT;
00964 
00965 typedef struct _XSTATE_SAVE {
00966 #if defined(_AMD64_)
00967   struct _XSTATE_SAVE* Prev;
00968   struct _KTHREAD* Thread;
00969   UCHAR Level;
00970   XSTATE_CONTEXT XStateContext;
00971 #elif defined(_IA64_)
00972   ULONG Dummy;
00973 #elif defined(_X86_)
00974   _ANONYMOUS_UNION union {
00975     _ANONYMOUS_STRUCT struct {
00976       LONG64 Reserved1;
00977       ULONG Reserved2;
00978       struct _XSTATE_SAVE* Prev;
00979       PXSAVE_AREA Reserved3;
00980       struct _KTHREAD* Thread;
00981       PVOID Reserved4;
00982       UCHAR Level;
00983     } DUMMYSTRUCTNAME;
00984     XSTATE_CONTEXT XStateContext;
00985   } DUMMYUNIONNAME;
00986 #endif
00987 } XSTATE_SAVE, *PXSTATE_SAVE;
00988 
00989 #ifdef _X86_
00990 
00991 #define MAXIMUM_SUPPORTED_EXTENSION  512
00992 
00993 #if !defined(__midl) && !defined(MIDL_PASS)
00994 C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION);
00995 #endif
00996 
00997 #endif /* _X86_ */
00998 
00999 #define XSAVE_ALIGN                    64
01000 #define MINIMAL_XSTATE_AREA_LENGTH     sizeof(XSAVE_AREA)
01001 
01002 #if !defined(__midl) && !defined(MIDL_PASS)
01003 C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0);
01004 C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0);
01005 C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64);
01006 #endif
01007 
01008 typedef struct _CONTEXT_CHUNK {
01009   LONG Offset;
01010   ULONG Length;
01011 } CONTEXT_CHUNK, *PCONTEXT_CHUNK;
01012 
01013 typedef struct _CONTEXT_EX {
01014   CONTEXT_CHUNK All;
01015   CONTEXT_CHUNK Legacy;
01016   CONTEXT_CHUNK XState;
01017 } CONTEXT_EX, *PCONTEXT_EX;
01018 
01019 #define CONTEXT_EX_LENGTH         ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
01020 
01021 #if (NTDDI_VERSION >= NTDDI_VISTA)
01022 extern NTSYSAPI volatile CCHAR KeNumberProcessors;
01023 #elif (NTDDI_VERSION >= NTDDI_WINXP)
01024 extern NTSYSAPI CCHAR KeNumberProcessors;
01025 #else
01026 extern PCCHAR KeNumberProcessors;
01027 #endif
01028 
01029 $endif (_WDMDDK_)
01030 $if (_NTDDK_)
01031 
01032 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
01033 #define NX_SUPPORT_POLICY_ALWAYSON  1
01034 #define NX_SUPPORT_POLICY_OPTIN     2
01035 #define NX_SUPPORT_POLICY_OPTOUT    3
01036 
01037 _IRQL_requires_same_
01038 _Function_class_(EXPAND_STACK_CALLOUT)
01039 typedef VOID
01040 (NTAPI EXPAND_STACK_CALLOUT)(
01041   _In_opt_ PVOID Parameter);
01042 typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT;
01043 
01044 typedef VOID
01045 (NTAPI *PTIMER_APC_ROUTINE)(
01046   _In_ PVOID TimerContext,
01047   _In_ ULONG TimerLowValue,
01048   _In_ LONG TimerHighValue);
01049 
01050 typedef enum _TIMER_SET_INFORMATION_CLASS {
01051   TimerSetCoalescableTimer,
01052   MaxTimerInfoClass
01053 } TIMER_SET_INFORMATION_CLASS;
01054 
01055 #if (NTDDI_VERSION >= NTDDI_WIN7)
01056 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
01057   _In_ LARGE_INTEGER DueTime;
01058   _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine;
01059   _In_opt_ PVOID TimerContext;
01060   _In_opt_ struct _COUNTED_REASON_CONTEXT *WakeContext;
01061   _In_opt_ ULONG Period;
01062   _In_ ULONG TolerableDelay;
01063   _Out_opt_ PBOOLEAN PreviousState;
01064 } TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO;
01065 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
01066 
01067 #define XSTATE_LEGACY_FLOATING_POINT        0
01068 #define XSTATE_LEGACY_SSE                   1
01069 #define XSTATE_GSSE                         2
01070 
01071 #define XSTATE_MASK_LEGACY_FLOATING_POINT   (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
01072 #define XSTATE_MASK_LEGACY_SSE              (1i64 << (XSTATE_LEGACY_SSE))
01073 #define XSTATE_MASK_LEGACY                  (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
01074 #define XSTATE_MASK_GSSE                    (1i64 << (XSTATE_GSSE))
01075 
01076 #define MAXIMUM_XSTATE_FEATURES             64
01077 
01078 typedef struct _XSTATE_FEATURE {
01079   ULONG Offset;
01080   ULONG Size;
01081 } XSTATE_FEATURE, *PXSTATE_FEATURE;
01082 
01083 typedef struct _XSTATE_CONFIGURATION {
01084   ULONG64 EnabledFeatures;
01085   ULONG Size;
01086   ULONG OptimizedSave:1;
01087   XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
01088 } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
01089 
01090 #define MAX_WOW64_SHARED_ENTRIES 16
01091 
01092 typedef struct _KUSER_SHARED_DATA {
01093   ULONG TickCountLowDeprecated;
01094   ULONG TickCountMultiplier;
01095   volatile KSYSTEM_TIME InterruptTime;
01096   volatile KSYSTEM_TIME SystemTime;
01097   volatile KSYSTEM_TIME TimeZoneBias;
01098   USHORT ImageNumberLow;
01099   USHORT ImageNumberHigh;
01100   WCHAR NtSystemRoot[260];
01101   ULONG MaxStackTraceDepth;
01102   ULONG CryptoExponent;
01103   ULONG TimeZoneId;
01104   ULONG LargePageMinimum;
01105   ULONG Reserved2[7];
01106   NT_PRODUCT_TYPE NtProductType;
01107   BOOLEAN ProductTypeIsValid;
01108   ULONG NtMajorVersion;
01109   ULONG NtMinorVersion;
01110   BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
01111   ULONG Reserved1;
01112   ULONG Reserved3;
01113   volatile ULONG TimeSlip;
01114   ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
01115   ULONG AltArchitecturePad[1];
01116   LARGE_INTEGER SystemExpirationDate;
01117   ULONG SuiteMask;
01118   BOOLEAN KdDebuggerEnabled;
01119 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
01120   UCHAR NXSupportPolicy;
01121 #endif
01122   volatile ULONG ActiveConsoleId;
01123   volatile ULONG DismountCount;
01124   ULONG ComPlusPackage;
01125   ULONG LastSystemRITEventTickCount;
01126   ULONG NumberOfPhysicalPages;
01127   BOOLEAN SafeBootMode;
01128 #if (NTDDI_VERSION >= NTDDI_WIN7)
01129   _ANONYMOUS_UNION union {
01130     UCHAR TscQpcData;
01131     _ANONYMOUS_STRUCT struct {
01132       UCHAR TscQpcEnabled:1;
01133       UCHAR TscQpcSpareFlag:1;
01134       UCHAR TscQpcShift:6;
01135     } DUMMYSTRUCTNAME;
01136   } DUMMYUNIONNAME;
01137   UCHAR TscQpcPad[2];
01138 #endif
01139 #if (NTDDI_VERSION >= NTDDI_VISTA)
01140   _ANONYMOUS_UNION union {
01141     ULONG SharedDataFlags;
01142     _ANONYMOUS_STRUCT struct {
01143       ULONG DbgErrorPortPresent:1;
01144       ULONG DbgElevationEnabled:1;
01145       ULONG DbgVirtEnabled:1;
01146       ULONG DbgInstallerDetectEnabled:1;
01147       ULONG DbgSystemDllRelocated:1;
01148       ULONG DbgDynProcessorEnabled:1;
01149       ULONG DbgSEHValidationEnabled:1;
01150       ULONG SpareBits:25;
01151     } DUMMYSTRUCTNAME2;
01152   } DUMMYUNIONNAME2;
01153 #else
01154   ULONG TraceLogging;
01155 #endif
01156   ULONG DataFlagsPad[1];
01157   ULONGLONG TestRetInstruction;
01158   ULONG SystemCall;
01159   ULONG SystemCallReturn;
01160   ULONGLONG SystemCallPad[3];
01161   _ANONYMOUS_UNION union {
01162     volatile KSYSTEM_TIME TickCount;
01163     volatile ULONG64 TickCountQuad;
01164     _ANONYMOUS_STRUCT struct {
01165       ULONG ReservedTickCountOverlay[3];
01166       ULONG TickCountPad[1];
01167     } DUMMYSTRUCTNAME;
01168   } DUMMYUNIONNAME3;
01169   ULONG Cookie;
01170   ULONG CookiePad[1];
01171 #if (NTDDI_VERSION >= NTDDI_WS03)
01172   LONGLONG ConsoleSessionForegroundProcessId;
01173   ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
01174 #endif
01175 #if (NTDDI_VERSION >= NTDDI_VISTA)
01176 #if (NTDDI_VERSION >= NTDDI_WIN7)
01177   USHORT UserModeGlobalLogger[16];
01178 #else
01179   USHORT UserModeGlobalLogger[8];
01180   ULONG HeapTracingPid[2];
01181   ULONG CritSecTracingPid[2];
01182 #endif
01183   ULONG ImageFileExecutionOptions;
01184 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
01185   ULONG LangGenerationCount;
01186 #else
01187   /* 4 bytes padding */
01188 #endif
01189   ULONGLONG Reserved5;
01190   volatile ULONG64 InterruptTimeBias;
01191 #endif
01192 #if (NTDDI_VERSION >= NTDDI_WIN7)
01193   volatile ULONG64 TscQpcBias;
01194   volatile ULONG ActiveProcessorCount;
01195   volatile USHORT ActiveGroupCount;
01196   USHORT Reserved4;
01197   volatile ULONG AitSamplingValue;
01198   volatile ULONG AppCompatFlag;
01199   ULONGLONG SystemDllNativeRelocation;
01200   ULONG SystemDllWowRelocation;
01201   ULONG XStatePad[1];
01202   XSTATE_CONFIGURATION XState;
01203 #endif
01204 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
01205 
01206 #if (NTDDI_VERSION >= NTDDI_VISTA)
01207 extern NTSYSAPI volatile CCHAR KeNumberProcessors;
01208 #elif (NTDDI_VERSION >= NTDDI_WINXP)
01209 extern NTSYSAPI CCHAR KeNumberProcessors;
01210 #else
01211 extern PCCHAR KeNumberProcessors;
01212 #endif
01213 
01214 $endif (_NTDDK_)
01215 $if (_NTIFS_)
01216 typedef struct _KAPC_STATE {
01217   LIST_ENTRY ApcListHead[MaximumMode];
01218   PKPROCESS Process;
01219   BOOLEAN KernelApcInProgress;
01220   BOOLEAN KernelApcPending;
01221   BOOLEAN UserApcPending;
01222 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
01223 
01224 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
01225 
01226 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
01227 
01228 typedef struct _KQUEUE {
01229   DISPATCHER_HEADER Header;
01230   LIST_ENTRY EntryListHead;
01231   volatile ULONG CurrentCount;
01232   ULONG MaximumCount;
01233   LIST_ENTRY ThreadListHead;
01234 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
01235 
01236 $endif (_NTIFS_)
01237 

Generated on Sat May 26 2012 04:29:27 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.