Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenke.h
Go to the documentation of this file.
00001 $if (_WDMDDK_) 00004 /* Interrupt request levels */ 00005 #define PASSIVE_LEVEL 0 00006 #define LOW_LEVEL 0 00007 #define APC_LEVEL 1 00008 #define DISPATCH_LEVEL 2 00009 #define CMCI_LEVEL 5 00010 #define PROFILE_LEVEL 27 00011 #define CLOCK1_LEVEL 28 00012 #define CLOCK2_LEVEL 28 00013 #define IPI_LEVEL 29 00014 #define POWER_LEVEL 30 00015 #define HIGH_LEVEL 31 00016 #define CLOCK_LEVEL CLOCK2_LEVEL 00017 00018 #define KIP0PCRADDRESS 0xffdff000 00019 #define KI_USER_SHARED_DATA 0xffdf0000 00020 #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA) 00021 00022 #define PAGE_SIZE 0x1000 00023 #define PAGE_SHIFT 12L 00024 #define KeGetDcacheFillSize() 1L 00025 00026 #define EFLAG_SIGN 0x8000 00027 #define EFLAG_ZERO 0x4000 00028 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) 00029 00030 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) 00031 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) 00032 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) 00033 00034 00035 typedef struct _KFLOATING_SAVE { 00036 ULONG ControlWord; 00037 ULONG StatusWord; 00038 ULONG ErrorOffset; 00039 ULONG ErrorSelector; 00040 ULONG DataOffset; 00041 ULONG DataSelector; 00042 ULONG Cr0NpxState; 00043 ULONG Spare1; 00044 } KFLOATING_SAVE, *PKFLOATING_SAVE; 00045 00046 extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; 00047 00048 #define YieldProcessor _mm_pause 00049 00050 FORCEINLINE 00051 VOID 00052 KeMemoryBarrier(VOID) 00053 { 00054 LONG Barrier, *Dummy = &Barrier; 00055 UNREFERENCED_LOCAL_VARIABLE(Dummy); 00056 00057 #if defined(__GNUC__) 00058 __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax"); 00059 #elif defined(_MSC_VER) 00060 __asm xchg [Barrier], eax 00061 #endif 00062 } 00063 00064 #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() 00065 00066 _IRQL_requires_max_(HIGH_LEVEL) 00067 _IRQL_saves_ 00068 NTHALAPI 00069 KIRQL 00070 NTAPI 00071 KeGetCurrentIrql(VOID); 00072 00073 _IRQL_requires_max_(HIGH_LEVEL) 00074 NTHALAPI 00075 VOID 00076 FASTCALL 00077 KfLowerIrql( 00078 _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql); 00079 #define KeLowerIrql(a) KfLowerIrql(a) 00080 00081 _IRQL_requires_max_(HIGH_LEVEL) 00082 _IRQL_raises_(NewIrql) 00083 _IRQL_saves_ 00084 NTHALAPI 00085 KIRQL 00086 FASTCALL 00087 KfRaiseIrql( 00088 _In_ KIRQL NewIrql); 00089 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) 00090 00091 _IRQL_requires_max_(DISPATCH_LEVEL) 00092 _IRQL_saves_ 00093 _IRQL_raises_(DISPATCH_LEVEL) 00094 NTHALAPI 00095 KIRQL 00096 NTAPI 00097 KeRaiseIrqlToDpcLevel(VOID); 00098 00099 NTHALAPI 00100 KIRQL 00101 NTAPI 00102 KeRaiseIrqlToSynchLevel(VOID); 00103 00104 _Requires_lock_not_held_(*SpinLock) 00105 _Acquires_lock_(*SpinLock) 00106 _IRQL_requires_max_(DISPATCH_LEVEL) 00107 _IRQL_saves_ 00108 _IRQL_raises_(DISPATCH_LEVEL) 00109 NTHALAPI 00110 KIRQL 00111 FASTCALL 00112 KfAcquireSpinLock( 00113 _Inout_ PKSPIN_LOCK SpinLock); 00114 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) 00115 00116 _Requires_lock_held_(*SpinLock) 00117 _Releases_lock_(*SpinLock) 00118 _IRQL_requires_(DISPATCH_LEVEL) 00119 NTHALAPI 00120 VOID 00121 FASTCALL 00122 KfReleaseSpinLock( 00123 _Inout_ PKSPIN_LOCK SpinLock, 00124 _In_ _IRQL_restores_ KIRQL NewIrql); 00125 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) 00126 00127 _Requires_lock_not_held_(*SpinLock) 00128 _Acquires_lock_(*SpinLock) 00129 _IRQL_requires_min_(DISPATCH_LEVEL) 00130 NTKERNELAPI 00131 VOID 00132 FASTCALL 00133 KefAcquireSpinLockAtDpcLevel( 00134 _Inout_ PKSPIN_LOCK SpinLock); 00135 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) 00136 00137 _Requires_lock_held_(*SpinLock) 00138 _Releases_lock_(*SpinLock) 00139 _IRQL_requires_min_(DISPATCH_LEVEL) 00140 NTKERNELAPI 00141 VOID 00142 FASTCALL 00143 KefReleaseSpinLockFromDpcLevel( 00144 _Inout_ PKSPIN_LOCK SpinLock); 00145 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) 00146 00147 NTSYSAPI 00148 PKTHREAD 00149 NTAPI 00150 KeGetCurrentThread(VOID); 00151 00152 _Always_(_Post_satisfies_(return<=0)) 00153 _Must_inspect_result_ 00154 _IRQL_requires_max_(DISPATCH_LEVEL) 00155 _Kernel_float_saved_ 00156 _At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState)) 00157 NTKERNELAPI 00158 NTSTATUS 00159 NTAPI 00160 KeSaveFloatingPointState( 00161 _Out_ PKFLOATING_SAVE FloatSave); 00162 00163 _Success_(1) 00164 _Kernel_float_restored_ 00165 _At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState)) 00166 NTKERNELAPI 00167 NTSTATUS 00168 NTAPI 00169 KeRestoreFloatingPointState( 00170 _In_ PKFLOATING_SAVE FloatSave); 00171 00172 /* VOID 00173 * KeFlushIoBuffers( 00174 * IN PMDL Mdl, 00175 * IN BOOLEAN ReadOperation, 00176 * IN BOOLEAN DmaOperation) 00177 */ 00178 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) 00179 00180 /* x86 and x64 performs a 0x2C interrupt */ 00181 #define DbgRaiseAssertionFailure __int2c 00182 00183 FORCEINLINE 00184 VOID 00185 _KeQueryTickCount( 00186 OUT PLARGE_INTEGER CurrentCount) 00187 { 00188 for (;;) { 00189 #ifdef NONAMELESSUNION 00190 CurrentCount->s.HighPart = KeTickCount.High1Time; 00191 CurrentCount->s.LowPart = KeTickCount.LowPart; 00192 if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; 00193 #else 00194 CurrentCount->HighPart = KeTickCount.High1Time; 00195 CurrentCount->LowPart = KeTickCount.LowPart; 00196 if (CurrentCount->HighPart == KeTickCount.High2Time) break; 00197 #endif 00198 YieldProcessor(); 00199 } 00200 } 00201 #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount) 00202 00203 $endif (_WDMDDK_) 00204 $if (_NTDDK_) 00205 00206 #define PAUSE_PROCESSOR YieldProcessor(); 00207 00208 #define KERNEL_STACK_SIZE 12288 00209 #define KERNEL_LARGE_STACK_SIZE 61440 00210 #define KERNEL_LARGE_STACK_COMMIT 12288 00211 00212 #define SIZE_OF_80387_REGISTERS 80 00213 00214 #if !defined(RC_INVOKED) 00215 00216 #define CONTEXT_i386 0x10000 00217 #define CONTEXT_i486 0x10000 00218 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L) 00219 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L) 00220 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L) 00221 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L) 00222 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L) 00223 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L) 00224 00225 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS) 00226 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ 00227 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ 00228 CONTEXT_EXTENDED_REGISTERS) 00229 00230 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L) 00231 00232 #endif /* !defined(RC_INVOKED) */ 00233 00234 typedef struct _FLOATING_SAVE_AREA { 00235 ULONG ControlWord; 00236 ULONG StatusWord; 00237 ULONG TagWord; 00238 ULONG ErrorOffset; 00239 ULONG ErrorSelector; 00240 ULONG DataOffset; 00241 ULONG DataSelector; 00242 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; 00243 ULONG Cr0NpxState; 00244 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; 00245 00246 #include "pshpack4.h" 00247 typedef struct _CONTEXT { 00248 ULONG ContextFlags; 00249 ULONG Dr0; 00250 ULONG Dr1; 00251 ULONG Dr2; 00252 ULONG Dr3; 00253 ULONG Dr6; 00254 ULONG Dr7; 00255 FLOATING_SAVE_AREA FloatSave; 00256 ULONG SegGs; 00257 ULONG SegFs; 00258 ULONG SegEs; 00259 ULONG SegDs; 00260 ULONG Edi; 00261 ULONG Esi; 00262 ULONG Ebx; 00263 ULONG Edx; 00264 ULONG Ecx; 00265 ULONG Eax; 00266 ULONG Ebp; 00267 ULONG Eip; 00268 ULONG SegCs; 00269 ULONG EFlags; 00270 ULONG Esp; 00271 ULONG SegSs; 00272 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; 00273 } CONTEXT; 00274 #include "poppack.h" 00275 00276 #define KeGetPcr() PCR 00277 00278 #define PCR_MINOR_VERSION 1 00279 #define PCR_MAJOR_VERSION 1 00280 00281 typedef struct _KPCR { 00282 union { 00283 NT_TIB NtTib; 00284 struct { 00285 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; 00286 PVOID Used_StackBase; 00287 PVOID Spare2; 00288 PVOID TssCopy; 00289 ULONG ContextSwitches; 00290 KAFFINITY SetMemberCopy; 00291 PVOID Used_Self; 00292 }; 00293 }; 00294 struct _KPCR *SelfPcr; 00295 struct _KPRCB *Prcb; 00296 KIRQL Irql; 00297 ULONG IRR; 00298 ULONG IrrActive; 00299 ULONG IDR; 00300 PVOID KdVersionBlock; 00301 struct _KIDTENTRY *IDT; 00302 struct _KGDTENTRY *GDT; 00303 struct _KTSS *TSS; 00304 USHORT MajorVersion; 00305 USHORT MinorVersion; 00306 KAFFINITY SetMember; 00307 ULONG StallScaleFactor; 00308 UCHAR SpareUnused; 00309 UCHAR Number; 00310 UCHAR Spare0; 00311 UCHAR SecondLevelCacheAssociativity; 00312 ULONG VdmAlert; 00313 ULONG KernelReserved[14]; 00314 ULONG SecondLevelCacheSize; 00315 ULONG HalReserved[16]; 00316 } KPCR, *PKPCR; 00317 00318 FORCEINLINE 00319 ULONG 00320 KeGetCurrentProcessorNumber(VOID) 00321 { 00322 return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); 00323 } 00324 00325 $endif (_NTDDK_) 00326 00327 00328 00329 Generated on Sat May 26 2012 04:32:13 for ReactOS by
1.7.6.1
|