.nolist ;******************************************************************************************************************************** ;* * ;* File: Core.inc * ;* * ;* This file defines the structures, constants, and macros for the entry point into the of PwnOS, and includes the rest * ;* of the include files for . * ;* * ;* See Also: * ;* - * ;* - * ;* - * ;* - * ;* - * ;* - * ;* - * ;* * ;* Authors: * ;* - Neil G. Dickson * ;* * ;******************************************************************************************************************************** IFNDEF EXTERN_CORE_INCLUDE ;******************************************************************************************************************************** ;* * ;* Structure: CALLVECTORLIST * ;* * ;* This structure defines the layout of , containing the addresses of all functions accessible from * ;* . * ;* * ;* *Note*: When updating this, update * ;* * ;******************************************************************************************************************************** CALLVECTORLIST STRUCT pCreateProcess DWORD offset CreateProcessU pDestroyProcess DWORD offset DestroyProcessU pExitProcess DWORD offset ExitProcessU pGetCurrentProcess DWORD offset GetCurrentProcessU pCreateThread DWORD offset CreateThreadU pDestroyThread DWORD offset DestroyThreadU pPauseThread DWORD offset PauseThreadU pResumeThread DWORD offset ResumeThreadU pGetCurrentThread DWORD offset GetCurrentThreadU pSleepThread DWORD offset SleepThreadU pScheduleThread DWORD offset ScheduleThreadU pGetLock DWORD offset GetLockU pReleaseLock DWORD offset ReleaseLockU pAttemptGetLock DWORD offset AttemptGetLockU pWaitForNotify DWORD offset WaitForNotifyU pAttemptWaitForNotify DWORD offset AttemptWaitForNotifyU pNotify DWORD offset NotifyU pNotifyAll DWORD offset NotifyAllU pAllocatePages DWORD offset AllocatePagesU pFreePages DWORD offset FreePagesU pAllocateMemory DWORD offset AllocateMemoryU pAllocateAlignedMemory DWORD offset AllocateAlignedMemoryU pFreeMemory DWORD offset FreeMemoryU pOpenFile DWORD offset OpenFileU pGetFileSize DWORD offset GetFileSizeU pReadFile DWORD offset ReadFileU pWriteFile DWORD offset WriteFileU pCloseFile DWORD offset CloseFileU pGetGraphicsAccess DWORD offset GetGraphicsAccessU pReleaseGraphicsAccess DWORD offset ReleaseGraphicsAccessU CALLVECTORLIST ENDS ENDIF ;******************************************************************************************************************************** ;* * ;* Enumeration: Core Call Gate Constants * ;* * ;* These constants define indices into (or ) for use by calling . * ;* * ;* *Note*: When updating these, update * ;* * ;* Start Value: * ;* 0 * ;* Increment: * ;* 1 * ;* * ;* Members: * ;* CG_CREATE_PROCESS - * ;* CG_DESTROY_PROCESS - * ;* CG_EXIT_PROCESS - * ;* CG_GET_CURRENT_PROCESS - * ;* CG_CREATE_THREAD - * ;* CG_DESTROY_THREAD - * ;* CG_PAUSE_THREAD - * ;* CG_RESUME_THREAD - * ;* CG_GET_CURRENT_THREAD - * ;* CG_SLEEP_THREAD - * ;* CG_SCHEDULE_THREAD - * ;* CG_GET_LOCK - * ;* CG_RELEASE_LOCK - * ;* CG_ATTEMPT_GET_LOCK - * ;* CG_WAIT_FOR_NOTIFY - * ;* CG_ATTEMPT_WAIT_FOR_NOTIFY - * ;* CG_NOTIFY - * ;* CG_NOTIFY_ALL - * ;* CG_ALLOCATE_PAGES - * ;* CG_FREE_PAGES - * ;* CG_ALLOCATE_MEMORY - * ;* CG_ALLOCATE_ALIGNED_MEMORY - * ;* CG_FREE_MEMORY - * ;* CG_OPEN_FILE - * ;* CG_GET_FILE_SIZE - * ;* CG_READ_FILE - * ;* CG_WRITE_FILE - * ;* CG_CLOSE_FILE - * ;* CG_GET_GRAPHICS_ACCESS - * ;* CG_RELEASE_GRAPHICS_ACCESS - * ;* NUM_CALL_GATES - the number of call gate constants * ;* * ;******************************************************************************************************************************** InitEnum MACRO EnumCounter = 0 ENDM NextEnum MACRO EnumCounter = EnumCounter + 1 ENDM InitEnum CG_CREATE_PROCESS equ EnumCounter NextEnum CG_DESTROY_PROCESS equ EnumCounter NextEnum CG_EXIT_PROCESS equ EnumCounter NextEnum CG_GET_CURRENT_PROCESS equ EnumCounter NextEnum CG_CREATE_THREAD equ EnumCounter NextEnum CG_DESTROY_THREAD equ EnumCounter NextEnum CG_PAUSE_THREAD equ EnumCounter NextEnum CG_RESUME_THREAD equ EnumCounter NextEnum CG_GET_CURRENT_THREAD equ EnumCounter NextEnum CG_SLEEP_THREAD equ EnumCounter NextEnum CG_SCHEDULE_THREAD equ EnumCounter NextEnum CG_GET_LOCK equ EnumCounter NextEnum CG_RELEASE_LOCK equ EnumCounter NextEnum CG_ATTEMPT_GET_LOCK equ EnumCounter NextEnum CG_WAIT_FOR_NOTIFY equ EnumCounter NextEnum CG_ATTEMPT_WAIT_FOR_NOTIFY equ EnumCounter NextEnum CG_NOTIFY equ EnumCounter NextEnum CG_NOTIFY_ALL equ EnumCounter NextEnum CG_ALLOCATE_PAGES equ EnumCounter NextEnum CG_FREE_PAGES equ EnumCounter NextEnum CG_ALLOCATE_MEMORY equ EnumCounter NextEnum CG_ALLOCATE_ALIGNED_MEMORY equ EnumCounter NextEnum CG_FREE_MEMORY equ EnumCounter NextEnum CG_OPEN_FILE equ EnumCounter NextEnum CG_GET_FILE_SIZE equ EnumCounter NextEnum CG_READ_FILE equ EnumCounter NextEnum CG_WRITE_FILE equ EnumCounter NextEnum CG_CLOSE_FILE equ EnumCounter NextEnum CG_GET_GRAPHICS_ACCESS equ EnumCounter NextEnum CG_RELEASE_GRAPHICS_ACCESS equ EnumCounter NextEnum NUM_CALL_GATES equ EnumCounter ;******************************************************************************************************************************** ;* * ;* Enumeration: Core Access Flag Constants * ;* * ;* These constants define bit indices into to lock access to certain areas of the . * ;* * ;* Start Value: * ;* 0 * ;* Increment: * ;* 1 * ;* * ;* Members: * ;* THREAD_SCHEDULER_ACCESS_BITNUM - lock for access to * ;* * ;******************************************************************************************************************************** THREAD_SCHEDULER_ACCESS_BITNUM equ 0 ;******************************************************************************************************************************** ;* * ;* Constants: Miscellaneous Constants * ;* * ;* These constants are miscellaneous things that don't really fit anywhere else at the moment. * ;* * ;* Members: * ;* MAX_NUM_PROCESSORS - maximum number of processors chosen to be allowed (only 15 supported by Pentium 4 anyway) * ;* TESTING_MODE - TRUE means that testing operations will be compiled-in and FALSE means taht they won't * ;* * ;******************************************************************************************************************************** MAX_NUM_PROCESSORS equ 0Fh TESTING_MODE equ TRUE ;******************************************************************************************************************************** ;* * ;* Constants: Device Interrupts * ;* * ;* These are the interrupt numbers chosen for all device interrupts. Exception interrupts are in * ;* * ;* Members: * ;* INT_PIT - Programmable Interval Timer * ;* INT_KEYBOARD - PS/2 Keyboard * ;* INT_COM2_COM4 - Serial ports * ;* INT_COM1_COM3 - Serial ports * ;* INT_SOUND_CARD - Sound card * ;* INT_FLOPPY - Floppy drives * ;* INT_PARALLEL - Parallel ports * ;* INT_CMOS_CLOCK - CMOS clock * ;* INT_MOUSE - PS/2 Mouse * ;* INT_IDE0 - Drives on IDE0 * ;* INT_IDE1 - Drives on IDE1 * ;* INT_APIC_ERROR - Error in APIC operation * ;* INT_APIC_SPURIOUS - Spurious interrupt; its number (in hex) ends in F because that's required on all before Pentium 4 * ;* INT_APIC_TIMER - APIC Timer completion * ;* INT_HANG - Miscellaneous interrupt used during * ;* INT_USB - USB devices * ;* INT_NETWORK - Network cards * ;* N_INTERRUPTS - total number of interrupts in * ;* * ;******************************************************************************************************************************** INT_PIT equ 13h INT_KEYBOARD equ 14h INT_COM2_COM4 equ 15h INT_COM1_COM3 equ 16h INT_SOUND_CARD equ 17h INT_FLOPPY equ 18h INT_PARALLEL equ 19h INT_CMOS_CLOCK equ 1Ah INT_MOUSE equ 1Bh INT_IDE0 equ 1Ch INT_IDE1 equ 1Dh INT_APIC_ERROR equ 1Eh INT_APIC_SPURIOUS equ 1Fh INT_APIC_TIMER equ 20h INT_HANG equ 21h INT_USB equ 22h INT_NETWORK equ 23h N_INTERRUPTS equ 24h ;******************************************************************************************************************************** ;* * ;* Enumeration: Handle Type Constants * ;* * ;* These constants allow distinguishing of different types of handle structures. * ;* * ;* Start Value: * ;* 0 * ;* Increment: * ;* 1 * ;* * ;* Members: * ;* HANDLE_TYPE_PROCESS - identifies a * ;* HANDLE_TYPE_THREAD - identifies a * ;* HANDLE_TYPE_FILE - identifies a * ;* * ;******************************************************************************************************************************** HANDLE_TYPE_PROCESS equ 0 HANDLE_TYPE_THREAD equ 1 HANDLE_TYPE_FILE equ 2 ;PassCallTo MACRO function,nParams,SetECXAddr? ; LOCAL ParamCount ; ParamCount = nParams ; if nParams NE 0 ; if SetECXAddr? EQ TRUE ; mov ecx,dword ptr [esp][12] ;Privilege Level 3 ss should map the same as ds ; endif ; while ParamCount NE 0 ; push dword ptr [ecx][(nParams)*4] ; ParamCount = ParamCount - 1 ; endm ; endif ; call function ;ENDM ; ;IFNDEF TestOutputVar ;TestOutputVar MACRO text,var ; ;ENDM ;ENDIF ; ;IFNDEF GfxOutput ;GfxOutput MACRO text ; ;ENDM ;ENDIF .list include ..\Common.inc include PM.inc include GDT.inc include ..\Boot\MBR.inc include Sync\Sync.inc include Sync\Time.inc include Memory\Memory.inc include Memory\HeapMemory.inc include Memory\PageFile.inc include Memory\MiscMemory.inc include Threads\Threads.inc include Threads\Processes.inc include Threads\ThreadScheduler.inc include Threads\EXE.inc include Files\Files.inc include IO\IO.inc include CoreExtern.inc