├── ndk-1.0 ├── arch │ ├── ketypes.h │ └── mmtypes.h ├── asm.h ├── cctypes.h ├── cmfuncs.h ├── cmtypes.h ├── dbgkfuncs.h ├── dbgktypes.h ├── exfuncs.h ├── extypes.h ├── halfuncs.h ├── haltypes.h ├── i386 │ ├── ketypes.h │ └── mmtypes.h ├── ifssupp.h ├── inbvfuncs.h ├── inbvtypes.h ├── iofuncs.h ├── iotypes.h ├── kdfuncs.h ├── kdtypes.h ├── kefuncs.h ├── ketypes.h ├── ldrfuncs.h ├── ldrtypes.h ├── lpcfuncs.h ├── lpctypes.h ├── mmfuncs.h ├── mmtypes.h ├── ntndk.h ├── obfuncs.h ├── obtypes.h ├── pofuncs.h ├── potypes.h ├── powerpc │ ├── ketypes.h │ └── mmtypes.h ├── psfuncs.h ├── pstypes.h ├── rtlfuncs.h ├── rtltypes.h ├── sefuncs.h ├── setypes.h ├── umfuncs.h └── umtypes.h ├── ndk ├── LICENSE ├── README.md ├── amd64 │ ├── asm.h │ ├── ketypes.h │ └── mmtypes.h ├── arch │ ├── ketypes.h │ └── mmtypes.h ├── arm │ ├── ketypes.h │ └── mmtypes.h ├── asm.h ├── cctypes.h ├── cmfuncs.h ├── cmtypes.h ├── dbgkfuncs.h ├── dbgkfuncs_deprectated.txt ├── dbgktypes.h ├── exfuncs.h ├── extypes.h ├── gpl.txt ├── halfuncs.h ├── haltypes.h ├── i386 │ ├── asm.h │ ├── ketypes.h │ └── mmtypes.h ├── ifssupp.h ├── inbvfuncs.h ├── inbvtypes.h ├── inline_ntcurrentteb.h ├── iofuncs.h ├── iotypes.h ├── kbd.h ├── kdfuncs.h ├── kdtypes.h ├── kefuncs.h ├── ketypes.h ├── ldrfuncs.h ├── ldrtypes.h ├── lgpl.txt ├── lpcfuncs.h ├── lpctypes.h ├── mmfuncs.h ├── mmtypes.h ├── ndk.txt ├── no_sal2.h ├── ntdll.h ├── ntndk.h ├── ntnls.h ├── ntstrsafe.h ├── obfuncs.h ├── obtypes.h ├── peb_teb.h ├── pofuncs.h ├── potypes.h ├── powerpc │ ├── ketypes.h │ └── mmtypes.h ├── psfuncs.h ├── pstypes.h ├── readme.txt ├── rtlfuncs.h ├── rtltypes.h ├── sefuncs.h ├── setypes.h ├── tests │ ├── CMakeLists.txt │ ├── win2003_x64.c │ ├── win2003_x86.c │ ├── win7_x64.c │ ├── win7_x86.c │ ├── winvista_x64.c │ └── winvista_x86.c ├── umfuncs.h ├── umtypes.h ├── vffuncs.h └── vftypes.h └── readme.txt /ndk-1.0/arch/ketypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ketypes.h (ARCH) 8 | 9 | Abstract: 10 | 11 | Portability file to choose the correct Architecture-specific file. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _ARCH_KETYPES_H 20 | #define _ARCH_KETYPES_H 21 | 22 | // 23 | // Include the right file for this architecture. 24 | // 25 | #ifdef _M_IX86 26 | #include 27 | #elif defined(_M_PPC) 28 | #include 29 | #else 30 | #error "Unknown processor" 31 | #endif 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /ndk-1.0/arch/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (ARCH) 8 | 9 | Abstract: 10 | 11 | Portability file to choose the correct Architecture-specific file. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _ARCH_MMTYPES_H 20 | #define _ARCH_MMTYPES_H 21 | 22 | // 23 | // Include the right file for this architecture. 24 | // 25 | #if defined(_M_IX86) || defined(_M_AMD64) 26 | #include 27 | #elif defined(_M_PPC) 28 | #include 29 | #else 30 | #error "Unknown processor" 31 | #endif 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /ndk-1.0/cctypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | cctypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Cache Controller. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _CCTYPES_H 20 | #define _CCTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | #ifndef NTOS_MODE_USER 28 | 29 | // 30 | // Kernel Exported CcData 31 | // 32 | extern ULONG NTSYSAPI CcFastReadNotPossible; 33 | extern ULONG NTSYSAPI CcFastReadWait; 34 | extern ULONG NTSYSAPI CcFastReadResourceMiss; 35 | extern ULONG NTSYSAPI CcFastReadNoWait; 36 | extern ULONG NTSYSAPI CcFastMdlReadNotPossible; 37 | 38 | // 39 | // Virtual Address Control BLock 40 | // 41 | typedef struct _VACB 42 | { 43 | PVOID BaseAddress; 44 | struct _SHARED_CACHE_MAP *SharedCacheMap; 45 | union 46 | { 47 | LARGE_INTEGER FileOffset; 48 | USHORT ActiveCount; 49 | } Overlay; 50 | LIST_ENTRY LruList; 51 | } VACB, *PVACB; 52 | 53 | // 54 | // Private Cache Map Structure and Flags 55 | // 56 | typedef struct _PRIVATE_CACHE_MAP_FLAGS 57 | { 58 | ULONG DontUse:16; 59 | ULONG ReadAheadActive:1; 60 | ULONG ReadAheadEnabled:1; 61 | ULONG Available:14; 62 | } PRIVATE_CACHE_MAP_FLAGS; 63 | 64 | typedef struct _PRIVATE_CACHE_MAP 65 | { 66 | union 67 | { 68 | CSHORT NodeTypeCode; 69 | PRIVATE_CACHE_MAP_FLAGS Flags; 70 | ULONG UlongFlags; 71 | }; 72 | ULONG ReadAheadMask; 73 | PFILE_OBJECT FileObject; 74 | LARGE_INTEGER FileOffset1; 75 | LARGE_INTEGER BeyondLastByte1; 76 | LARGE_INTEGER FileOffset2; 77 | LARGE_INTEGER BeyondLastByte2; 78 | LARGE_INTEGER ReadAheadOffset[2]; 79 | ULONG ReadAheadLength[2]; 80 | KSPIN_LOCK ReadAheadSpinLock; 81 | LIST_ENTRY PrivateLinks; 82 | } PRIVATE_CACHE_MAP, *PPRIVATE_CACHE_MAP; 83 | 84 | #ifdef _NTIFS_INCLUDED_ 85 | 86 | // 87 | // Shared Cache Map 88 | // 89 | typedef struct _SHARED_CACHE_MAP 90 | { 91 | SHORT NodeTypeCode; 92 | SHORT NodeByteSize; 93 | ULONG OpenCount; 94 | LARGE_INTEGER FileSize; 95 | LIST_ENTRY BcbList; 96 | LARGE_INTEGER SectionSize; 97 | LARGE_INTEGER ValidDataLength; 98 | LARGE_INTEGER ValidDataGoal; 99 | PVACB InitialVacbs[4]; 100 | PVACB Vacbs; 101 | PFILE_OBJECT FileObject; 102 | PVACB ActiveVacb; 103 | PVOID NeedToZero; 104 | ULONG ActivePage; 105 | ULONG NeedToZeroPage; 106 | ULONG ActiveVacbSpinLock; 107 | ULONG VacbActiveCount; 108 | ULONG DirtyPages; 109 | LIST_ENTRY SharedCacheMapLinks; 110 | ULONG Flags; 111 | ULONG Status; 112 | PMCB Mbcb; 113 | PVOID Section; 114 | PKEVENT CreateEvent; 115 | PKEVENT WaitOnActiveCount; 116 | ULONG PagesToWrite; 117 | LONGLONG BeyondLastFlush; 118 | PCACHE_MANAGER_CALLBACKS Callbacks; 119 | PVOID LazyWriteContext; 120 | PLIST_ENTRY PrivateList; 121 | PVOID LogHandle; 122 | PVOID FlushToLsnRoutine; 123 | ULONG DirtyPageThreshold; 124 | ULONG LazyWritePassCount; 125 | PCACHE_UNINITIALIZE_EVENT UninitializeEvent; 126 | PVACB NeedToZeroVacb; 127 | ULONG BcbSpinLock; 128 | PVOID Reserved; 129 | KEVENT Event; 130 | PEX_PUSH_LOCK VacbPushLock; 131 | PPRIVATE_CACHE_MAP PrivateCacheMap; 132 | } SHARED_CACHE_MAP; 133 | 134 | #endif /* _NTIFS_INCLUDED_ */ 135 | #endif /* NTOS_MODE_USER */ 136 | #endif /* _CCTYPES_H */ 137 | 138 | -------------------------------------------------------------------------------- /ndk-1.0/dbgkfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | dbgkfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the User Mode Debugging Facility. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _DBGKFUNCS_H 20 | #define _DBGKFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | // 29 | // Native calls 30 | // 31 | NTSYSCALLAPI 32 | NTSTATUS 33 | NTAPI 34 | NtDebugActiveProcess( 35 | IN HANDLE Process, 36 | IN HANDLE DebugObject 37 | ); 38 | 39 | NTSYSCALLAPI 40 | NTSTATUS 41 | NTAPI 42 | NtCreateDebugObject( 43 | OUT PHANDLE DebugHandle, 44 | IN ACCESS_MASK DesiredAccess, 45 | IN POBJECT_ATTRIBUTES ObjectAttributes, 46 | IN BOOLEAN KillProcessOnExit 47 | ); 48 | 49 | NTSYSCALLAPI 50 | NTSTATUS 51 | NTAPI 52 | NtDebugContinue( 53 | IN HANDLE DebugObject, 54 | IN PCLIENT_ID AppClientId, 55 | IN NTSTATUS ContinueStatus 56 | ); 57 | 58 | NTSYSCALLAPI 59 | NTSTATUS 60 | NTAPI 61 | NtWaitForDebugEvent( 62 | IN HANDLE DebugObject, 63 | IN BOOLEAN Alertable, 64 | IN PLARGE_INTEGER Timeout OPTIONAL, 65 | OUT PDBGUI_WAIT_STATE_CHANGE StateChange 66 | ); 67 | 68 | NTSYSCALLAPI 69 | NTSTATUS 70 | NTAPI 71 | NtRemoveProcessDebug( 72 | IN HANDLE Process, 73 | IN HANDLE DebugObject 74 | ); 75 | 76 | NTSYSCALLAPI 77 | NTSTATUS 78 | NTAPI 79 | NtSetInformationDebugObject( 80 | IN HANDLE DebugObject, 81 | IN DEBUGOBJECTINFOCLASS InformationClass, 82 | IN PVOID Information, 83 | IN ULONG InformationLength, 84 | OUT PULONG ReturnLength OPTIONAL 85 | ); 86 | 87 | NTSYSAPI 88 | NTSTATUS 89 | NTAPI 90 | ZwDebugActiveProcess( 91 | IN HANDLE Process, 92 | IN HANDLE DebugObject 93 | ); 94 | 95 | NTSYSAPI 96 | NTSTATUS 97 | NTAPI 98 | ZwCreateDebugObject( 99 | OUT PHANDLE DebugHandle, 100 | IN ACCESS_MASK DesiredAccess, 101 | IN POBJECT_ATTRIBUTES ObjectAttributes, 102 | IN BOOLEAN KillProcessOnExit 103 | ); 104 | 105 | NTSYSAPI 106 | NTSTATUS 107 | NTAPI 108 | ZwDebugContinue( 109 | IN HANDLE DebugObject, 110 | IN PCLIENT_ID AppClientId, 111 | IN NTSTATUS ContinueStatus 112 | ); 113 | 114 | NTSYSAPI 115 | NTSTATUS 116 | NTAPI 117 | ZwRemoveProcessDebug( 118 | IN HANDLE Process, 119 | IN HANDLE DebugObject 120 | ); 121 | 122 | NTSYSAPI 123 | NTSTATUS 124 | NTAPI 125 | ZwWaitForDebugEvent( 126 | IN HANDLE DebugObject, 127 | IN BOOLEAN Alertable, 128 | IN PLARGE_INTEGER Timeout OPTIONAL, 129 | OUT PDBGUI_WAIT_STATE_CHANGE StateChange 130 | ); 131 | 132 | NTSYSAPI 133 | NTSTATUS 134 | NTAPI 135 | ZwSetInformationDebugObject( 136 | IN HANDLE DebugObject, 137 | IN DEBUGOBJECTINFOCLASS InformationClass, 138 | IN PVOID Information, 139 | IN ULONG InformationLength, 140 | OUT PULONG ReturnLength OPTIONAL 141 | ); 142 | #endif 143 | -------------------------------------------------------------------------------- /ndk-1.0/dbgktypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | dbgktypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the User Mode Debugging Facility. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _DBGKTYPES_H 20 | #define _DBGKTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | // 29 | // Debug Object Access Masks 30 | // 31 | #define DEBUG_OBJECT_WAIT_STATE_CHANGE 0x0001 32 | #define DEBUG_OBJECT_ADD_REMOVE_PROCESS 0x0002 33 | #define DEBUG_OBJECT_SET_INFORMATION 0x0004 34 | #define DEBUG_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0F) 35 | 36 | // 37 | // Debug Object Information Classes for NtQueryDebugObject 38 | // 39 | typedef enum _DEBUGOBJECTINFOCLASS 40 | { 41 | DebugObjectUnusedInformation, 42 | DebugObjectKillProcessOnExitInformation 43 | } DEBUGOBJECTINFOCLASS, *PDEBUGOBJECTINFOCLASS; 44 | 45 | // 46 | // Debug Message API Number 47 | // 48 | typedef enum _DBGKM_APINUMBER 49 | { 50 | DbgKmExceptionApi = 0, 51 | DbgKmCreateThreadApi = 1, 52 | DbgKmCreateProcessApi = 2, 53 | DbgKmExitThreadApi = 3, 54 | DbgKmExitProcessApi = 4, 55 | DbgKmLoadDllApi = 5, 56 | DbgKmUnloadDllApi = 6, 57 | DbgKmErrorReportApi = 7, 58 | DbgKmMaxApiNumber = 8, 59 | } DBGKM_APINUMBER; 60 | 61 | // 62 | // Debug Object Information Structures 63 | // 64 | typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION 65 | { 66 | ULONG KillProcessOnExit; 67 | } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION; 68 | 69 | #ifndef NTOS_MODE_USER 70 | 71 | // 72 | // Debug Object 73 | // 74 | typedef struct _DEBUG_OBJECT 75 | { 76 | KEVENT EventsPresent; 77 | FAST_MUTEX Mutex; 78 | LIST_ENTRY EventList; 79 | union 80 | { 81 | ULONG Flags; 82 | struct 83 | { 84 | UCHAR DebuggerInactive:1; 85 | UCHAR KillProcessOnExit:1; 86 | }; 87 | }; 88 | } DEBUG_OBJECT, *PDEBUG_OBJECT; 89 | 90 | #endif 91 | 92 | // 93 | // Debug States 94 | // 95 | typedef enum _DBG_STATE 96 | { 97 | DbgIdle, 98 | DbgReplyPending, 99 | DbgCreateThreadStateChange, 100 | DbgCreateProcessStateChange, 101 | DbgExitThreadStateChange, 102 | DbgExitProcessStateChange, 103 | DbgExceptionStateChange, 104 | DbgBreakpointStateChange, 105 | DbgSingleStepStateChange, 106 | DbgLoadDllStateChange, 107 | DbgUnloadDllStateChange 108 | } DBG_STATE, *PDBG_STATE; 109 | 110 | // 111 | // Debug Message Structures 112 | // 113 | typedef struct _DBGKM_EXCEPTION 114 | { 115 | EXCEPTION_RECORD ExceptionRecord; 116 | ULONG FirstChance; 117 | } DBGKM_EXCEPTION, *PDBGKM_EXCEPTION; 118 | 119 | typedef struct _DBGKM_CREATE_THREAD 120 | { 121 | ULONG SubSystemKey; 122 | PVOID StartAddress; 123 | } DBGKM_CREATE_THREAD, *PDBGKM_CREATE_THREAD; 124 | 125 | typedef struct _DBGKM_CREATE_PROCESS 126 | { 127 | ULONG SubSystemKey; 128 | HANDLE FileHandle; 129 | PVOID BaseOfImage; 130 | ULONG DebugInfoFileOffset; 131 | ULONG DebugInfoSize; 132 | DBGKM_CREATE_THREAD InitialThread; 133 | } DBGKM_CREATE_PROCESS, *PDBGKM_CREATE_PROCESS; 134 | 135 | typedef struct _DBGKM_EXIT_THREAD 136 | { 137 | NTSTATUS ExitStatus; 138 | } DBGKM_EXIT_THREAD, *PDBGKM_EXIT_THREAD; 139 | 140 | typedef struct _DBGKM_EXIT_PROCESS 141 | { 142 | NTSTATUS ExitStatus; 143 | } DBGKM_EXIT_PROCESS, *PDBGKM_EXIT_PROCESS; 144 | 145 | typedef struct _DBGKM_LOAD_DLL 146 | { 147 | HANDLE FileHandle; 148 | PVOID BaseOfDll; 149 | ULONG DebugInfoFileOffset; 150 | ULONG DebugInfoSize; 151 | PVOID NamePointer; 152 | } DBGKM_LOAD_DLL, *PDBGKM_LOAD_DLL; 153 | 154 | typedef struct _DBGKM_UNLOAD_DLL 155 | { 156 | PVOID BaseAddress; 157 | } DBGKM_UNLOAD_DLL, *PDBGKM_UNLOAD_DLL; 158 | 159 | // 160 | // User-Mode Debug State Change Structure 161 | // 162 | typedef struct _DBGUI_WAIT_STATE_CHANGE 163 | { 164 | DBG_STATE NewState; 165 | CLIENT_ID AppClientId; 166 | union 167 | { 168 | struct 169 | { 170 | HANDLE HandleToThread; 171 | DBGKM_CREATE_THREAD NewThread; 172 | } CreateThread; 173 | struct 174 | { 175 | HANDLE HandleToProcess; 176 | HANDLE HandleToThread; 177 | DBGKM_CREATE_PROCESS NewProcess; 178 | } CreateProcessInfo; 179 | DBGKM_EXIT_THREAD ExitThread; 180 | DBGKM_EXIT_PROCESS ExitProcess; 181 | DBGKM_EXCEPTION Exception; 182 | DBGKM_LOAD_DLL LoadDll; 183 | DBGKM_UNLOAD_DLL UnloadDll; 184 | } StateInfo; 185 | } DBGUI_WAIT_STATE_CHANGE, *PDBGUI_WAIT_STATE_CHANGE; 186 | 187 | // 188 | // LPC Debug Message 189 | // 190 | typedef struct _DBGKM_MSG 191 | { 192 | PORT_MESSAGE h; 193 | DBGKM_APINUMBER ApiNumber; 194 | ULONG ReturnedStatus; 195 | union 196 | { 197 | DBGKM_EXCEPTION Exception; 198 | DBGKM_CREATE_THREAD CreateThread; 199 | DBGKM_CREATE_PROCESS CreateProcess; 200 | DBGKM_EXIT_THREAD ExitThread; 201 | DBGKM_EXIT_PROCESS ExitProcess; 202 | DBGKM_LOAD_DLL LoadDll; 203 | DBGKM_UNLOAD_DLL UnloadDll; 204 | }; 205 | } DBGKM_MSG, *PDBGKM_MSG; 206 | 207 | #ifndef NTOS_MODE_USER 208 | 209 | // 210 | // Debug Event 211 | // 212 | typedef struct _DEBUG_EVENT 213 | { 214 | LIST_ENTRY EventList; 215 | KEVENT ContinueEvent; 216 | CLIENT_ID ClientId; 217 | PEPROCESS Process; 218 | PETHREAD Thread; 219 | NTSTATUS Status; 220 | ULONG Flags; 221 | PETHREAD BackoutThread; 222 | DBGKM_MSG ApiMsg; 223 | } DEBUG_EVENT, *PDEBUG_EVENT; 224 | 225 | 226 | #endif 227 | 228 | #endif 229 | -------------------------------------------------------------------------------- /ndk-1.0/halfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | halfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the HAL. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _HALFUNCS_H 20 | #define _HALFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | #include 28 | 29 | #ifndef NTOS_MODE_USER 30 | 31 | // 32 | // Private HAL Callbacks 33 | // 34 | #define HalHandlerForBus HALPRIVATEDISPATCH->HalHandlerForBus 35 | #define HalHandlerForConfigSpace HALPRIVATEDISPATCH->HalHandlerForConfigSpace 36 | #define HalLocateHiberRanges HALPRIVATEDISPATCH->HalLocateHiberRanges 37 | #define HalRegisterBusHandler HALPRIVATEDISPATCH->HalRegisterBusHandler 38 | #define HalSetWakeEnable HALPRIVATEDISPATCH->HalSetWakeEnable 39 | #define HalSetWakeAlarm HALPRIVATEDISPATCH->HalSetWakeAlarm 40 | #define HalPciTranslateBusAddress HALPRIVATEDISPATCH->HalPciTranslateBusAddress 41 | #define HalPciAssignSlotResources HALPRIVATEDISPATCH->HalPciAssignSlotResources 42 | #define HalHaltSystem HALPRIVATEDISPATCH->HalHaltSystem 43 | #define HalFindBusAddressTranslation HALPRIVATEDISPATCH->HalFindBusAddressTranslation 44 | #define HalResetDisplay HALPRIVATEDISPATCH->HalResetDisplay 45 | #define HalAllocateMapRegisters HALPRIVATEDISPATCH->HalAllocateMapRegisters 46 | #define KdSetupPciDeviceForDebugging HALPRIVATEDISPATCH->KdSetupPciDeviceForDebugging 47 | #define KdReleasePciDeviceforDebugging HALPRIVATEDISPATCH->KdReleasePciDeviceforDebugging 48 | #define KdGetAcpiTablePhase0 HALPRIVATEDISPATCH->KdGetAcpiTablePhase0 49 | #define KdCheckPowerButton HALPRIVATEDISPATCH->KdCheckPowerButton 50 | #define HalVectorToIDTEntry HALPRIVATEDISPATCH->HalVectorToIDTEntry 51 | #define KdMapPhysicalMemory64 HALPRIVATEDISPATCH->KdMapPhysicalMemory64 52 | #define KdUnmapVirtualAddress HALPRIVATEDISPATCH->KdUnmapVirtualAddress 53 | 54 | // 55 | // The DDK steals these away from you. 56 | // 57 | #ifdef _MSC_VER 58 | void __cdecl _enable(void); 59 | void __cdecl _disable(void); 60 | #pragma intrinsic(_enable) 61 | #pragma intrinsic(_disable) 62 | #endif 63 | 64 | // 65 | // Display Functions 66 | // 67 | NTHALAPI 68 | VOID 69 | NTAPI 70 | HalDisplayString( 71 | IN PCHAR String 72 | ); 73 | 74 | // 75 | // Initialization Functions 76 | // 77 | NTHALAPI 78 | BOOLEAN 79 | NTAPI 80 | HalAllProcessorsStarted( 81 | VOID 82 | ); 83 | 84 | #ifdef _ARC_ 85 | NTHALAPI 86 | VOID 87 | NTAPI 88 | HalInitializeProcessor( 89 | ULONG ProcessorNumber, 90 | struct _LOADER_PARAMETER_BLOCK *LoaderBlock 91 | ); 92 | 93 | NTHALAPI 94 | BOOLEAN 95 | NTAPI 96 | HalInitSystem( 97 | ULONG BootPhase, 98 | struct _LOADER_PARAMETER_BLOCK *LoaderBlock 99 | ); 100 | 101 | NTHALAPI 102 | BOOLEAN 103 | NTAPI 104 | HalStartNextProcessor( 105 | IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, 106 | IN PKPROCESSOR_STATE ProcessorState 107 | ); 108 | 109 | #endif 110 | 111 | NTHALAPI 112 | VOID 113 | NTAPI 114 | HalReturnToFirmware( 115 | FIRMWARE_REENTRY Action 116 | ); 117 | 118 | // 119 | // CPU Routines 120 | // 121 | NTHALAPI 122 | VOID 123 | NTAPI 124 | HalProcessorIdle( 125 | VOID 126 | ); 127 | 128 | // 129 | // Interrupt Functions 130 | // 131 | NTHALAPI 132 | BOOLEAN 133 | NTAPI 134 | HalBeginSystemInterrupt( 135 | KIRQL Irql, 136 | ULONG Vector, 137 | PKIRQL OldIrql 138 | ); 139 | 140 | NTHALAPI 141 | BOOLEAN 142 | NTAPI 143 | HalDisableSystemInterrupt( 144 | ULONG Vector, 145 | KIRQL Irql 146 | ); 147 | 148 | NTHALAPI 149 | BOOLEAN 150 | NTAPI 151 | HalEnableSystemInterrupt( 152 | ULONG Vector, 153 | KIRQL Irql, 154 | KINTERRUPT_MODE InterruptMode 155 | ); 156 | 157 | NTHALAPI 158 | VOID 159 | NTAPI 160 | HalEndSystemInterrupt( 161 | KIRQL Irql, 162 | ULONG Vector 163 | ); 164 | 165 | NTHALAPI 166 | VOID 167 | NTAPI 168 | HalReportResourceUsage( 169 | VOID 170 | ); 171 | 172 | NTHALAPI 173 | VOID 174 | FASTCALL 175 | HalRequestSoftwareInterrupt( 176 | KIRQL SoftwareInterruptRequested 177 | ); 178 | 179 | NTHALAPI 180 | VOID 181 | NTAPI 182 | HalRequestIpi( 183 | KAFFINITY TargetSet 184 | ); 185 | 186 | NTHALAPI 187 | VOID 188 | NTAPI 189 | HalHandleNMI( 190 | PVOID NmiInfo 191 | ); 192 | 193 | // 194 | // Environment Functions 195 | // 196 | #ifdef _ARC_ 197 | NTHALAPI 198 | ARC_STATUS 199 | NTAPI 200 | HalSetEnvironmentVariable( 201 | IN PCH Name, 202 | IN PCH Value 203 | ); 204 | 205 | NTHALAPI 206 | ARC_STATUS 207 | NTAPI 208 | HalGetEnvironmentVariable( 209 | IN PCH Variable, 210 | IN USHORT Length, 211 | OUT PCH Buffer 212 | ); 213 | #endif 214 | 215 | // 216 | // Time Functions 217 | // 218 | NTHALAPI 219 | BOOLEAN 220 | NTAPI 221 | HalQueryRealTimeClock( 222 | IN PTIME_FIELDS RtcTime 223 | ); 224 | 225 | NTHALAPI 226 | BOOLEAN 227 | NTAPI 228 | HalSetRealTimeClock( 229 | IN PTIME_FIELDS RtcTime 230 | ); 231 | 232 | #endif 233 | #endif 234 | -------------------------------------------------------------------------------- /ndk-1.0/haltypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | haltypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the HAL. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _HALTYPES_H 20 | #define _HALTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | #ifndef NTOS_MODE_USER 28 | 29 | // 30 | // HalShutdownSystem Types 31 | // 32 | typedef enum _FIRMWARE_REENTRY 33 | { 34 | HalHaltRoutine, 35 | HalPowerDownRoutine, 36 | HalRestartRoutine, 37 | HalRebootRoutine, 38 | HalInteractiveModeRoutine, 39 | HalMaximumRoutine 40 | } FIRMWARE_REENTRY, *PFIRMWARE_REENTRY; 41 | 42 | // 43 | // HAL Private function Types 44 | // 45 | typedef 46 | PBUS_HANDLER 47 | (NTAPI *pHalHandlerForConfigSpace)( 48 | IN BUS_DATA_TYPE ConfigSpace, 49 | IN ULONG BusNumber 50 | ); 51 | 52 | typedef 53 | NTSTATUS 54 | (NTAPI *PINSTALL_BUS_HANDLER)( 55 | IN PBUS_HANDLER Bus 56 | ); 57 | 58 | typedef 59 | NTSTATUS 60 | (NTAPI *pHalRegisterBusHandler)( 61 | IN INTERFACE_TYPE InterfaceType, 62 | IN BUS_DATA_TYPE ConfigSpace, 63 | IN ULONG BusNumber, 64 | IN INTERFACE_TYPE ParentInterfaceType, 65 | IN ULONG ParentBusNumber, 66 | IN ULONG ContextSize, 67 | IN PINSTALL_BUS_HANDLER InstallCallback, 68 | OUT PBUS_HANDLER *BusHandler 69 | ); 70 | 71 | typedef 72 | VOID 73 | (NTAPI *pHalSetWakeEnable)( 74 | IN BOOLEAN Enable 75 | ); 76 | 77 | typedef 78 | VOID 79 | (NTAPI *pHalSetWakeAlarm)( 80 | IN ULONGLONG AlartTime, 81 | IN PTIME_FIELDS TimeFields 82 | ); 83 | 84 | typedef 85 | VOID 86 | (NTAPI *pHalLocateHiberRanges)( 87 | IN PVOID MemoryMap 88 | ); 89 | 90 | typedef 91 | BOOLEAN 92 | (NTAPI *pHalAllocateMapRegisters)( 93 | IN PADAPTER_OBJECT AdapterObject, 94 | IN ULONG Unknown, 95 | IN ULONG Unknown2, 96 | PMAP_REGISTER_ENTRY Registers 97 | ); 98 | 99 | // 100 | // HAL Bus Handler Callback Types 101 | // 102 | typedef 103 | NTSTATUS 104 | (NTAPI *pAdjustResourceList)( 105 | IN PBUS_HANDLER BusHandler, 106 | IN ULONG BusNumber, 107 | IN OUT PCM_RESOURCE_LIST Resources 108 | ); 109 | 110 | typedef 111 | NTSTATUS 112 | (NTAPI *pAssignSlotResources)( 113 | IN PBUS_HANDLER BusHandler, 114 | IN PBUS_HANDLER RootHandler, 115 | IN PUNICODE_STRING RegistryPath, 116 | IN PUNICODE_STRING DriverClassName, 117 | IN PDRIVER_OBJECT DriverObject, 118 | IN PDEVICE_OBJECT DeviceObject, 119 | IN ULONG SlotNumber, 120 | IN OUT PCM_RESOURCE_LIST *AllocatedResources 121 | ); 122 | 123 | typedef 124 | ULONG 125 | (NTAPI *pGetSetBusData)( 126 | IN PBUS_HANDLER BusHandler, 127 | IN PBUS_HANDLER RootHandler, 128 | IN PCI_SLOT_NUMBER SlotNumber, 129 | OUT PUCHAR Buffer, 130 | IN ULONG Offset, 131 | IN ULONG Length 132 | ); 133 | 134 | typedef 135 | ULONG 136 | (NTAPI *pGetInterruptVector)( 137 | IN PBUS_HANDLER BusHandler, 138 | IN ULONG BusNumber, 139 | IN ULONG BusInterruptLevel, 140 | IN ULONG BusInterruptVector, 141 | OUT PKIRQL Irql, 142 | OUT PKAFFINITY Affinity 143 | ); 144 | 145 | typedef 146 | ULONG 147 | (NTAPI *pTranslateBusAddress)( 148 | IN PBUS_HANDLER BusHandler, 149 | IN ULONG BusNumber, 150 | IN PHYSICAL_ADDRESS BusAddress, 151 | IN OUT PULONG AddressSpace, 152 | OUT PPHYSICAL_ADDRESS TranslatedAddress 153 | ); 154 | 155 | // 156 | // Hal Private dispatch Table 157 | // 158 | #define HAL_PRIVATE_DISPATCH_VERSION 2 159 | typedef struct _HAL_PRIVATE_DISPATCH 160 | { 161 | ULONG Version; 162 | pHalHandlerForBus HalHandlerForBus; 163 | pHalHandlerForConfigSpace HalHandlerForConfigSpace; 164 | pHalLocateHiberRanges HalLocateHiberRanges; 165 | pHalRegisterBusHandler HalRegisterBusHandler; 166 | pHalSetWakeEnable HalSetWakeEnable; 167 | pHalSetWakeAlarm HalSetWakeAlarm; 168 | pHalTranslateBusAddress HalPciTranslateBusAddress; 169 | pHalAssignSlotResources HalPciAssignSlotResources; 170 | pHalHaltSystem HalHaltSystem; 171 | pHalFindBusAddressTranslation HalFindBusAddressTranslation; 172 | pHalResetDisplay HalResetDisplay; 173 | pHalAllocateMapRegisters HalAllocateMapRegisters; 174 | pKdSetupPciDeviceForDebugging KdSetupPciDeviceForDebugging; 175 | pKdReleasePciDeviceForDebugging KdReleasePciDeviceforDebugging; 176 | pKdGetAcpiTablePhase0 KdGetAcpiTablePhase0; 177 | pKdCheckPowerButton KdCheckPowerButton; 178 | pHalVectorToIDTEntry HalVectorToIDTEntry; 179 | pKdMapPhysicalMemory64 KdMapPhysicalMemory64; 180 | pKdUnmapVirtualAddress KdUnmapVirtualAddress; 181 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 182 | pKdGetPciDataByOffset KdGetPciDataByOffset; 183 | pKdSetPciDataByOffset KdSetPciDataByOffset; 184 | PVOID HalGetInterruptVectorOverride; 185 | PVOID HalGetVectorInputOverride; 186 | #endif 187 | } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH; 188 | 189 | // 190 | // HAL Bus Handler 191 | // 192 | typedef struct _BUS_HANDLER 193 | { 194 | ULONG Version; 195 | INTERFACE_TYPE InterfaceType; 196 | BUS_DATA_TYPE ConfigurationType; 197 | ULONG BusNumber; 198 | PDEVICE_OBJECT DeviceObject; 199 | struct _BUS_HANDLER *ParentHandler; 200 | PVOID BusData; 201 | ULONG DeviceControlExtensionSize; 202 | //PSUPPORTED_RANGES BusAddresses; 203 | ULONG Reserved[4]; 204 | pGetSetBusData GetBusData; 205 | pGetSetBusData SetBusData; 206 | pAdjustResourceList AdjustResourceList; 207 | pAssignSlotResources AssignSlotResources; 208 | pGetInterruptVector GetInterruptVector; 209 | pTranslateBusAddress TranslateBusAddress; 210 | } BUS_HANDLER; 211 | 212 | // 213 | // Kernel Exports 214 | // 215 | #if defined(_NTDRIVER_) || defined(_NTHAL_) 216 | extern NTSYSAPI PHAL_PRIVATE_DISPATCH HalPrivateDispatchTable; 217 | #define HALPRIVATEDISPATCH ((PHAL_PRIVATE_DISPATCH)&HalPrivateDispatchTable) 218 | #else 219 | extern NTSYSAPI HAL_PRIVATE_DISPATCH HalPrivateDispatchTable; 220 | #define HALPRIVATEDISPATCH (&HalPrivateDispatchTable) 221 | #endif 222 | 223 | // 224 | // HAL Exports 225 | // 226 | #ifndef _NTHAL_ 227 | extern NTHALAPI PUCHAR *KdComPortInUse; 228 | #endif 229 | 230 | #endif 231 | #endif 232 | 233 | 234 | 235 | -------------------------------------------------------------------------------- /ndk-1.0/i386/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (X86) 8 | 9 | Abstract: 10 | 11 | i386 Type definitions for the Memory Manager 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _I386_MMTYPES_H 20 | #define _I386_MMTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | 26 | // 27 | // Page-related Macros 28 | // 29 | #define PAGE_SIZE 0x1000 30 | #define PAGE_SHIFT 12L 31 | #define MM_ALLOCATION_GRANULARITY 0x10000 32 | #define MM_ALLOCATION_GRANULARITY_SHIFT 16L 33 | 34 | // 35 | // Sanity checks for Paging Macros 36 | // 37 | #ifdef C_ASSERT 38 | C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT)); 39 | C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT)); 40 | C_ASSERT(MM_ALLOCATION_GRANULARITY && 41 | !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1))); 42 | C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE); 43 | #endif 44 | 45 | // 46 | // PAE SEG0 Base? 47 | // 48 | #define KSEG0_BASE_PAE 0xE0000000 49 | 50 | // 51 | // Page Table Entry Definitions 52 | // 53 | typedef struct _HARDWARE_PTE_X86 54 | { 55 | ULONG Valid:1; 56 | ULONG Write:1; 57 | ULONG Owner:1; 58 | ULONG WriteThrough:1; 59 | ULONG CacheDisable:1; 60 | ULONG Accessed:1; 61 | ULONG Dirty:1; 62 | ULONG LargePage:1; 63 | ULONG Global:1; 64 | ULONG CopyOnWrite:1; 65 | ULONG Prototype: 1; 66 | ULONG reserved: 1; 67 | ULONG PageFrameNumber:20; 68 | } HARDWARE_PTE_X86, *PHARDWARE_PTE_X86; 69 | 70 | typedef struct _MMPTE_SOFTWARE 71 | { 72 | ULONG Valid:1; 73 | ULONG PageFileLow:4; 74 | ULONG Protection:5; 75 | ULONG Prototype:1; 76 | ULONG Transition:1; 77 | ULONG PageFileHigh:20; 78 | } MMPTE_SOFTWARE; 79 | 80 | typedef struct _MMPTE_TRANSITION 81 | { 82 | ULONG Valid:1; 83 | ULONG Write:1; 84 | ULONG Owner:1; 85 | ULONG WriteThrough:1; 86 | ULONG CacheDisable:1; 87 | ULONG Protection:5; 88 | ULONG Prototype:1; 89 | ULONG Transition:1; 90 | ULONG PageFrameNumber:20; 91 | } MMPTE_TRANSITION; 92 | 93 | typedef struct _MMPTE_PROTOTYPE 94 | { 95 | ULONG Valid:1; 96 | ULONG ProtoAddressLow:7; 97 | ULONG ReadOnly:1; 98 | ULONG WhichPool:1; 99 | ULONG Prototype:1; 100 | ULONG ProtoAddressHigh:21; 101 | } MMPTE_PROTOTYPE; 102 | 103 | typedef struct _MMPTE_SUBSECTION 104 | { 105 | ULONG Valid:1; 106 | ULONG SubsectionAddressLow:4; 107 | ULONG Protection:5; 108 | ULONG Prototype:1; 109 | ULONG SubsectionAddressHigh:20; 110 | ULONG WhichPool:1; 111 | } MMPTE_SUBSECTION; 112 | 113 | typedef struct _MMPTE_LIST 114 | { 115 | ULONG Valid:1; 116 | ULONG OneEntry:1; 117 | ULONG filler0:8; 118 | ULONG NextEntry:20; 119 | ULONG Prototype:1; 120 | ULONG filler1:1; 121 | } MMPTE_LIST; 122 | 123 | #ifndef CONFIG_SMP 124 | 125 | typedef struct _MMPTE_HARDWARE 126 | { 127 | ULONG Valid:1; 128 | ULONG Write:1; 129 | ULONG Owner:1; 130 | ULONG WriteThrough:1; 131 | ULONG CacheDisable:1; 132 | ULONG Accessed:1; 133 | ULONG Dirty:1; 134 | ULONG LargePage:1; 135 | ULONG Global:1; 136 | ULONG CopyOnWrite:1; 137 | ULONG Prototype:1; 138 | ULONG reserved:1; 139 | ULONG PageFrameNumber:20; 140 | } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 141 | 142 | #else 143 | 144 | typedef struct _MMPTE_HARDWARE 145 | { 146 | ULONG Valid:1; 147 | ULONG Writable:1; 148 | ULONG Owner:1; 149 | ULONG WriteThrough:1; 150 | ULONG CacheDisable:1; 151 | ULONG Accessed:1; 152 | ULONG Dirty:1; 153 | ULONG LargePage:1; 154 | ULONG Global:1; 155 | ULONG CopyOnWrite:1; 156 | ULONG Prototype:1; 157 | ULONG Write:1; 158 | ULONG PageFrameNumber:20; 159 | } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 160 | 161 | #endif 162 | 163 | // 164 | // Use the right PTE structure 165 | // 166 | #define HARDWARE_PTE HARDWARE_PTE_X86 167 | #define PHARDWARE_PTE PHARDWARE_PTE_X86 168 | 169 | #endif 170 | -------------------------------------------------------------------------------- /ndk-1.0/ifssupp.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ifssupp.h 8 | 9 | Abstract: 10 | 11 | NDK Support for usage without the IFS. Will be deprecated at WDK Release. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | #ifndef _NTIFS_ 19 | #ifndef NTOS_MODE_USER 20 | #define _NTIFS_ 21 | 22 | #define TOKEN_SOURCE_LENGTH 8 23 | 24 | typedef enum _TOKEN_TYPE 25 | { 26 | TokenPrimary = 1, 27 | TokenImpersonation 28 | } TOKEN_TYPE, *PTOKEN_TYPE; 29 | 30 | typedef PVOID PRTL_HEAP_PARAMETERS; 31 | typedef PVOID PFS_FILTER_CALLBACKS; 32 | typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; 33 | 34 | typedef struct _RTL_SPLAY_LINKS 35 | { 36 | struct _RTL_SPLAY_LINKS *Parent; 37 | struct _RTL_SPLAY_LINKS *LeftChild; 38 | struct _RTL_SPLAY_LINKS *RightChild; 39 | } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; 40 | 41 | typedef struct _RTL_GENERIC_TABLE RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; 42 | typedef ULONG TABLE_SEARCH_RESULT; 43 | 44 | #if defined(USE_LPC6432) 45 | #define LPC_CLIENT_ID CLIENT_ID64 46 | #define LPC_SIZE_T ULONGLONG 47 | #define LPC_PVOID ULONGLONG 48 | #define LPC_HANDLE ULONGLONG 49 | #else 50 | #define LPC_CLIENT_ID CLIENT_ID 51 | #define LPC_SIZE_T SIZE_T 52 | #define LPC_PVOID PVOID 53 | #define LPC_HANDLE HANDLE 54 | #endif 55 | 56 | typedef struct _PORT_MESSAGE 57 | { 58 | union 59 | { 60 | struct 61 | { 62 | CSHORT DataLength; 63 | CSHORT TotalLength; 64 | } s1; 65 | ULONG Length; 66 | } u1; 67 | union 68 | { 69 | struct 70 | { 71 | CSHORT Type; 72 | CSHORT DataInfoOffset; 73 | } s2; 74 | ULONG ZeroInit; 75 | } u2; 76 | union 77 | { 78 | LPC_CLIENT_ID ClientId; 79 | double DoNotUseThisField; 80 | }; 81 | ULONG MessageId; 82 | union 83 | { 84 | LPC_SIZE_T ClientViewSize; 85 | ULONG CallbackId; 86 | }; 87 | } PORT_MESSAGE, *PPORT_MESSAGE; 88 | 89 | typedef struct _PORT_VIEW 90 | { 91 | ULONG Length; 92 | LPC_HANDLE SectionHandle; 93 | ULONG SectionOffset; 94 | LPC_SIZE_T ViewSize; 95 | LPC_PVOID ViewBase; 96 | LPC_PVOID ViewRemoteBase; 97 | } PORT_VIEW, *PPORT_VIEW; 98 | 99 | typedef struct _REMOTE_PORT_VIEW 100 | { 101 | ULONG Length; 102 | LPC_SIZE_T ViewSize; 103 | LPC_PVOID ViewBase; 104 | } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW; 105 | 106 | typedef struct _KAPC_STATE 107 | { 108 | LIST_ENTRY ApcListHead[2]; 109 | struct _KPROCESS *Process; 110 | BOOLEAN KernelApcInProgress; 111 | BOOLEAN KernelApcPending; 112 | BOOLEAN UserApcPending; 113 | } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE; 114 | 115 | typedef struct _KQUEUE 116 | { 117 | DISPATCHER_HEADER Header; 118 | LIST_ENTRY EntryListHead; 119 | ULONG CurrentCount; 120 | ULONG MaximumCount; 121 | LIST_ENTRY ThreadListHead; 122 | } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE; 123 | 124 | typedef struct _ACE_HEADER 125 | { 126 | UCHAR AceType; 127 | UCHAR AceFlags; 128 | USHORT AceSize; 129 | } ACE_HEADER, *PACE_HEADER; 130 | 131 | typedef enum _RTL_GENERIC_COMPARE_RESULTS 132 | { 133 | GenericLessThan, 134 | GenericGreaterThan, 135 | GenericEqual 136 | } RTL_GENERIC_COMPARE_RESULTS; 137 | 138 | typedef struct _SID_IDENTIFIER_AUTHORITY 139 | { 140 | UCHAR Value[6]; 141 | } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; 142 | 143 | typedef struct _SID_AND_ATTRIBUTES 144 | { 145 | PSID Sid; 146 | ULONG Attributes; 147 | } SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES; 148 | 149 | typedef struct _TOKEN_SOURCE 150 | { 151 | CHAR SourceName[TOKEN_SOURCE_LENGTH]; 152 | LUID SourceIdentifier; 153 | } TOKEN_SOURCE, *PTOKEN_SOURCE; 154 | 155 | typedef struct _TOKEN_CONTROL 156 | { 157 | LUID TokenId; 158 | LUID AuthenticationId; 159 | LUID ModifiedId; 160 | TOKEN_SOURCE TokenSource; 161 | } TOKEN_CONTROL, *PTOKEN_CONTROL; 162 | 163 | typedef struct _SECURITY_CLIENT_CONTEXT 164 | { 165 | SECURITY_QUALITY_OF_SERVICE SecurityQos; 166 | PACCESS_TOKEN ClientToken; 167 | BOOLEAN DirectlyAccessClientToken; 168 | BOOLEAN DirectAccessEffectiveOnly; 169 | BOOLEAN ServerIsRemote; 170 | TOKEN_CONTROL ClientTokenControl; 171 | } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT; 172 | 173 | typedef struct _SECURITY_DESCRIPTOR_RELATIVE 174 | { 175 | UCHAR Revision; 176 | UCHAR Sbz1; 177 | SECURITY_DESCRIPTOR_CONTROL Control; 178 | ULONG Owner; 179 | ULONG Group; 180 | ULONG Sacl; 181 | ULONG Dacl; 182 | } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE; 183 | 184 | typedef struct _TOKEN_GROUPS 185 | { 186 | ULONG GroupCount; 187 | SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; 188 | } TOKEN_GROUPS, *PTOKEN_GROUPS; 189 | 190 | typedef struct _TOKEN_PRIVILEGES 191 | { 192 | ULONG PrivilegeCount; 193 | LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; 194 | } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; 195 | 196 | typedef struct _TOKEN_USER 197 | { 198 | SID_AND_ATTRIBUTES User; 199 | } TOKEN_USER, *PTOKEN_USER; 200 | 201 | typedef enum _TOKEN_INFORMATION_CLASS 202 | { 203 | TokenUser = 1, 204 | TokenGroups, 205 | TokenPrivileges, 206 | TokenOwner, 207 | TokenPrimaryGroup, 208 | TokenDefaultDacl, 209 | TokenSource, 210 | TokenType, 211 | TokenImpersonationLevel, 212 | TokenStatistics, 213 | TokenRestrictedSids, 214 | TokenSessionId, 215 | TokenGroupsAndPrivileges, 216 | TokenSessionReference, 217 | TokenSandBoxInert, 218 | TokenAuditPolicy, 219 | TokenOrigin, 220 | TokenElevationType, 221 | TokenLinkedToken, 222 | TokenElevation, 223 | TokenIsRestricted, 224 | TokenAccessInformation, 225 | TokenVirtualization, 226 | TokenIntegrityLevel, 227 | TokenIntegrityLevelDesktop, 228 | TokenMandatoryPolicy, 229 | MaxTokenInfoClass 230 | } TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS; 231 | 232 | typedef struct _TOKEN_OWNER 233 | { 234 | PSID Owner; 235 | } TOKEN_OWNER, *PTOKEN_OWNER; 236 | 237 | typedef struct _TOKEN_PRIMARY_GROUP 238 | { 239 | PSID PrimaryGroup; 240 | } TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; 241 | 242 | typedef struct _TOKEN_DEFAULT_DACL 243 | { 244 | PACL DefaultDacl; 245 | } TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL; 246 | 247 | #endif // !NTOS_MODE_USER 248 | #endif // _NTIFS_ 249 | -------------------------------------------------------------------------------- /ndk-1.0/inbvfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | inbvfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Boot Video Driver. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _INBVFUNCS_H 20 | #define _INBVFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | #ifndef NTOS_MODE_USER 29 | // 30 | // Ownership Functions 31 | // 32 | VOID 33 | NTAPI 34 | InbvAcquireDisplayOwnership( 35 | VOID 36 | ); 37 | 38 | BOOLEAN 39 | NTAPI 40 | InbvCheckDisplayOwnership( 41 | VOID 42 | ); 43 | 44 | VOID 45 | NTAPI 46 | InbvNotifyDisplayOwnershipLost( 47 | IN INBV_RESET_DISPLAY_PARAMETERS Callback 48 | ); 49 | 50 | // 51 | // Installation Functions 52 | // 53 | VOID 54 | NTAPI 55 | InbvEnableBootDriver( 56 | IN BOOLEAN Enable 57 | ); 58 | 59 | VOID 60 | NTAPI 61 | InbvInstallDisplayStringFilter( 62 | IN INBV_DISPLAY_STRING_FILTER DisplayFilter 63 | ); 64 | 65 | BOOLEAN 66 | NTAPI 67 | InbvIsBootDriverInstalled( 68 | VOID 69 | ); 70 | 71 | // 72 | // Display Functions 73 | // 74 | BOOLEAN 75 | NTAPI 76 | InbvDisplayString( 77 | IN PCHAR String 78 | ); 79 | 80 | BOOLEAN 81 | NTAPI 82 | InbvEnableDisplayString( 83 | IN BOOLEAN Enable 84 | ); 85 | 86 | BOOLEAN 87 | NTAPI 88 | InbvResetDisplay( 89 | VOID 90 | ); 91 | 92 | VOID 93 | NTAPI 94 | InbvSetScrollRegion( 95 | IN ULONG Left, 96 | IN ULONG Top, 97 | IN ULONG Width, 98 | IN ULONG Height 99 | ); 100 | 101 | VOID 102 | NTAPI 103 | InbvSetTextColor( 104 | IN ULONG Color 105 | ); 106 | 107 | VOID 108 | NTAPI 109 | InbvSolidColorFill( 110 | IN ULONG Left, 111 | IN ULONG Top, 112 | IN ULONG Width, 113 | IN ULONG Height, 114 | IN ULONG Color 115 | ); 116 | 117 | VOID 118 | NTAPI 119 | InbvSetProgressBarSubset( 120 | IN ULONG Floor, 121 | IN ULONG Ceiling 122 | ); 123 | 124 | #endif 125 | #endif 126 | -------------------------------------------------------------------------------- /ndk-1.0/inbvtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | inbvtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Boot Video Driver. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Created - 02-Feb-2007 16 | 17 | --*/ 18 | 19 | #ifndef _INBVTYPES_H 20 | #define _INBVTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #ifndef NTOS_MODE_USER 27 | 28 | // 29 | // Boot Video Display Ownership Status 30 | // 31 | typedef enum _INBV_DISPLAY_STATE 32 | { 33 | INBV_DISPLAY_STATE_OWNED, 34 | INBV_DISPLAY_STATE_DISABLED, 35 | INBV_DISPLAY_STATE_LOST 36 | } INBV_DISPLAY_STATE; 37 | 38 | // 39 | // Function Callbacks 40 | // 41 | typedef 42 | BOOLEAN 43 | (NTAPI *INBV_RESET_DISPLAY_PARAMETERS)( 44 | ULONG Cols, 45 | ULONG Rows 46 | ); 47 | 48 | typedef 49 | VOID 50 | (NTAPI *INBV_DISPLAY_STRING_FILTER)( 51 | PCHAR *Str 52 | ); 53 | 54 | #endif 55 | #endif 56 | -------------------------------------------------------------------------------- /ndk-1.0/kdfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | kdfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Kernel Debugger. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _KDFUNCS_H 20 | #define _KDFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | #ifndef NTOS_MODE_USER 29 | 30 | // 31 | // Debugger API 32 | // 33 | NTSTATUS 34 | NTAPI 35 | KdSystemDebugControl( 36 | SYSDBG_COMMAND Command, 37 | PVOID InputBuffer, 38 | ULONG InputBufferLength, 39 | PVOID OutputBuffer, 40 | ULONG OutputBufferLength, 41 | PULONG ReturnLength, 42 | KPROCESSOR_MODE PreviousMode 43 | ); 44 | 45 | BOOLEAN 46 | NTAPI 47 | KdPollBreakIn( 48 | VOID 49 | ); 50 | 51 | #endif 52 | 53 | // 54 | // Native Calls 55 | // 56 | NTSYSCALLAPI 57 | NTSTATUS 58 | NTAPI 59 | NtQueryDebugFilterState( 60 | ULONG ComponentId, 61 | ULONG Level 62 | ); 63 | 64 | NTSYSCALLAPI 65 | NTSTATUS 66 | NTAPI 67 | NtSetDebugFilterState( 68 | ULONG ComponentId, 69 | ULONG Level, 70 | BOOLEAN State 71 | ); 72 | 73 | NTSYSCALLAPI 74 | NTSTATUS 75 | NTAPI 76 | NtSystemDebugControl( 77 | SYSDBG_COMMAND ControlCode, 78 | PVOID InputBuffer, 79 | ULONG InputBufferLength, 80 | PVOID OutputBuffer, 81 | ULONG OutputBufferLength, 82 | PULONG ReturnLength 83 | ); 84 | 85 | NTSYSAPI 86 | NTSTATUS 87 | NTAPI 88 | ZwQueryDebugFilterState( 89 | ULONG ComponentId, 90 | ULONG Level 91 | ); 92 | 93 | NTSYSAPI 94 | NTSTATUS 95 | NTAPI 96 | ZwSetDebugFilterState( 97 | ULONG ComponentId, 98 | ULONG Level, 99 | BOOLEAN State 100 | ); 101 | 102 | NTSYSAPI 103 | NTSTATUS 104 | NTAPI 105 | ZwSystemDebugControl( 106 | SYSDBG_COMMAND ControlCode, 107 | PVOID InputBuffer, 108 | ULONG InputBufferLength, 109 | PVOID OutputBuffer, 110 | ULONG OutputBufferLength, 111 | PULONG ReturnLength 112 | ); 113 | #endif 114 | -------------------------------------------------------------------------------- /ndk-1.0/kdtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | kdtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Kernel Debugger. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _KDTYPES_H 20 | #define _KDTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Debug Filter Levels 29 | // 30 | #define DPFLTR_ERROR_LEVEL 0 31 | #define DPFLTR_WARNING_LEVEL 1 32 | #define DPFLTR_TRACE_LEVEL 2 33 | #define DPFLTR_INFO_LEVEL 3 34 | #define DPFLTR_MASK 0x80000000 35 | 36 | // 37 | // Debug Status Codes 38 | // 39 | #define DBG_STATUS_CONTROL_C 1 40 | #define DBG_STATUS_SYSRQ 2 41 | #define DBG_STATUS_BUGCHECK_FIRST 3 42 | #define DBG_STATUS_BUGCHECK_SECOND 4 43 | #define DBG_STATUS_FATAL 5 44 | #define DBG_STATUS_DEBUG_CONTROL 6 45 | #define DBG_STATUS_WORKER 7 46 | 47 | // 48 | // DebugService Control Types 49 | // 50 | #define BREAKPOINT_BREAK 0 51 | #define BREAKPOINT_PRINT 1 52 | #define BREAKPOINT_PROMPT 2 53 | #define BREAKPOINT_LOAD_SYMBOLS 3 54 | #define BREAKPOINT_UNLOAD_SYMBOLS 4 55 | #define BREAKPOINT_COMMAND_STRING 5 56 | 57 | // 58 | // Debug Control Codes for NtSystemDebugcontrol 59 | // 60 | typedef enum _SYSDBG_COMMAND 61 | { 62 | SysDbgQueryModuleInformation = 0, 63 | SysDbgQueryTraceInformation = 1, 64 | SysDbgSetTracepoint = 2, 65 | SysDbgSetSpecialCall = 3, 66 | SysDbgClearSpecialCalls = 4, 67 | SysDbgQuerySpecialCalls = 5, 68 | SysDbgBreakPoint = 6, 69 | SysDbgQueryVersion = 7, 70 | SysDbgReadVirtual = 8, 71 | SysDbgWriteVirtual = 9, 72 | SysDbgReadPhysical = 10, 73 | SysDbgWritePhysical = 11, 74 | SysDbgReadControlSpace = 12, 75 | SysDbgWriteControlSpace = 13, 76 | SysDbgReadIoSpace = 14, 77 | SysDbgWriteIoSpace = 15, 78 | SysDbgReadMsr = 16, 79 | SysDbgWriteMsr = 17, 80 | SysDbgReadBusData = 18, 81 | SysDbgWriteBusData = 19, 82 | SysDbgCheckLowMemory = 20, 83 | SysDbgEnableKernelDebugger = 21, 84 | SysDbgDisableKernelDebugger = 22, 85 | SysDbgGetAutoKdEnable = 23, 86 | SysDbgSetAutoKdEnable = 24, 87 | SysDbgGetPrintBufferSize = 25, 88 | SysDbgSetPrintBufferSize = 26, 89 | SysDbgGetKdUmExceptionEnable = 27, 90 | SysDbgSetKdUmExceptionEnable = 28, 91 | SysDbgGetTriageDump = 29, 92 | SysDbgGetKdBlockEnable = 30, 93 | SysDbgSetKdBlockEnable = 31, 94 | SysDbgRegisterForUmBreakInfo = 32, 95 | SysDbgGetUmBreakPid = 33, 96 | SysDbgClearUmBreakPid = 34, 97 | SysDbgGetUmAttachPid = 35, 98 | SysDbgClearUmAttachPid = 36, 99 | } SYSDBG_COMMAND; 100 | 101 | // 102 | // System Debugger Types 103 | // 104 | typedef struct _SYSDBG_PHYSICAL 105 | { 106 | PHYSICAL_ADDRESS Address; 107 | PVOID Buffer; 108 | ULONG Request; 109 | } SYSDBG_PHYSICAL, *PSYSDBG_PHYSICAL; 110 | 111 | typedef struct _SYSDBG_VIRTUAL 112 | { 113 | PVOID Address; 114 | PVOID Buffer; 115 | ULONG Request; 116 | } SYSDBG_VIRTUAL, *PSYSDBG_VIRTUAL; 117 | 118 | typedef struct _SYSDBG_CONTROL_SPACE 119 | { 120 | ULONGLONG Address; 121 | PVOID Buffer; 122 | ULONG Request; 123 | ULONG Processor; 124 | } SYSDBG_CONTROL_SPACE, *PSYSDBG_CONTROL_SPACE; 125 | 126 | typedef struct _SYSDBG_IO_SPACE 127 | { 128 | ULONGLONG Address; 129 | PVOID Buffer; 130 | ULONG Request; 131 | INTERFACE_TYPE InterfaceType; 132 | ULONG BusNumber; 133 | ULONG AddressSpace; 134 | } SYSDBG_IO_SPACE, *PSYSDBG_IO_SPACE; 135 | 136 | typedef struct _SYSDBG_BUS_DATA 137 | { 138 | ULONG Address; 139 | PVOID Buffer; 140 | ULONG Request; 141 | BUS_DATA_TYPE BusDataType; 142 | ULONG BusNumber; 143 | ULONG SlotNumber; 144 | } SYSDBG_BUS_DATA, *PSYSDBG_BUS_DATA; 145 | 146 | typedef struct _SYSDBG_MSR 147 | { 148 | ULONG Address; 149 | ULONGLONG Data; 150 | } SYSDBG_MSR, *PSYSDBG_MSR; 151 | 152 | typedef struct _SYSDBG_TRIAGE_DUMP 153 | { 154 | ULONG Flags; 155 | ULONG BugCheckCode; 156 | ULONG_PTR BugCheckParam1; 157 | ULONG_PTR BugCheckParam2; 158 | ULONG_PTR BugCheckParam3; 159 | ULONG_PTR BugCheckParam4; 160 | ULONG ProcessHandles; 161 | ULONG ThreadHandles; 162 | PHANDLE Handles; 163 | } SYSDBG_TRIAGE_DUMP, *PSYSDBG_TRIAGE_DUMP; 164 | 165 | // 166 | // KD Structures 167 | // 168 | typedef struct _KD_SYMBOLS_INFO 169 | { 170 | PVOID BaseOfDll; 171 | ULONG_PTR ProcessId; 172 | ULONG CheckSum; 173 | ULONG SizeOfImage; 174 | } KD_SYMBOLS_INFO, *PKD_SYMBOLS_INFO; 175 | 176 | #endif // _KDTYPES_H 177 | -------------------------------------------------------------------------------- /ndk-1.0/ldrfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ldrfuncs.h 8 | 9 | Abstract: 10 | 11 | Functions definitions for the Loader. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _LDRFUNCS_H 20 | #define _LDRFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | #if defined(_MSC_VER) && !defined(NTOS_MODE_USER) 28 | #include 29 | #endif 30 | 31 | // 32 | // Resource Functions 33 | // 34 | NTSTATUS 35 | NTAPI 36 | LdrAccessResource( 37 | IN PVOID BaseAddress, 38 | IN PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry, 39 | OUT PVOID *Resource OPTIONAL, 40 | OUT PULONG Size OPTIONAL 41 | ); 42 | 43 | NTSTATUS 44 | NTAPI 45 | LdrFindResource_U( 46 | IN PVOID BaseAddress, 47 | IN PLDR_RESOURCE_INFO ResourceInfo, 48 | IN ULONG Level, 49 | OUT PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry 50 | ); 51 | 52 | NTSTATUS 53 | NTAPI 54 | LdrFindResourceDirectory_U( 55 | IN PVOID BaseAddress, 56 | IN PLDR_RESOURCE_INFO ResourceInfo, 57 | IN ULONG Level, 58 | OUT PIMAGE_RESOURCE_DIRECTORY *ResourceDirectory 59 | ); 60 | 61 | BOOLEAN 62 | LdrUnloadAlternateResourceModule( 63 | IN PVOID BaseAddress 64 | ); 65 | 66 | // 67 | // Misc. Functions 68 | // 69 | NTSTATUS 70 | NTAPI 71 | LdrGetProcedureAddress( 72 | IN PVOID BaseAddress, 73 | IN PANSI_STRING Name, 74 | IN ULONG Ordinal, 75 | OUT PVOID *ProcedureAddress 76 | ); 77 | 78 | ULONG 79 | NTAPI 80 | LdrRelocateImage( 81 | IN PVOID NewBase, 82 | IN PUCHAR LoaderName, 83 | IN ULONG Success, 84 | IN ULONG Conflict, 85 | IN ULONG Invalid 86 | ); 87 | 88 | NTSTATUS 89 | LdrLockLoaderLock( 90 | IN ULONG Flags, 91 | OUT PULONG Disposition OPTIONAL, 92 | OUT PULONG Cookie OPTIONAL 93 | ); 94 | 95 | NTSTATUS 96 | NTAPI 97 | LdrUnlockLoaderLock( 98 | IN ULONG Flags, 99 | IN ULONG Cookie OPTIONAL 100 | ); 101 | 102 | BOOLEAN 103 | NTAPI 104 | LdrVerifyMappedImageMatchesChecksum( 105 | IN PVOID BaseAddress, 106 | IN ULONG NumberOfBytes, 107 | IN ULONG FileLength 108 | ); 109 | 110 | #endif 111 | -------------------------------------------------------------------------------- /ndk-1.0/ldrtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ldrtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Loader. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _LDRTYPES_H 20 | #define _LDRTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Resource Type Levels 29 | // 30 | #define RESOURCE_TYPE_LEVEL 0 31 | #define RESOURCE_NAME_LEVEL 1 32 | #define RESOURCE_LANGUAGE_LEVEL 2 33 | #define RESOURCE_DATA_LEVEL 3 34 | 35 | // 36 | // Loader Data Table Entry Flags 37 | // 38 | #define LDRP_STATIC_LINK 0x00000002 39 | #define LDRP_IMAGE_DLL 0x00000004 40 | #define LDRP_LOAD_IN_PROGRESS 0x00001000 41 | #define LDRP_UNLOAD_IN_PROGRESS 0x00002000 42 | #define LDRP_ENTRY_PROCESSED 0x00004000 43 | #define LDRP_ENTRY_INSERTED 0x00008000 44 | #define LDRP_CURRENT_LOAD 0x00010000 45 | #define LDRP_FAILED_BUILTIN_LOAD 0x00020000 46 | #define LDRP_DONT_CALL_FOR_THREADS 0x00040000 47 | #define LDRP_PROCESS_ATTACH_CALLED 0x00080000 48 | #define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000 49 | #define LDRP_IMAGE_NOT_AT_BASE 0x00200000 50 | #define LDRP_COR_IMAGE 0x00400000 51 | #define LDR_COR_OWNS_UNMAP 0x00800000 52 | #define LDRP_SYSTEM_MAPPED 0x01000000 53 | #define LDRP_IMAGE_VERIFYING 0x02000000 54 | #define LDRP_DRIVER_DEPENDENT_DLL 0x04000000 55 | #define LDRP_ENTRY_NATIVE 0x08800000 56 | #define LDRP_REDIRECTED 0x10000000 57 | #define LDRP_NON_PAGED_DEBUG_INFO 0x20000000 58 | #define LDRP_MM_LOADED 0x40000000 59 | #define LDRP_COMPAT_DATABASE_PROCESSED 0x80000000 60 | 61 | // 62 | // Dll Characteristics for LdrLoadDll 63 | // 64 | #define LDR_IGNORE_CODE_AUTHZ_LEVEL 0x00001000 65 | 66 | // 67 | // LdrAddRef Flags 68 | // 69 | #define LDR_PIN_MODULE 0x00000001 70 | 71 | // 72 | // LdrLockLoaderLock Flags 73 | // 74 | #define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_STATUS 0x00000001 75 | #define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002 76 | 77 | // 78 | // FIXME: THIS SHOULD *NOT* BE USED! 79 | // 80 | #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 81 | 82 | // 83 | // Loader Data stored in the PEB 84 | // 85 | typedef struct _PEB_LDR_DATA 86 | { 87 | ULONG Length; 88 | BOOLEAN Initialized; 89 | PVOID SsHandle; 90 | LIST_ENTRY InLoadOrderModuleList; 91 | LIST_ENTRY InMemoryOrderModuleList; 92 | LIST_ENTRY InInitializationOrderModuleList; 93 | PVOID EntryInProgress; 94 | } PEB_LDR_DATA, *PPEB_LDR_DATA; 95 | 96 | // 97 | // Loader Data Table Entry 98 | // 99 | typedef struct _LDR_DATA_TABLE_ENTRY 100 | { 101 | LIST_ENTRY InLoadOrderLinks; 102 | LIST_ENTRY InMemoryOrderModuleList; 103 | LIST_ENTRY InInitializationOrderModuleList; 104 | PVOID DllBase; 105 | PVOID EntryPoint; 106 | ULONG SizeOfImage; 107 | UNICODE_STRING FullDllName; 108 | UNICODE_STRING BaseDllName; 109 | ULONG Flags; 110 | USHORT LoadCount; 111 | USHORT TlsIndex; 112 | union 113 | { 114 | LIST_ENTRY HashLinks; 115 | PVOID SectionPointer; 116 | }; 117 | ULONG CheckSum; 118 | union 119 | { 120 | ULONG TimeDateStamp; 121 | PVOID LoadedImports; 122 | }; 123 | PVOID EntryPointActivationContext; 124 | PVOID PatchInformation; 125 | } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; 126 | 127 | // 128 | // Loaded Imports Reference Counting in Kernel 129 | // 130 | typedef struct _LOAD_IMPORTS 131 | { 132 | SIZE_T Count; 133 | PLDR_DATA_TABLE_ENTRY Entry[1]; 134 | } LOAD_IMPORTS, *PLOAD_IMPORTS; 135 | 136 | // 137 | // Loader Resource Information 138 | // 139 | typedef struct _LDR_RESOURCE_INFO 140 | { 141 | ULONG Type; 142 | ULONG Name; 143 | ULONG Language; 144 | } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO; 145 | 146 | // 147 | // DLL Notifications 148 | // 149 | typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA 150 | { 151 | ULONG Flags; 152 | PUNICODE_STRING FullDllName; 153 | PUNICODE_STRING BaseDllName; 154 | PVOID DllBase; 155 | ULONG SizeOfImage; 156 | } LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA; 157 | 158 | typedef VOID 159 | (*PLDR_DLL_LOADED_NOTIFICATION_CALLBACK)( 160 | IN BOOLEAN Type, 161 | IN struct _LDR_DLL_LOADED_NOTIFICATION_DATA *Data 162 | ); 163 | 164 | typedef struct _LDR_DLL_LOADED_NOTIFICATION_ENTRY 165 | { 166 | LIST_ENTRY NotificationListEntry; 167 | PLDR_DLL_LOADED_NOTIFICATION_CALLBACK Callback; 168 | } LDR_DLL_LOADED_NOTIFICATION_ENTRY, *PLDR_DLL_LOADED_NOTIFICATION_ENTRY; 169 | 170 | // 171 | // Alternate Resources Support 172 | // 173 | typedef struct _ALT_RESOURCE_MODULE 174 | { 175 | LANGID LangId; 176 | PVOID ModuleBase; 177 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 178 | PVOID ModuleManifest; 179 | #endif 180 | PVOID AlternateModule; 181 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 182 | HANDLE AlternateFileHandle; 183 | ULONG ModuleCheckSum; 184 | ULONG ErrorCode; 185 | #endif 186 | } ALT_RESOURCE_MODULE, *PALT_RESOURCE_MODULE; 187 | 188 | #endif 189 | -------------------------------------------------------------------------------- /ndk-1.0/lpctypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | lpctypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Loader. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _LPCTYPES_H 20 | #define _LPCTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | //#include 27 | 28 | // 29 | // Internal helper macro 30 | // 31 | #define N_ROUND_UP(x,s) \ 32 | (((ULONG)(x)+(s)-1) & ~((ULONG)(s)-1)) 33 | 34 | // 35 | // Maximum message size that can be sent through an LPC Port without a section 36 | // 37 | #define PORT_MAXIMUM_MESSAGE_LENGTH 256 38 | 39 | // 40 | // Port Object Access Masks 41 | // 42 | #define PORT_CONNECT 0x1 43 | #define PORT_ALL_ACCESS 0x1 44 | 45 | // 46 | // Port Object Flags 47 | // 48 | #define LPCP_CONNECTION_PORT 0x00000001 49 | #define LPCP_UNCONNECTED_PORT 0x00000002 50 | #define LPCP_COMMUNICATION_PORT 0x00000003 51 | #define LPCP_CLIENT_PORT 0x00000004 52 | #define LPCP_PORT_TYPE_MASK 0x0000000F 53 | #define LPCP_PORT_DELETED 0x10000000 54 | #define LPCP_WAITABLE_PORT 0x20000000 55 | #define LPCP_NAME_DELETED 0x40000000 56 | #define LPCP_SECURITY_DYNAMIC 0x80000000 57 | 58 | // 59 | // LPC Message Types 60 | // 61 | typedef enum _LPC_TYPE 62 | { 63 | LPC_NEW_MESSAGE, 64 | LPC_REQUEST, 65 | LPC_REPLY, 66 | LPC_DATAGRAM, 67 | LPC_LOST_REPLY, 68 | LPC_PORT_CLOSED, 69 | LPC_CLIENT_DIED, 70 | LPC_EXCEPTION, 71 | LPC_DEBUG_EVENT, 72 | LPC_ERROR_EVENT, 73 | LPC_CONNECTION_REQUEST, 74 | LPC_CONNECTION_REFUSED, 75 | LPC_MAXIMUM 76 | } LPC_TYPE; 77 | 78 | // 79 | // Information Classes for NtQueryInformationPort 80 | // 81 | typedef enum _PORT_INFORMATION_CLASS 82 | { 83 | PortNoInformation 84 | } PORT_INFORMATION_CLASS; 85 | 86 | #ifdef NTOS_MODE_USER 87 | 88 | // 89 | // Portable LPC Types for 32/64-bit compatibility 90 | // 91 | #ifdef USE_LPC6432 92 | #define LPC_CLIENT_ID CLIENT_ID64 93 | #define LPC_SIZE_T ULONGLONG 94 | #define LPC_PVOID ULONGLONG 95 | #define LPC_HANDLE ULONGLONG 96 | #else 97 | #define LPC_CLIENT_ID CLIENT_ID 98 | #define LPC_SIZE_T SIZE_T 99 | #define LPC_PVOID PVOID 100 | #define LPC_HANDLE HANDLE 101 | #endif 102 | 103 | // 104 | // LPC Port Message 105 | // 106 | typedef struct _PORT_MESSAGE 107 | { 108 | union 109 | { 110 | struct 111 | { 112 | CSHORT DataLength; 113 | CSHORT TotalLength; 114 | } s1; 115 | ULONG Length; 116 | } u1; 117 | union 118 | { 119 | struct 120 | { 121 | CSHORT Type; 122 | CSHORT DataInfoOffset; 123 | } s2; 124 | ULONG ZeroInit; 125 | } u2; 126 | union 127 | { 128 | LPC_CLIENT_ID ClientId; 129 | double DoNotUseThisField; 130 | }; 131 | ULONG MessageId; 132 | union 133 | { 134 | LPC_SIZE_T ClientViewSize; 135 | ULONG CallbackId; 136 | }; 137 | } PORT_MESSAGE, *PPORT_MESSAGE; 138 | 139 | // 140 | // Local and Remove Port Views 141 | // 142 | typedef struct _PORT_VIEW 143 | { 144 | ULONG Length; 145 | LPC_HANDLE SectionHandle; 146 | ULONG SectionOffset; 147 | LPC_SIZE_T ViewSize; 148 | LPC_PVOID ViewBase; 149 | LPC_PVOID ViewRemoteBase; 150 | } PORT_VIEW, *PPORT_VIEW; 151 | 152 | typedef struct _REMOTE_PORT_VIEW 153 | { 154 | ULONG Length; 155 | LPC_SIZE_T ViewSize; 156 | LPC_PVOID ViewBase; 157 | } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW; 158 | 159 | // 160 | // LPC Kernel-Mode Message Structures defined for size only 161 | // 162 | typedef struct _LPCP_MESSAGE 163 | { 164 | UCHAR Data[0x14]; 165 | PORT_MESSAGE Request; 166 | } LPCP_MESSAGE; 167 | 168 | typedef struct _LPCP_CONNECTION_MESSAGE 169 | { 170 | UCHAR Data[0x2C]; 171 | } LPCP_CONNECTION_MESSAGE; 172 | 173 | #else 174 | 175 | // 176 | // LPC Paged and Non-Paged Port Queues 177 | // 178 | typedef struct _LPCP_NONPAGED_PORT_QUEUE 179 | { 180 | KSEMAPHORE Semaphore; 181 | struct _LPCP_PORT_OBJECT *BackPointer; 182 | } LPCP_NONPAGED_PORT_QUEUE, *PLPCP_NONPAGED_PORT_QUEUE; 183 | 184 | typedef struct _LPCP_PORT_QUEUE 185 | { 186 | PLPCP_NONPAGED_PORT_QUEUE NonPagedPortQueue; 187 | PKSEMAPHORE Semaphore; 188 | LIST_ENTRY ReceiveHead; 189 | } LPCP_PORT_QUEUE, *PLPCP_PORT_QUEUE; 190 | 191 | // 192 | // LPC Port Object 193 | // 194 | typedef struct _LPCP_PORT_OBJECT 195 | { 196 | struct _LPCP_PORT_OBJECT *ConnectionPort; 197 | struct _LPCP_PORT_OBJECT *ConnectedPort; 198 | LPCP_PORT_QUEUE MsgQueue; 199 | CLIENT_ID Creator; 200 | PVOID ClientSectionBase; 201 | PVOID ServerSectionBase; 202 | PVOID PortContext; 203 | PETHREAD ClientThread; 204 | SECURITY_QUALITY_OF_SERVICE SecurityQos; 205 | SECURITY_CLIENT_CONTEXT StaticSecurity; 206 | LIST_ENTRY LpcReplyChainHead; 207 | LIST_ENTRY LpcDataInfoChainHead; 208 | PEPROCESS ServerProcess; 209 | PEPROCESS MappingProcess; 210 | ULONG MaxMessageLength; 211 | ULONG MaxConnectionInfoLength; 212 | ULONG Flags; 213 | KEVENT WaitEvent; 214 | } LPCP_PORT_OBJECT, *PLPCP_PORT_OBJECT; 215 | 216 | // 217 | // LPC Kernel-Mode Message Structures 218 | // 219 | typedef struct _LPCP_MESSAGE 220 | { 221 | union 222 | { 223 | LIST_ENTRY Entry; 224 | struct 225 | { 226 | SINGLE_LIST_ENTRY FreeEntry; 227 | ULONG Reserved0; 228 | }; 229 | }; 230 | PLPCP_PORT_OBJECT SenderPort; 231 | PETHREAD RepliedToThread; 232 | PVOID PortContext; 233 | PORT_MESSAGE Request; 234 | } LPCP_MESSAGE, *PLPCP_MESSAGE; 235 | 236 | typedef struct _LPCP_CONNECTION_MESSAGE 237 | { 238 | PORT_VIEW ClientView; 239 | PLPCP_PORT_OBJECT ClientPort; 240 | PVOID SectionToMap; 241 | REMOTE_PORT_VIEW ServerView; 242 | } LPCP_CONNECTION_MESSAGE, *PLPCP_CONNECTION_MESSAGE; 243 | 244 | #endif 245 | 246 | // 247 | // Client Died LPC Message 248 | // 249 | typedef struct _CLIENT_DIED_MSG 250 | { 251 | PORT_MESSAGE h; 252 | LARGE_INTEGER CreateTime; 253 | } CLIENT_DIED_MSG, *PCLIENT_DIED_MSG; 254 | 255 | // 256 | // Maximum total Kernel-Mode LPC Message Structure Size 257 | // 258 | #define LPCP_MAX_MESSAGE_SIZE \ 259 | N_ROUND_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \ 260 | sizeof(LPCP_MESSAGE) + \ 261 | sizeof(LPCP_CONNECTION_MESSAGE), 16) 262 | 263 | // 264 | // Maximum actual LPC Message Length 265 | // 266 | #define LPC_MAX_MESSAGE_LENGTH \ 267 | (LPCP_MAX_MESSAGE_SIZE - \ 268 | FIELD_OFFSET(LPCP_MESSAGE, Request)) 269 | 270 | // 271 | // Maximum actual size of LPC Message Data 272 | // 273 | #define LPC_MAX_DATA_LENGTH \ 274 | (LPC_MAX_MESSAGE_LENGTH - \ 275 | sizeof(PORT_MESSAGE) - \ 276 | sizeof(LPCP_CONNECTION_MESSAGE)) 277 | 278 | #endif // _LPCTYPES_H 279 | -------------------------------------------------------------------------------- /ndk-1.0/ntndk.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ntndk.h 8 | 9 | Abstract: 10 | 11 | Master include file for the Native Development Kit. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _NTNDK_ 20 | #define _NTNDK_ 21 | 22 | // 23 | // Disable some warnings that we'd get on /W4. 24 | // Only active for compilers which support this feature. 25 | // 26 | #ifdef _MSC_VER 27 | #pragma warning(push) 28 | #pragma warning(disable:4001) 29 | #pragma warning(disable:4201) 30 | #pragma warning(disable:4115) 31 | #pragma warning(disable:4214) 32 | #endif 33 | 34 | // 35 | // Headers needed for NDK 36 | // 37 | #include // C Standard Header 38 | #include // C Standard Header 39 | #include // C Standard Header 40 | #include // General Definitions 41 | 42 | // 43 | // Type Headers 44 | // 45 | #include // Cache Manager Types 46 | #include // Configuration Manager Types 47 | #include // User-Mode Kernel Debugging Types 48 | #include // Executive Types 49 | #include // Kernel Debugger Types 50 | #include // Kernel Types 51 | #include // Hardware Abstraction Layer Types 52 | #include // IFS Support Header 53 | #include // Input/Output Manager Types 54 | #include // Loader Types 55 | #include // Local Procedure Call Types 56 | #include // Memory Manager Types 57 | #include // Object Manager Types 58 | #include // Power Manager Types 59 | #include // Process Manager Types 60 | #include // Runtime Library Types 61 | #include // Security Subsystem Types 62 | 63 | // 64 | // Function Headers 65 | // 66 | #include // Configuration Manager Functions 67 | #include // User-Mode Kernel Debugging Functions 68 | #include // Kernel Debugger Functions 69 | #include // Kernel Functions 70 | #include // Executive Functions 71 | #include // Hardware Abstraction Layer Functions 72 | #include // Input/Output Manager Functions 73 | #include // Initialization Boot Video Functions 74 | #include // Loader Functions 75 | #include // Local Procedure Call Functions 76 | #include // Memory Manager Functions 77 | #include // Object Manager Functions 78 | #include // Power Manager Functions 79 | #include // Process Manager Functions 80 | #include // Runtime Library Functions 81 | #include // Security Subsystem Functions 82 | #include // User-Mode NT Library Functions 83 | 84 | // 85 | // Assembly Support 86 | // 87 | #include // Assembly Offsets 88 | 89 | #ifdef _MSC_VER 90 | #pragma warning(pop) 91 | #endif 92 | #endif // _NTNDK_ 93 | -------------------------------------------------------------------------------- /ndk-1.0/pofuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | pofuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Power Subsystem. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _POFUNCS_H 20 | #define _POFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Native Calls 29 | // 30 | NTSYSCALLAPI 31 | NTSTATUS 32 | NTAPI 33 | NtInitiatePowerAction( 34 | POWER_ACTION SystemAction, 35 | SYSTEM_POWER_STATE MinSystemState, 36 | ULONG Flags, 37 | BOOLEAN Asynchronous 38 | ); 39 | 40 | NTSYSCALLAPI 41 | NTSTATUS 42 | NTAPI 43 | NtPowerInformation( 44 | POWER_INFORMATION_LEVEL PowerInformationLevel, 45 | PVOID InputBuffer, 46 | ULONG InputBufferLength, 47 | PVOID OutputBuffer, 48 | ULONG OutputBufferLength 49 | ); 50 | 51 | NTSYSCALLAPI 52 | NTSTATUS 53 | NTAPI 54 | NtSetSystemPowerState( 55 | IN POWER_ACTION SystemAction, 56 | IN SYSTEM_POWER_STATE MinSystemState, 57 | IN ULONG Flags 58 | ); 59 | 60 | NTSYSAPI 61 | NTSTATUS 62 | NTAPI 63 | ZwInitiatePowerAction( 64 | POWER_ACTION SystemAction, 65 | SYSTEM_POWER_STATE MinSystemState, 66 | ULONG Flags, 67 | BOOLEAN Asynchronous 68 | ); 69 | 70 | NTSYSAPI 71 | NTSTATUS 72 | NTAPI 73 | ZwPowerInformation( 74 | POWER_INFORMATION_LEVEL PowerInformationLevel, 75 | PVOID InputBuffer, 76 | ULONG InputBufferLength, 77 | PVOID OutputBuffer, 78 | ULONG OutputBufferLength 79 | ); 80 | 81 | NTSYSAPI 82 | NTSTATUS 83 | NTAPI 84 | ZwSetSystemPowerState( 85 | IN POWER_ACTION SystemAction, 86 | IN SYSTEM_POWER_STATE MinSystemState, 87 | IN ULONG Flags 88 | ); 89 | #endif 90 | -------------------------------------------------------------------------------- /ndk-1.0/potypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | potypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Power Subystem 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _POTYPES_H 20 | #define _POTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #ifndef NTOS_MODE_USER 27 | #include 28 | #endif 29 | 30 | // 31 | // Docking states 32 | // 33 | typedef enum _SYSTEM_DOCK_STATE 34 | { 35 | SystemDockStateUnknown, 36 | SystemUndocked, 37 | SystemDocked 38 | } SYSTEM_DOCK_STATE, *PSYSTEM_DOCK_STATE; 39 | 40 | #ifndef NTOS_MODE_USER 41 | 42 | // 43 | // Processor Power State Data 44 | // 45 | typedef struct _PROCESSOR_POWER_STATE 46 | { 47 | PVOID IdleFunction; 48 | ULONG Idle0KernelTimeLimit; 49 | ULONG Idle0LastTime; 50 | PVOID IdleHandlers; 51 | PVOID IdleState; 52 | ULONG IdleHandlersCount; 53 | ULONGLONG LastCheck; 54 | PROCESSOR_IDLE_TIMES IdleTimes; 55 | ULONG IdleTime1; 56 | ULONG PromotionCheck; 57 | ULONG IdleTime2; 58 | UCHAR CurrentThrottle; 59 | UCHAR ThermalThrottleLimit; 60 | UCHAR CurrentThrottleIndex; 61 | UCHAR ThermalThrottleIndex; 62 | ULONG LastKernelUserTime; 63 | ULONG PerfIdleTime; 64 | ULONG DebugDelta; 65 | ULONG DebugCount; 66 | ULONG LastSysTime; 67 | ULONG TotalIdleStateTime[3]; 68 | ULONG TotalIdleTransitions[3]; 69 | ULONGLONG PreviousC3StateTime; 70 | UCHAR KneeThrottleIndex; 71 | UCHAR ThrottleLimitIndex; 72 | UCHAR PerfStatesCount; 73 | UCHAR ProcessorMinThrottle; 74 | UCHAR ProcessorMaxThrottle; 75 | UCHAR LastBusyPercentage; 76 | UCHAR LastC3Percentage; 77 | UCHAR LastAdjustedBusyPercentage; 78 | ULONG PromotionCount; 79 | ULONG DemotionCount; 80 | ULONG ErrorCount; 81 | ULONG RetryCount; 82 | ULONG Flags; 83 | LARGE_INTEGER PerfCounterFrequency; 84 | ULONG PerfTickCount; 85 | KTIMER PerfTimer; 86 | KDPC PerfDpc; 87 | PROCESSOR_PERF_STATE *PerfStates; 88 | PVOID PerfSetThrottle; 89 | ULONG LastC3KernelUserTime; 90 | ULONG Spare1[1]; 91 | } PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE; 92 | 93 | // 94 | // Device Notification Structure 95 | // 96 | typedef struct _PO_DEVICE_NOTIFY 97 | { 98 | LIST_ENTRY Link; 99 | PDEVICE_OBJECT TargetDevice; 100 | UCHAR WakeNeeded; 101 | UCHAR OrderLevel; 102 | PDEVICE_OBJECT DeviceObject; 103 | PVOID Node; 104 | PUSHORT DeviceName; 105 | PUSHORT DriverName; 106 | ULONG ChildCount; 107 | ULONG ActiveChild; 108 | } PO_DEVICE_NOTIFY, *PPO_DEVICE_NOTIFY; 109 | 110 | #endif // !NTOS_MODE_USER 111 | 112 | #endif // _POTYPES_H 113 | -------------------------------------------------------------------------------- /ndk-1.0/powerpc/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (PPC) 8 | 9 | Abstract: 10 | 11 | PowerPC Type definitions for the Memory Manager 12 | 13 | Author: 14 | 15 | Art Yerkes (ayerkes@speakeasy.net) 04-Dec-2005 16 | 17 | --*/ 18 | 19 | #ifndef _POWERPC_MMTYPES_H 20 | #define _POWERPC_MMTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | 26 | // 27 | // Page-related Macros 28 | // 29 | #define PAGE_SIZE 0x1000 30 | #define PAGE_SHIFT 12L 31 | 32 | typedef unsigned long long MMPTE_HARDWARE; 33 | typedef unsigned long long MMPTE_SOFTWARE; 34 | typedef unsigned long long MMPTE_PROTOTYPE; 35 | typedef unsigned long long MMPTE_SUBSECTION; 36 | typedef unsigned long long MMPTE_TRANSITION; 37 | typedef unsigned long long MMPTE_LIST; 38 | 39 | // 40 | // Page Table Entry Definition 41 | // 42 | typedef struct _HARDWARE_PTE_PPC 43 | { 44 | ULONG Dirty:2; 45 | ULONG Valid:1; 46 | ULONG GuardedStorage:1; 47 | ULONG MemoryCoherence:1; 48 | ULONG CacheDisable:1; 49 | ULONG WriteThrough:1; 50 | ULONG Change:1; 51 | ULONG Reference:1; 52 | ULONG Write:1; 53 | ULONG CopyOnWrite:1; 54 | ULONG rsvd1:1; 55 | ULONG PageFrameNumber:20; 56 | } HARDWARE_PTE_PPC, *PHARDWARE_PTE_PPC; 57 | 58 | #ifndef HARDWARE_PTE 59 | #define HARDWARE_PTE HARDWARE_PTE_PPC 60 | #define PHARDWARE_PTE PHARDWARE_PTE_PPC 61 | #endif 62 | 63 | #endif/*_POWERPC_MMTYPES_H*/ 64 | -------------------------------------------------------------------------------- /ndk-1.0/setypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | setypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the security manager. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _SETYPES_H 20 | #define _SETYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Well Known SIDs 29 | // 30 | #define SECURITY_INTERNETSITE_AUTHORITY {0,0,0,0,0,7} 31 | 32 | #ifdef NTOS_MODE_USER 33 | // 34 | // Privilege constants 35 | // 36 | #define SE_MIN_WELL_KNOWN_PRIVILEGE (2L) 37 | #define SE_CREATE_TOKEN_PRIVILEGE (2L) 38 | #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE (3L) 39 | #define SE_LOCK_MEMORY_PRIVILEGE (4L) 40 | #define SE_INCREASE_QUOTA_PRIVILEGE (5L) 41 | #define SE_UNSOLICITED_INPUT_PRIVILEGE (6L) 42 | #define SE_MACHINE_ACCOUNT_PRIVILEGE (6L) 43 | #define SE_TCB_PRIVILEGE (7L) 44 | #define SE_SECURITY_PRIVILEGE (8L) 45 | #define SE_TAKE_OWNERSHIP_PRIVILEGE (9L) 46 | #define SE_LOAD_DRIVER_PRIVILEGE (10L) 47 | #define SE_SYSTEM_PROFILE_PRIVILEGE (11L) 48 | #define SE_SYSTEMTIME_PRIVILEGE (12L) 49 | #define SE_PROF_SINGLE_PROCESS_PRIVILEGE (13L) 50 | #define SE_INC_BASE_PRIORITY_PRIVILEGE (14L) 51 | #define SE_CREATE_PAGEFILE_PRIVILEGE (15L) 52 | #define SE_CREATE_PERMANENT_PRIVILEGE (16L) 53 | #define SE_BACKUP_PRIVILEGE (17L) 54 | #define SE_RESTORE_PRIVILEGE (18L) 55 | #define SE_SHUTDOWN_PRIVILEGE (19L) 56 | #define SE_DEBUG_PRIVILEGE (20L) 57 | #define SE_AUDIT_PRIVILEGE (21L) 58 | #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE (22L) 59 | #define SE_CHANGE_NOTIFY_PRIVILEGE (23L) 60 | #define SE_REMOTE_SHUTDOWN_PRIVILEGE (24L) 61 | #define SE_MAX_WELL_KNOWN_PRIVILEGE (SE_REMOTE_SHUTDOWN_PRIVILEGE) 62 | 63 | #else 64 | 65 | // 66 | // User and Group-related SID Attributes 67 | // 68 | #define SE_GROUP_MANDATORY 0x00000001 69 | #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002 70 | #define SE_GROUP_ENABLED 0x00000004 71 | #define SE_GROUP_OWNER 0x00000008 72 | #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010 73 | #define SE_GROUP_INTEGRITY 0x00000020 74 | #define SE_GROUP_INTEGRITY_ENABLED 0x00000040 75 | #define SE_GROUP_RESOURCE 0x20000000 76 | #define SE_GROUP_LOGON_ID 0xC0000000 77 | 78 | #define SE_GROUP_VALID_ATTRIBUTES \ 79 | (SE_GROUP_MANDATORY | \ 80 | SE_GROUP_ENABLED_BY_DEFAULT | \ 81 | SE_GROUP_ENABLED | \ 82 | SE_GROUP_OWNER | \ 83 | SE_GROUP_USE_FOR_DENY_ONLY | \ 84 | SE_GROUP_LOGON_ID | \ 85 | SE_GROUP_RESOURCE | \ 86 | SE_GROUP_INTEGRITY | \ 87 | SE_GROUP_INTEGRITY_ENABLED) 88 | 89 | // 90 | // Audit and Policy Structures 91 | // 92 | typedef struct _SEP_AUDIT_POLICY_CATEGORIES 93 | { 94 | UCHAR System:4; 95 | UCHAR Logon:4; 96 | UCHAR ObjectAccess:4; 97 | UCHAR PrivilegeUse:4; 98 | UCHAR DetailedTracking:4; 99 | UCHAR PolicyChange:4; 100 | UCHAR AccountManagement:4; 101 | UCHAR DirectoryServiceAccess:4; 102 | UCHAR AccountLogon:4; 103 | } SEP_AUDIT_POLICY_CATEGORIES, *PSEP_AUDIT_POLICY_CATEGORIES; 104 | 105 | typedef struct _SEP_AUDIT_POLICY_OVERLAY 106 | { 107 | ULONGLONG PolicyBits:36; 108 | UCHAR SetBit:1; 109 | } SEP_AUDIT_POLICY_OVERLAY, *PSEP_AUDIT_POLICY_OVERLAY; 110 | 111 | typedef struct _SEP_AUDIT_POLICY 112 | { 113 | union 114 | { 115 | SEP_AUDIT_POLICY_CATEGORIES PolicyElements; 116 | SEP_AUDIT_POLICY_OVERLAY PolicyOverlay; 117 | ULONGLONG Overlay; 118 | }; 119 | } SEP_AUDIT_POLICY, *PSEP_AUDIT_POLICY; 120 | 121 | typedef struct _SE_AUDIT_PROCESS_CREATION_INFO 122 | { 123 | POBJECT_NAME_INFORMATION ImageFileName; 124 | } SE_AUDIT_PROCESS_CREATION_INFO, *PSE_AUDIT_PROCESS_CREATION_INFO; 125 | 126 | // 127 | // Token and auxiliary data 128 | // 129 | typedef struct _TOKEN 130 | { 131 | TOKEN_SOURCE TokenSource; /* 0x00 */ 132 | LUID TokenId; /* 0x10 */ 133 | LUID AuthenticationId; /* 0x18 */ 134 | LUID ParentTokenId; /* 0x20 */ 135 | LARGE_INTEGER ExpirationTime; /* 0x28 */ 136 | struct _ERESOURCE *TokenLock; /* 0x30 */ 137 | SEP_AUDIT_POLICY AuditPolicy; /* 0x38 */ 138 | LUID ModifiedId; /* 0x40 */ 139 | ULONG SessionId; /* 0x48 */ 140 | ULONG UserAndGroupCount; /* 0x4C */ 141 | ULONG RestrictedSidCount; /* 0x50 */ 142 | ULONG PrivilegeCount; /* 0x54 */ 143 | ULONG VariableLength; /* 0x58 */ 144 | ULONG DynamicCharged; /* 0x5C */ 145 | ULONG DynamicAvailable; /* 0x60 */ 146 | ULONG DefaultOwnerIndex; /* 0x64 */ 147 | PSID_AND_ATTRIBUTES UserAndGroups; /* 0x68 */ 148 | PSID_AND_ATTRIBUTES RestrictedSids; /* 0x6C */ 149 | PSID PrimaryGroup; /* 0x70 */ 150 | PLUID_AND_ATTRIBUTES Privileges; /* 0x74 */ 151 | PULONG DynamicPart; /* 0x78 */ 152 | PACL DefaultDacl; /* 0x7C */ 153 | TOKEN_TYPE TokenType; /* 0x80 */ 154 | SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x84 */ 155 | ULONG TokenFlags; /* 0x88 */ 156 | BOOLEAN TokenInUse; /* 0x8C */ 157 | PVOID ProxyData; /* 0x90 */ 158 | PVOID AuditData; /* 0x94 */ 159 | LUID OriginatingLogonSession; /* 0x98 */ 160 | ULONG VariablePart; /* 0xA0 */ 161 | } TOKEN, *PTOKEN; 162 | 163 | typedef struct _AUX_DATA 164 | { 165 | PPRIVILEGE_SET PrivilegeSet; 166 | GENERIC_MAPPING GenericMapping; 167 | ULONG Reserved; 168 | } AUX_DATA, *PAUX_DATA; 169 | 170 | // 171 | // External SRM Data 172 | // 173 | extern PACL SePublicDefaultDacl; 174 | extern PACL SeSystemDefaultDacl; 175 | 176 | #endif 177 | #endif 178 | -------------------------------------------------------------------------------- /ndk-1.0/umfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | umfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for Native DLL (ntdll) APIs exclusive to User Mode. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _UMFUNCS_H 20 | #define _UMFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | // 29 | // Don't force inclusion of csrss header, leave this opaque. 30 | // 31 | struct _CSR_API_MESSAGE; 32 | struct _CSR_CAPTURE_BUFFER; 33 | 34 | // 35 | // CSR Functions 36 | // 37 | PVOID 38 | NTAPI 39 | CsrAllocateCaptureBuffer( 40 | ULONG ArgumentCount, 41 | ULONG BufferSize 42 | ); 43 | 44 | ULONG 45 | NTAPI 46 | CsrAllocateMessagePointer( 47 | struct _CSR_CAPTURE_BUFFER *CaptureBuffer, 48 | ULONG MessageLength, 49 | PVOID *CaptureData 50 | ); 51 | 52 | VOID 53 | NTAPI 54 | CsrCaptureMessageBuffer( 55 | struct _CSR_CAPTURE_BUFFER *CaptureBuffer, 56 | PVOID MessageString, 57 | ULONG StringLength, 58 | PVOID *CapturedData 59 | ); 60 | 61 | NTSTATUS 62 | NTAPI 63 | CsrClientConnectToServer( 64 | PWSTR ObjectDirectory, 65 | ULONG ServerId, 66 | PVOID ConnectionInfo, 67 | PULONG ConnectionInfoSize, 68 | PBOOLEAN ServerToServerCall 69 | ); 70 | 71 | NTSTATUS 72 | NTAPI 73 | CsrClientCallServer( 74 | struct _CSR_API_MESSAGE *Request, 75 | struct _CSR_CAPTURE_BUFFER *CaptureBuffer OPTIONAL, 76 | ULONG ApiNumber, 77 | ULONG RequestLength 78 | ); 79 | 80 | NTSTATUS 81 | NTAPI 82 | CsrIdentifyAlertableThread( 83 | VOID 84 | ); 85 | 86 | VOID 87 | NTAPI 88 | CsrFreeCaptureBuffer( 89 | struct _CSR_CAPTURE_BUFFER *CaptureBuffer 90 | ); 91 | 92 | HANDLE 93 | NTAPI 94 | CsrGetProcessId( 95 | VOID 96 | ); 97 | 98 | NTSTATUS 99 | NTAPI 100 | CsrNewThread(VOID); 101 | 102 | NTSTATUS 103 | NTAPI 104 | CsrSetPriorityClass( 105 | HANDLE Process, 106 | PULONG PriorityClass 107 | ); 108 | 109 | VOID 110 | NTAPI 111 | CsrProbeForRead( 112 | IN PVOID Address, 113 | IN ULONG Length, 114 | IN ULONG Alignment 115 | ); 116 | 117 | VOID 118 | NTAPI 119 | CsrProbeForWrite( 120 | IN PVOID Address, 121 | IN ULONG Length, 122 | IN ULONG Alignment 123 | ); 124 | 125 | // 126 | // Debug Functions 127 | // 128 | NTSYSAPI 129 | VOID 130 | NTAPI 131 | DbgBreakPointWithStatus( 132 | IN ULONG Status 133 | ); 134 | 135 | NTSTATUS 136 | NTAPI 137 | DbgUiConnectToDbg( 138 | VOID 139 | ); 140 | 141 | NTSTATUS 142 | NTAPI 143 | DbgUiContinue( 144 | IN PCLIENT_ID ClientId, 145 | IN NTSTATUS ContinueStatus 146 | ); 147 | 148 | NTSTATUS 149 | NTAPI 150 | DbgUiDebugActiveProcess( 151 | IN HANDLE Process 152 | ); 153 | 154 | NTSTATUS 155 | NTAPI 156 | DbgUiStopDebugging( 157 | IN HANDLE Process 158 | ); 159 | 160 | NTSTATUS 161 | NTAPI 162 | DbgUiWaitStateChange( 163 | IN PDBGUI_WAIT_STATE_CHANGE DbgUiWaitStateCange, 164 | IN PLARGE_INTEGER TimeOut 165 | ); 166 | 167 | NTSTATUS 168 | NTAPI 169 | DbgUiConvertStateChangeStructure( 170 | IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange, 171 | IN PVOID DebugEvent 172 | ); 173 | 174 | VOID 175 | NTAPI 176 | DbgUiRemoteBreakin( 177 | VOID 178 | ); 179 | 180 | NTSTATUS 181 | NTAPI 182 | DbgUiIssueRemoteBreakin( 183 | IN HANDLE Process 184 | ); 185 | 186 | HANDLE 187 | NTAPI 188 | DbgUiGetThreadDebugObject( 189 | VOID 190 | ); 191 | 192 | // 193 | // Loader Functions 194 | // 195 | 196 | NTSTATUS 197 | NTAPI 198 | LdrAddRefDll( 199 | IN ULONG Flags, 200 | IN PVOID BaseAddress 201 | ); 202 | 203 | NTSTATUS 204 | NTAPI 205 | LdrDisableThreadCalloutsForDll( 206 | IN PVOID BaseAddress 207 | ); 208 | 209 | NTSTATUS 210 | NTAPI 211 | LdrGetDllHandle( 212 | IN PWSTR DllPath OPTIONAL, 213 | IN PULONG DllCharacteristics, 214 | IN PUNICODE_STRING DllName, 215 | OUT PVOID *DllHandle 216 | ); 217 | 218 | NTSTATUS 219 | NTAPI 220 | LdrFindEntryForAddress( 221 | IN PVOID Address, 222 | OUT PLDR_DATA_TABLE_ENTRY *Module 223 | ); 224 | 225 | NTSTATUS 226 | NTAPI 227 | LdrGetProcedureAddress( 228 | IN PVOID BaseAddress, 229 | IN PANSI_STRING Name, 230 | IN ULONG Ordinal, 231 | OUT PVOID *ProcedureAddress 232 | ); 233 | 234 | VOID 235 | NTAPI 236 | LdrInitializeThunk( 237 | ULONG Unknown1, 238 | ULONG Unknown2, 239 | ULONG Unknown3, 240 | ULONG Unknown4 241 | ); 242 | 243 | NTSTATUS 244 | NTAPI 245 | LdrLoadDll( 246 | IN PWSTR SearchPath OPTIONAL, 247 | IN PULONG LoadFlags OPTIONAL, 248 | IN PUNICODE_STRING Name, 249 | OUT PVOID *BaseAddress OPTIONAL 250 | ); 251 | 252 | PIMAGE_BASE_RELOCATION 253 | NTAPI 254 | LdrProcessRelocationBlock( 255 | IN ULONG_PTR Address, 256 | IN ULONG Count, 257 | IN PUSHORT TypeOffset, 258 | IN LONG_PTR Delta 259 | ); 260 | 261 | NTSTATUS 262 | NTAPI 263 | LdrQueryImageFileExecutionOptions( 264 | IN PUNICODE_STRING SubKey, 265 | IN PCWSTR ValueName, 266 | IN ULONG ValueSize, 267 | OUT PVOID Buffer, 268 | IN ULONG BufferSize, 269 | OUT PULONG RetunedLength OPTIONAL 270 | ); 271 | 272 | NTSTATUS 273 | NTAPI 274 | LdrQueryProcessModuleInformation( 275 | IN PRTL_PROCESS_MODULES ModuleInformation OPTIONAL, 276 | IN ULONG Size OPTIONAL, 277 | OUT PULONG ReturnedSize 278 | ); 279 | 280 | NTSTATUS 281 | NTAPI 282 | LdrShutdownProcess( 283 | VOID 284 | ); 285 | 286 | NTSTATUS 287 | NTAPI 288 | LdrShutdownThread( 289 | VOID 290 | ); 291 | 292 | NTSTATUS 293 | NTAPI 294 | LdrUnloadDll( 295 | IN PVOID BaseAddress 296 | ); 297 | 298 | NTSTATUS 299 | NTAPI 300 | LdrVerifyImageMatchesChecksum( 301 | IN HANDLE FileHandle, 302 | ULONG Unknown1, 303 | ULONG Unknown2, 304 | ULONG Unknown3 305 | ); 306 | 307 | #endif 308 | -------------------------------------------------------------------------------- /ndk-1.0/umtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | umtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the basic native types. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #if !defined(_NTDEF_) && !defined(_NTDEF_H) 20 | #define _NTDEF_ 21 | #define _NTDEF_H 22 | 23 | // 24 | // NDK Applications must use Unicode 25 | // 26 | #ifndef UNICODE 27 | #define UNICODE 28 | #endif 29 | 30 | // 31 | // Don't use the SDK status values 32 | // 33 | #ifndef WIN32_NO_STATUS 34 | #define WIN32_NO_STATUS 35 | #endif 36 | 37 | // 38 | // Let the NDK know we're in Application Mode 39 | // 40 | #define NTOS_MODE_USER 41 | 42 | // 43 | // Dependencies 44 | // 45 | #include 46 | #undef WIN32_NO_STATUS 47 | #include 48 | #include 49 | #include 50 | 51 | // 52 | // Compiler Definitions 53 | // 54 | #ifndef _MANAGED 55 | #if defined(_M_IX86) 56 | #define FASTCALL _fastcall 57 | #else 58 | #define FASTCALL 59 | #endif 60 | #else 61 | #define FASTCALL NTAPI 62 | #endif 63 | 64 | #if !defined(_M_CEE_PURE) 65 | #define NTAPI_INLINE NTAPI 66 | #else 67 | #define NTAPI_INLINE 68 | #endif 69 | 70 | // 71 | // Alignment Macros 72 | // 73 | #define ALIGN_DOWN(s, t) \ 74 | ((ULONG)(s) & ~(sizeof(t) - 1)) 75 | 76 | #define ALIGN_UP(s, t) \ 77 | (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t)) 78 | 79 | #define ALIGN_DOWN_POINTER(p, t) \ 80 | ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1))) 81 | 82 | #define ALIGN_UP_POINTER(p, t) \ 83 | (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t)) 84 | 85 | // 86 | // Native API Return Value Macros 87 | // 88 | #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) 89 | #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1) 90 | #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2) 91 | #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3) 92 | 93 | // 94 | // Limits 95 | // 96 | #define MINCHAR 0x80 97 | #define MAXCHAR 0x7f 98 | #define MINSHORT 0x8000 99 | #define MAXSHORT 0x7fff 100 | #define MINLONG 0x80000000 101 | #define MAXLONG 0x7fffffff 102 | #define MAXUCHAR 0xff 103 | #define MAXUSHORT 0xffff 104 | #define MAXULONG 0xffffffff 105 | 106 | // 107 | // CSR Macros 108 | // 109 | #define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m) 110 | #define CSR_API_ID_FROM_OPCODE(n) ((ULONG)((USHORT)(n))) 111 | #define CSR_SERVER_ID_FROM_OPCODE(n) (ULONG)((n) >> 16) 112 | 113 | // 114 | // Basic Types that aren't defined in User-Mode Headers 115 | // 116 | typedef CONST int CINT; 117 | typedef CONST char *PCSZ; 118 | typedef ULONG CLONG; 119 | typedef short CSHORT; 120 | typedef CSHORT *PCSHORT; 121 | typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; 122 | typedef LONG KPRIORITY; 123 | typedef LONG NTSTATUS, *PNTSTATUS; 124 | 125 | // 126 | // Basic NT Types 127 | // 128 | #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H) && !defined(_NTSECAPI_) 129 | 130 | typedef struct _UNICODE_STRING 131 | { 132 | USHORT Length; 133 | USHORT MaximumLength; 134 | PWSTR Buffer; 135 | } UNICODE_STRING, *PUNICODE_STRING; 136 | 137 | typedef struct _STRING 138 | { 139 | USHORT Length; 140 | USHORT MaximumLength; 141 | PCHAR Buffer; 142 | } STRING, *PSTRING; 143 | 144 | typedef struct _CSTRING 145 | { 146 | USHORT Length; 147 | USHORT MaximumLength; 148 | CONST CHAR *Buffer; 149 | } CSTRING, *PCSTRING; 150 | 151 | #endif 152 | 153 | typedef struct _OBJECT_ATTRIBUTES 154 | { 155 | ULONG Length; 156 | HANDLE RootDirectory; 157 | PUNICODE_STRING ObjectName; 158 | ULONG Attributes; 159 | PVOID SecurityDescriptor; 160 | PVOID SecurityQualityOfService; 161 | } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; 162 | 163 | // 164 | // ClientID Structure 165 | // 166 | typedef struct _CLIENT_ID 167 | { 168 | HANDLE UniqueProcess; 169 | HANDLE UniqueThread; 170 | } CLIENT_ID, *PCLIENT_ID; 171 | 172 | typedef const UNICODE_STRING* PCUNICODE_STRING; 173 | typedef STRING ANSI_STRING; 174 | typedef PSTRING PANSI_STRING; 175 | typedef STRING OEM_STRING; 176 | typedef PSTRING POEM_STRING; 177 | typedef CONST STRING* PCOEM_STRING; 178 | typedef STRING CANSI_STRING; 179 | typedef PSTRING PCANSI_STRING; 180 | 181 | #endif 182 | -------------------------------------------------------------------------------- /ndk/README.md: -------------------------------------------------------------------------------- 1 | # win7-x64-ndk 2 | Native Development Kit for Vista 64bit And Later, by me, Based on NDK Headers 1.0, by Alex Ionescu 3 | -------------------------------------------------------------------------------- /ndk/amd64/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (AMD64) 8 | 9 | Abstract: 10 | 11 | AMD64 Type definitions for the Memory Manager 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | Timo Kreuzer (timo.kreuzer@reactos.com) 15-Aug-2008 17 | 18 | --*/ 19 | 20 | #ifndef _AMD64_MMTYPES_H 21 | #define _AMD64_MMTYPES_H 22 | 23 | #ifdef __cplusplus 24 | extern "C" { 25 | #endif 26 | 27 | // 28 | // Dependencies 29 | // 30 | 31 | // 32 | // Page-related Macros 33 | // 34 | #define PAGE_SIZE 0x1000 35 | #define PAGE_SHIFT 12L 36 | #define MM_ALLOCATION_GRANULARITY 0x10000 37 | #define MM_ALLOCATION_GRANULARITY_SHIFT 16L 38 | #define MM_PAGE_FRAME_NUMBER_SIZE 52 39 | 40 | // 41 | // User space range limit 42 | // 43 | #define MI_HIGHEST_USER_ADDRESS (PVOID)0x000007FFFFFEFFFFULL 44 | 45 | // 46 | // Address of the shared user page 47 | // 48 | #define MM_SHARED_USER_DATA_VA 0x7FFE0000ULL 49 | 50 | // 51 | // Sanity checks for Paging Macros 52 | // 53 | #ifdef C_ASSERT 54 | C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT)); 55 | C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT)); 56 | C_ASSERT(MM_ALLOCATION_GRANULARITY && 57 | !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1))); 58 | C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE); 59 | #endif 60 | 61 | // 62 | // Page Table Entry Definitions 63 | // 64 | typedef struct _HARDWARE_PTE 65 | { 66 | ULONG64 Valid:1; 67 | ULONG64 Write:1; 68 | ULONG64 Owner:1; 69 | ULONG64 WriteThrough:1; 70 | ULONG64 CacheDisable:1; 71 | ULONG64 Accessed:1; 72 | ULONG64 Dirty:1; 73 | ULONG64 LargePage:1; 74 | ULONG64 Global:1; 75 | ULONG64 CopyOnWrite:1; 76 | ULONG64 Prototype:1; 77 | ULONG64 reserved0:1; 78 | ULONG64 PageFrameNumber:28; 79 | ULONG64 reserved1:12; 80 | ULONG64 SoftwareWsIndex:11; 81 | ULONG64 NoExecute:1; 82 | } HARDWARE_PTE, *PHARDWARE_PTE; 83 | 84 | typedef struct _MMPTE_SOFTWARE 85 | { 86 | ULONG64 Valid:1; 87 | ULONG64 PageFileLow:4; 88 | ULONG64 Protection:5; 89 | ULONG64 Prototype:1; 90 | ULONG64 Transition:1; 91 | ULONG64 UsedPageTableEntries:10; 92 | ULONG64 Reserved:10; 93 | ULONG64 PageFileHigh:32; 94 | } MMPTE_SOFTWARE, *PMMPTE_SOFTWARE; 95 | 96 | typedef struct _MMPTE_TRANSITION 97 | { 98 | ULONG64 Valid:1; 99 | ULONG64 Write:1; 100 | ULONG64 Owner:1; 101 | ULONG64 WriteThrough:1; 102 | ULONG64 CacheDisable:1; 103 | ULONG64 Protection:5; 104 | ULONG64 Prototype:1; 105 | ULONG64 Transition:1; 106 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 107 | ULONG64 PageFrameNumber:36; 108 | ULONG64 Unused:16; 109 | #else 110 | ULONG64 PageFrameNumber:28; 111 | ULONG64 Unused:24; 112 | #endif 113 | } MMPTE_TRANSITION; 114 | 115 | typedef struct _MMPTE_PROTOTYPE 116 | { 117 | ULONG64 Valid:1; 118 | ULONG64 Unused0:7; 119 | ULONG64 ReadOnly:1; 120 | ULONG64 Unused1:1; 121 | ULONG64 Prototype:1; 122 | ULONG64 Protection:5; 123 | LONG64 ProtoAddress:48; 124 | } MMPTE_PROTOTYPE; 125 | 126 | typedef struct _MMPTE_SUBSECTION 127 | { 128 | ULONG64 Valid:1; 129 | ULONG64 Unused0:4; 130 | ULONG64 Protection:5; 131 | ULONG64 Prototype:1; 132 | ULONG64 Unused1:5; 133 | LONG64 SubsectionAddress:48; 134 | } MMPTE_SUBSECTION; 135 | 136 | typedef struct _MMPTE_LIST 137 | { 138 | ULONG64 Valid:1; 139 | ULONG64 OneEntry:1; 140 | ULONG64 filler0:3; 141 | ULONG64 Protection:5; 142 | ULONG64 Prototype:1; 143 | ULONG64 Transition:1; 144 | ULONG64 filler1:20; 145 | ULONG64 NextEntry:32; 146 | } MMPTE_LIST; 147 | 148 | typedef struct _MMPTE_HARDWARE 149 | { 150 | ULONG64 Valid:1; 151 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 152 | ULONG64 Dirty1:1; 153 | #else 154 | #ifdef CONFIG_SMP 155 | ULONG64 Writable:1; 156 | #else 157 | ULONG64 Write:1; 158 | #endif 159 | #endif 160 | ULONG64 Owner:1; 161 | ULONG64 WriteThrough:1; 162 | ULONG64 CacheDisable:1; 163 | ULONG64 Accessed:1; 164 | ULONG64 Dirty:1; 165 | ULONG64 LargePage:1; 166 | ULONG64 Global:1; 167 | ULONG64 CopyOnWrite:1; 168 | ULONG64 Prototype:1; 169 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 170 | ULONG64 Write:1; 171 | ULONG64 PageFrameNumber:36; 172 | ULONG64 reserved1:4; 173 | #else 174 | #ifdef CONFIG_SMP 175 | ULONG64 Write:1; 176 | #else 177 | ULONG64 reserved0:1; 178 | #endif 179 | ULONG64 PageFrameNumber:28; 180 | ULONG64 reserved1:12; 181 | #endif 182 | ULONG64 SoftwareWsIndex:11; 183 | ULONG64 NoExecute:1; 184 | } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 185 | 186 | typedef struct _MMPTE_HARDWARE_LARGEPAGE 187 | { 188 | ULONG64 Valid:1; 189 | ULONG64 Write:1; 190 | ULONG64 Owner:1; 191 | ULONG64 WriteThrough:1; 192 | ULONG64 CacheDisable:1; 193 | ULONG64 Accessed:1; 194 | ULONG64 Dirty:1; 195 | ULONG64 LargePage:1; 196 | ULONG64 Global:1; 197 | ULONG64 CopyOnWrite:1; 198 | ULONG64 Prototype:1; 199 | ULONG64 reserved0:1; 200 | ULONG64 PAT:1; 201 | ULONG64 reserved1:8; 202 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 203 | ULONG64 PageFrameNumber:27; 204 | ULONG64 reserved2:16; 205 | #else 206 | ULONG64 PageFrameNumber:19; 207 | ULONG64 reserved2:24; 208 | #endif 209 | } MMPTE_HARDWARE_LARGEPAGE, *PMMPTE_HARDWARE_LARGEPAGE; 210 | 211 | typedef struct _MMPTE 212 | { 213 | union 214 | { 215 | ULONG_PTR Long; 216 | HARDWARE_PTE Flush; 217 | MMPTE_HARDWARE Hard; 218 | MMPTE_PROTOTYPE Proto; 219 | MMPTE_SOFTWARE Soft; 220 | MMPTE_TRANSITION Trans; 221 | MMPTE_SUBSECTION Subsect; 222 | MMPTE_LIST List; 223 | } u; 224 | } MMPTE, *PMMPTE, 225 | MMPDE, *PMMPDE, 226 | MMPPE, *PMMPPE, 227 | MMPXE, *PMMPXE; 228 | 229 | #ifdef __cplusplus 230 | }; // extern "C" 231 | #endif 232 | 233 | #endif // !AMD64_MMTYPES_H 234 | -------------------------------------------------------------------------------- /ndk/arch/ketypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ketypes.h (ARCH) 8 | 9 | Abstract: 10 | 11 | Portability file to choose the correct Architecture-specific file. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _ARCH_KETYPES_H 20 | #define _ARCH_KETYPES_H 21 | 22 | // 23 | // Include the right file for this architecture. 24 | // 25 | #ifdef _M_IX86 26 | #include 27 | #elif defined(_M_AMD64) 28 | #include 29 | #elif defined(_M_PPC) 30 | #include 31 | #elif defined(_M_ARM) 32 | #include 33 | #else 34 | #error "Unknown processor" 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /ndk/arch/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (ARCH) 8 | 9 | Abstract: 10 | 11 | Portability file to choose the correct Architecture-specific file. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _ARCH_MMTYPES_H 20 | #define _ARCH_MMTYPES_H 21 | 22 | // 23 | // Include the right file for this architecture. 24 | // 25 | #if defined(_M_IX86) 26 | #include 27 | #elif defined(_M_PPC) 28 | #include 29 | #elif defined(_M_ARM) 30 | #include 31 | #elif defined(_M_AMD64) 32 | #include 33 | #else 34 | #error "Unknown processor" 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /ndk/arm/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (ARM) 8 | 9 | Abstract: 10 | 11 | ARM Type definitions for the Memory Manager 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _ARM_MMTYPES_H 20 | #define _ARM_MMTYPES_H 21 | 22 | #ifdef __cplusplus 23 | extern "C" { 24 | #endif 25 | 26 | // 27 | // Dependencies 28 | // 29 | 30 | // 31 | // Page-related Macros 32 | // 33 | #ifndef PAGE_SIZE 34 | #define PAGE_SIZE 0x1000 35 | #endif 36 | #define PAGE_SHIFT 12L 37 | #define MM_ALLOCATION_GRANULARITY 0x10000 38 | #define MM_ALLOCATION_GRANULARITY_SHIFT 16L 39 | #define MM_PAGE_FRAME_NUMBER_SIZE 20 40 | 41 | // 42 | // User space range limit 43 | // 44 | #define MI_HIGHEST_USER_ADDRESS (PVOID)0x7FFEFFFF 45 | 46 | // 47 | // Address of the shared user page 48 | // 49 | #define MM_SHARED_USER_DATA_VA 0x7FFE0000 50 | 51 | // 52 | // Sanity checks for Paging Macros 53 | // 54 | #ifdef C_ASSERT 55 | C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT)); 56 | C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT)); 57 | C_ASSERT(MM_ALLOCATION_GRANULARITY && 58 | !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1))); 59 | C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE); 60 | #endif 61 | 62 | // 63 | // Page Table Entry Definitions 64 | // 65 | typedef struct _HARDWARE_PDE_ARMV6 66 | { 67 | ULONG Valid:1; // Only for small pages 68 | ULONG LargePage:1; // Note, if large then Valid = 0 69 | ULONG Buffered:1; 70 | ULONG Cached:1; 71 | ULONG NoExecute:1; 72 | ULONG Domain:4; 73 | ULONG Ecc:1; 74 | ULONG PageFrameNumber:22; 75 | } HARDWARE_PDE_ARMV6, *PHARDWARE_PDE_ARMV6; 76 | 77 | typedef struct _HARDWARE_LARGE_PTE_ARMV6 78 | { 79 | ULONG Valid:1; // Only for small pages 80 | ULONG LargePage:1; // Note, if large then Valid = 0 81 | ULONG Buffered:1; 82 | ULONG Cached:1; 83 | ULONG NoExecute:1; 84 | ULONG Domain:4; 85 | ULONG Ecc:1; 86 | ULONG Sbo:1; // ULONG Accessed:1;? 87 | ULONG Owner:1; 88 | ULONG CacheAttributes:3; 89 | ULONG ReadOnly:1; 90 | ULONG Shared:1; 91 | ULONG NonGlobal:1; 92 | ULONG SuperLagePage:1; 93 | ULONG Reserved:1; 94 | ULONG PageFrameNumber:12; 95 | } HARDWARE_LARGE_PTE_ARMV6, *PHARDWARE_LARGE_PTE_ARMV6; 96 | 97 | typedef struct _HARDWARE_PTE_ARMV6 98 | { 99 | ULONG NoExecute:1; 100 | ULONG Valid:1; 101 | ULONG Buffered:1; 102 | ULONG Cached:1; 103 | ULONG Sbo:1; // ULONG Accessed:1;? 104 | ULONG Owner:1; 105 | ULONG CacheAttributes:3; 106 | ULONG ReadOnly:1; 107 | ULONG Shared:1; 108 | ULONG NonGlobal:1; 109 | ULONG PageFrameNumber:20; 110 | } HARDWARE_PTE_ARMV6, *PHARDWARE_PTE_ARMV6; 111 | 112 | C_ASSERT(sizeof(HARDWARE_PDE_ARMV6) == sizeof(ULONG)); 113 | C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6) == sizeof(ULONG)); 114 | C_ASSERT(sizeof(HARDWARE_PTE_ARMV6) == sizeof(ULONG)); 115 | 116 | typedef struct _MMPTE_SOFTWARE 117 | { 118 | ULONG Valid:2; 119 | ULONG PageFileLow:4; 120 | ULONG Protection:4; 121 | ULONG Prototype:1; 122 | ULONG Transition:1; 123 | ULONG PageFileHigh:20; 124 | } MMPTE_SOFTWARE; 125 | 126 | typedef struct _MMPTE_TRANSITION 127 | { 128 | ULONG Valid:2; 129 | ULONG Buffered:1; 130 | ULONG Cached:1; 131 | ULONG Owner:1; 132 | ULONG Protection:4; 133 | ULONG ReadOnly:1; 134 | ULONG Prototype:1; 135 | ULONG Transition:1; 136 | ULONG PageFrameNumber:20; 137 | } MMPTE_TRANSITION; 138 | 139 | typedef struct _MMPTE_PROTOTYPE 140 | { 141 | ULONG Valid:2; 142 | ULONG ProtoAddressLow:7; 143 | ULONG ReadOnly:1; 144 | ULONG Prototype:1; 145 | ULONG ProtoAddressHigh:21; 146 | } MMPTE_PROTOTYPE; 147 | 148 | typedef struct _MMPTE_SUBSECTION 149 | { 150 | ULONG Valid:2; 151 | ULONG SubsectionAddressLow:4; 152 | ULONG Protection:4; 153 | ULONG Prototype:1; 154 | ULONG SubsectionAddressHigh:20; 155 | ULONG WhichPool:1; 156 | } MMPTE_SUBSECTION; 157 | 158 | typedef struct _MMPTE_LIST 159 | { 160 | ULONG Valid:2; 161 | ULONG OneEntry:1; 162 | ULONG filler0:8; 163 | ULONG NextEntry:20; 164 | ULONG Prototype:1; 165 | } MMPTE_LIST; 166 | 167 | typedef struct _MMPTE_HARDWARE 168 | { 169 | ULONG NoExecute:1; 170 | ULONG Valid:1; 171 | ULONG Buffered:1; 172 | ULONG Cached:1; 173 | ULONG Sbo:1; 174 | ULONG Owner:1; 175 | ULONG CacheAttributes:3; 176 | ULONG ReadOnly:1; 177 | ULONG Prototype:1; 178 | ULONG NonGlobal:1; 179 | ULONG PageFrameNumber:20; 180 | } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 181 | 182 | 183 | // 184 | // Use the right PTE structure 185 | // 186 | #define HARDWARE_PTE HARDWARE_PTE_ARMV6 187 | #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6 188 | 189 | typedef struct _MMPTE 190 | { 191 | union 192 | { 193 | ULONG_PTR Long; 194 | HARDWARE_PTE Flush; 195 | MMPTE_HARDWARE Hard; 196 | MMPTE_PROTOTYPE Proto; 197 | MMPTE_SOFTWARE Soft; 198 | MMPTE_TRANSITION Trans; 199 | MMPTE_SUBSECTION Subsect; 200 | MMPTE_LIST List; 201 | } u; 202 | } MMPTE, *PMMPTE; 203 | 204 | typedef union _MMPDE_HARDWARE 205 | { 206 | ULONG Valid:1; 207 | ULONG LargePage:1; 208 | ULONG Buffered:1; 209 | ULONG Cached:1; 210 | ULONG NoExecute:1; 211 | ULONG Domain:4; 212 | ULONG Ecc:1; 213 | ULONG PageFrameNumber:22; 214 | } MMPDE_HARDWARE, *PMMPDE_HARDWARE; 215 | 216 | typedef struct _MMPDE 217 | { 218 | union 219 | { 220 | MMPDE_HARDWARE Hard; 221 | ULONG Long; 222 | } u; 223 | } MMPDE, *PMMPDE; 224 | 225 | #ifdef __cplusplus 226 | }; // extern "C" 227 | #endif 228 | 229 | #endif 230 | -------------------------------------------------------------------------------- /ndk/asm.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | asm.h 8 | 9 | Abstract: 10 | 11 | Portability header to choose the correct Architecture-specific header. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #if defined(_M_IX86) 20 | #include 21 | #elif defined(_M_AMD64) 22 | #include 23 | #elif defined(_M_ARM) || defined(_M_PPC) 24 | // 25 | // ARM and PPC ports don't use asm.h 26 | // 27 | #else 28 | #error Unsupported Architecture 29 | #endif 30 | -------------------------------------------------------------------------------- /ndk/cctypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | cctypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Cache Controller. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _CCTYPES_H 20 | #define _CCTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | #ifndef NTOS_MODE_USER 28 | 29 | // 30 | // Kernel Exported CcData 31 | // 32 | extern ULONG NTSYSAPI CcFastReadNotPossible; 33 | extern ULONG NTSYSAPI CcFastReadWait; 34 | extern ULONG NTSYSAPI CcFastReadResourceMiss; 35 | extern ULONG NTSYSAPI CcFastReadNoWait; 36 | extern ULONG NTSYSAPI CcFastMdlReadNotPossible; 37 | 38 | // 39 | // Virtual Address Control BLock 40 | // 41 | typedef struct _VACB 42 | { 43 | PVOID BaseAddress; 44 | struct _SHARED_CACHE_MAP *SharedCacheMap; 45 | union 46 | { 47 | LARGE_INTEGER FileOffset; 48 | USHORT ActiveCount; 49 | } Overlay; 50 | LIST_ENTRY LruList; 51 | } VACB, *PVACB; 52 | 53 | // 54 | // Private Cache Map Structure and Flags 55 | // 56 | typedef struct _PRIVATE_CACHE_MAP_FLAGS 57 | { 58 | ULONG DontUse:16; 59 | ULONG ReadAheadActive:1; 60 | ULONG ReadAheadEnabled:1; 61 | ULONG Available:14; 62 | } PRIVATE_CACHE_MAP_FLAGS; 63 | 64 | typedef struct _PRIVATE_CACHE_MAP 65 | { 66 | union 67 | { 68 | CSHORT NodeTypeCode; 69 | PRIVATE_CACHE_MAP_FLAGS Flags; 70 | ULONG UlongFlags; 71 | }; 72 | ULONG ReadAheadMask; 73 | PFILE_OBJECT FileObject; 74 | LARGE_INTEGER FileOffset1; 75 | LARGE_INTEGER BeyondLastByte1; 76 | LARGE_INTEGER FileOffset2; 77 | LARGE_INTEGER BeyondLastByte2; 78 | LARGE_INTEGER ReadAheadOffset[2]; 79 | ULONG ReadAheadLength[2]; 80 | KSPIN_LOCK ReadAheadSpinLock; 81 | LIST_ENTRY PrivateLinks; 82 | } PRIVATE_CACHE_MAP, *PPRIVATE_CACHE_MAP; 83 | 84 | typedef struct _BITMAP_RANGE 85 | { 86 | LIST_ENTRY Links; 87 | LONGLONG BasePage; 88 | ULONG FirstDirtyPage; 89 | ULONG LastDirtyPage; 90 | ULONG DirtyPages; 91 | PULONG Bitmap; 92 | } BITMAP_RANGE, *PBITMAP_RANGE; 93 | 94 | typedef struct _MBCB 95 | { 96 | CSHORT NodeTypeCode; 97 | CSHORT NodeIsInZone; 98 | ULONG PagesToWrite; 99 | ULONG DirtyPages; 100 | ULONG Reserved; 101 | LIST_ENTRY BitmapRanges; 102 | LONGLONG ResumeWritePage; 103 | BITMAP_RANGE BitmapRange1; 104 | BITMAP_RANGE BitmapRange2; 105 | BITMAP_RANGE BitmapRange3; 106 | } MBCB, *PMBCB; 107 | 108 | #ifdef _NTIFS_INCLUDED_ 109 | 110 | // 111 | // Shared Cache Map 112 | // 113 | typedef struct _SHARED_CACHE_MAP 114 | { 115 | SHORT NodeTypeCode; 116 | SHORT NodeByteSize; 117 | ULONG OpenCount; 118 | LARGE_INTEGER FileSize; 119 | LIST_ENTRY BcbList; 120 | LARGE_INTEGER SectionSize; 121 | LARGE_INTEGER ValidDataLength; 122 | LARGE_INTEGER ValidDataGoal; 123 | PVACB InitialVacbs[4]; 124 | PVACB *Vacbs; 125 | PFILE_OBJECT FileObject; 126 | PVACB ActiveVacb; 127 | PVOID NeedToZero; 128 | ULONG ActivePage; 129 | ULONG NeedToZeroPage; 130 | KSPIN_LOCK ActiveVacbSpinLock; 131 | ULONG VacbActiveCount; 132 | ULONG DirtyPages; 133 | LIST_ENTRY SharedCacheMapLinks; 134 | ULONG Flags; 135 | LONG Status; 136 | PMBCB Mbcb; 137 | PVOID Section; 138 | PKEVENT CreateEvent; 139 | PKEVENT WaitOnActiveCount; 140 | ULONG PagesToWrite; 141 | LONGLONG BeyondLastFlush; 142 | PCACHE_MANAGER_CALLBACKS Callbacks; 143 | PVOID LazyWriteContext; 144 | LIST_ENTRY PrivateList; 145 | PVOID LogHandle; 146 | PFLUSH_TO_LSN FlushToLsnRoutine; 147 | ULONG DirtyPageThreshold; 148 | ULONG LazyWritePassCount; 149 | PCACHE_UNINITIALIZE_EVENT UninitializeEvent; 150 | PVACB NeedToZeroVacb; 151 | KSPIN_LOCK BcbSpinLock; 152 | PVOID Reserved; 153 | KEVENT Event; 154 | EX_PUSH_LOCK VacbPushLock; 155 | PRIVATE_CACHE_MAP PrivateCacheMap; 156 | } SHARED_CACHE_MAP, *PSHARED_CACHE_MAP; 157 | 158 | #endif /* _NTIFS_INCLUDED_ */ 159 | #endif /* NTOS_MODE_USER */ 160 | #endif /* _CCTYPES_H */ 161 | 162 | -------------------------------------------------------------------------------- /ndk/dbgkfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | dbgkfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the User Mode Debugging Facility. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _DBGKFUNCS_H 20 | #define _DBGKFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | #include 28 | 29 | // 30 | // Native calls 31 | // 32 | NTSYSCALLAPI 33 | NTSTATUS 34 | NTAPI 35 | NtDebugActiveProcess( 36 | _In_ HANDLE Process, 37 | _In_ HANDLE DebugObject 38 | ); 39 | 40 | NTSYSCALLAPI 41 | NTSTATUS 42 | NTAPI 43 | NtCreateDebugObject( 44 | _Out_ PHANDLE DebugHandle, 45 | _In_ ACCESS_MASK DesiredAccess, 46 | _In_ POBJECT_ATTRIBUTES ObjectAttributes, 47 | _In_ ULONG Flags 48 | ); 49 | 50 | NTSYSCALLAPI 51 | NTSTATUS 52 | NTAPI 53 | NtDebugContinue( 54 | _In_ HANDLE DebugObject, 55 | _In_ PCLIENT_ID AppClientId, 56 | _In_ NTSTATUS ContinueStatus 57 | ); 58 | 59 | NTSYSCALLAPI 60 | NTSTATUS 61 | NTAPI 62 | NtWaitForDebugEvent( 63 | _In_ HANDLE DebugObject, 64 | _In_ BOOLEAN Alertable, 65 | _In_opt_ PLARGE_INTEGER Timeout, 66 | _Out_ PDBGUI_WAIT_STATE_CHANGE StateChange 67 | ); 68 | 69 | NTSYSCALLAPI 70 | NTSTATUS 71 | NTAPI 72 | NtRemoveProcessDebug( 73 | _In_ HANDLE Process, 74 | _In_ HANDLE DebugObject 75 | ); 76 | 77 | NTSYSCALLAPI 78 | NTSTATUS 79 | NTAPI 80 | NtSetInformationDebugObject( 81 | _In_ HANDLE DebugObject, 82 | _In_ DEBUGOBJECTINFOCLASS InformationClass, 83 | _In_ PVOID Information, 84 | _In_ ULONG InformationLength, 85 | _Out_opt_ PULONG ReturnLength 86 | ); 87 | 88 | NTSYSAPI 89 | NTSTATUS 90 | NTAPI 91 | ZwDebugActiveProcess( 92 | _In_ HANDLE Process, 93 | _In_ HANDLE DebugObject 94 | ); 95 | 96 | NTSYSAPI 97 | NTSTATUS 98 | NTAPI 99 | ZwCreateDebugObject( 100 | _Out_ PHANDLE DebugHandle, 101 | _In_ ACCESS_MASK DesiredAccess, 102 | _In_ POBJECT_ATTRIBUTES ObjectAttributes, 103 | _In_ ULONG Flags 104 | ); 105 | 106 | NTSYSAPI 107 | NTSTATUS 108 | NTAPI 109 | ZwDebugContinue( 110 | _In_ HANDLE DebugObject, 111 | _In_ PCLIENT_ID AppClientId, 112 | _In_ NTSTATUS ContinueStatus 113 | ); 114 | 115 | NTSYSAPI 116 | NTSTATUS 117 | NTAPI 118 | ZwRemoveProcessDebug( 119 | _In_ HANDLE Process, 120 | _In_ HANDLE DebugObject 121 | ); 122 | 123 | NTSYSAPI 124 | NTSTATUS 125 | NTAPI 126 | ZwWaitForDebugEvent( 127 | _In_ HANDLE DebugObject, 128 | _In_ BOOLEAN Alertable, 129 | _In_opt_ PLARGE_INTEGER Timeout, 130 | _Out_ PDBGUI_WAIT_STATE_CHANGE StateChange 131 | ); 132 | 133 | NTSYSAPI 134 | NTSTATUS 135 | NTAPI 136 | ZwSetInformationDebugObject( 137 | _In_ HANDLE DebugObject, 138 | _In_ DEBUGOBJECTINFOCLASS InformationClass, 139 | _In_ PVOID Information, 140 | _In_ ULONG InformationLength, 141 | _Out_opt_ PULONG ReturnLength 142 | ); 143 | 144 | typedef struct _DBGOUT_STATIC_STORAGE { 145 | USHORT lineNum; 146 | USHORT currentWchar; 147 | } DBGOUT_STATIC_STORAGE, *PDBGOUT_STATIC_STORAGE; 148 | 149 | #if defined(NTOS_MODE_USER) 150 | #if !defined(BOOTSCR_OUTPUT) 151 | #define ALPHABET_LETTER_COUNT 26 152 | static void myWPrintf(const WCHAR* pFormatString, ...){ 153 | WCHAR szPrintBuf[512]; 154 | WCHAR szValueName[4]; 155 | va_list args; 156 | 157 | ///Get ourselves per-thread static storage for storing the current line number as well as the current 158 | ///output key. As the field is highly undocumented it might not work in the future 159 | ///if Microsoft decides to actually use the field for something other than a neither correctly working 160 | ///nor useful ProcessInstrumentationCallback implementation. 161 | PDBGOUT_STATIC_STORAGE pStaticInfoStorage = (PDBGOUT_STATIC_STORAGE)NtCurrentTeb()->SpareBytes1; 162 | 163 | WCHAR szVPrintfErrorString[] = { L'R', L't', L'l', L'S', L't', L'r', L'i', L'n', L'g', L'V', L'P', L'r', L'i', L'n', L't', L'f', L'W', L'o', L'r', L'k', L'e', L'r', L'W', L' ', L'e', L'r', L'r', L'o', L'r', L'!', 0x0}; 164 | WCHAR szParentOutputKey[] = { L'D', L'b', L'g', L'O', L'u', L't', 0x0 }; 165 | WCHAR szOutputKeyPath[] = { L'D', L'b', L'g', L'O', L'u', L't', L'\\', L'O', L'u', L't', L'p', L'u', L't', L' ', L'A', 0x0 }; 166 | 167 | NTSTATUS status = STATUS_UNSUCCESSFUL; 168 | 169 | #if defined (BOOT_APP) 170 | ULONG relativeTo = RTL_REGISTRY_CONTROL; 171 | #else 172 | ULONG relativeTo = RTL_REGISTRY_USER; 173 | #endif 174 | 175 | if (!pFormatString || !pStaticInfoStorage) 176 | return; 177 | 178 | ///DANGEROUS! Not invoking the API calls by function pointers will lead to non PIC code. 179 | ///We must never forget about that if we want to write PIC code. 180 | status = RtlCreateRegistryKey(relativeTo, szParentOutputKey); 181 | 182 | if (!pStaticInfoStorage->lineNum){ 183 | for (USHORT i = 0; i < ALPHABET_LETTER_COUNT; i++){ 184 | szOutputKeyPath[sizeof(szOutputKeyPath) / sizeof(WCHAR) - 2] = L'A' + i; 185 | status = RtlCheckRegistryKey(relativeTo, szOutputKeyPath); 186 | if (STATUS_OBJECT_NAME_NOT_FOUND == status) { 187 | pStaticInfoStorage->currentWchar = L'A' + i; 188 | break; 189 | } 190 | } 191 | } 192 | else { 193 | szOutputKeyPath[sizeof(szOutputKeyPath) / sizeof(WCHAR) - 2] = pStaticInfoStorage->currentWchar; 194 | } 195 | 196 | (pStaticInfoStorage->lineNum)++; 197 | szValueName[2] = L'a' + (pStaticInfoStorage->lineNum) % ALPHABET_LETTER_COUNT; 198 | szValueName[1] = L'a' + (pStaticInfoStorage->lineNum) / ALPHABET_LETTER_COUNT; 199 | szValueName[0] = L'a' + (pStaticInfoStorage->lineNum) / (ALPHABET_LETTER_COUNT * ALPHABET_LETTER_COUNT); 200 | 201 | szValueName[sizeof(szValueName) / sizeof(WCHAR) - 1] = 0x0; 202 | RtlSecureZeroMemory(szPrintBuf, sizeof(szPrintBuf)); 203 | 204 | va_start(args, pFormatString); 205 | #pragma warning(push) 206 | #pragma warning(disable:4995) ///name was marked as #pragma deprecated 207 | status = RtlStringVPrintfWorkerW(szPrintBuf, sizeof(szPrintBuf) / sizeof(WCHAR), NULL, pFormatString, args); 208 | #pragma warning(pop) 209 | va_end(args); 210 | if (status){ 211 | RtlWriteRegistryValue(relativeTo, szOutputKeyPath, szValueName, REG_SZ, szVPrintfErrorString, sizeof(szVPrintfErrorString)); 212 | return; 213 | } 214 | 215 | RtlWriteRegistryValue(relativeTo, szOutputKeyPath, szValueName, REG_MULTI_SZ, szPrintBuf, sizeof(szPrintBuf)); 216 | } 217 | #endif ///!BOOTSCR_OUTPUT 218 | 219 | 220 | #endif ///UM 221 | #endif ///DBGKFUNCS_H 222 | 223 | 224 | -------------------------------------------------------------------------------- /ndk/dbgktypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | dbgktypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the User Mode Debugging Facility. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _DBGKTYPES_H 20 | #define _DBGKTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | // 29 | // Debug Object Access Masks 30 | // 31 | #define DEBUG_OBJECT_WAIT_STATE_CHANGE 0x0001 32 | #define DEBUG_OBJECT_ADD_REMOVE_PROCESS 0x0002 33 | #define DEBUG_OBJECT_SET_INFORMATION 0x0004 34 | #define DEBUG_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0F) 35 | 36 | // 37 | // Debug Event Flags 38 | // 39 | #define DEBUG_EVENT_READ (0x01) 40 | #define DEBUG_EVENT_NOWAIT (0x02) 41 | #define DEBUG_EVENT_INACTIVE (0x04) 42 | #define DEBUG_EVENT_RELEASE (0x08) 43 | #define DEBUG_EVENT_PROTECT_FAILED (0x10) 44 | #define DEBUG_EVENT_SUSPEND (0x20) 45 | 46 | // 47 | // NtCreateDebugObject Flags 48 | // 49 | #define DBGK_KILL_PROCESS_ON_EXIT (0x1) 50 | #define DBGK_ALL_FLAGS (DBGK_KILL_PROCESS_ON_EXIT) 51 | 52 | // 53 | // Debug Object Information Classes for NtQueryDebugObject 54 | // 55 | typedef enum _DEBUGOBJECTINFOCLASS 56 | { 57 | DebugObjectUnusedInformation, 58 | DebugObjectKillProcessOnExitInformation 59 | } DEBUGOBJECTINFOCLASS, *PDEBUGOBJECTINFOCLASS; 60 | 61 | // 62 | // Debug Message API Number 63 | // 64 | typedef enum _DBGKM_APINUMBER 65 | { 66 | DbgKmExceptionApi = 0, 67 | DbgKmCreateThreadApi = 1, 68 | DbgKmCreateProcessApi = 2, 69 | DbgKmExitThreadApi = 3, 70 | DbgKmExitProcessApi = 4, 71 | DbgKmLoadDllApi = 5, 72 | DbgKmUnloadDllApi = 6, 73 | DbgKmErrorReportApi = 7, 74 | DbgKmMaxApiNumber = 8, 75 | } DBGKM_APINUMBER; 76 | 77 | // 78 | // Debug Object Information Structures 79 | // 80 | typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION 81 | { 82 | ULONG KillProcessOnExit; 83 | } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION; 84 | 85 | #ifndef NTOS_MODE_USER 86 | 87 | // 88 | // Debug Object 89 | // 90 | typedef struct _DEBUG_OBJECT 91 | { 92 | KEVENT EventsPresent; 93 | FAST_MUTEX Mutex; 94 | LIST_ENTRY EventList; 95 | union 96 | { 97 | ULONG Flags; 98 | struct 99 | { 100 | UCHAR DebuggerInactive:1; 101 | UCHAR KillProcessOnExit:1; 102 | }; 103 | }; 104 | } DEBUG_OBJECT, *PDEBUG_OBJECT; 105 | 106 | #endif 107 | 108 | // 109 | // Debug States 110 | // 111 | typedef enum _DBG_STATE 112 | { 113 | DbgIdle, 114 | DbgReplyPending, 115 | DbgCreateThreadStateChange, 116 | DbgCreateProcessStateChange, 117 | DbgExitThreadStateChange, 118 | DbgExitProcessStateChange, 119 | DbgExceptionStateChange, 120 | DbgBreakpointStateChange, 121 | DbgSingleStepStateChange, 122 | DbgLoadDllStateChange, 123 | DbgUnloadDllStateChange 124 | } DBG_STATE, *PDBG_STATE; 125 | 126 | // 127 | // Debug Message Structures 128 | // 129 | typedef struct _DBGKM_EXCEPTION 130 | { 131 | EXCEPTION_RECORD ExceptionRecord; 132 | ULONG FirstChance; 133 | } DBGKM_EXCEPTION, *PDBGKM_EXCEPTION; 134 | 135 | typedef struct _DBGKM_CREATE_THREAD 136 | { 137 | ULONG SubSystemKey; 138 | PVOID StartAddress; 139 | } DBGKM_CREATE_THREAD, *PDBGKM_CREATE_THREAD; 140 | 141 | typedef struct _DBGKM_CREATE_PROCESS 142 | { 143 | ULONG SubSystemKey; 144 | HANDLE FileHandle; 145 | PVOID BaseOfImage; 146 | ULONG DebugInfoFileOffset; 147 | ULONG DebugInfoSize; 148 | DBGKM_CREATE_THREAD InitialThread; 149 | } DBGKM_CREATE_PROCESS, *PDBGKM_CREATE_PROCESS; 150 | 151 | typedef struct _DBGKM_EXIT_THREAD 152 | { 153 | NTSTATUS ExitStatus; 154 | } DBGKM_EXIT_THREAD, *PDBGKM_EXIT_THREAD; 155 | 156 | typedef struct _DBGKM_EXIT_PROCESS 157 | { 158 | NTSTATUS ExitStatus; 159 | } DBGKM_EXIT_PROCESS, *PDBGKM_EXIT_PROCESS; 160 | 161 | typedef struct _DBGKM_LOAD_DLL 162 | { 163 | HANDLE FileHandle; 164 | PVOID BaseOfDll; 165 | ULONG DebugInfoFileOffset; 166 | ULONG DebugInfoSize; 167 | PVOID NamePointer; 168 | } DBGKM_LOAD_DLL, *PDBGKM_LOAD_DLL; 169 | 170 | typedef struct _DBGKM_UNLOAD_DLL 171 | { 172 | PVOID BaseAddress; 173 | } DBGKM_UNLOAD_DLL, *PDBGKM_UNLOAD_DLL; 174 | 175 | // 176 | // User-Mode Debug State Change Structure 177 | // 178 | typedef struct _DBGUI_WAIT_STATE_CHANGE 179 | { 180 | DBG_STATE NewState; 181 | CLIENT_ID AppClientId; 182 | union 183 | { 184 | struct 185 | { 186 | HANDLE HandleToThread; 187 | DBGKM_CREATE_THREAD NewThread; 188 | } CreateThread; 189 | struct 190 | { 191 | HANDLE HandleToProcess; 192 | HANDLE HandleToThread; 193 | DBGKM_CREATE_PROCESS NewProcess; 194 | } CreateProcessInfo; 195 | DBGKM_EXIT_THREAD ExitThread; 196 | DBGKM_EXIT_PROCESS ExitProcess; 197 | DBGKM_EXCEPTION Exception; 198 | DBGKM_LOAD_DLL LoadDll; 199 | DBGKM_UNLOAD_DLL UnloadDll; 200 | } StateInfo; 201 | } DBGUI_WAIT_STATE_CHANGE, *PDBGUI_WAIT_STATE_CHANGE; 202 | 203 | // 204 | // LPC Debug Message 205 | // 206 | typedef struct _DBGKM_MSG 207 | { 208 | PORT_MESSAGE h; 209 | DBGKM_APINUMBER ApiNumber; 210 | NTSTATUS ReturnedStatus; 211 | union 212 | { 213 | DBGKM_EXCEPTION Exception; 214 | DBGKM_CREATE_THREAD CreateThread; 215 | DBGKM_CREATE_PROCESS CreateProcess; 216 | DBGKM_EXIT_THREAD ExitThread; 217 | DBGKM_EXIT_PROCESS ExitProcess; 218 | DBGKM_LOAD_DLL LoadDll; 219 | DBGKM_UNLOAD_DLL UnloadDll; 220 | }; 221 | } DBGKM_MSG, *PDBGKM_MSG; 222 | 223 | #ifndef NTOS_MODE_USER 224 | 225 | // 226 | // Debug Event 227 | // 228 | typedef struct _DEBUG_EVENT 229 | { 230 | LIST_ENTRY EventList; 231 | KEVENT ContinueEvent; 232 | CLIENT_ID ClientId; 233 | PEPROCESS Process; 234 | PETHREAD Thread; 235 | NTSTATUS Status; 236 | ULONG Flags; 237 | PETHREAD BackoutThread; 238 | DBGKM_MSG ApiMsg; 239 | } DEBUG_EVENT, *PDEBUG_EVENT; 240 | 241 | 242 | #endif 243 | 244 | #endif 245 | -------------------------------------------------------------------------------- /ndk/halfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | halfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the HAL. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _HALFUNCS_H 20 | #define _HALFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | #include 28 | 29 | #ifndef NTOS_MODE_USER 30 | 31 | // 32 | // Private HAL Callbacks 33 | // 34 | #define HalHandlerForBus HALPRIVATEDISPATCH->HalHandlerForBus 35 | #define HalHandlerForConfigSpace HALPRIVATEDISPATCH->HalHandlerForConfigSpace 36 | #define HalLocateHiberRanges HALPRIVATEDISPATCH->HalLocateHiberRanges 37 | #define HalRegisterBusHandler HALPRIVATEDISPATCH->HalRegisterBusHandler 38 | #define HalSetWakeEnable HALPRIVATEDISPATCH->HalSetWakeEnable 39 | #define HalSetWakeAlarm HALPRIVATEDISPATCH->HalSetWakeAlarm 40 | #define HalPciTranslateBusAddress HALPRIVATEDISPATCH->HalPciTranslateBusAddress 41 | #define HalPciAssignSlotResources HALPRIVATEDISPATCH->HalPciAssignSlotResources 42 | #define HalHaltSystem HALPRIVATEDISPATCH->HalHaltSystem 43 | #define HalFindBusAddressTranslation HALPRIVATEDISPATCH->HalFindBusAddressTranslation 44 | #define HalResetDisplay HALPRIVATEDISPATCH->HalResetDisplay 45 | #define HalAllocateMapRegisters HALPRIVATEDISPATCH->HalAllocateMapRegisters 46 | #define KdSetupPciDeviceForDebugging HALPRIVATEDISPATCH->KdSetupPciDeviceForDebugging 47 | #define KdReleasePciDeviceforDebugging HALPRIVATEDISPATCH->KdReleasePciDeviceforDebugging 48 | #define KdGetAcpiTablePhase0 HALPRIVATEDISPATCH->KdGetAcpiTablePhase0 49 | #define KdCheckPowerButton HALPRIVATEDISPATCH->KdCheckPowerButton 50 | #define HalVectorToIDTEntry HALPRIVATEDISPATCH->HalVectorToIDTEntry 51 | #define KdMapPhysicalMemory64 HALPRIVATEDISPATCH->KdMapPhysicalMemory64 52 | #define KdUnmapVirtualAddress HALPRIVATEDISPATCH->KdUnmapVirtualAddress 53 | 54 | // 55 | // Display Functions 56 | // 57 | NTHALAPI 58 | VOID 59 | NTAPI 60 | HalDisplayString( 61 | _In_ PCHAR String 62 | ); 63 | 64 | // 65 | // Initialization Functions 66 | // 67 | NTHALAPI 68 | BOOLEAN 69 | NTAPI 70 | HalAllProcessorsStarted( 71 | VOID 72 | ); 73 | 74 | #ifdef _ARC_ 75 | NTHALAPI 76 | VOID 77 | NTAPI 78 | HalInitializeProcessor( 79 | _In_ ULONG ProcessorNumber, 80 | _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock 81 | ); 82 | 83 | NTHALAPI 84 | BOOLEAN 85 | NTAPI 86 | HalInitSystem( 87 | _In_ ULONG BootPhase, 88 | _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock 89 | ); 90 | 91 | NTHALAPI 92 | BOOLEAN 93 | NTAPI 94 | HalStartNextProcessor( 95 | _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, 96 | _In_ PKPROCESSOR_STATE ProcessorState 97 | ); 98 | 99 | #endif 100 | 101 | NTHALAPI 102 | VOID 103 | NTAPI 104 | HalReturnToFirmware( 105 | _In_ FIRMWARE_REENTRY Action 106 | ); 107 | 108 | // 109 | // CPU Routines 110 | // 111 | NTHALAPI 112 | VOID 113 | NTAPI 114 | HalProcessorIdle( 115 | VOID 116 | ); 117 | 118 | // 119 | // Interrupt Functions 120 | // 121 | NTHALAPI 122 | BOOLEAN 123 | NTAPI 124 | HalBeginSystemInterrupt( 125 | _In_ KIRQL Irql, 126 | _In_ ULONG Vector, 127 | _Out_ PKIRQL OldIrql 128 | ); 129 | 130 | VOID 131 | FASTCALL 132 | HalClearSoftwareInterrupt( 133 | _In_ KIRQL Request 134 | ); 135 | 136 | NTHALAPI 137 | VOID 138 | NTAPI 139 | HalDisableSystemInterrupt( 140 | _In_ ULONG Vector, 141 | _In_ KIRQL Irql 142 | ); 143 | 144 | NTHALAPI 145 | BOOLEAN 146 | NTAPI 147 | HalEnableSystemInterrupt( 148 | _In_ ULONG Vector, 149 | _In_ KIRQL Irql, 150 | _In_ KINTERRUPT_MODE InterruptMode 151 | ); 152 | 153 | NTHALAPI 154 | VOID 155 | NTAPI 156 | HalEndSystemInterrupt( 157 | KIRQL Irql, 158 | _In_ PKTRAP_FRAME TrapFrame 159 | ); 160 | 161 | #ifdef _ARM_ // FIXME: ndk/arm? armddk.h? 162 | ULONG 163 | HalGetInterruptSource( 164 | VOID 165 | ); 166 | #endif 167 | 168 | NTHALAPI 169 | VOID 170 | NTAPI 171 | HalReportResourceUsage( 172 | VOID 173 | ); 174 | 175 | NTHALAPI 176 | VOID 177 | FASTCALL 178 | HalRequestSoftwareInterrupt( 179 | _In_ KIRQL SoftwareInterruptRequested 180 | ); 181 | 182 | NTHALAPI 183 | VOID 184 | NTAPI 185 | HalRequestIpi( 186 | _In_ KAFFINITY TargetSet 187 | ); 188 | 189 | NTHALAPI 190 | VOID 191 | NTAPI 192 | HalHandleNMI( 193 | PVOID NmiInfo 194 | ); 195 | 196 | NTHALAPI 197 | UCHAR 198 | FASTCALL 199 | HalSystemVectorDispatchEntry( 200 | _In_ ULONG Vector, 201 | _Out_ PKINTERRUPT_ROUTINE **FlatDispatch, 202 | _Out_ PKINTERRUPT_ROUTINE *NoConnection 203 | ); 204 | 205 | // 206 | // Bus Functions 207 | // 208 | NTHALAPI 209 | NTSTATUS 210 | NTAPI 211 | HalAdjustResourceList( 212 | _Inout_ PIO_RESOURCE_REQUIREMENTS_LIST *pResourceList 213 | ); 214 | 215 | // 216 | // Environment Functions 217 | // 218 | #ifdef _ARC_ 219 | NTHALAPI 220 | ARC_STATUS 221 | NTAPI 222 | HalSetEnvironmentVariable( 223 | _In_ PCH Name, 224 | _In_ PCH Value 225 | ); 226 | 227 | NTHALAPI 228 | ARC_STATUS 229 | NTAPI 230 | HalGetEnvironmentVariable( 231 | _In_ PCH Variable, 232 | _In_ USHORT Length, 233 | _Out_ PCH Buffer 234 | ); 235 | #endif 236 | 237 | // 238 | // Profiling Functions 239 | // 240 | VOID 241 | NTAPI 242 | HalStartProfileInterrupt( 243 | _In_ KPROFILE_SOURCE ProfileSource 244 | ); 245 | 246 | NTHALAPI 247 | VOID 248 | NTAPI 249 | HalStopProfileInterrupt( 250 | _In_ KPROFILE_SOURCE ProfileSource 251 | ); 252 | 253 | NTHALAPI 254 | ULONG_PTR 255 | NTAPI 256 | HalSetProfileInterval( 257 | _In_ ULONG_PTR Interval 258 | ); 259 | 260 | // 261 | // Time Functions 262 | // 263 | NTHALAPI 264 | BOOLEAN 265 | NTAPI 266 | HalQueryRealTimeClock( 267 | _In_ PTIME_FIELDS RtcTime 268 | ); 269 | 270 | NTHALAPI 271 | BOOLEAN 272 | NTAPI 273 | HalSetRealTimeClock( 274 | _In_ PTIME_FIELDS RtcTime 275 | ); 276 | 277 | NTHALAPI 278 | ULONG 279 | NTAPI 280 | HalSetTimeIncrement( 281 | _In_ ULONG Increment 282 | ); 283 | 284 | #endif 285 | #endif 286 | -------------------------------------------------------------------------------- /ndk/haltypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | haltypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the HAL. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _HALTYPES_H 20 | #define _HALTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | #ifndef NTOS_MODE_USER 28 | 29 | // 30 | // HalShutdownSystem Types 31 | // 32 | typedef enum _FIRMWARE_REENTRY 33 | { 34 | HalHaltRoutine, 35 | HalPowerDownRoutine, 36 | HalRestartRoutine, 37 | HalRebootRoutine, 38 | HalInteractiveModeRoutine, 39 | HalMaximumRoutine 40 | } FIRMWARE_REENTRY, *PFIRMWARE_REENTRY; 41 | 42 | // 43 | // HAL Private function Types 44 | // 45 | typedef 46 | PBUS_HANDLER 47 | (FASTCALL *pHalHandlerForConfigSpace)( 48 | _In_ BUS_DATA_TYPE ConfigSpace, 49 | _In_ ULONG BusNumber 50 | ); 51 | 52 | typedef 53 | NTSTATUS 54 | (NTAPI *PINSTALL_BUS_HANDLER)( 55 | _In_ PBUS_HANDLER Bus 56 | ); 57 | 58 | typedef 59 | NTSTATUS 60 | (NTAPI *pHalRegisterBusHandler)( 61 | _In_ INTERFACE_TYPE InterfaceType, 62 | _In_ BUS_DATA_TYPE ConfigSpace, 63 | _In_ ULONG BusNumber, 64 | _In_ INTERFACE_TYPE ParentInterfaceType, 65 | _In_ ULONG ParentBusNumber, 66 | _In_ ULONG ContextSize, 67 | _In_ PINSTALL_BUS_HANDLER InstallCallback, 68 | _Out_ PBUS_HANDLER *BusHandler 69 | ); 70 | 71 | typedef 72 | VOID 73 | (NTAPI *pHalSetWakeEnable)( 74 | _In_ BOOLEAN Enable 75 | ); 76 | 77 | typedef 78 | VOID 79 | (NTAPI *pHalSetWakeAlarm)( 80 | _In_ ULONGLONG AlartTime, 81 | _In_ PTIME_FIELDS TimeFields 82 | ); 83 | 84 | typedef 85 | VOID 86 | (NTAPI *pHalLocateHiberRanges)( 87 | _In_ PVOID MemoryMap 88 | ); 89 | 90 | typedef 91 | NTSTATUS 92 | (NTAPI *pHalAllocateMapRegisters)( 93 | _In_ PADAPTER_OBJECT AdapterObject, 94 | _In_ ULONG Unknown, 95 | _In_ ULONG Unknown2, 96 | PMAP_REGISTER_ENTRY Registers 97 | ); 98 | 99 | // 100 | // HAL Bus Handler Callback Types 101 | // 102 | typedef 103 | NTSTATUS 104 | (NTAPI *PADJUSTRESOURCELIST)( 105 | _In_ PBUS_HANDLER BusHandler, 106 | _In_ PBUS_HANDLER RootHandler, 107 | _Inout_ PIO_RESOURCE_REQUIREMENTS_LIST *Resources 108 | ); 109 | 110 | typedef 111 | NTSTATUS 112 | (NTAPI *PASSIGNSLOTRESOURCES)( 113 | _In_ PBUS_HANDLER BusHandler, 114 | _In_ PBUS_HANDLER RootHandler, 115 | _In_ PUNICODE_STRING RegistryPath, 116 | _In_ PUNICODE_STRING DriverClassName, 117 | _In_ PDRIVER_OBJECT DriverObject, 118 | _In_ PDEVICE_OBJECT DeviceObject, 119 | _In_ ULONG SlotNumber, 120 | _Inout_ PCM_RESOURCE_LIST *AllocatedResources 121 | ); 122 | 123 | typedef 124 | ULONG 125 | (NTAPI *PGETSETBUSDATA)( 126 | _In_ PBUS_HANDLER BusHandler, 127 | _In_ PBUS_HANDLER RootHandler, 128 | _In_ ULONG SlotNumber, 129 | _Out_ PVOID Buffer, 130 | _In_ ULONG Offset, 131 | _In_ ULONG Length 132 | ); 133 | 134 | typedef 135 | ULONG 136 | (NTAPI *PGETINTERRUPTVECTOR)( 137 | _In_ PBUS_HANDLER BusHandler, 138 | _In_ PBUS_HANDLER RootHandler, 139 | _In_ ULONG BusInterruptLevel, 140 | _In_ ULONG BusInterruptVector, 141 | _Out_ PKIRQL Irql, 142 | _Out_ PKAFFINITY Affinity 143 | ); 144 | 145 | typedef 146 | BOOLEAN 147 | (NTAPI *PTRANSLATEBUSADDRESS)( 148 | _In_ PBUS_HANDLER BusHandler, 149 | _In_ PBUS_HANDLER RootHandler, 150 | _In_ PHYSICAL_ADDRESS BusAddress, 151 | _Inout_ PULONG AddressSpace, 152 | _Out_ PPHYSICAL_ADDRESS TranslatedAddress 153 | ); 154 | 155 | // 156 | // Hal Private dispatch Table 157 | // 158 | #define HAL_PRIVATE_DISPATCH_VERSION 2 159 | typedef struct _HAL_PRIVATE_DISPATCH 160 | { 161 | ULONG Version; 162 | pHalHandlerForBus HalHandlerForBus; 163 | pHalHandlerForConfigSpace HalHandlerForConfigSpace; 164 | pHalLocateHiberRanges HalLocateHiberRanges; 165 | pHalRegisterBusHandler HalRegisterBusHandler; 166 | pHalSetWakeEnable HalSetWakeEnable; 167 | pHalSetWakeAlarm HalSetWakeAlarm; 168 | pHalTranslateBusAddress HalPciTranslateBusAddress; 169 | pHalAssignSlotResources HalPciAssignSlotResources; 170 | pHalHaltSystem HalHaltSystem; 171 | pHalFindBusAddressTranslation HalFindBusAddressTranslation; 172 | pHalResetDisplay HalResetDisplay; 173 | pHalAllocateMapRegisters HalAllocateMapRegisters; 174 | pKdSetupPciDeviceForDebugging KdSetupPciDeviceForDebugging; 175 | pKdReleasePciDeviceForDebugging KdReleasePciDeviceforDebugging; 176 | pKdGetAcpiTablePhase0 KdGetAcpiTablePhase0; 177 | pKdCheckPowerButton KdCheckPowerButton; 178 | pHalVectorToIDTEntry HalVectorToIDTEntry; 179 | pKdMapPhysicalMemory64 KdMapPhysicalMemory64; 180 | pKdUnmapVirtualAddress KdUnmapVirtualAddress; 181 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 182 | pKdGetPciDataByOffset KdGetPciDataByOffset; 183 | pKdSetPciDataByOffset KdSetPciDataByOffset; 184 | PVOID HalGetInterruptVectorOverride; 185 | PVOID HalGetVectorInputOverride; 186 | #endif 187 | } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH; 188 | 189 | // 190 | // HAL Supported Range 191 | // 192 | #define HAL_SUPPORTED_RANGE_VERSION 1 193 | typedef struct _SUPPORTED_RANGE 194 | { 195 | struct _SUPPORTED_RANGE *Next; 196 | ULONG SystemAddressSpace; 197 | LONGLONG SystemBase; 198 | LONGLONG Base; 199 | LONGLONG Limit; 200 | } SUPPORTED_RANGE, *PSUPPORTED_RANGE; 201 | 202 | typedef struct _SUPPORTED_RANGES 203 | { 204 | USHORT Version; 205 | BOOLEAN Sorted; 206 | UCHAR Reserved; 207 | ULONG NoIO; 208 | SUPPORTED_RANGE IO; 209 | ULONG NoMemory; 210 | SUPPORTED_RANGE Memory; 211 | ULONG NoPrefetchMemory; 212 | SUPPORTED_RANGE PrefetchMemory; 213 | ULONG NoDma; 214 | SUPPORTED_RANGE Dma; 215 | } SUPPORTED_RANGES, *PSUPPORTED_RANGES; 216 | 217 | // 218 | // HAL Bus Handler 219 | // 220 | #define HAL_BUS_HANDLER_VERSION 1 221 | typedef struct _BUS_HANDLER 222 | { 223 | ULONG Version; 224 | INTERFACE_TYPE InterfaceType; 225 | BUS_DATA_TYPE ConfigurationType; 226 | ULONG BusNumber; 227 | PDEVICE_OBJECT DeviceObject; 228 | struct _BUS_HANDLER *ParentHandler; 229 | PVOID BusData; 230 | ULONG DeviceControlExtensionSize; 231 | PSUPPORTED_RANGES BusAddresses; 232 | ULONG Reserved[4]; 233 | PGETSETBUSDATA GetBusData; 234 | PGETSETBUSDATA SetBusData; 235 | PADJUSTRESOURCELIST AdjustResourceList; 236 | PASSIGNSLOTRESOURCES AssignSlotResources; 237 | PGETINTERRUPTVECTOR GetInterruptVector; 238 | PTRANSLATEBUSADDRESS TranslateBusAddress; 239 | PVOID Spare1; 240 | PVOID Spare2; 241 | PVOID Spare3; 242 | PVOID Spare4; 243 | PVOID Spare5; 244 | PVOID Spare6; 245 | PVOID Spare7; 246 | PVOID Spare8; 247 | } BUS_HANDLER; 248 | 249 | // 250 | // HAL Chip Hacks 251 | // 252 | #define HAL_PCI_CHIP_HACK_BROKEN_ACPI_TIMER 0x01 253 | #define HAL_PCI_CHIP_HACK_DISABLE_HIBERNATE 0x02 254 | #define HAL_PCI_CHIP_HACK_DISABLE_ACPI_IRQ_ROUTING 0x04 255 | #define HAL_PCI_CHIP_HACK_USB_SMI_DISABLE 0x08 256 | 257 | // 258 | // Kernel Exports 259 | // 260 | #if (defined(_NTDRIVER_) || defined(_NTHAL_)) && !defined(_BLDR_) 261 | extern NTSYSAPI PHAL_PRIVATE_DISPATCH HalPrivateDispatchTable; 262 | #define HALPRIVATEDISPATCH ((PHAL_PRIVATE_DISPATCH)&HalPrivateDispatchTable) 263 | #else 264 | extern NTSYSAPI HAL_PRIVATE_DISPATCH HalPrivateDispatchTable; 265 | #define HALPRIVATEDISPATCH (&HalPrivateDispatchTable) 266 | #endif 267 | 268 | // 269 | // HAL Exports 270 | // 271 | extern PUCHAR NTHALAPI KdComPortInUse; 272 | 273 | // 274 | // HAL Constants 275 | // 276 | #define HAL_IRQ_TRANSLATOR_VERSION 0x0 277 | 278 | #endif 279 | #endif 280 | 281 | 282 | 283 | -------------------------------------------------------------------------------- /ndk/i386/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (X86) 8 | 9 | Abstract: 10 | 11 | i386 Type definitions for the Memory Manager 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #ifndef _I386_MMTYPES_H 20 | #define _I386_MMTYPES_H 21 | 22 | #ifdef __cplusplus 23 | extern "C" { 24 | #endif 25 | 26 | // 27 | // Dependencies 28 | // 29 | 30 | // 31 | // Page-related Macros 32 | // 33 | #define PAGE_SIZE 0x1000 34 | #define PAGE_SHIFT 12L 35 | #define MM_ALLOCATION_GRANULARITY 0x10000 36 | #define MM_ALLOCATION_GRANULARITY_SHIFT 16L 37 | #define MM_PAGE_FRAME_NUMBER_SIZE 20 38 | 39 | // 40 | // User space range limit 41 | // 42 | #define MI_HIGHEST_USER_ADDRESS (PVOID)0x7FFEFFFF 43 | 44 | // 45 | // Address of the shared user page 46 | // 47 | #define MM_SHARED_USER_DATA_VA 0x7FFE0000 48 | 49 | // 50 | // Sanity checks for Paging Macros 51 | // 52 | #ifdef C_ASSERT 53 | C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT)); 54 | C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT)); 55 | C_ASSERT(MM_ALLOCATION_GRANULARITY && 56 | !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1))); 57 | C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE); 58 | #endif 59 | 60 | // 61 | // PAE SEG0 Base? 62 | // 63 | #define KSEG0_BASE_PAE 0xE0000000 64 | 65 | // 66 | // Page Table Entry Definitions 67 | // 68 | typedef struct _HARDWARE_PTE_X86 69 | { 70 | ULONG Valid:1; 71 | ULONG Write:1; 72 | ULONG Owner:1; 73 | ULONG WriteThrough:1; 74 | ULONG CacheDisable:1; 75 | ULONG Accessed:1; 76 | ULONG Dirty:1; 77 | ULONG LargePage:1; 78 | ULONG Global:1; 79 | ULONG CopyOnWrite:1; 80 | ULONG Prototype: 1; 81 | ULONG reserved: 1; 82 | ULONG PageFrameNumber:20; 83 | } HARDWARE_PTE_X86, *PHARDWARE_PTE_X86; 84 | 85 | typedef struct _MMPTE_SOFTWARE 86 | { 87 | ULONG Valid:1; 88 | ULONG PageFileLow:4; 89 | ULONG Protection:5; 90 | ULONG Prototype:1; 91 | ULONG Transition:1; 92 | ULONG PageFileHigh:20; 93 | } MMPTE_SOFTWARE; 94 | 95 | typedef struct _MMPTE_TRANSITION 96 | { 97 | ULONG Valid:1; 98 | ULONG Write:1; 99 | ULONG Owner:1; 100 | ULONG WriteThrough:1; 101 | ULONG CacheDisable:1; 102 | ULONG Protection:5; 103 | ULONG Prototype:1; 104 | ULONG Transition:1; 105 | ULONG PageFrameNumber:20; 106 | } MMPTE_TRANSITION; 107 | 108 | typedef struct _MMPTE_PROTOTYPE 109 | { 110 | ULONG Valid:1; 111 | ULONG ProtoAddressLow:7; 112 | ULONG ReadOnly:1; 113 | ULONG WhichPool:1; 114 | ULONG Prototype:1; 115 | ULONG ProtoAddressHigh:21; 116 | } MMPTE_PROTOTYPE; 117 | 118 | typedef struct _MMPTE_SUBSECTION 119 | { 120 | ULONG Valid:1; 121 | ULONG SubsectionAddressLow:4; 122 | ULONG Protection:5; 123 | ULONG Prototype:1; 124 | ULONG SubsectionAddressHigh:20; 125 | ULONG WhichPool:1; 126 | } MMPTE_SUBSECTION; 127 | 128 | typedef struct _MMPTE_LIST 129 | { 130 | ULONG Valid:1; 131 | ULONG OneEntry:1; 132 | ULONG filler0:8; 133 | ULONG Prototype:1; 134 | ULONG filler1:1; 135 | ULONG NextEntry:20; 136 | } MMPTE_LIST; 137 | 138 | #ifndef CONFIG_SMP 139 | 140 | typedef struct _MMPTE_HARDWARE 141 | { 142 | ULONG Valid:1; 143 | ULONG Write:1; 144 | ULONG Owner:1; 145 | ULONG WriteThrough:1; 146 | ULONG CacheDisable:1; 147 | ULONG Accessed:1; 148 | ULONG Dirty:1; 149 | ULONG LargePage:1; 150 | ULONG Global:1; 151 | ULONG CopyOnWrite:1; 152 | ULONG Prototype:1; 153 | ULONG reserved:1; 154 | ULONG PageFrameNumber:20; 155 | } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 156 | 157 | #else 158 | 159 | typedef struct _MMPTE_HARDWARE 160 | { 161 | ULONG Valid:1; 162 | ULONG Writable:1; 163 | ULONG Owner:1; 164 | ULONG WriteThrough:1; 165 | ULONG CacheDisable:1; 166 | ULONG Accessed:1; 167 | ULONG Dirty:1; 168 | ULONG LargePage:1; 169 | ULONG Global:1; 170 | ULONG CopyOnWrite:1; 171 | ULONG Prototype:1; 172 | ULONG Write:1; 173 | ULONG PageFrameNumber:20; 174 | } MMPTE_HARDWARE, *PMMPTE_HARDWARE; 175 | 176 | #endif 177 | 178 | // 179 | // Use the right PTE structure 180 | // 181 | #define HARDWARE_PTE HARDWARE_PTE_X86 182 | #define PHARDWARE_PTE PHARDWARE_PTE_X86 183 | 184 | typedef struct _MMPTE 185 | { 186 | union 187 | { 188 | ULONG_PTR Long; 189 | HARDWARE_PTE Flush; 190 | MMPTE_HARDWARE Hard; 191 | MMPTE_PROTOTYPE Proto; 192 | MMPTE_SOFTWARE Soft; 193 | MMPTE_TRANSITION Trans; 194 | MMPTE_SUBSECTION Subsect; 195 | MMPTE_LIST List; 196 | } u; 197 | } MMPTE, *PMMPTE, 198 | MMPDE, *PMMPDE; 199 | 200 | #ifdef __cplusplus 201 | }; // extern "C" 202 | #endif 203 | 204 | #endif 205 | -------------------------------------------------------------------------------- /ndk/inbvfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | inbvfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Boot Video Driver. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _INBVFUNCS_H 20 | #define _INBVFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | #ifndef NTOS_MODE_USER 29 | // 30 | // Ownership Functions 31 | // 32 | VOID 33 | NTAPI 34 | InbvAcquireDisplayOwnership( 35 | VOID 36 | ); 37 | 38 | BOOLEAN 39 | NTAPI 40 | InbvCheckDisplayOwnership( 41 | VOID 42 | ); 43 | 44 | VOID 45 | NTAPI 46 | InbvNotifyDisplayOwnershipLost( 47 | _In_ INBV_RESET_DISPLAY_PARAMETERS Callback 48 | ); 49 | 50 | // 51 | // Installation Functions 52 | // 53 | VOID 54 | NTAPI 55 | InbvEnableBootDriver( 56 | _In_ BOOLEAN Enable 57 | ); 58 | 59 | VOID 60 | NTAPI 61 | InbvInstallDisplayStringFilter( 62 | _In_ INBV_DISPLAY_STRING_FILTER DisplayFilter 63 | ); 64 | 65 | BOOLEAN 66 | NTAPI 67 | InbvIsBootDriverInstalled( 68 | VOID 69 | ); 70 | 71 | // 72 | // Display Functions 73 | // 74 | BOOLEAN 75 | NTAPI 76 | InbvDisplayString( 77 | _In_ PCHAR String 78 | ); 79 | 80 | BOOLEAN 81 | NTAPI 82 | InbvEnableDisplayString( 83 | _In_ BOOLEAN Enable 84 | ); 85 | 86 | BOOLEAN 87 | NTAPI 88 | InbvResetDisplay( 89 | VOID 90 | ); 91 | 92 | VOID 93 | NTAPI 94 | InbvSetScrollRegion( 95 | _In_ ULONG Left, 96 | _In_ ULONG Top, 97 | _In_ ULONG Right, 98 | _In_ ULONG Bottom 99 | ); 100 | 101 | VOID 102 | NTAPI 103 | InbvSetTextColor( 104 | _In_ ULONG Color 105 | ); 106 | 107 | VOID 108 | NTAPI 109 | InbvSolidColorFill( 110 | _In_ ULONG Left, 111 | _In_ ULONG Top, 112 | _In_ ULONG Right, 113 | _In_ ULONG Bottom, 114 | _In_ ULONG Color 115 | ); 116 | 117 | VOID 118 | NTAPI 119 | InbvSetProgressBarSubset( 120 | _In_ ULONG Floor, 121 | _In_ ULONG Ceiling 122 | ); 123 | 124 | #endif 125 | #endif 126 | -------------------------------------------------------------------------------- /ndk/inbvtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | inbvtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Boot Video Driver. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Created - 02-Feb-2007 16 | 17 | --*/ 18 | 19 | #ifndef _INBVTYPES_H 20 | #define _INBVTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #ifndef NTOS_MODE_USER 27 | 28 | // 29 | // Boot Video Display Ownership Status 30 | // 31 | typedef enum _INBV_DISPLAY_STATE 32 | { 33 | INBV_DISPLAY_STATE_OWNED, 34 | INBV_DISPLAY_STATE_DISABLED, 35 | INBV_DISPLAY_STATE_LOST 36 | } INBV_DISPLAY_STATE; 37 | 38 | // 39 | // Function Callbacks 40 | // 41 | typedef 42 | BOOLEAN 43 | (NTAPI *INBV_RESET_DISPLAY_PARAMETERS)( 44 | ULONG Cols, 45 | ULONG Rows 46 | ); 47 | 48 | typedef 49 | VOID 50 | (NTAPI *INBV_DISPLAY_STRING_FILTER)( 51 | PCHAR *Str 52 | ); 53 | 54 | #endif 55 | #endif 56 | -------------------------------------------------------------------------------- /ndk/inline_ntcurrentteb.h: -------------------------------------------------------------------------------- 1 | #ifndef _INLINE_NT_CURRENTTEB_H_ 2 | #define _INLINE_NT_CURRENTTEB_H_ 3 | 4 | #if defined(_M_IX86) 5 | FORCEINLINE struct _TEB * NtCurrentTeb(void) 6 | { 7 | return (struct _TEB *)__readfsdword(0x18); 8 | } 9 | #elif defined(_M_ARM) 10 | FORCEINLINE struct _TEB * NtCurrentTeb(void) 11 | { 12 | __debugbreak(); 13 | return (struct _TEB *)0; 14 | } 15 | #elif defined(_M_AMD64) 16 | FORCEINLINE struct _TEB * NtCurrentTeb(void) 17 | { 18 | return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self)); 19 | } 20 | #elif defined(_M_PPC) 21 | FORCEINLINE struct _TEB * NtCurrentTeb(void) 22 | { 23 | return (struct _TEB *)__readfsdword_winnt(0x18); 24 | } 25 | #else 26 | #error Unsupported architecture 27 | #endif 28 | 29 | #endif//_INLINE_NT_CURRENTTEB_H_ 30 | -------------------------------------------------------------------------------- /ndk/kbd.h: -------------------------------------------------------------------------------- 1 | #define __KBD_H 2 | 3 | #ifdef __cplusplus 4 | extern "C" { 5 | #endif 6 | 7 | /* Virtual key flags */ 8 | #define KBDEXT 0x100 /* Extended key code */ 9 | #define KBDMULTIVK 0x200 /* Multi-key */ 10 | #define KBDSPECIAL 0x400 /* Special key */ 11 | #define KBDNUMPAD 0x800 /* Number-pad */ 12 | 13 | /* Modifier bits */ 14 | #define KBDSHIFT 0x001 /* Shift modifier */ 15 | #define KBDCTRL 0x002 /* Ctrl modifier */ 16 | #define KBDALT 0x004 /* Alt modifier */ 17 | 18 | /* Invalid shift */ 19 | #define SHFT_INVALID 0x0F 20 | 21 | typedef struct _VK_TO_BIT { 22 | BYTE Vk; 23 | BYTE ModBits; 24 | } VK_TO_BIT, *PVK_TO_BIT; 25 | 26 | typedef struct _MODIFIERS { 27 | PVK_TO_BIT pVkToBit; 28 | WORD wMaxModBits; 29 | BYTE ModNumber[]; 30 | } MODIFIERS, *PMODIFIERS; 31 | 32 | #define TYPEDEF_VK_TO_WCHARS(i) \ 33 | typedef struct _VK_TO_WCHARS ## i { \ 34 | BYTE VirtualKey; \ 35 | BYTE Attributes; \ 36 | WCHAR wch[i]; \ 37 | } VK_TO_WCHARS ## i, *PVK_TO_WCHARS ## i; 38 | 39 | TYPEDEF_VK_TO_WCHARS(1) 40 | TYPEDEF_VK_TO_WCHARS(2) 41 | TYPEDEF_VK_TO_WCHARS(3) 42 | TYPEDEF_VK_TO_WCHARS(4) 43 | TYPEDEF_VK_TO_WCHARS(5) 44 | TYPEDEF_VK_TO_WCHARS(6) 45 | TYPEDEF_VK_TO_WCHARS(7) 46 | TYPEDEF_VK_TO_WCHARS(8) 47 | TYPEDEF_VK_TO_WCHARS(9) 48 | TYPEDEF_VK_TO_WCHARS(10) 49 | 50 | typedef struct _VK_TO_WCHAR_TABLE { 51 | PVK_TO_WCHARS1 pVkToWchars; 52 | BYTE nModifications; 53 | BYTE cbSize; 54 | } VK_TO_WCHAR_TABLE, *PVK_TO_WCHAR_TABLE; 55 | 56 | typedef struct _DEADKEY { 57 | DWORD dwBoth; 58 | WCHAR wchComposed; 59 | USHORT uFlags; 60 | } DEADKEY, *PDEADKEY; 61 | 62 | typedef WCHAR *DEADKEY_LPWSTR; 63 | 64 | #define DKF_DEAD 1 65 | 66 | typedef struct _VSC_LPWSTR { 67 | BYTE vsc; 68 | LPWSTR pwsz; 69 | } VSC_LPWSTR, *PVSC_LPWSTR; 70 | 71 | typedef struct _VSC_VK { 72 | BYTE Vsc; 73 | USHORT Vk; 74 | } VSC_VK, *PVSC_VK; 75 | 76 | #define TYPEDEF_LIGATURE(i) \ 77 | typedef struct _LIGATURE ## i { \ 78 | BYTE VirtualKey; \ 79 | WORD ModificationNumber; \ 80 | WCHAR wch[i]; \ 81 | } LIGATURE ## i, *PLIGATURE ## i; 82 | 83 | TYPEDEF_LIGATURE(1) 84 | TYPEDEF_LIGATURE(2) 85 | TYPEDEF_LIGATURE(3) 86 | TYPEDEF_LIGATURE(4) 87 | TYPEDEF_LIGATURE(5) 88 | 89 | #define KBD_VERSION 1 90 | #define GET_KBD_VERSION(p) (HIWORD((p)->fLocalFlags)) 91 | #define KLLF_ALTGR 0x1 92 | #define KLLF_SHIFTLOCK 0x2 93 | #define KLLF_LRM_RLM 0x4 94 | 95 | typedef struct _KBDTABLES { 96 | PMODIFIERS pCharModifiers; 97 | PVK_TO_WCHAR_TABLE pVkToWcharTable; 98 | PDEADKEY pDeadKey; 99 | VSC_LPWSTR *pKeyNames; 100 | VSC_LPWSTR *pKeyNamesExt; 101 | LPWSTR *pKeyNamesDead; 102 | USHORT *pusVSCtoVK; 103 | BYTE bMaxVSCtoVK; 104 | PVSC_VK pVSCtoVK_E0; 105 | PVSC_VK pVSCtoVK_E1; 106 | DWORD fLocaleFlags; 107 | BYTE nLgMaxd; 108 | BYTE cbLgEntry; 109 | PLIGATURE1 pLigature; 110 | } KBDTABLES, *PKBDTABLES; 111 | 112 | /* Constants that help table decoding */ 113 | #define WCH_NONE 0xf000 114 | #define WCH_DEAD 0xf001 115 | #define WCH_LGTR 0xf002 116 | 117 | /* VK_TO_WCHARS attributes */ 118 | #define CAPLOK 0x01 119 | #define SGCAPS 0x02 120 | #define CAPLOKALTGR 0x04 121 | #define KANALOK 0x08 122 | #define GRPSELTAP 0x80 123 | 124 | #define VK_ABNT_C1 0xC1 125 | #define VK_ABNT_C2 0xC2 126 | 127 | /* Useful scancodes */ 128 | #define SCANCODE_LSHIFT 0x2A 129 | #define SCANCODE_RSHIFT 0x36 130 | #define SCANCODE_CTRL 0x1D 131 | #define SCANCODE_ALT 0x38 132 | 133 | #ifdef __cplusplus 134 | }; 135 | #endif//__KBD_H 136 | -------------------------------------------------------------------------------- /ndk/kdfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | kdfuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Kernel Debugger. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _KDFUNCS_H 20 | #define _KDFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | #ifndef NTOS_MODE_USER 29 | 30 | // 31 | // Debugger API 32 | // 33 | NTSTATUS 34 | NTAPI 35 | KdSystemDebugControl( 36 | SYSDBG_COMMAND Command, 37 | PVOID InputBuffer, 38 | ULONG InputBufferLength, 39 | PVOID OutputBuffer, 40 | ULONG OutputBufferLength, 41 | PULONG ReturnLength, 42 | KPROCESSOR_MODE PreviousMode 43 | ); 44 | 45 | BOOLEAN 46 | NTAPI 47 | KdPollBreakIn( 48 | VOID 49 | ); 50 | 51 | 52 | typedef VOID(*PDEBUG_PRINT_CALLBACK) ( 53 | _In_ PSTRING Output, 54 | _In_ ULONG ComponentId, 55 | _In_ ULONG Level); 56 | 57 | //NTSTATUS DbgSetDebugPrintCallback( 58 | // _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback, 59 | // _In_ BOOLEAN Enable); 60 | 61 | #endif 62 | 63 | // 64 | // Native Calls 65 | // 66 | NTSYSCALLAPI 67 | NTSTATUS 68 | NTAPI 69 | NtQueryDebugFilterState( 70 | ULONG ComponentId, 71 | ULONG Level 72 | ); 73 | 74 | NTSYSCALLAPI 75 | NTSTATUS 76 | NTAPI 77 | NtSetDebugFilterState( 78 | ULONG ComponentId, 79 | ULONG Level, 80 | BOOLEAN State 81 | ); 82 | 83 | NTSYSCALLAPI 84 | NTSTATUS 85 | NTAPI 86 | NtSystemDebugControl( 87 | SYSDBG_COMMAND ControlCode, 88 | PVOID InputBuffer, 89 | ULONG InputBufferLength, 90 | PVOID OutputBuffer, 91 | ULONG OutputBufferLength, 92 | PULONG ReturnLength 93 | ); 94 | 95 | NTSYSAPI 96 | NTSTATUS 97 | NTAPI 98 | ZwQueryDebugFilterState( 99 | ULONG ComponentId, 100 | ULONG Level 101 | ); 102 | 103 | NTSYSAPI 104 | NTSTATUS 105 | NTAPI 106 | ZwSetDebugFilterState( 107 | ULONG ComponentId, 108 | ULONG Level, 109 | BOOLEAN State 110 | ); 111 | 112 | NTSYSAPI 113 | NTSTATUS 114 | NTAPI 115 | ZwSystemDebugControl( 116 | SYSDBG_COMMAND ControlCode, 117 | PVOID InputBuffer, 118 | ULONG InputBufferLength, 119 | PVOID OutputBuffer, 120 | ULONG OutputBufferLength, 121 | PULONG ReturnLength 122 | ); 123 | 124 | #endif 125 | -------------------------------------------------------------------------------- /ndk/kdtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | kdtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Kernel Debugger. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _KDTYPES_H 20 | #define _KDTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Debug Filter Levels 29 | // 30 | #define DPFLTR_ERROR_LEVEL 0 31 | #define DPFLTR_WARNING_LEVEL 1 32 | #define DPFLTR_TRACE_LEVEL 2 33 | #define DPFLTR_INFO_LEVEL 3 34 | #define DPFLTR_MASK 0x80000000 35 | 36 | // 37 | // Debug Status Codes 38 | // 39 | #define DBG_STATUS_CONTROL_C 1 40 | #define DBG_STATUS_SYSRQ 2 41 | #define DBG_STATUS_BUGCHECK_FIRST 3 42 | #define DBG_STATUS_BUGCHECK_SECOND 4 43 | #define DBG_STATUS_FATAL 5 44 | #define DBG_STATUS_DEBUG_CONTROL 6 45 | #define DBG_STATUS_WORKER 7 46 | 47 | // 48 | // DebugService Control Types 49 | // 50 | #define BREAKPOINT_BREAK 0 51 | #define BREAKPOINT_PRINT 1 52 | #define BREAKPOINT_PROMPT 2 53 | #define BREAKPOINT_LOAD_SYMBOLS 3 54 | #define BREAKPOINT_UNLOAD_SYMBOLS 4 55 | #define BREAKPOINT_COMMAND_STRING 5 56 | 57 | // 58 | // Debug Control Codes for NtSystemDebugcontrol 59 | // 60 | typedef enum _SYSDBG_COMMAND 61 | { 62 | SysDbgQueryModuleInformation = 0, 63 | SysDbgQueryTraceInformation = 1, 64 | SysDbgSetTracepoint = 2, 65 | SysDbgSetSpecialCall = 3, 66 | SysDbgClearSpecialCalls = 4, 67 | SysDbgQuerySpecialCalls = 5, 68 | SysDbgBreakPoint = 6, 69 | SysDbgQueryVersion = 7, 70 | SysDbgReadVirtual = 8, 71 | SysDbgWriteVirtual = 9, 72 | SysDbgReadPhysical = 10, 73 | SysDbgWritePhysical = 11, 74 | SysDbgReadControlSpace = 12, 75 | SysDbgWriteControlSpace = 13, 76 | SysDbgReadIoSpace = 14, 77 | SysDbgWriteIoSpace = 15, 78 | SysDbgReadMsr = 16, 79 | SysDbgWriteMsr = 17, 80 | SysDbgReadBusData = 18, 81 | SysDbgWriteBusData = 19, 82 | SysDbgCheckLowMemory = 20, 83 | SysDbgEnableKernelDebugger = 21, 84 | SysDbgDisableKernelDebugger = 22, 85 | SysDbgGetAutoKdEnable = 23, 86 | SysDbgSetAutoKdEnable = 24, 87 | SysDbgGetPrintBufferSize = 25, 88 | SysDbgSetPrintBufferSize = 26, 89 | SysDbgGetKdUmExceptionEnable = 27, 90 | SysDbgSetKdUmExceptionEnable = 28, 91 | SysDbgGetTriageDump = 29, 92 | SysDbgGetKdBlockEnable = 30, 93 | SysDbgSetKdBlockEnable = 31, 94 | SysDbgRegisterForUmBreakInfo = 32, 95 | SysDbgGetUmBreakPid = 33, 96 | SysDbgClearUmBreakPid = 34, 97 | SysDbgGetUmAttachPid = 35, 98 | SysDbgClearUmAttachPid = 36, 99 | } SYSDBG_COMMAND; 100 | 101 | // 102 | // System Debugger Types 103 | // 104 | typedef struct _SYSDBG_PHYSICAL 105 | { 106 | PHYSICAL_ADDRESS Address; 107 | PVOID Buffer; 108 | ULONG Request; 109 | } SYSDBG_PHYSICAL, *PSYSDBG_PHYSICAL; 110 | 111 | typedef struct _SYSDBG_VIRTUAL 112 | { 113 | PVOID Address; 114 | PVOID Buffer; 115 | ULONG Request; 116 | } SYSDBG_VIRTUAL, *PSYSDBG_VIRTUAL; 117 | 118 | typedef struct _SYSDBG_CONTROL_SPACE 119 | { 120 | ULONGLONG Address; 121 | PVOID Buffer; 122 | ULONG Request; 123 | ULONG Processor; 124 | } SYSDBG_CONTROL_SPACE, *PSYSDBG_CONTROL_SPACE; 125 | 126 | typedef struct _SYSDBG_IO_SPACE 127 | { 128 | ULONGLONG Address; 129 | PVOID Buffer; 130 | ULONG Request; 131 | INTERFACE_TYPE InterfaceType; 132 | ULONG BusNumber; 133 | ULONG AddressSpace; 134 | } SYSDBG_IO_SPACE, *PSYSDBG_IO_SPACE; 135 | 136 | typedef struct _SYSDBG_BUS_DATA 137 | { 138 | ULONG Address; 139 | PVOID Buffer; 140 | ULONG Request; 141 | BUS_DATA_TYPE BusDataType; 142 | ULONG BusNumber; 143 | ULONG SlotNumber; 144 | } SYSDBG_BUS_DATA, *PSYSDBG_BUS_DATA; 145 | 146 | typedef struct _SYSDBG_MSR 147 | { 148 | ULONG Address; 149 | ULONGLONG Data; 150 | } SYSDBG_MSR, *PSYSDBG_MSR; 151 | 152 | typedef struct _SYSDBG_TRIAGE_DUMP 153 | { 154 | ULONG Flags; 155 | ULONG BugCheckCode; 156 | ULONG_PTR BugCheckParam1; 157 | ULONG_PTR BugCheckParam2; 158 | ULONG_PTR BugCheckParam3; 159 | ULONG_PTR BugCheckParam4; 160 | ULONG ProcessHandles; 161 | ULONG ThreadHandles; 162 | PHANDLE Handles; 163 | } SYSDBG_TRIAGE_DUMP, *PSYSDBG_TRIAGE_DUMP; 164 | 165 | // 166 | // KD Structures 167 | // 168 | typedef struct _KD_SYMBOLS_INFO 169 | { 170 | PVOID BaseOfDll; 171 | ULONG_PTR ProcessId; 172 | ULONG CheckSum; 173 | ULONG SizeOfImage; 174 | } KD_SYMBOLS_INFO, *PKD_SYMBOLS_INFO; 175 | 176 | #endif // _KDTYPES_H 177 | -------------------------------------------------------------------------------- /ndk/ldrfuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ldrfuncs.h 8 | 9 | Abstract: 10 | 11 | Functions definitions for the Loader. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _LDRFUNCS_H 20 | #define _LDRFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | #if defined(_MSC_VER) && !defined(NTOS_MODE_USER) 28 | #include 29 | #endif 30 | 31 | // 32 | // Resource Functions 33 | // 34 | NTSTATUS 35 | NTAPI 36 | LdrAccessResource( 37 | _In_ PVOID BaseAddress, 38 | _In_ PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry, 39 | _Out_opt_ PVOID *Resource, 40 | _Out_opt_ PULONG Size 41 | ); 42 | 43 | NTSTATUS 44 | NTAPI 45 | LdrFindResource_U( 46 | _In_ PVOID BaseAddress, 47 | _In_ PLDR_RESOURCE_INFO ResourceInfo, 48 | _In_ ULONG Level, 49 | _Out_ PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry 50 | ); 51 | 52 | NTSTATUS 53 | NTAPI 54 | LdrEnumResources( 55 | _In_ PVOID BaseAddress, 56 | _In_ PLDR_RESOURCE_INFO ResourceInfo, 57 | _In_ ULONG Level, 58 | _Inout_ ULONG *ResourceCount, 59 | _Out_writes_to_(*ResourceCount,*ResourceCount) LDR_ENUM_RESOURCE_INFO *Resources 60 | ); 61 | 62 | 63 | NTSTATUS 64 | NTAPI 65 | LdrFindResourceDirectory_U( 66 | _In_ PVOID BaseAddress, 67 | _In_ PLDR_RESOURCE_INFO ResourceInfo, 68 | _In_ ULONG Level, 69 | _Out_ PIMAGE_RESOURCE_DIRECTORY *ResourceDirectory 70 | ); 71 | 72 | NTSTATUS 73 | NTAPI 74 | LdrLoadAlternateResourceModule( 75 | _In_ PVOID Module, 76 | _In_ PWSTR Buffer 77 | ); 78 | 79 | BOOLEAN 80 | NTAPI 81 | LdrUnloadAlternateResourceModule( 82 | _In_ PVOID BaseAddress 83 | ); 84 | 85 | // 86 | // Misc. Functions 87 | // 88 | NTSTATUS 89 | NTAPI 90 | LdrGetProcedureAddress( 91 | _In_ PVOID BaseAddress, 92 | _In_ PANSI_STRING Name, 93 | _In_ ULONG Ordinal, 94 | _Out_ FARPROC* ProcedureAddress 95 | ); 96 | 97 | ULONG 98 | NTAPI 99 | LdrRelocateImage( 100 | _In_ PVOID NewBase, 101 | _In_ PUCHAR LoaderName, 102 | _In_ ULONG Success, 103 | _In_ ULONG Conflict, 104 | _In_ ULONG Invalid 105 | ); 106 | 107 | NTSTATUS 108 | NTAPI 109 | LdrLockLoaderLock( 110 | _In_ ULONG Flags, 111 | _Out_opt_ PULONG Disposition, 112 | _Out_opt_ PULONG Cookie 113 | ); 114 | 115 | NTSTATUS 116 | NTAPI 117 | LdrUnlockLoaderLock( 118 | _In_ ULONG Flags, 119 | _In_opt_ ULONG Cookie 120 | ); 121 | 122 | BOOLEAN 123 | NTAPI 124 | LdrVerifyMappedImageMatchesChecksum( 125 | _In_ PVOID BaseAddress, 126 | _In_ SIZE_T NumberOfBytes, 127 | _In_ ULONG FileLength 128 | ); 129 | 130 | PIMAGE_BASE_RELOCATION 131 | NTAPI 132 | LdrProcessRelocationBlockLongLong( 133 | _In_ ULONG_PTR Address, 134 | _In_ ULONG Count, 135 | _In_ PUSHORT TypeOffset, 136 | _In_ LONGLONG Delta 137 | ); 138 | 139 | NTSTATUS 140 | NTAPI 141 | LdrEnumerateLoadedModules( 142 | _In_ BOOLEAN ReservedFlag, 143 | _In_ PLDR_ENUM_CALLBACK EnumProc, 144 | _In_ PVOID Context 145 | ); 146 | 147 | #endif 148 | -------------------------------------------------------------------------------- /ndk/ldrtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ldrtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Loader. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _LDRTYPES_H 20 | #define _LDRTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Resource Type Levels 29 | // 30 | #define RESOURCE_TYPE_LEVEL 0 31 | #define RESOURCE_NAME_LEVEL 1 32 | #define RESOURCE_LANGUAGE_LEVEL 2 33 | #define RESOURCE_DATA_LEVEL 3 34 | 35 | // 36 | // Loader Data Table Entry Flags 37 | // 38 | #define LDRP_STATIC_LINK 0x00000002 39 | #define LDRP_IMAGE_DLL 0x00000004 40 | #define LDRP_LOAD_IN_PROGRESS 0x00001000 41 | #define LDRP_UNLOAD_IN_PROGRESS 0x00002000 42 | #define LDRP_ENTRY_PROCESSED 0x00004000 43 | #define LDRP_ENTRY_INSERTED 0x00008000 44 | #define LDRP_CURRENT_LOAD 0x00010000 45 | #define LDRP_FAILED_BUILTIN_LOAD 0x00020000 46 | #define LDRP_DONT_CALL_FOR_THREADS 0x00040000 47 | #define LDRP_PROCESS_ATTACH_CALLED 0x00080000 48 | #define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000 49 | #define LDRP_IMAGE_NOT_AT_BASE 0x00200000 50 | #define LDRP_COR_IMAGE 0x00400000 51 | #define LDR_COR_OWNS_UNMAP 0x00800000 52 | #define LDRP_SYSTEM_MAPPED 0x01000000 53 | #define LDRP_IMAGE_VERIFYING 0x02000000 54 | #define LDRP_DRIVER_DEPENDENT_DLL 0x04000000 55 | #define LDRP_ENTRY_NATIVE 0x08000000 56 | #define LDRP_REDIRECTED 0x10000000 57 | #define LDRP_NON_PAGED_DEBUG_INFO 0x20000000 58 | #define LDRP_MM_LOADED 0x40000000 59 | #define LDRP_COMPAT_DATABASE_PROCESSED 0x80000000 60 | 61 | // 62 | // Dll Characteristics for LdrLoadDll 63 | // 64 | #define LDR_IGNORE_CODE_AUTHZ_LEVEL 0x00001000 65 | 66 | // 67 | // LdrAddRef Flags 68 | // 69 | #define LDR_ADDREF_DLL_PIN 0x00000001 70 | 71 | // 72 | // LdrLockLoaderLock Flags 73 | // 74 | #define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS 0x00000001 75 | #define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002 76 | 77 | // 78 | // LdrUnlockLoaderLock Flags 79 | // 80 | #define LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS 0x00000001 81 | 82 | // 83 | // LdrGetDllHandleEx Flags 84 | // 85 | #define LDR_GET_DLL_HANDLE_EX_UNCHANGED_REFCOUNT 0x00000001 86 | #define LDR_GET_DLL_HANDLE_EX_PIN 0x00000002 87 | 88 | 89 | #define LDR_LOCK_LOADER_LOCK_DISPOSITION_INVALID 0 90 | #define LDR_LOCK_LOADER_LOCK_DISPOSITION_LOCK_ACQUIRED 1 91 | #define LDR_LOCK_LOADER_LOCK_DISPOSITION_LOCK_NOT_ACQUIRED 2 92 | 93 | // 94 | // FIXME: THIS SHOULD *NOT* BE USED! 95 | // 96 | #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 97 | 98 | // 99 | // Loader datafile/imagemapping macros 100 | // 101 | #define LDR_IS_DATAFILE(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)1) 102 | #define LDR_IS_IMAGEMAPPING(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)2) 103 | #define LDR_IS_RESOURCE(handle) (LDR_IS_IMAGEMAPPING(handle) || LDR_IS_DATAFILE(handle)) 104 | 105 | // 106 | // Activation Context 107 | // 108 | typedef PVOID PACTIVATION_CONTEXT; 109 | 110 | // 111 | // Loader Data stored in the PEB 112 | // 113 | typedef struct _PEB_LDR_DATA 114 | { 115 | ULONG Length; 116 | BOOLEAN Initialized; 117 | PVOID SsHandle; 118 | LIST_ENTRY InLoadOrderModuleList; 119 | LIST_ENTRY InMemoryOrderModuleList; 120 | LIST_ENTRY InInitializationOrderModuleList; 121 | PVOID EntryInProgress; 122 | #if (NTDDI_VERSION >= NTDDI_WIN7) 123 | UCHAR ShutdownInProgress; 124 | PVOID ShutdownThreadId; 125 | #endif 126 | } PEB_LDR_DATA, *PPEB_LDR_DATA; 127 | 128 | // 129 | // Loader Data Table Entry 130 | // 131 | typedef struct _LDR_DATA_TABLE_ENTRY 132 | { 133 | LIST_ENTRY InLoadOrderLinks; 134 | LIST_ENTRY InMemoryOrderModuleList; 135 | LIST_ENTRY InInitializationOrderModuleList; 136 | PVOID DllBase; 137 | PVOID EntryPoint; 138 | ULONG SizeOfImage; 139 | UNICODE_STRING FullDllName; 140 | UNICODE_STRING BaseDllName; 141 | ULONG Flags; 142 | USHORT LoadCount; 143 | USHORT TlsIndex; 144 | union 145 | { 146 | LIST_ENTRY HashLinks; 147 | struct 148 | { 149 | PVOID SectionPointer; 150 | ULONG CheckSum; 151 | }; 152 | }; 153 | union 154 | { 155 | ULONG TimeDateStamp; 156 | PVOID LoadedImports; 157 | }; 158 | PACTIVATION_CONTEXT EntryPointActivationContext; 159 | PVOID PatchInformation; 160 | } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; 161 | 162 | // 163 | // Loaded Imports Reference Counting in Kernel 164 | // 165 | typedef struct _LOAD_IMPORTS 166 | { 167 | SIZE_T Count; 168 | PLDR_DATA_TABLE_ENTRY Entry[1]; 169 | } LOAD_IMPORTS, *PLOAD_IMPORTS; 170 | 171 | // 172 | // Loader Resource Information 173 | // 174 | typedef struct _LDR_RESOURCE_INFO 175 | { 176 | ULONG_PTR Type; 177 | ULONG_PTR Name; 178 | ULONG_PTR Language; 179 | } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO; 180 | 181 | typedef struct _LDR_ENUM_RESOURCE_INFO 182 | { 183 | ULONG_PTR Type; 184 | ULONG_PTR Name; 185 | ULONG_PTR Language; 186 | PVOID Data; 187 | SIZE_T Size; 188 | ULONG_PTR Reserved; 189 | } LDR_ENUM_RESOURCE_INFO, *PLDR_ENUM_RESOURCE_INFO; 190 | 191 | // 192 | // DLL Notifications 193 | // 194 | typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA 195 | { 196 | ULONG Flags; 197 | PUNICODE_STRING FullDllName; 198 | PUNICODE_STRING BaseDllName; 199 | PVOID DllBase; 200 | ULONG SizeOfImage; 201 | } LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA; 202 | 203 | typedef VOID 204 | (NTAPI *PLDR_DLL_LOADED_NOTIFICATION_CALLBACK)( 205 | _In_ BOOLEAN Type, 206 | _In_ struct _LDR_DLL_LOADED_NOTIFICATION_DATA *Data 207 | ); 208 | 209 | typedef struct _LDR_DLL_LOADED_NOTIFICATION_ENTRY 210 | { 211 | LIST_ENTRY NotificationListEntry; 212 | PLDR_DLL_LOADED_NOTIFICATION_CALLBACK Callback; 213 | } LDR_DLL_LOADED_NOTIFICATION_ENTRY, *PLDR_DLL_LOADED_NOTIFICATION_ENTRY; 214 | 215 | // 216 | // Alternate Resources Support 217 | // 218 | typedef struct _ALT_RESOURCE_MODULE 219 | { 220 | LANGID LangId; 221 | PVOID ModuleBase; 222 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 223 | PVOID ModuleManifest; 224 | #endif 225 | PVOID AlternateModule; 226 | #if (NTDDI_VERSION >= NTDDI_LONGHORN) 227 | HANDLE AlternateFileHandle; 228 | ULONG ModuleCheckSum; 229 | ULONG ErrorCode; 230 | #endif 231 | } ALT_RESOURCE_MODULE, *PALT_RESOURCE_MODULE; 232 | 233 | // 234 | // Callback function for LdrEnumerateLoadedModules 235 | // 236 | typedef VOID (NTAPI LDR_ENUM_CALLBACK)(_In_ PLDR_DATA_TABLE_ENTRY ModuleInformation, _In_ PVOID Parameter, _Out_ BOOLEAN *Stop); 237 | typedef LDR_ENUM_CALLBACK *PLDR_ENUM_CALLBACK; 238 | 239 | // 240 | // Manifest prober routine set via LdrSetDllManifestProber 241 | // 242 | typedef NTSTATUS (NTAPI LDR_MANIFEST_PROBER_ROUTINE)(_In_ PVOID DllHandle, _In_ PCWSTR FullDllName, _Out_ PVOID *ActCtx); 243 | typedef LDR_MANIFEST_PROBER_ROUTINE *PLDR_MANIFEST_PROBER_ROUTINE; 244 | 245 | // 246 | // DLL Main Routine 247 | // 248 | typedef BOOLEAN 249 | (NTAPI *PDLL_INIT_ROUTINE)( 250 | _In_ PVOID DllHandle, 251 | _In_ ULONG Reason, 252 | _In_opt_ PCONTEXT Context 253 | ); 254 | 255 | #endif 256 | -------------------------------------------------------------------------------- /ndk/ndk.txt: -------------------------------------------------------------------------------- 1 | NDK LICENSE 2 | Version 1, November 2005 3 | Copyright (C) 2005-2012 Alex Ionescu. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in 12 | the documentation and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY ALEX IONESCU ``AS IS'' AND ANY EXPRESS 15 | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 | ARE DISCLAIMED. IN NO EVENT SHALL ALEX IONESCU OR THE NDK CONTRIBUTORS 18 | BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 19 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 20 | OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 21 | BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 22 | WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 23 | OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 24 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | 26 | The views and conclusions contained in the software and documentation 27 | are those of the authors and should not be interpreted as representing 28 | official policies, either expressed or implied, of Alex Ionescu or 29 | the NDK Project Contributors. 30 | -------------------------------------------------------------------------------- /ndk/ntdll.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arizvisa/ndk/6851da4ab49ca07ddae29b6d4d255726ad04ef86/ndk/ntdll.h -------------------------------------------------------------------------------- /ndk/ntndk.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | ntndk.h 8 | 9 | Abstract: 10 | 11 | Master include file for the Native Development Kit. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _NTNDK_ 20 | #define _NTNDK_ 21 | 22 | // 23 | // Disable some warnings that we'd get on /W4. 24 | // Only active for compilers which support this feature. 25 | // 26 | #ifdef _MSC_VER 27 | #pragma warning(push) 28 | #pragma warning(disable:4001) 29 | #pragma warning(disable:4201) 30 | #pragma warning(disable:4115) 31 | #pragma warning(disable:4214) 32 | #endif 33 | 34 | // 35 | // Use dummy macros, if SAL 2 is not available 36 | // 37 | #include 38 | #if (_SAL_VERSION < 20) 39 | #include 40 | #endif 41 | 42 | // 43 | // Headers needed for NDK 44 | // 45 | #include // C Standard Header 46 | #include // C Standard Header 47 | #include // C Standard Header 48 | #include // General Definitions 49 | 50 | // 51 | // Type Headers 52 | // 53 | #include // Cache Manager Types 54 | #include // Configuration Manager Types 55 | #include // User-Mode Kernel Debugging Types 56 | #include // Executive Types 57 | #include // Kernel Debugger Types 58 | #include // Kernel Types 59 | #include // Hardware Abstraction Layer Types 60 | #include // IFS Support Header 61 | #include // Input/Output Manager Types 62 | #include // Loader Types 63 | #include // Local Procedure Call Types 64 | #include // Memory Manager Types 65 | #include // Object Manager Types 66 | #include // Power Manager Types 67 | #include // Process Manager Types 68 | #include // Runtime Library Types 69 | #include // Security Subsystem Types 70 | #include // Verifier Types 71 | 72 | // 73 | // Function Headers 74 | // 75 | #include // Configuration Manager Functions 76 | //#include // User-Mode Kernel Debugging Functions 77 | #include // Kernel Debugger Functions 78 | #include // Kernel Functions 79 | #include // Executive Functions 80 | #include // Hardware Abstraction Layer Functions 81 | #include // Input/Output Manager Functions 82 | #include // Initialization Boot Video Functions 83 | #include // Loader Functions 84 | #include // Local Procedure Call Functions 85 | #include // Memory Manager Functions 86 | #include // Object Manager Functions 87 | #include // Power Manager Functions 88 | #include // Process Manager Functions 89 | #include // Runtime Library Functions 90 | #include // Security Subsystem Functions 91 | #include // User-Mode NT Library Functions 92 | #include // Verifier Functions 93 | #include // User-Mode Kernel Debugging Functions 94 | 95 | // 96 | // Assembly Support 97 | // 98 | #include // Assembly Offsets 99 | 100 | #ifdef _MSC_VER 101 | #pragma warning(pop) 102 | #endif 103 | #endif // _NTNDK_ 104 | -------------------------------------------------------------------------------- /ndk/ntnls.h: -------------------------------------------------------------------------------- 1 | /*++ 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Module Name: 6 | 7 | ntnls.h 8 | 9 | Abstract: 10 | 11 | NLS file formats and data types 12 | 13 | 14 | Revision History: 15 | 16 | --*/ 17 | 18 | #ifndef _NTNLS_ 19 | #define _NTNLS_ 20 | 21 | #if _MSC_VER > 1000 22 | #pragma once 23 | #endif 24 | 25 | #ifdef __cplusplus 26 | extern "C" { 27 | #endif 28 | 29 | #define MAXIMUM_LEADBYTES 12 30 | 31 | typedef struct _CPTABLEINFO { 32 | USHORT CodePage; // code page number 33 | USHORT MaximumCharacterSize; // max length (bytes) of a char 34 | USHORT DefaultChar; // default character (MB) 35 | USHORT UniDefaultChar; // default character (Unicode) 36 | USHORT TransDefaultChar; // translation of default char (Unicode) 37 | USHORT TransUniDefaultChar; // translation of Unic default char (MB) 38 | USHORT DBCSCodePage; // Non 0 for DBCS code pages 39 | UCHAR LeadByte[MAXIMUM_LEADBYTES]; // lead byte ranges 40 | PUSHORT MultiByteTable; // pointer to MB translation table 41 | PVOID WideCharTable; // pointer to WC translation table 42 | PUSHORT DBCSRanges; // pointer to DBCS ranges 43 | PUSHORT DBCSOffsets; // pointer to DBCS offsets 44 | } CPTABLEINFO, *PCPTABLEINFO; 45 | 46 | typedef struct _NLSTABLEINFO { 47 | CPTABLEINFO OemTableInfo; 48 | CPTABLEINFO AnsiTableInfo; 49 | PUSHORT UpperCaseTable; // 844 format upcase table 50 | PUSHORT LowerCaseTable; // 844 format lower case table 51 | } NLSTABLEINFO, *PNLSTABLEINFO; 52 | 53 | #ifdef __cplusplus 54 | } 55 | #endif 56 | 57 | #endif // _NTNLS_ 58 | -------------------------------------------------------------------------------- /ndk/pofuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | pofuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Power Subsystem. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _POFUNCS_H 20 | #define _POFUNCS_H 21 | #ifndef _PO_DDK_ 22 | 23 | // 24 | // Dependencies 25 | // 26 | #include 27 | 28 | // 29 | // Native Calls 30 | // 31 | NTSYSCALLAPI 32 | NTSTATUS 33 | NTAPI 34 | NtInitiatePowerAction( 35 | _In_ POWER_ACTION SystemAction, 36 | _In_ SYSTEM_POWER_STATE MinSystemState, 37 | _In_ ULONG Flags, 38 | _In_ BOOLEAN Asynchronous 39 | ); 40 | 41 | NTSYSCALLAPI 42 | NTSTATUS 43 | NTAPI 44 | NtPowerInformation( 45 | _In_ POWER_INFORMATION_LEVEL PowerInformationLevel, 46 | _In_bytecount_(InputBufferLength) PVOID InputBuffer, 47 | _In_ ULONG InputBufferLength, 48 | _Out_bytecap_(OutputBufferLength) PVOID OutputBuffer, 49 | _In_ ULONG OutputBufferLength 50 | ); 51 | 52 | NTSYSCALLAPI 53 | NTSTATUS 54 | NTAPI 55 | NtSetSystemPowerState( 56 | _In_ POWER_ACTION SystemAction, 57 | _In_ SYSTEM_POWER_STATE MinSystemState, 58 | _In_ ULONG Flags 59 | ); 60 | 61 | NTSYSCALLAPI 62 | NTSTATUS 63 | NTAPI 64 | NtGetDevicePowerState( 65 | _In_ HANDLE Device, 66 | _In_ PDEVICE_POWER_STATE PowerState 67 | ); 68 | 69 | NTSYSCALLAPI 70 | NTSTATUS 71 | NTAPI 72 | NtRequestWakeupLatency( 73 | _In_ LATENCY_TIME latency 74 | ); 75 | 76 | NTSYSCALLAPI 77 | BOOLEAN 78 | NTAPI 79 | NtIsSystemResumeAutomatic(VOID); 80 | 81 | NTSYSCALLAPI 82 | NTSTATUS 83 | NTAPI 84 | NtSetThreadExecutionState( 85 | _In_ EXECUTION_STATE esFlags, 86 | _Out_ EXECUTION_STATE *PreviousFlags 87 | ); 88 | 89 | NTSYSCALLAPI 90 | NTSTATUS 91 | NTAPI 92 | NtInitiatePowerAction( 93 | _In_ POWER_ACTION SystemAction, 94 | _In_ SYSTEM_POWER_STATE MinSystemState, 95 | _In_ ULONG Flags, 96 | _In_ BOOLEAN Asynchronous 97 | ); 98 | 99 | NTSYSCALLAPI 100 | NTSTATUS 101 | NTAPI 102 | NtRequestDeviceWakeup( 103 | _In_ HANDLE Device 104 | ); 105 | 106 | NTSYSCALLAPI 107 | NTSTATUS 108 | NTAPI 109 | NtCancelDeviceWakeupRequest( 110 | _In_ HANDLE Device 111 | ); 112 | #endif 113 | #ifndef NTOS_MODE_USER 114 | typedef VOID(*PPO_COALESCING_CALLBACK) ( 115 | _In_ ULONG Reason, 116 | _In_ PDEVICE_OBJECT DeviceObject, 117 | _In_ PVOID Context); 118 | 119 | NTSTATUS PoRegisterCoalescingCallback( 120 | _In_ PPO_COALESCING_CALLBACK Callback, 121 | _In_ BOOLEAN ClientOrSrever, 122 | _Out_ PVOID* Handle, 123 | _In_ PVOID Context); 124 | 125 | VOID PoUnregisterCoalescingCallback( 126 | _In_ PVOID Handle); 127 | #endif 128 | 129 | NTSYSAPI 130 | NTSTATUS 131 | NTAPI 132 | ZwInitiatePowerAction( 133 | _In_ POWER_ACTION SystemAction, 134 | _In_ SYSTEM_POWER_STATE MinSystemState, 135 | _In_ ULONG Flags, 136 | _In_ BOOLEAN Asynchronous 137 | ); 138 | 139 | _IRQL_requires_max_(PASSIVE_LEVEL) 140 | NTSYSAPI 141 | NTSTATUS 142 | NTAPI 143 | ZwPowerInformation( 144 | _In_ POWER_INFORMATION_LEVEL InformationLevel, 145 | _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, 146 | _In_ ULONG InputBufferLength, 147 | _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, 148 | _In_ ULONG OutputBufferLength 149 | ); 150 | 151 | NTSYSCALLAPI 152 | NTSTATUS 153 | NTAPI 154 | ZwSetSystemPowerState( 155 | _In_ POWER_ACTION SystemAction, 156 | _In_ SYSTEM_POWER_STATE MinSystemState, 157 | _In_ ULONG Flags 158 | ); 159 | #endif 160 | -------------------------------------------------------------------------------- /ndk/potypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | potypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Power Subystem 12 | 13 | Author: 14 | 15 | Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 | 17 | --*/ 18 | 19 | #ifndef _POTYPES_H 20 | #define _POTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #ifndef NTOS_MODE_USER 27 | #include 28 | #endif 29 | 30 | // 31 | // Docking states 32 | // 33 | typedef enum _SYSTEM_DOCK_STATE 34 | { 35 | SystemDockStateUnknown, 36 | SystemUndocked, 37 | SystemDocked 38 | } SYSTEM_DOCK_STATE, *PSYSTEM_DOCK_STATE; 39 | 40 | #ifndef NTOS_MODE_USER 41 | 42 | // 43 | // Processor Power State Data 44 | // 45 | struct _PROCESSOR_POWER_STATE; 46 | 47 | typedef 48 | VOID 49 | (FASTCALL *PPROCESSOR_IDLE_FUNCTION)( 50 | struct _PROCESSOR_POWER_STATE *PState); 51 | 52 | typedef struct _PROCESSOR_PERF_STATE { 53 | UCHAR PercentFrequency; 54 | UCHAR MinCapacity; 55 | USHORT Power; 56 | UCHAR IncreaseLevel; 57 | UCHAR DecreaseLevel; 58 | USHORT Flags; 59 | ULONG IncreaseTime; 60 | ULONG DecreaseTime; 61 | ULONG IncreaseCount; 62 | ULONG DecreaseCount; 63 | ULONGLONG PerformanceTime; 64 | } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE; 65 | 66 | typedef struct _PROCESSOR_POWER_STATE 67 | { 68 | PPROCESSOR_IDLE_FUNCTION IdleFunction; 69 | ULONG Idle0KernelTimeLimit; 70 | ULONG Idle0LastTime; 71 | PVOID IdleHandlers; 72 | PVOID IdleState; 73 | ULONG IdleHandlersCount; 74 | ULONGLONG LastCheck; 75 | PROCESSOR_IDLE_TIMES IdleTimes; 76 | ULONG IdleTime1; 77 | ULONG PromotionCheck; 78 | ULONG IdleTime2; 79 | UCHAR CurrentThrottle; 80 | UCHAR ThermalThrottleLimit; 81 | UCHAR CurrentThrottleIndex; 82 | UCHAR ThermalThrottleIndex; 83 | ULONG LastKernelUserTime; 84 | ULONG PerfIdleTime; 85 | ULONGLONG DebugDelta; 86 | ULONG DebugCount; 87 | ULONG LastSysTime; 88 | ULONGLONG TotalIdleStateTime[3]; 89 | ULONG TotalIdleTransitions[3]; 90 | ULONGLONG PreviousC3StateTime; 91 | UCHAR KneeThrottleIndex; 92 | UCHAR ThrottleLimitIndex; 93 | UCHAR PerfStatesCount; 94 | UCHAR ProcessorMinThrottle; 95 | UCHAR ProcessorMaxThrottle; 96 | UCHAR LastBusyPercentage; 97 | UCHAR LastC3Percentage; 98 | UCHAR LastAdjustedBusyPercentage; 99 | ULONG PromotionCount; 100 | ULONG DemotionCount; 101 | ULONG ErrorCount; 102 | ULONG RetryCount; 103 | ULONG Flags; 104 | LARGE_INTEGER PerfCounterFrequency; 105 | ULONG PerfTickCount; 106 | KTIMER PerfTimer; 107 | KDPC PerfDpc; 108 | PROCESSOR_PERF_STATE *PerfStates; 109 | PVOID PerfSetThrottle; 110 | ULONG LastC3KernelUserTime; 111 | ULONG Spare1[1]; 112 | } PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE; 113 | 114 | // 115 | // Device Notification Structure 116 | // 117 | typedef struct _PO_DEVICE_NOTIFY 118 | { 119 | LIST_ENTRY Link; 120 | PDEVICE_OBJECT TargetDevice; 121 | UCHAR WakeNeeded; 122 | UCHAR OrderLevel; 123 | PDEVICE_OBJECT DeviceObject; 124 | PVOID Node; 125 | PUSHORT DeviceName; 126 | PUSHORT DriverName; 127 | ULONG ChildCount; 128 | ULONG ActiveChild; 129 | } PO_DEVICE_NOTIFY, *PPO_DEVICE_NOTIFY; 130 | 131 | // 132 | // Power IRP Queue 133 | // 134 | typedef struct _PO_IRP_QUEUE 135 | { 136 | PIRP CurrentIrp; 137 | PIRP PendingIrpList; 138 | } PO_IRP_QUEUE, *PPO_IRP_QUEUE; 139 | 140 | // Power IRP Manager 141 | typedef struct _PO_IRP_MANAGER 142 | { 143 | PO_IRP_QUEUE DeviceIrpQueue; 144 | PO_IRP_QUEUE SystemIrpQueue; 145 | } PO_IRP_MANAGER, *PPO_IRP_MANAGER; 146 | 147 | #endif // !NTOS_MODE_USER 148 | 149 | #endif // _POTYPES_H 150 | -------------------------------------------------------------------------------- /ndk/powerpc/mmtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | mmtypes.h (PPC) 8 | 9 | Abstract: 10 | 11 | PowerPC Type definitions for the Memory Manager 12 | 13 | Author: 14 | 15 | Art Yerkes (ayerkes@speakeasy.net) 04-Dec-2005 16 | 17 | --*/ 18 | 19 | #ifndef _POWERPC_MMTYPES_H 20 | #define _POWERPC_MMTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | 26 | // 27 | // Page-related Macros 28 | // 29 | #define PAGE_SIZE 0x1000 30 | #define PAGE_SHIFT 12L 31 | 32 | typedef unsigned long long MMPTE_HARDWARE; 33 | typedef unsigned long long MMPTE_SOFTWARE; 34 | typedef unsigned long long MMPTE_PROTOTYPE; 35 | typedef unsigned long long MMPTE_SUBSECTION; 36 | typedef unsigned long long MMPTE_TRANSITION; 37 | typedef unsigned long long MMPTE_LIST; 38 | 39 | // 40 | // Page Table Entry Definition 41 | // 42 | typedef struct _HARDWARE_PTE_PPC 43 | { 44 | ULONG Dirty:2; 45 | ULONG Valid:1; 46 | ULONG GuardedStorage:1; 47 | ULONG MemoryCoherence:1; 48 | ULONG CacheDisable:1; 49 | ULONG WriteThrough:1; 50 | ULONG Change:1; 51 | ULONG Reference:1; 52 | ULONG Write:1; 53 | ULONG CopyOnWrite:1; 54 | ULONG rsvd1:1; 55 | ULONG PageFrameNumber:20; 56 | } HARDWARE_PTE_PPC, *PHARDWARE_PTE_PPC; 57 | 58 | #ifndef HARDWARE_PTE 59 | #define HARDWARE_PTE HARDWARE_PTE_PPC 60 | #define PHARDWARE_PTE PHARDWARE_PTE_PPC 61 | #endif 62 | 63 | #endif/*_POWERPC_MMTYPES_H*/ 64 | -------------------------------------------------------------------------------- /ndk/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arizvisa/ndk/6851da4ab49ca07ddae29b6d4d255726ad04ef86/ndk/readme.txt -------------------------------------------------------------------------------- /ndk/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | if(ARCH STREQUAL "amd64") 3 | add_library(ndk_tests 4 | win2003_x64.c 5 | winvista_x64.c 6 | win7_x64.c) 7 | else() 8 | add_library(ndk_tests 9 | win2003_x86.c 10 | winvista_x86.c 11 | win7_x86.c) 12 | endif() 13 | -------------------------------------------------------------------------------- /ndk/tests/win2003_x64.c: -------------------------------------------------------------------------------- 1 | /* Version definitions */ 2 | #undef NTDDI_VERSION 3 | #define NTDDI_VERSION NTDDI_WS03SP1 4 | #undef _WIN32_WINNT 5 | #define _WIN32_WINNT _WIN32_WINNT_WS03 6 | 7 | #include 8 | #include 9 | 10 | #define C_ASSERT_FIELD(Type, Offset, MemberType, MemberName) C_ASSERT(FIELD_OFFSET(Type, MemberName) == Offset); 11 | 12 | /* KTHREAD */ 13 | C_ASSERT_FIELD(KTHREAD, 0x000, DISPATCHER_HEADER, Header) 14 | C_ASSERT_FIELD(KTHREAD, 0x018, LIST_ENTRY, MutantListHead) 15 | C_ASSERT_FIELD(KTHREAD, 0x028, PVOID, InitialStack) 16 | C_ASSERT_FIELD(KTHREAD, 0x030, PVOID, StackLimit) 17 | C_ASSERT_FIELD(KTHREAD, 0x038, PVOID, KernelStack) 18 | C_ASSERT_FIELD(KTHREAD, 0x040, ULONG64, ThreadLock) 19 | C_ASSERT_FIELD(KTHREAD, 0x048, KAPC_STATE, ApcState) 20 | C_ASSERT_FIELD(KTHREAD, 0x048, UCHAR, ApcStateFill) 21 | C_ASSERT_FIELD(KTHREAD, 0x073, UCHAR, ApcQueueable) 22 | C_ASSERT_FIELD(KTHREAD, 0x074, UCHAR, NextProcessor) 23 | C_ASSERT_FIELD(KTHREAD, 0x075, UCHAR, DeferredProcessor) 24 | C_ASSERT_FIELD(KTHREAD, 0x076, UCHAR, AdjustReason) 25 | C_ASSERT_FIELD(KTHREAD, 0x077, CHAR, AdjustIncrement) 26 | C_ASSERT_FIELD(KTHREAD, 0x078, ULONG64, ApcQueueLock) 27 | C_ASSERT_FIELD(KTHREAD, 0x080, LONG64, WaitStatus) 28 | C_ASSERT_FIELD(KTHREAD, 0x088, KWAIT_BLOCK*, WaitBlockList) 29 | C_ASSERT_FIELD(KTHREAD, 0x088, KGATE*, GateObject) 30 | C_ASSERT_FIELD(KTHREAD, 0x090, UCHAR, Alertable) 31 | C_ASSERT_FIELD(KTHREAD, 0x091, UCHAR, WaitNext) 32 | C_ASSERT_FIELD(KTHREAD, 0x092, UCHAR, WaitReason) 33 | C_ASSERT_FIELD(KTHREAD, 0x093, CHAR, Priority) 34 | C_ASSERT_FIELD(KTHREAD, 0x094, UCHAR, EnableStackSwap) 35 | C_ASSERT_FIELD(KTHREAD, 0x095, UCHAR, SwapBusy) 36 | C_ASSERT_FIELD(KTHREAD, 0x096, UCHAR, Alerted) 37 | C_ASSERT_FIELD(KTHREAD, 0x098, LIST_ENTRY, WaitListEntry) 38 | C_ASSERT_FIELD(KTHREAD, 0x098, SINGLE_LIST_ENTRY, SwapListEntry) 39 | C_ASSERT_FIELD(KTHREAD, 0x0A8, KQUEUE*, Queue) 40 | C_ASSERT_FIELD(KTHREAD, 0x0B0, PVOID, Teb) 41 | C_ASSERT_FIELD(KTHREAD, 0x0B8, KTIMER, Timer) 42 | C_ASSERT_FIELD(KTHREAD, 0x0B8, UCHAR, TimerFill) 43 | C_ASSERT_FIELD(KTHREAD, 0x0F4, LONG, ThreadFlags) 44 | C_ASSERT_FIELD(KTHREAD, 0x0F8, KWAIT_BLOCK, WaitBlock) 45 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill0) 46 | C_ASSERT_FIELD(KTHREAD, 0x123, UCHAR, SystemAffinityActive) 47 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill1) 48 | C_ASSERT_FIELD(KTHREAD, 0x153, CHAR, PreviousMode) 49 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill2) 50 | C_ASSERT_FIELD(KTHREAD, 0x183, UCHAR, ResourceIndex) 51 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill3) 52 | C_ASSERT_FIELD(KTHREAD, 0x1B3, UCHAR, LargeStack) 53 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill4) 54 | C_ASSERT_FIELD(KTHREAD, 0x124, ULONG, ContextSwitches) 55 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill5) 56 | C_ASSERT_FIELD(KTHREAD, 0x154, UCHAR, State) 57 | C_ASSERT_FIELD(KTHREAD, 0x155, UCHAR, NpxState) 58 | C_ASSERT_FIELD(KTHREAD, 0x156, UCHAR, WaitIrql) 59 | C_ASSERT_FIELD(KTHREAD, 0x157, CHAR, WaitMode) 60 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill6) 61 | C_ASSERT_FIELD(KTHREAD, 0x184, ULONG, WaitTime) 62 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill7) 63 | C_ASSERT_FIELD(KTHREAD, 0x1B4, SHORT, KernelApcDisable) 64 | C_ASSERT_FIELD(KTHREAD, 0x1B6, SHORT, SpecialApcDisable) 65 | C_ASSERT_FIELD(KTHREAD, 0x1B4, ULONG, CombinedApcDisable) 66 | C_ASSERT_FIELD(KTHREAD, 0x1B8, LIST_ENTRY, QueueListEntry) 67 | C_ASSERT_FIELD(KTHREAD, 0x1C8, KTRAP_FRAME*, TrapFrame) 68 | C_ASSERT_FIELD(KTHREAD, 0x1D0, PVOID, CallbackStack) 69 | C_ASSERT_FIELD(KTHREAD, 0x1D8, PVOID, ServiceTable) 70 | C_ASSERT_FIELD(KTHREAD, 0x1E0, ULONG, KernelLimit) 71 | C_ASSERT_FIELD(KTHREAD, 0x1E4, UCHAR, ApcStateIndex) 72 | C_ASSERT_FIELD(KTHREAD, 0x1E5, UCHAR, IdealProcessor) 73 | C_ASSERT_FIELD(KTHREAD, 0x1E6, UCHAR, Preempted) 74 | C_ASSERT_FIELD(KTHREAD, 0x1E7, UCHAR, ProcessReadyQueue) 75 | C_ASSERT_FIELD(KTHREAD, 0x1E8, PVOID, Win32kTable) 76 | C_ASSERT_FIELD(KTHREAD, 0x1F0, ULONG, Win32kLimit) 77 | C_ASSERT_FIELD(KTHREAD, 0x1F4, UCHAR, KernelStackResident) 78 | C_ASSERT_FIELD(KTHREAD, 0x1F5, CHAR, BasePriority) 79 | C_ASSERT_FIELD(KTHREAD, 0x1F6, CHAR, PriorityDecrement) 80 | C_ASSERT_FIELD(KTHREAD, 0x1F7, CHAR, Saturation) 81 | C_ASSERT_FIELD(KTHREAD, 0x1F8, ULONG64, UserAffinity) 82 | C_ASSERT_FIELD(KTHREAD, 0x200, KPROCESS*, Process) 83 | C_ASSERT_FIELD(KTHREAD, 0x208, ULONG64, Affinity) 84 | C_ASSERT_FIELD(KTHREAD, 0x210, KAPC_STATE*, ApcStatePointer) 85 | C_ASSERT_FIELD(KTHREAD, 0x220, KAPC_STATE, SavedApcState) 86 | C_ASSERT_FIELD(KTHREAD, 0x220, UCHAR, SavedApcStateFill) 87 | C_ASSERT_FIELD(KTHREAD, 0x24B, CHAR, FreezeCount) 88 | C_ASSERT_FIELD(KTHREAD, 0x24C, CHAR, SuspendCount) 89 | C_ASSERT_FIELD(KTHREAD, 0x24D, UCHAR, UserIdealProcessor) 90 | C_ASSERT_FIELD(KTHREAD, 0x24E, UCHAR, CalloutActive) 91 | C_ASSERT_FIELD(KTHREAD, 0x24F, UCHAR, CodePatchInProgress) 92 | C_ASSERT_FIELD(KTHREAD, 0x250, PVOID, Win32Thread) 93 | C_ASSERT_FIELD(KTHREAD, 0x258, PVOID, StackBase) 94 | C_ASSERT_FIELD(KTHREAD, 0x260, KAPC, SuspendApc) 95 | C_ASSERT_FIELD(KTHREAD, 0x260, UCHAR, SuspendApcFill0) 96 | C_ASSERT_FIELD(KTHREAD, 0x261, CHAR, Quantum) 97 | C_ASSERT_FIELD(KTHREAD, 0x260, UCHAR, SuspendApcFill1) 98 | C_ASSERT_FIELD(KTHREAD, 0x263, UCHAR, QuantumReset) 99 | C_ASSERT_FIELD(KTHREAD, 0x260, UCHAR, SuspendApcFill2) 100 | C_ASSERT_FIELD(KTHREAD, 0x264, ULONG, KernelTime) 101 | C_ASSERT_FIELD(KTHREAD, 0x260, UCHAR, SuspendApcFill3) 102 | C_ASSERT_FIELD(KTHREAD, 0x2A0, PVOID, TlsArray) 103 | C_ASSERT_FIELD(KTHREAD, 0x260, UCHAR, SuspendApcFill4) 104 | C_ASSERT_FIELD(KTHREAD, 0x2A8, PVOID, LegoData) 105 | C_ASSERT_FIELD(KTHREAD, 0x260, UCHAR, SuspendApcFill5) 106 | C_ASSERT_FIELD(KTHREAD, 0x2B3, UCHAR, PowerState) 107 | C_ASSERT_FIELD(KTHREAD, 0x2B4, ULONG, UserTime) 108 | C_ASSERT_FIELD(KTHREAD, 0x2B8, KSEMAPHORE, SuspendSemaphore) 109 | C_ASSERT_FIELD(KTHREAD, 0x2B8, UCHAR, SuspendSemaphorefill) 110 | C_ASSERT_FIELD(KTHREAD, 0x2D4, ULONG, SListFaultCount) 111 | C_ASSERT_FIELD(KTHREAD, 0x2D8, LIST_ENTRY, ThreadListEntry) 112 | C_ASSERT_FIELD(KTHREAD, 0x2E8, PVOID, SListFaultAddress) 113 | C_ASSERT_FIELD(KTHREAD, 0x2F0, LONG64, ReadOperationCount) 114 | C_ASSERT_FIELD(KTHREAD, 0x2F8, LONG64, WriteOperationCount) 115 | C_ASSERT_FIELD(KTHREAD, 0x300, LONG64, OtherOperationCount) 116 | C_ASSERT_FIELD(KTHREAD, 0x308, LONG64, ReadTransferCount) 117 | C_ASSERT_FIELD(KTHREAD, 0x310, LONG64, WriteTransferCount) 118 | C_ASSERT_FIELD(KTHREAD, 0x318, LONG64, OtherTransferCount) 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /ndk/tests/win2003_x86.c: -------------------------------------------------------------------------------- 1 | /* Version definitions */ 2 | #undef NTDDI_VERSION 3 | #define NTDDI_VERSION NTDDI_WS03SP1 4 | #undef _WIN32_WINNT 5 | #define _WIN32_WINNT _WIN32_WINNT_WS03 6 | 7 | #include 8 | #include 9 | 10 | #define C_ASSERT_FIELD(Type, Offset, MemberType, MemberName) C_ASSERT(FIELD_OFFSET(Type, MemberName) == Offset); 11 | 12 | /* KTHREAD */ 13 | C_ASSERT_FIELD(KTHREAD, 0x000, DISPATCHER_HEADER, Header) 14 | C_ASSERT_FIELD(KTHREAD, 0x010, LIST_ENTRY, MutantListHead) 15 | C_ASSERT_FIELD(KTHREAD, 0x018, PVOID, InitialStack) 16 | C_ASSERT_FIELD(KTHREAD, 0x01C, PVOID, StackLimit) 17 | C_ASSERT_FIELD(KTHREAD, 0x020, PVOID, KernelStack) 18 | C_ASSERT_FIELD(KTHREAD, 0x024, ULONG, ThreadLock) 19 | C_ASSERT_FIELD(KTHREAD, 0x028, KAPC_STATE, ApcState) 20 | C_ASSERT_FIELD(KTHREAD, 0x028, UCHAR, ApcStateFill) 21 | C_ASSERT_FIELD(KTHREAD, 0x03F, UCHAR, ApcQueueable) 22 | C_ASSERT_FIELD(KTHREAD, 0x040, UCHAR, NextProcessor) 23 | C_ASSERT_FIELD(KTHREAD, 0x041, UCHAR, DeferredProcessor) 24 | C_ASSERT_FIELD(KTHREAD, 0x042, UCHAR, AdjustReason) 25 | C_ASSERT_FIELD(KTHREAD, 0x043, CHAR, AdjustIncrement) 26 | C_ASSERT_FIELD(KTHREAD, 0x044, ULONG, ApcQueueLock) 27 | C_ASSERT_FIELD(KTHREAD, 0x048, ULONG, ContextSwitches) 28 | C_ASSERT_FIELD(KTHREAD, 0x04C, UCHAR, State) 29 | C_ASSERT_FIELD(KTHREAD, 0x04D, UCHAR, NpxState) 30 | C_ASSERT_FIELD(KTHREAD, 0x04E, UCHAR, WaitIrql) 31 | C_ASSERT_FIELD(KTHREAD, 0x04F, CHAR, WaitMode) 32 | C_ASSERT_FIELD(KTHREAD, 0x050, LONG, WaitStatus) 33 | C_ASSERT_FIELD(KTHREAD, 0x054, PKWAIT_BLOCK, WaitBlockList) 34 | C_ASSERT_FIELD(KTHREAD, 0x054, PKGATE, GateObject) 35 | C_ASSERT_FIELD(KTHREAD, 0x058, UCHAR, Alertable) 36 | C_ASSERT_FIELD(KTHREAD, 0x059, UCHAR, WaitNext) 37 | C_ASSERT_FIELD(KTHREAD, 0x05A, UCHAR, WaitReason) 38 | C_ASSERT_FIELD(KTHREAD, 0x05B, CHAR, Priority) 39 | C_ASSERT_FIELD(KTHREAD, 0x05C, UCHAR, EnableStackSwap) 40 | C_ASSERT_FIELD(KTHREAD, 0x05D, UCHAR, SwapBusy) 41 | C_ASSERT_FIELD(KTHREAD, 0x05E, UCHAR, Alerted) 42 | C_ASSERT_FIELD(KTHREAD, 0x060, LIST_ENTRY, WaitListEntry) 43 | C_ASSERT_FIELD(KTHREAD, 0x060, SINGLE_LIST_ENTRY, SwapListEntry) 44 | C_ASSERT_FIELD(KTHREAD, 0x068, KQUEUE*, Queue) 45 | C_ASSERT_FIELD(KTHREAD, 0x06C, ULONG, WaitTime) 46 | C_ASSERT_FIELD(KTHREAD, 0x070, INT16, KernelApcDisable) 47 | C_ASSERT_FIELD(KTHREAD, 0x072, INT16, SpecialApcDisable) 48 | C_ASSERT_FIELD(KTHREAD, 0x070, ULONG, CombinedApcDisable) 49 | C_ASSERT_FIELD(KTHREAD, 0x074, PVOID, Teb) 50 | C_ASSERT_FIELD(KTHREAD, 0x078, KTIMER, Timer) 51 | C_ASSERT_FIELD(KTHREAD, 0x078, UCHAR, TimerFill) 52 | //C_ASSERT_FIELD(KTHREAD, 0x0A0, LONG, AutoAlignment) 53 | //C_ASSERT_FIELD(KTHREAD, 0x0A0, LONG, DisableBoost) 54 | //C_ASSERT_FIELD(KTHREAD, 0x0A0, LONG, ReservedFlags) 55 | C_ASSERT_FIELD(KTHREAD, 0x0A0, LONG, ThreadFlags) 56 | C_ASSERT_FIELD(KTHREAD, 0x0A8, KWAIT_BLOCK, WaitBlock) 57 | C_ASSERT_FIELD(KTHREAD, 0x0A8, UCHAR, WaitBlockFill0) 58 | C_ASSERT_FIELD(KTHREAD, 0x0BF, UCHAR, SystemAffinityActive) 59 | C_ASSERT_FIELD(KTHREAD, 0x0A8, UCHAR, WaitBlockFill1) 60 | C_ASSERT_FIELD(KTHREAD, 0x0D7, CHAR, PreviousMode) 61 | C_ASSERT_FIELD(KTHREAD, 0x0A8, UCHAR, WaitBlockFill2) 62 | C_ASSERT_FIELD(KTHREAD, 0x0EF, UCHAR, ResourceIndex) 63 | C_ASSERT_FIELD(KTHREAD, 0x0A8, UCHAR, WaitBlockFill3) 64 | C_ASSERT_FIELD(KTHREAD, 0x107, UCHAR, LargeStack) 65 | C_ASSERT_FIELD(KTHREAD, 0x108, LIST_ENTRY, QueueListEntry) 66 | C_ASSERT_FIELD(KTHREAD, 0x110, PKTRAP_FRAME, TrapFrame) 67 | C_ASSERT_FIELD(KTHREAD, 0x114, PVOID, CallbackStack) 68 | C_ASSERT_FIELD(KTHREAD, 0x118, PVOID, ServiceTable) 69 | C_ASSERT_FIELD(KTHREAD, 0x11C, UCHAR, ApcStateIndex) 70 | C_ASSERT_FIELD(KTHREAD, 0x11D, UCHAR, IdealProcessor) 71 | C_ASSERT_FIELD(KTHREAD, 0x11E, UCHAR, Preempted) 72 | C_ASSERT_FIELD(KTHREAD, 0x11F, UCHAR, ProcessReadyQueue) 73 | C_ASSERT_FIELD(KTHREAD, 0x120, UCHAR, KernelStackResident) 74 | C_ASSERT_FIELD(KTHREAD, 0x121, CHAR, BasePriority) 75 | C_ASSERT_FIELD(KTHREAD, 0x122, CHAR, PriorityDecrement) 76 | C_ASSERT_FIELD(KTHREAD, 0x123, CHAR, Saturation) 77 | C_ASSERT_FIELD(KTHREAD, 0x124, ULONG, UserAffinity) 78 | C_ASSERT_FIELD(KTHREAD, 0x128, PKPROCESS, Process) 79 | C_ASSERT_FIELD(KTHREAD, 0x12C, ULONG, Affinity) 80 | C_ASSERT_FIELD(KTHREAD, 0x130, PKAPC_STATE, ApcStatePointer) 81 | C_ASSERT_FIELD(KTHREAD, 0x138, KAPC_STATE, SavedApcState) 82 | C_ASSERT_FIELD(KTHREAD, 0x138, UCHAR, SavedApcStateFill) 83 | C_ASSERT_FIELD(KTHREAD, 0x14F, CHAR, FreezeCount) 84 | C_ASSERT_FIELD(KTHREAD, 0x150, CHAR, SuspendCount) 85 | C_ASSERT_FIELD(KTHREAD, 0x151, UCHAR, UserIdealProcessor) 86 | C_ASSERT_FIELD(KTHREAD, 0x152, UCHAR, CalloutActive) 87 | C_ASSERT_FIELD(KTHREAD, 0x153, UCHAR, Iopl) 88 | 89 | -------------------------------------------------------------------------------- /ndk/tests/win7_x64.c: -------------------------------------------------------------------------------- 1 | /* Version definitions */ 2 | #undef NTDDI_VERSION 3 | #define NTDDI_VERSION NTDDI_WIN7 4 | #undef _WIN32_WINNT 5 | #define _WIN32_WINNT _WIN32_WINNT_WIN7 6 | 7 | #include 8 | #include 9 | 10 | #define C_ASSERT_FIELD(Type, Offset, MemberType, MemberName) C_ASSERT(FIELD_OFFSET(Type, MemberName) == Offset); 11 | 12 | /* KTHREAD */ 13 | 14 | C_ASSERT_FIELD(KTHREAD, 0x000, DISPATCHER_HEADER, Header) 15 | C_ASSERT_FIELD(KTHREAD, 0x018, ULONG64, CycleTime) 16 | C_ASSERT_FIELD(KTHREAD, 0x020, ULONG64, QuantumTarget) 17 | C_ASSERT_FIELD(KTHREAD, 0x028, PVOID, InitialStack) 18 | C_ASSERT_FIELD(KTHREAD, 0x030, PVOID, StackLimit) 19 | C_ASSERT_FIELD(KTHREAD, 0x038, PVOID, KernelStack) 20 | C_ASSERT_FIELD(KTHREAD, 0x040, ULONG64, ThreadLock) 21 | C_ASSERT_FIELD(KTHREAD, 0x048, KWAIT_STATUS_REGISTER, WaitRegister) 22 | C_ASSERT_FIELD(KTHREAD, 0x049, UCHAR, Running) 23 | C_ASSERT_FIELD(KTHREAD, 0x04A, UCHAR, Alerted) 24 | C_ASSERT_FIELD(KTHREAD, 0x04C, LONG, MiscFlags) 25 | C_ASSERT_FIELD(KTHREAD, 0x050, KAPC_STATE, ApcState) 26 | C_ASSERT_FIELD(KTHREAD, 0x050, UCHAR, ApcStateFill) 27 | C_ASSERT_FIELD(KTHREAD, 0x07B, CHAR, Priority) 28 | C_ASSERT_FIELD(KTHREAD, 0x07C, ULONG, NextProcessor) 29 | C_ASSERT_FIELD(KTHREAD, 0x080, ULONG, DeferredProcessor) 30 | C_ASSERT_FIELD(KTHREAD, 0x088, ULONG64, ApcQueueLock) 31 | C_ASSERT_FIELD(KTHREAD, 0x090, LONG64, WaitStatus) 32 | C_ASSERT_FIELD(KTHREAD, 0x098, KWAIT_BLOCK*, WaitBlockList) 33 | C_ASSERT_FIELD(KTHREAD, 0x0A0, LIST_ENTRY, WaitListEntry) 34 | C_ASSERT_FIELD(KTHREAD, 0x0A0, SINGLE_LIST_ENTRY, SwapListEntry) 35 | C_ASSERT_FIELD(KTHREAD, 0x0B0, KQUEUE*, Queue) 36 | C_ASSERT_FIELD(KTHREAD, 0x0B8, PVOID, Teb) 37 | C_ASSERT_FIELD(KTHREAD, 0x0C0, KTIMER, Timer) 38 | C_ASSERT_FIELD(KTHREAD, 0x100, LONG, ThreadFlags) 39 | C_ASSERT_FIELD(KTHREAD, 0x104, ULONG, Spare0) 40 | C_ASSERT_FIELD(KTHREAD, 0x108, KWAIT_BLOCK, WaitBlock) 41 | C_ASSERT_FIELD(KTHREAD, 0x108, UCHAR, WaitBlockFill4) 42 | C_ASSERT_FIELD(KTHREAD, 0x134, ULONG, ContextSwitches) 43 | C_ASSERT_FIELD(KTHREAD, 0x108, UCHAR, WaitBlockFill5) 44 | C_ASSERT_FIELD(KTHREAD, 0x164, UCHAR, State) 45 | C_ASSERT_FIELD(KTHREAD, 0x165, CHAR, NpxState) 46 | C_ASSERT_FIELD(KTHREAD, 0x166, UCHAR, WaitIrql) 47 | C_ASSERT_FIELD(KTHREAD, 0x167, CHAR, WaitMode) 48 | C_ASSERT_FIELD(KTHREAD, 0x108, UCHAR, WaitBlockFill6) 49 | C_ASSERT_FIELD(KTHREAD, 0x194, ULONG, WaitTime) 50 | C_ASSERT_FIELD(KTHREAD, 0x108, UCHAR, WaitBlockFill7) 51 | C_ASSERT_FIELD(KTHREAD, 0x1B0, PVOID, TebMappedLowVa) 52 | C_ASSERT_FIELD(KTHREAD, 0x1B8, UMS_CONTROL_BLOCK*, Ucb) 53 | C_ASSERT_FIELD(KTHREAD, 0x108, UCHAR, WaitBlockFill8) 54 | C_ASSERT_FIELD(KTHREAD, 0x1C4, SHORT, KernelApcDisable) 55 | C_ASSERT_FIELD(KTHREAD, 0x1C6, SHORT, SpecialApcDisable) 56 | C_ASSERT_FIELD(KTHREAD, 0x1C4, ULONG, CombinedApcDisable) 57 | C_ASSERT_FIELD(KTHREAD, 0x1C8, LIST_ENTRY, QueueListEntry) 58 | C_ASSERT_FIELD(KTHREAD, 0x1D8, KTRAP_FRAME*, TrapFrame) 59 | C_ASSERT_FIELD(KTHREAD, 0x1E0, PVOID, FirstArgument) 60 | C_ASSERT_FIELD(KTHREAD, 0x1E8, PVOID, CallbackStack) 61 | C_ASSERT_FIELD(KTHREAD, 0x1E8, ULONG64, CallbackDepth) 62 | C_ASSERT_FIELD(KTHREAD, 0x1F0, UCHAR, ApcStateIndex) 63 | C_ASSERT_FIELD(KTHREAD, 0x1F1, CHAR, BasePriority) 64 | C_ASSERT_FIELD(KTHREAD, 0x1F2, CHAR, PriorityDecrement) 65 | C_ASSERT_FIELD(KTHREAD, 0x1F3, UCHAR, Preempted) 66 | C_ASSERT_FIELD(KTHREAD, 0x1F4, UCHAR, AdjustReason) 67 | C_ASSERT_FIELD(KTHREAD, 0x1F5, CHAR, AdjustIncrement) 68 | C_ASSERT_FIELD(KTHREAD, 0x1F6, CHAR, PreviousMode) 69 | C_ASSERT_FIELD(KTHREAD, 0x1F7, CHAR, Saturation) 70 | C_ASSERT_FIELD(KTHREAD, 0x1F8, ULONG, SystemCallNumber) 71 | C_ASSERT_FIELD(KTHREAD, 0x1FC, ULONG, FreezeCount) 72 | C_ASSERT_FIELD(KTHREAD, 0x200, GROUP_AFFINITY, UserAffinity) 73 | C_ASSERT_FIELD(KTHREAD, 0x210, KPROCESS*, Process) 74 | C_ASSERT_FIELD(KTHREAD, 0x218, GROUP_AFFINITY, Affinity) 75 | C_ASSERT_FIELD(KTHREAD, 0x228, ULONG, IdealProcessor) 76 | C_ASSERT_FIELD(KTHREAD, 0x22C, ULONG, UserIdealProcessor) 77 | C_ASSERT_FIELD(KTHREAD, 0x230, KAPC_STATE*, ApcStatePointer) 78 | C_ASSERT_FIELD(KTHREAD, 0x240, KAPC_STATE, SavedApcState) 79 | C_ASSERT_FIELD(KTHREAD, 0x240, UCHAR, SavedApcStateFill) 80 | C_ASSERT_FIELD(KTHREAD, 0x26B, UCHAR, WaitReason) 81 | C_ASSERT_FIELD(KTHREAD, 0x26C, CHAR, SuspendCount) 82 | C_ASSERT_FIELD(KTHREAD, 0x26D, CHAR, Spare1) 83 | C_ASSERT_FIELD(KTHREAD, 0x26E, UCHAR, CodePatchInProgress) 84 | C_ASSERT_FIELD(KTHREAD, 0x270, PVOID, Win32Thread) 85 | C_ASSERT_FIELD(KTHREAD, 0x278, PVOID, StackBase) 86 | C_ASSERT_FIELD(KTHREAD, 0x280, KAPC, SuspendApc) 87 | C_ASSERT_FIELD(KTHREAD, 0x280, UCHAR, SuspendApcFill0) 88 | C_ASSERT_FIELD(KTHREAD, 0x281, UCHAR, ResourceIndex) 89 | C_ASSERT_FIELD(KTHREAD, 0x280, UCHAR, SuspendApcFill1) 90 | C_ASSERT_FIELD(KTHREAD, 0x283, UCHAR, QuantumReset) 91 | C_ASSERT_FIELD(KTHREAD, 0x280, UCHAR, SuspendApcFill2) 92 | C_ASSERT_FIELD(KTHREAD, 0x284, ULONG, KernelTime) 93 | C_ASSERT_FIELD(KTHREAD, 0x280, UCHAR, SuspendApcFill3) 94 | C_ASSERT_FIELD(KTHREAD, 0x2C0, KPRCB*, WaitPrcb) 95 | C_ASSERT_FIELD(KTHREAD, 0x280, UCHAR, SuspendApcFill4) 96 | C_ASSERT_FIELD(KTHREAD, 0x2C8, PVOID, LegoData) 97 | C_ASSERT_FIELD(KTHREAD, 0x280, UCHAR, SuspendApcFill5) 98 | C_ASSERT_FIELD(KTHREAD, 0x2D3, UCHAR, LargeStack) 99 | C_ASSERT_FIELD(KTHREAD, 0x2D4, ULONG, UserTime) 100 | C_ASSERT_FIELD(KTHREAD, 0x2D8, KSEMAPHORE, SuspendSemaphore) 101 | C_ASSERT_FIELD(KTHREAD, 0x2D8, UCHAR, SuspendSemaphorefill) 102 | C_ASSERT_FIELD(KTHREAD, 0x2F4, ULONG, SListFaultCount) 103 | C_ASSERT_FIELD(KTHREAD, 0x2F8, LIST_ENTRY, ThreadListEntry) 104 | C_ASSERT_FIELD(KTHREAD, 0x308, LIST_ENTRY, MutantListHead) 105 | C_ASSERT_FIELD(KTHREAD, 0x318, PVOID, SListFaultAddress) 106 | C_ASSERT_FIELD(KTHREAD, 0x320, LONG64, ReadOperationCount) 107 | C_ASSERT_FIELD(KTHREAD, 0x328, LONG64, WriteOperationCount) 108 | C_ASSERT_FIELD(KTHREAD, 0x330, LONG64, OtherOperationCount) 109 | C_ASSERT_FIELD(KTHREAD, 0x338, LONG64, ReadTransferCount) 110 | C_ASSERT_FIELD(KTHREAD, 0x340, LONG64, WriteTransferCount) 111 | C_ASSERT_FIELD(KTHREAD, 0x348, LONG64, OtherTransferCount) 112 | C_ASSERT_FIELD(KTHREAD, 0x350, KTHREAD_COUNTERS*, ThreadCounters) 113 | C_ASSERT_FIELD(KTHREAD, 0x358, XSTATE_SAVE*, XStateSave) 114 | -------------------------------------------------------------------------------- /ndk/tests/win7_x86.c: -------------------------------------------------------------------------------- 1 | /* Version definitions */ 2 | #undef NTDDI_VERSION 3 | #define NTDDI_VERSION NTDDI_WIN7 4 | #undef _WIN32_WINNT 5 | #define _WIN32_WINNT _WIN32_WINNT_WIN7 6 | 7 | #include 8 | #include 9 | 10 | #define C_ASSERT_FIELD(Type, Offset, MemberType, MemberName) C_ASSERT(FIELD_OFFSET(Type, MemberName) == Offset); 11 | 12 | /* KTHREAD */ 13 | C_ASSERT_FIELD(KTHREAD, 0x000, DISPATCHER_HEADER, Header) 14 | C_ASSERT_FIELD(KTHREAD, 0x010, ULONG64, CycleTime) 15 | C_ASSERT_FIELD(KTHREAD, 0x018, ULONG, HighCycleTime) 16 | C_ASSERT_FIELD(KTHREAD, 0x020, ULONG64, QuantumTarget) 17 | C_ASSERT_FIELD(KTHREAD, 0x028, PVOID, InitialStack) 18 | C_ASSERT_FIELD(KTHREAD, 0x02C, PVOID, StackLimit) 19 | C_ASSERT_FIELD(KTHREAD, 0x030, PVOID, KernelStack) 20 | C_ASSERT_FIELD(KTHREAD, 0x034, ULONG, ThreadLock) 21 | C_ASSERT_FIELD(KTHREAD, 0x038, KWAIT_STATUS_REGISTER, WaitRegister) 22 | C_ASSERT_FIELD(KTHREAD, 0x039, UCHAR, Running) 23 | C_ASSERT_FIELD(KTHREAD, 0x03A, UCHAR, Alerted) 24 | C_ASSERT_FIELD(KTHREAD, 0x03C, LONG, MiscFlags) 25 | C_ASSERT_FIELD(KTHREAD, 0x040, KAPC_STATE, ApcState) 26 | C_ASSERT_FIELD(KTHREAD, 0x040, UCHAR, ApcStateFill) 27 | C_ASSERT_FIELD(KTHREAD, 0x057, CHAR, Priority) 28 | C_ASSERT_FIELD(KTHREAD, 0x058, ULONG, NextProcessor) 29 | C_ASSERT_FIELD(KTHREAD, 0x05C, ULONG, DeferredProcessor) 30 | C_ASSERT_FIELD(KTHREAD, 0x060, ULONG, ApcQueueLock) 31 | C_ASSERT_FIELD(KTHREAD, 0x064, ULONG, ContextSwitches) 32 | C_ASSERT_FIELD(KTHREAD, 0x068, UCHAR, State) 33 | C_ASSERT_FIELD(KTHREAD, 0x069, CHAR, NpxState) 34 | C_ASSERT_FIELD(KTHREAD, 0x06A, UCHAR, WaitIrql) 35 | C_ASSERT_FIELD(KTHREAD, 0x06B, CHAR, WaitMode) 36 | C_ASSERT_FIELD(KTHREAD, 0x06C, LONG, WaitStatus) 37 | C_ASSERT_FIELD(KTHREAD, 0x070, KWAIT_BLOCK*, WaitBlockList) 38 | C_ASSERT_FIELD(KTHREAD, 0x074, LIST_ENTRY, WaitListEntry) 39 | C_ASSERT_FIELD(KTHREAD, 0x074, SINGLE_LIST_ENTRY, SwapListEntry) 40 | C_ASSERT_FIELD(KTHREAD, 0x07C, KQUEUE*, Queue) 41 | C_ASSERT_FIELD(KTHREAD, 0x080, ULONG, WaitTime) 42 | C_ASSERT_FIELD(KTHREAD, 0x084, SHORT, KernelApcDisable) 43 | C_ASSERT_FIELD(KTHREAD, 0x086, SHORT, SpecialApcDisable) 44 | C_ASSERT_FIELD(KTHREAD, 0x084, ULONG, CombinedApcDisable) 45 | C_ASSERT_FIELD(KTHREAD, 0x088, PVOID, Teb) 46 | C_ASSERT_FIELD(KTHREAD, 0x090, KTIMER, Timer) 47 | C_ASSERT_FIELD(KTHREAD, 0x0B8, LONG, ThreadFlags) 48 | C_ASSERT_FIELD(KTHREAD, 0x0BC, PVOID, ServiceTable) 49 | C_ASSERT_FIELD(KTHREAD, 0x0C0, KWAIT_BLOCK, WaitBlock) 50 | C_ASSERT_FIELD(KTHREAD, 0x120, LIST_ENTRY, QueueListEntry) 51 | C_ASSERT_FIELD(KTHREAD, 0x128, KTRAP_FRAME*, TrapFrame) 52 | C_ASSERT_FIELD(KTHREAD, 0x12C, PVOID, FirstArgument) 53 | C_ASSERT_FIELD(KTHREAD, 0x130, PVOID, CallbackStack) 54 | C_ASSERT_FIELD(KTHREAD, 0x130, ULONG, CallbackDepth) 55 | C_ASSERT_FIELD(KTHREAD, 0x134, UCHAR, ApcStateIndex) 56 | C_ASSERT_FIELD(KTHREAD, 0x135, CHAR, BasePriority) 57 | C_ASSERT_FIELD(KTHREAD, 0x136, CHAR, PriorityDecrement) 58 | C_ASSERT_FIELD(KTHREAD, 0x137, UCHAR, Preempted) 59 | C_ASSERT_FIELD(KTHREAD, 0x138, UCHAR, AdjustReason) 60 | C_ASSERT_FIELD(KTHREAD, 0x139, CHAR, AdjustIncrement) 61 | C_ASSERT_FIELD(KTHREAD, 0x13A, CHAR, PreviousMode) 62 | C_ASSERT_FIELD(KTHREAD, 0x13B, CHAR, Saturation) 63 | C_ASSERT_FIELD(KTHREAD, 0x13C, ULONG, SystemCallNumber) 64 | C_ASSERT_FIELD(KTHREAD, 0x140, ULONG, FreezeCount) 65 | C_ASSERT_FIELD(KTHREAD, 0x144, GROUP_AFFINITY, UserAffinity) 66 | C_ASSERT_FIELD(KTHREAD, 0x150, KPROCESS*, Process) 67 | C_ASSERT_FIELD(KTHREAD, 0x154, GROUP_AFFINITY, Affinity) 68 | C_ASSERT_FIELD(KTHREAD, 0x160, ULONG, IdealProcessor) 69 | C_ASSERT_FIELD(KTHREAD, 0x164, ULONG, UserIdealProcessor) 70 | C_ASSERT_FIELD(KTHREAD, 0x168, KAPC_STATE*, ApcStatePointer) 71 | C_ASSERT_FIELD(KTHREAD, 0x170, KAPC_STATE, SavedApcState) 72 | C_ASSERT_FIELD(KTHREAD, 0x170, UCHAR, SavedApcStateFill) 73 | C_ASSERT_FIELD(KTHREAD, 0x187, UCHAR, WaitReason) 74 | C_ASSERT_FIELD(KTHREAD, 0x188, CHAR, SuspendCount) 75 | C_ASSERT_FIELD(KTHREAD, 0x189, CHAR, Spare1) 76 | C_ASSERT_FIELD(KTHREAD, 0x18A, UCHAR, OtherPlatformFill) 77 | C_ASSERT_FIELD(KTHREAD, 0x18C, PVOID, Win32Thread) 78 | C_ASSERT_FIELD(KTHREAD, 0x190, PVOID, StackBase) 79 | C_ASSERT_FIELD(KTHREAD, 0x194, KAPC, SuspendApc) 80 | C_ASSERT_FIELD(KTHREAD, 0x194, UCHAR, SuspendApcFill0) 81 | C_ASSERT_FIELD(KTHREAD, 0x195, UCHAR, ResourceIndex) 82 | C_ASSERT_FIELD(KTHREAD, 0x194, UCHAR, SuspendApcFill1) 83 | C_ASSERT_FIELD(KTHREAD, 0x197, UCHAR, QuantumReset) 84 | C_ASSERT_FIELD(KTHREAD, 0x194, UCHAR, SuspendApcFill2) 85 | C_ASSERT_FIELD(KTHREAD, 0x198, ULONG, KernelTime) 86 | C_ASSERT_FIELD(KTHREAD, 0x194, UCHAR, SuspendApcFill3) 87 | C_ASSERT_FIELD(KTHREAD, 0x1B8, KPRCB*, WaitPrcb) 88 | C_ASSERT_FIELD(KTHREAD, 0x194, UCHAR, SuspendApcFill4) 89 | C_ASSERT_FIELD(KTHREAD, 0x1BC, PVOID, LegoData) 90 | C_ASSERT_FIELD(KTHREAD, 0x194, UCHAR, SuspendApcFill5) 91 | C_ASSERT_FIELD(KTHREAD, 0x1C3, UCHAR, LargeStack) 92 | C_ASSERT_FIELD(KTHREAD, 0x1C4, ULONG, UserTime) 93 | C_ASSERT_FIELD(KTHREAD, 0x1C8, KSEMAPHORE, SuspendSemaphore) 94 | C_ASSERT_FIELD(KTHREAD, 0x1C8, UCHAR, SuspendSemaphorefill) 95 | C_ASSERT_FIELD(KTHREAD, 0x1DC, ULONG, SListFaultCount) 96 | C_ASSERT_FIELD(KTHREAD, 0x1E0, LIST_ENTRY, ThreadListEntry) 97 | C_ASSERT_FIELD(KTHREAD, 0x1E8, LIST_ENTRY, MutantListHead) 98 | C_ASSERT_FIELD(KTHREAD, 0x1F0, PVOID, SListFaultAddress) 99 | C_ASSERT_FIELD(KTHREAD, 0x1F4, KTHREAD_COUNTERS*, ThreadCounters) 100 | C_ASSERT_FIELD(KTHREAD, 0x1F8, XSTATE_SAVE*, XStateSave) 101 | -------------------------------------------------------------------------------- /ndk/tests/winvista_x64.c: -------------------------------------------------------------------------------- 1 | /* Version definitions */ 2 | #undef NTDDI_VERSION 3 | #define NTDDI_VERSION NTDDI_VISTA 4 | #undef _WIN32_WINNT 5 | #define _WIN32_WINNT _WIN32_WINNT_VISTA 6 | 7 | #include 8 | #include 9 | 10 | #define C_ASSERT_FIELD(Type, Offset, MemberType, MemberName) C_ASSERT(FIELD_OFFSET(Type, MemberName) == Offset); 11 | 12 | /* KTHREAD */ 13 | C_ASSERT_FIELD(KTHREAD, 0x000, DISPATCHER_HEADER, Header) 14 | C_ASSERT_FIELD(KTHREAD, 0x018, ULONG64, CycleTime) 15 | C_ASSERT_FIELD(KTHREAD, 0x020, ULONG64, QuantumTarget) 16 | C_ASSERT_FIELD(KTHREAD, 0x028, PVOID, InitialStack) 17 | C_ASSERT_FIELD(KTHREAD, 0x030, PVOID, StackLimit) 18 | C_ASSERT_FIELD(KTHREAD, 0x038, PVOID, KernelStack) 19 | C_ASSERT_FIELD(KTHREAD, 0x040, ULONG64, ThreadLock) 20 | C_ASSERT_FIELD(KTHREAD, 0x048, KAPC_STATE, ApcState) 21 | C_ASSERT_FIELD(KTHREAD, 0x048, UCHAR, ApcStateFill) 22 | C_ASSERT_FIELD(KTHREAD, 0x073, CHAR, Priority) 23 | C_ASSERT_FIELD(KTHREAD, 0x074, USHORT, NextProcessor) 24 | C_ASSERT_FIELD(KTHREAD, 0x076, USHORT, DeferredProcessor) 25 | C_ASSERT_FIELD(KTHREAD, 0x078, ULONG64, ApcQueueLock) 26 | C_ASSERT_FIELD(KTHREAD, 0x080, LONG64, WaitStatus) 27 | C_ASSERT_FIELD(KTHREAD, 0x088, KWAIT_BLOCK*, WaitBlockList) 28 | C_ASSERT_FIELD(KTHREAD, 0x088, KGATE*, GateObject) 29 | C_ASSERT_FIELD(KTHREAD, 0x090, LONG, MiscFlags) 30 | C_ASSERT_FIELD(KTHREAD, 0x094, UCHAR, WaitReason) 31 | C_ASSERT_FIELD(KTHREAD, 0x095, UCHAR, SwapBusy) 32 | C_ASSERT_FIELD(KTHREAD, 0x096, UCHAR, Alerted) 33 | C_ASSERT_FIELD(KTHREAD, 0x098, LIST_ENTRY, WaitListEntry) 34 | C_ASSERT_FIELD(KTHREAD, 0x098, SINGLE_LIST_ENTRY, SwapListEntry) 35 | C_ASSERT_FIELD(KTHREAD, 0x0A8, KQUEUE*, Queue) 36 | C_ASSERT_FIELD(KTHREAD, 0x0B0, PVOID, Teb) 37 | C_ASSERT_FIELD(KTHREAD, 0x0B8, KTIMER, Timer) 38 | C_ASSERT_FIELD(KTHREAD, 0x0B8, UCHAR, TimerFill) 39 | C_ASSERT_FIELD(KTHREAD, 0x0F4, LONG, ThreadFlags) 40 | C_ASSERT_FIELD(KTHREAD, 0x0F8, KWAIT_BLOCK, WaitBlock) 41 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill0) 42 | C_ASSERT_FIELD(KTHREAD, 0x123, UCHAR, IdealProcessor) 43 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill1) 44 | C_ASSERT_FIELD(KTHREAD, 0x153, CHAR, PreviousMode) 45 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill2) 46 | C_ASSERT_FIELD(KTHREAD, 0x183, UCHAR, ResourceIndex) 47 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill3) 48 | C_ASSERT_FIELD(KTHREAD, 0x1B3, UCHAR, LargeStack) 49 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill4) 50 | C_ASSERT_FIELD(KTHREAD, 0x124, ULONG, ContextSwitches) 51 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill5) 52 | C_ASSERT_FIELD(KTHREAD, 0x154, UCHAR, State) 53 | C_ASSERT_FIELD(KTHREAD, 0x155, UCHAR, NpxState) 54 | C_ASSERT_FIELD(KTHREAD, 0x156, UCHAR, WaitIrql) 55 | C_ASSERT_FIELD(KTHREAD, 0x157, CHAR, WaitMode) 56 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill6) 57 | C_ASSERT_FIELD(KTHREAD, 0x184, ULONG, WaitTime) 58 | C_ASSERT_FIELD(KTHREAD, 0x0F8, UCHAR, WaitBlockFill7) 59 | C_ASSERT_FIELD(KTHREAD, 0x1B4, SHORT, KernelApcDisable) 60 | C_ASSERT_FIELD(KTHREAD, 0x1B6, SHORT, SpecialApcDisable) 61 | C_ASSERT_FIELD(KTHREAD, 0x1B4, ULONG, CombinedApcDisable) 62 | C_ASSERT_FIELD(KTHREAD, 0x1B8, LIST_ENTRY, QueueListEntry) 63 | C_ASSERT_FIELD(KTHREAD, 0x1C8, KTRAP_FRAME*, TrapFrame) 64 | C_ASSERT_FIELD(KTHREAD, 0x1D0, PVOID, FirstArgument) 65 | C_ASSERT_FIELD(KTHREAD, 0x1D8, PVOID, CallbackStack) 66 | C_ASSERT_FIELD(KTHREAD, 0x1D8, ULONG64, CallbackDepth) 67 | C_ASSERT_FIELD(KTHREAD, 0x1E0, UCHAR, ApcStateIndex) 68 | C_ASSERT_FIELD(KTHREAD, 0x1E1, CHAR, BasePriority) 69 | C_ASSERT_FIELD(KTHREAD, 0x1E2, CHAR, PriorityDecrement) 70 | C_ASSERT_FIELD(KTHREAD, 0x1E3, UCHAR, Preempted) 71 | C_ASSERT_FIELD(KTHREAD, 0x1E4, UCHAR, AdjustReason) 72 | C_ASSERT_FIELD(KTHREAD, 0x1E5, CHAR, AdjustIncrement) 73 | C_ASSERT_FIELD(KTHREAD, 0x1E6, UCHAR, Spare01) 74 | C_ASSERT_FIELD(KTHREAD, 0x1E7, CHAR, Saturation) 75 | C_ASSERT_FIELD(KTHREAD, 0x1E8, ULONG, SystemCallNumber) 76 | C_ASSERT_FIELD(KTHREAD, 0x1EC, ULONG, Spare02) 77 | C_ASSERT_FIELD(KTHREAD, 0x1F0, ULONG64, UserAffinity) 78 | C_ASSERT_FIELD(KTHREAD, 0x1F8, KPROCESS*, Process) 79 | C_ASSERT_FIELD(KTHREAD, 0x200, ULONG64, Affinity) 80 | C_ASSERT_FIELD(KTHREAD, 0x208, KAPC_STATE*, ApcStatePointer) 81 | C_ASSERT_FIELD(KTHREAD, 0x218, KAPC_STATE, SavedApcState) 82 | C_ASSERT_FIELD(KTHREAD, 0x218, UCHAR, SavedApcStateFill) 83 | C_ASSERT_FIELD(KTHREAD, 0x243, CHAR, FreezeCount) 84 | C_ASSERT_FIELD(KTHREAD, 0x244, CHAR, SuspendCount) 85 | C_ASSERT_FIELD(KTHREAD, 0x245, UCHAR, UserIdealProcessor) 86 | C_ASSERT_FIELD(KTHREAD, 0x246, UCHAR, Spare03) 87 | C_ASSERT_FIELD(KTHREAD, 0x247, UCHAR, CodePatchInProgress) 88 | C_ASSERT_FIELD(KTHREAD, 0x248, PVOID, Win32Thread) 89 | C_ASSERT_FIELD(KTHREAD, 0x250, PVOID, StackBase) 90 | C_ASSERT_FIELD(KTHREAD, 0x258, KAPC, SuspendApc) 91 | C_ASSERT_FIELD(KTHREAD, 0x258, UCHAR, SuspendApcFill0) 92 | C_ASSERT_FIELD(KTHREAD, 0x259, CHAR, Spare04) 93 | C_ASSERT_FIELD(KTHREAD, 0x258, UCHAR, SuspendApcFill1) 94 | C_ASSERT_FIELD(KTHREAD, 0x25B, UCHAR, QuantumReset) 95 | C_ASSERT_FIELD(KTHREAD, 0x258, UCHAR, SuspendApcFill2) 96 | C_ASSERT_FIELD(KTHREAD, 0x25C, ULONG, KernelTime) 97 | C_ASSERT_FIELD(KTHREAD, 0x258, UCHAR, SuspendApcFill3) 98 | C_ASSERT_FIELD(KTHREAD, 0x298, KPRCB*, WaitPrcb) 99 | C_ASSERT_FIELD(KTHREAD, 0x258, UCHAR, SuspendApcFill4) 100 | C_ASSERT_FIELD(KTHREAD, 0x2A0, PVOID, LegoData) 101 | C_ASSERT_FIELD(KTHREAD, 0x258, UCHAR, SuspendApcFill5) 102 | C_ASSERT_FIELD(KTHREAD, 0x2AB, UCHAR, PowerState) 103 | C_ASSERT_FIELD(KTHREAD, 0x2AC, ULONG, UserTime) 104 | C_ASSERT_FIELD(KTHREAD, 0x2B0, KSEMAPHORE, SuspendSemaphore) 105 | C_ASSERT_FIELD(KTHREAD, 0x2B0, UCHAR, SuspendSemaphorefill) 106 | C_ASSERT_FIELD(KTHREAD, 0x2CC, ULONG, SListFaultCount) 107 | C_ASSERT_FIELD(KTHREAD, 0x2D0, LIST_ENTRY, ThreadListEntry) 108 | C_ASSERT_FIELD(KTHREAD, 0x2E0, LIST_ENTRY, MutantListHead) 109 | C_ASSERT_FIELD(KTHREAD, 0x2F0, PVOID, SListFaultAddress) 110 | C_ASSERT_FIELD(KTHREAD, 0x2F8, LONG64, ReadOperationCount) 111 | C_ASSERT_FIELD(KTHREAD, 0x300, LONG64, WriteOperationCount) 112 | C_ASSERT_FIELD(KTHREAD, 0x308, LONG64, OtherOperationCount) 113 | C_ASSERT_FIELD(KTHREAD, 0x310, LONG64, ReadTransferCount) 114 | C_ASSERT_FIELD(KTHREAD, 0x318, LONG64, WriteTransferCount) 115 | C_ASSERT_FIELD(KTHREAD, 0x320, LONG64, OtherTransferCount) 116 | C_ASSERT_FIELD(KTHREAD, 0x328, PVOID, MdlForLockedTeb) 117 | -------------------------------------------------------------------------------- /ndk/tests/winvista_x86.c: -------------------------------------------------------------------------------- 1 | /* Version definitions */ 2 | #undef NTDDI_VERSION 3 | #define NTDDI_VERSION NTDDI_VISTA 4 | #undef _WIN32_WINNT 5 | #define _WIN32_WINNT _WIN32_WINNT_VISTA 6 | 7 | #include 8 | #include 9 | 10 | #define C_ASSERT_FIELD(Type, Offset, MemberType, MemberName) C_ASSERT(FIELD_OFFSET(Type, MemberName) == Offset); 11 | 12 | /* KTHREAD */ 13 | C_ASSERT_FIELD(KTHREAD, 0x000, DISPATCHER_HEADER, Header) 14 | C_ASSERT_FIELD(KTHREAD, 0x010, UINT64, CycleTime) 15 | C_ASSERT_FIELD(KTHREAD, 0x018, ULONG, HighCycleTime) 16 | C_ASSERT_FIELD(KTHREAD, 0x020, UINT64, QuantumTarget) 17 | C_ASSERT_FIELD(KTHREAD, 0x028, PVOID, InitialStack) 18 | C_ASSERT_FIELD(KTHREAD, 0x02C, PVOID, StackLimit) 19 | C_ASSERT_FIELD(KTHREAD, 0x030, PVOID, KernelStack) 20 | C_ASSERT_FIELD(KTHREAD, 0x034, ULONG, ThreadLock) 21 | C_ASSERT_FIELD(KTHREAD, 0x038, KAPC_STATE, ApcState) 22 | C_ASSERT_FIELD(KTHREAD, 0x038, UCHAR, ApcStateFill) 23 | C_ASSERT_FIELD(KTHREAD, 0x04F, CHAR, Priority) 24 | C_ASSERT_FIELD(KTHREAD, 0x050, USHORT, NextProcessor) 25 | C_ASSERT_FIELD(KTHREAD, 0x052, USHORT, DeferredProcessor) 26 | C_ASSERT_FIELD(KTHREAD, 0x054, ULONG, ApcQueueLock) 27 | C_ASSERT_FIELD(KTHREAD, 0x058, ULONG, ContextSwitches) 28 | C_ASSERT_FIELD(KTHREAD, 0x05C, UCHAR, State) 29 | C_ASSERT_FIELD(KTHREAD, 0x05D, UCHAR, NpxState) 30 | C_ASSERT_FIELD(KTHREAD, 0x05E, UCHAR, WaitIrql) 31 | C_ASSERT_FIELD(KTHREAD, 0x05F, CHAR, WaitMode) 32 | C_ASSERT_FIELD(KTHREAD, 0x060, LONG32, WaitStatus) 33 | C_ASSERT_FIELD(KTHREAD, 0x064, KWAIT_BLOCK*, WaitBlockList) 34 | C_ASSERT_FIELD(KTHREAD, 0x064, KGATE*, GateObject) 35 | C_ASSERT_FIELD(KTHREAD, 0x068, LONG, MiscFlags) 36 | C_ASSERT_FIELD(KTHREAD, 0x06C, UCHAR, WaitReason) 37 | C_ASSERT_FIELD(KTHREAD, 0x06D, UCHAR, SwapBusy) 38 | C_ASSERT_FIELD(KTHREAD, 0x06E, UCHAR, Alerted) 39 | C_ASSERT_FIELD(KTHREAD, 0x070, LIST_ENTRY, WaitListEntry) 40 | C_ASSERT_FIELD(KTHREAD, 0x070, SINGLE_LIST_ENTRY, SwapListEntry) 41 | C_ASSERT_FIELD(KTHREAD, 0x078, KQUEUE*, Queue) 42 | C_ASSERT_FIELD(KTHREAD, 0x07C, ULONG, WaitTime) 43 | C_ASSERT_FIELD(KTHREAD, 0x080, INT16, KernelApcDisable) 44 | C_ASSERT_FIELD(KTHREAD, 0x082, INT16, SpecialApcDisable) 45 | C_ASSERT_FIELD(KTHREAD, 0x080, ULONG, CombinedApcDisable) 46 | C_ASSERT_FIELD(KTHREAD, 0x084, PVOID, Teb) 47 | C_ASSERT_FIELD(KTHREAD, 0x088, KTIMER, Timer) 48 | C_ASSERT_FIELD(KTHREAD, 0x088, UCHAR, TimerFill) 49 | C_ASSERT_FIELD(KTHREAD, 0x0B0, LONG32, ThreadFlags) 50 | C_ASSERT_FIELD(KTHREAD, 0x0B8, KWAIT_BLOCK, WaitBlock) 51 | C_ASSERT_FIELD(KTHREAD, 0x0B8, UCHAR, WaitBlockFill0) 52 | C_ASSERT_FIELD(KTHREAD, 0x0CF, UCHAR, IdealProcessor) 53 | C_ASSERT_FIELD(KTHREAD, 0x0B8, UCHAR, WaitBlockFill1) 54 | C_ASSERT_FIELD(KTHREAD, 0x0E7, CHAR, PreviousMode) 55 | C_ASSERT_FIELD(KTHREAD, 0x0B8, UCHAR, WaitBlockFill2) 56 | C_ASSERT_FIELD(KTHREAD, 0x0FF, UCHAR, ResourceIndex) 57 | C_ASSERT_FIELD(KTHREAD, 0x0B8, UCHAR, WaitBlockFill3) 58 | C_ASSERT_FIELD(KTHREAD, 0x117, UCHAR, LargeStack) 59 | C_ASSERT_FIELD(KTHREAD, 0x118, LIST_ENTRY, QueueListEntry) 60 | C_ASSERT_FIELD(KTHREAD, 0x120, KTRAP_FRAME*, TrapFrame) 61 | C_ASSERT_FIELD(KTHREAD, 0x124, PVOID, FirstArgument) 62 | C_ASSERT_FIELD(KTHREAD, 0x128, PVOID, CallbackStack) 63 | C_ASSERT_FIELD(KTHREAD, 0x128, ULONG, CallbackDepth) 64 | C_ASSERT_FIELD(KTHREAD, 0x12C, PVOID, ServiceTable) 65 | C_ASSERT_FIELD(KTHREAD, 0x130, UCHAR, ApcStateIndex) 66 | C_ASSERT_FIELD(KTHREAD, 0x131, CHAR, BasePriority) 67 | C_ASSERT_FIELD(KTHREAD, 0x132, CHAR, PriorityDecrement) 68 | C_ASSERT_FIELD(KTHREAD, 0x133, UCHAR, Preempted) 69 | C_ASSERT_FIELD(KTHREAD, 0x134, UCHAR, AdjustReason) 70 | C_ASSERT_FIELD(KTHREAD, 0x135, CHAR, AdjustIncrement) 71 | C_ASSERT_FIELD(KTHREAD, 0x136, UCHAR, Spare01) 72 | C_ASSERT_FIELD(KTHREAD, 0x137, CHAR, Saturation) 73 | C_ASSERT_FIELD(KTHREAD, 0x138, ULONG, SystemCallNumber) 74 | C_ASSERT_FIELD(KTHREAD, 0x13C, ULONG, Spare02) 75 | C_ASSERT_FIELD(KTHREAD, 0x140, ULONG, UserAffinity) 76 | C_ASSERT_FIELD(KTHREAD, 0x144, KPROCESS*, Process) 77 | C_ASSERT_FIELD(KTHREAD, 0x148, ULONG, Affinity) 78 | C_ASSERT_FIELD(KTHREAD, 0x14C, KAPC_STATE*, ApcStatePointer) 79 | C_ASSERT_FIELD(KTHREAD, 0x154, KAPC_STATE, SavedApcState) 80 | C_ASSERT_FIELD(KTHREAD, 0x154, UCHAR, SavedApcStateFill) 81 | C_ASSERT_FIELD(KTHREAD, 0x16B, CHAR, FreezeCount) 82 | C_ASSERT_FIELD(KTHREAD, 0x16C, CHAR, SuspendCount) 83 | C_ASSERT_FIELD(KTHREAD, 0x16D, UCHAR, UserIdealProcessor) 84 | C_ASSERT_FIELD(KTHREAD, 0x16E, UCHAR, Spare03) 85 | C_ASSERT_FIELD(KTHREAD, 0x16F, UCHAR, OtherPlatformFill) 86 | C_ASSERT_FIELD(KTHREAD, 0x170, PVOID, Win32Thread) 87 | C_ASSERT_FIELD(KTHREAD, 0x174, PVOID, StackBase) 88 | C_ASSERT_FIELD(KTHREAD, 0x178, KAPC, SuspendApc) 89 | C_ASSERT_FIELD(KTHREAD, 0x178, UCHAR, SuspendApcFill0) 90 | C_ASSERT_FIELD(KTHREAD, 0x179, CHAR, Spare04) 91 | C_ASSERT_FIELD(KTHREAD, 0x178, UCHAR, SuspendApcFill1) 92 | C_ASSERT_FIELD(KTHREAD, 0x17B, UCHAR, QuantumReset) 93 | C_ASSERT_FIELD(KTHREAD, 0x178, UCHAR, SuspendApcFill2) 94 | C_ASSERT_FIELD(KTHREAD, 0x17C, ULONG, KernelTime) 95 | C_ASSERT_FIELD(KTHREAD, 0x178, UCHAR, SuspendApcFill3) 96 | C_ASSERT_FIELD(KTHREAD, 0x19C, KPRCB*, WaitPrcb) 97 | C_ASSERT_FIELD(KTHREAD, 0x178, UCHAR, SuspendApcFill4) 98 | C_ASSERT_FIELD(KTHREAD, 0x1A0, PVOID, LegoData) 99 | C_ASSERT_FIELD(KTHREAD, 0x178, UCHAR, SuspendApcFill5) 100 | C_ASSERT_FIELD(KTHREAD, 0x1A7, UCHAR, PowerState) 101 | C_ASSERT_FIELD(KTHREAD, 0x1A8, ULONG, UserTime) 102 | C_ASSERT_FIELD(KTHREAD, 0x1AC, KSEMAPHORE, SuspendSemaphore) 103 | C_ASSERT_FIELD(KTHREAD, 0x1AC, UCHAR, SuspendSemaphorefill) 104 | C_ASSERT_FIELD(KTHREAD, 0x1C0, ULONG, SListFaultCount) 105 | C_ASSERT_FIELD(KTHREAD, 0x1C4, LIST_ENTRY, ThreadListEntry) 106 | C_ASSERT_FIELD(KTHREAD, 0x1CC, LIST_ENTRY, MutantListHead) 107 | C_ASSERT_FIELD(KTHREAD, 0x1D4, PVOID, SListFaultAddress) 108 | C_ASSERT_FIELD(KTHREAD, 0x1D8, PVOID, MdlForLockedTeb) 109 | 110 | 111 | -------------------------------------------------------------------------------- /ndk/umtypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0095 2 | 3 | Copyright (c) Alex Ionescu. All rights reserved. 4 | 5 | Header Name: 6 | 7 | umtypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the basic native types. 12 | 13 | Author: 14 | 15 | Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 16 | 17 | --*/ 18 | 19 | #if !defined(_NTDEF_) && !defined(_NTDEF_H) 20 | #define _NTDEF_ 21 | #define _NTDEF_H 22 | 23 | // 24 | // Use dummy macros, if SAL 2 is not available 25 | // 26 | #include 27 | #if (_SAL_VERSION < 20) 28 | #include 29 | #endif 30 | 31 | // 32 | // NDK Applications must use Unicode 33 | // 34 | #ifndef UNICODE 35 | #define UNICODE 36 | #endif 37 | 38 | // 39 | // Don't use the SDK status values 40 | // 41 | #ifndef WIN32_NO_STATUS 42 | #define WIN32_NO_STATUS 43 | #endif 44 | 45 | // 46 | // Let the NDK know we're in Application Mode 47 | // 48 | #define NTOS_MODE_USER 49 | 50 | // 51 | // Dependencies 52 | // 53 | #include 54 | #undef WIN32_NO_STATUS 55 | #include 56 | #include 57 | #include 58 | 59 | // 60 | // Compiler Definitions 61 | // 62 | #ifndef _MANAGED 63 | #if defined(_M_IX86) 64 | #ifndef FASTCALL 65 | #define FASTCALL __fastcall 66 | #endif 67 | #else 68 | #define FASTCALL 69 | #endif 70 | #else 71 | #define FASTCALL NTAPI 72 | #endif 73 | 74 | #if !defined(_M_CEE_PURE) 75 | #define NTAPI_INLINE NTAPI 76 | #else 77 | #define NTAPI_INLINE 78 | #endif 79 | 80 | // 81 | // Alignment Macros 82 | // 83 | #define ALIGN_DOWN_T(s, t) \ 84 | ((ULONGLONG)(s) & ~(sizeof(t) - 1)) 85 | 86 | ///Parenthesis bug in here!!!!!!!!! 87 | #define ALIGN_UP_T(s, t) \ 88 | (ALIGN_DOWN(((ULONGLONG)(s) + sizeof(t) - 1), t)) 89 | ///End parenthesis bug 90 | 91 | #define ALIGN_DOWN(s, alignmentSize) \ 92 | ((ULONGLONG)(s) & ~(alignmentSize - 1)) 93 | 94 | #define ALIGN_UP(s, alignmentSize) \ 95 | (ALIGN_DOWN(((ULONGLONG)(s) + alignmentSize - 1), alignmentSize)) 96 | 97 | #define ALIGN_DOWN_POINTER(p, t) \ 98 | ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1))) 99 | 100 | #define ALIGN_UP_POINTER(p, t) \ 101 | (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t)) 102 | 103 | // 104 | // Native API Return Value Macros 105 | // 106 | #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) 107 | #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1) 108 | #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2) 109 | #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3) 110 | 111 | // 112 | // Limits 113 | // 114 | #define MINCHAR 0x80 115 | #define MAXCHAR 0x7f 116 | #define MINSHORT 0x8000 117 | #define MAXSHORT 0x7fff 118 | #define MINLONG 0x80000000 119 | #define MAXLONG 0x7fffffff 120 | #define MAXUCHAR 0xff 121 | #define MAXUSHORT 0xffff 122 | #define MAXULONG 0xffffffff 123 | 124 | // 125 | // Basic Types that aren't defined in User-Mode Headers 126 | // 127 | typedef CONST int CINT; 128 | typedef CONST char *PCSZ; 129 | typedef ULONG CLONG; 130 | typedef short CSHORT; 131 | typedef CSHORT *PCSHORT; 132 | typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; 133 | typedef LONG KPRIORITY; 134 | 135 | // 136 | // Basic NT Types 137 | // 138 | #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H) && !defined(_NTSECAPI_) 139 | 140 | #if !defined(__BCRYPT_H__) && !defined(__WINE_BCRYPT_H) 141 | typedef _Return_type_success_(return >= 0) long NTSTATUS, *PNTSTATUS; 142 | #endif 143 | //#define Length LengthInBytes 144 | //#define MaximumLength MaximumLengthInBytes 145 | typedef struct _UNICODE_STRING 146 | { 147 | union { 148 | USHORT Length; 149 | USHORT LengthInBytes; 150 | }; 151 | union { 152 | USHORT MaximumLength; 153 | USHORT MaximumLengthInBytes; 154 | }; 155 | PWSTR Buffer; 156 | } UNICODE_STRING, *PUNICODE_STRING; 157 | 158 | typedef struct _STRING 159 | { 160 | USHORT Length; 161 | USHORT MaximumLength; 162 | PCHAR Buffer; 163 | } STRING, *PSTRING; 164 | 165 | typedef struct _CSTRING 166 | { 167 | USHORT Length; 168 | USHORT MaximumLength; 169 | CONST CHAR *Buffer; 170 | } CSTRING, *PCSTRING; 171 | 172 | #endif 173 | 174 | typedef struct _STRING32 { 175 | USHORT Length; 176 | USHORT MaximumLength; 177 | ULONG Buffer; 178 | } STRING32, *PSTRING32, 179 | UNICODE_STRING32, *PUNICODE_STRING32, 180 | ANSI_STRING32, *PANSI_STRING32; 181 | 182 | typedef struct _STRING64 { 183 | USHORT Length; 184 | USHORT MaximumLength; 185 | ULONGLONG Buffer; 186 | } STRING64, *PSTRING64, 187 | UNICODE_STRING64, *PUNICODE_STRING64, 188 | ANSI_STRING64, *PANSI_STRING64; 189 | 190 | 191 | typedef struct _OBJECT_ATTRIBUTES 192 | { 193 | ULONG Length; 194 | HANDLE RootDirectory; 195 | PUNICODE_STRING ObjectName; 196 | ULONG Attributes; 197 | PVOID SecurityDescriptor; 198 | PVOID SecurityQualityOfService; 199 | } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; 200 | 201 | // 202 | // ClientID Structure 203 | // 204 | typedef struct _CLIENT_ID 205 | { 206 | HANDLE UniqueProcess; 207 | HANDLE UniqueThread; 208 | } CLIENT_ID, *PCLIENT_ID; 209 | 210 | typedef const UNICODE_STRING* PCUNICODE_STRING; 211 | typedef STRING ANSI_STRING; 212 | typedef PSTRING PANSI_STRING; 213 | typedef STRING OEM_STRING; 214 | typedef PSTRING POEM_STRING; 215 | typedef CONST STRING* PCOEM_STRING; 216 | typedef STRING CANSI_STRING; 217 | typedef PSTRING PCANSI_STRING; 218 | 219 | #endif 220 | -------------------------------------------------------------------------------- /ndk/vffuncs.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) ReactOS Portable Systems Group. All rights reserved. 4 | 5 | Header Name: 6 | 7 | vffuncs.h 8 | 9 | Abstract: 10 | 11 | Function definitions for the Driver Verifier. 12 | 13 | Author: 14 | 15 | ReactOS Portable Systems Group (ros.arm@reactos.org) - Created - 27-Jun-2010 16 | 17 | --*/ 18 | 19 | #ifndef _VFFUNCS_H 20 | #define _VFFUNCS_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | #include 27 | 28 | #ifndef NTOS_MODE_USER 29 | 30 | // 31 | // Verifier Device Driver Interface 32 | // 33 | BOOLEAN 34 | NTAPI 35 | VfIsVerificationEnabled( 36 | _In_ VF_OBJECT_TYPE VfObjectType, 37 | _In_opt_ PVOID Object 38 | ); 39 | 40 | VOID 41 | VfFailDeviceNode( 42 | _In_ PDEVICE_OBJECT PhysicalDeviceObject, 43 | _In_ ULONG BugCheckMajorCode, 44 | _In_ ULONG BugCheckMinorCode, 45 | _In_ VF_FAILURE_CLASS FailureClass, 46 | _Inout_ PULONG AssertionControl, 47 | _In_ PSTR DebuggerMessageText, 48 | _In_ PSTR ParameterFormatString, 49 | ... 50 | ); 51 | #endif 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /ndk/vftypes.h: -------------------------------------------------------------------------------- 1 | /*++ NDK Version: 0098 2 | 3 | Copyright (c) ReactOS Portable Systems Group. All rights reserved. 4 | 5 | Header Name: 6 | 7 | vftypes.h 8 | 9 | Abstract: 10 | 11 | Type definitions for the Driver Verifier. 12 | 13 | Author: 14 | 15 | ReactOS Portable Systems Group (ros.arm@reactos.org) - Created - 27-Jun-2010 16 | 17 | --*/ 18 | 19 | #ifndef _VFTYPES_H 20 | #define _VFTYPES_H 21 | 22 | // 23 | // Dependencies 24 | // 25 | #include 26 | 27 | // 28 | // Failure Classes 29 | // 30 | typedef enum _VF_FAILURE_CLASS 31 | { 32 | VFFAILURE_FAIL_IN_FIELD, 33 | VFFAILURE_FAIL_LOGO, 34 | VFFAILURE_FAIL_UNDER_DEBUGGER 35 | } VF_FAILURE_CLASS, *PVF_FAILURE_CLASS; 36 | 37 | // 38 | // Object Types 39 | // 40 | typedef enum _VF_OBJECT_TYPE 41 | { 42 | VFOBJTYPE_DRIVER, 43 | VFOBJTYPE_DEVICE, 44 | VFOBJTYPE_SYSTEM_BIOS 45 | } VF_OBJECT_TYPE, PVF_OBJECT_TYPE; 46 | 47 | #endif // _VFTYPES_H 48 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arizvisa/ndk/6851da4ab49ca07ddae29b6d4d255726ad04ef86/readme.txt --------------------------------------------------------------------------------