Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenketypes.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
1.7.6.1
|