⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coresrv.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
字号:
/******************************************************
Copyright(c) 版权所有,1998-2003微逻辑。保留所有权利。
******************************************************/

/*****************************************************
文件说明:核心服务
版本号:2.0.0
开发时期:2000
作者:李林
修改记录:

******************************************************/

#include <eframe.h>
#include <eucore.h>
#include <eapisrv.h>
#include <eobjcall.h>
#include <coresrv.h>
 
static const PFNVOID lpCoreAPI[] = {
	NULL,
//  intr api
    (PFNVOID)KL_IntrInit,
	(PFNVOID)KL_IntrDone,
	(PFNVOID)KL_IntrDisable,
	(PFNVOID)KL_IntrEnable,
// interlock
    (PFNVOID)KL_InterlockedIncrement,
    (PFNVOID)KL_InterlockedDecrement,
    (PFNVOID)KL_InterlockedExchange,
    (PFNVOID)KL_InterlockedExchangeAdd,
    (PFNVOID)KL_InterlockedCompareExchange,
// debug
    (PFNVOID)KL_DebugOutString,
// page
	(PFNVOID)KL_AllocPageMem,
	(PFNVOID)KL_FreePageMem,
// semphore...
    (PFNVOID)KL_CreateSemaphore,
    (PFNVOID)KL_ReleaseSemaphore,
    (PFNVOID)KL_CreateMutex,
    (PFNVOID)KL_ReleaseMutex,
    (PFNVOID)KL_CreateEvent,
    (PFNVOID)KL_ResetEvent,
    (PFNVOID)KL_SetEvent,
	(PFNVOID)KL_PulseEvent,
    (PFNVOID)KL_InitializeCriticalSection,
    (PFNVOID)KL_DeleteCriticalSection,
    (PFNVOID)KL_LeaveCriticalSection,
    (PFNVOID)KL_EnterCriticalSection,
	(PFNVOID)NULL,//KL_InitializeCriticalSectionAndSpinCount
	(PFNVOID)NULL,//KL_SetCriticalSectionSpinCount
	(PFNVOID)KL_TryEnterCriticalSection,//KL_TryEnterCriticalSection
	
	(PFNVOID)NULL,//TIMERQUEUE_CREATE,
    (PFNVOID)NULL,//TIMERQUEUE_DELETE,
	(PFNVOID)NULL,//TIMERQUEUE_CREATETIMER,
	(PFNVOID)NULL,//TIMERQUEUE_DELETETIMER,
	(PFNVOID)NULL,//TIMERQUEUE_CHANGETIMER,
	(PFNVOID)NULL,//TIMERQUEUE_DELETEEX,
// misc
    (PFNVOID)KL_WaitForSingleObject,
	(PFNVOID)KL_WaitForMultipleObjects,
	(PFNVOID)KL_AllocAPIHandle,
	(PFNVOID)KL_CloseHandle,
	(PFNVOID)KL_Sleep,
	(PFNVOID)KL_GetTickCount,
	(PFNVOID)KL_GetSystemTime,
	(PFNVOID)KL_SetSystemTime,
	(PFNVOID)KL_ExitSystem,
	(PFNVOID)KL_GetSystemInfo,
	(PFNVOID)KL_GetVersion,
	(PFNVOID)KL_ImplementCallBack,
	(PFNVOID)KL_ImplementCallBack4,
	(PFNVOID)KL_GetSysTOC,
// heap
    (PFNVOID)KL_HeapCreate,
	(PFNVOID)KL_HeapDestroy,
	(PFNVOID)KL_HeapAlloc,
	(PFNVOID)KL_HeapFree,
	(PFNVOID)KL_HeapReAlloc,
	(PFNVOID)KL_HeapValidate,
	NULL,                //reserver for HeapLock
	NULL,                //reserver for HeapUnlock
	NULL,                //reserver for HeapCompact
	NULL,                //reserver for HeapSize
	NULL,                //reserver for HeapWalk
// thread
    (PFNVOID)KL_CreateThread,
    (PFNVOID)KL_SetThreadPriority,
	(PFNVOID)KL_GetThreadPriority,

	(PFNVOID)KL_SetThreadPolicy,
	(PFNVOID)KL_GetThreadPolicy,

    (PFNVOID)KL_GetCurrentThread,
    (PFNVOID)KL_GetCurrentThreadId,
    (PFNVOID)KL_GetExitCodeThread,
    (PFNVOID)KL_ExitThread,
    (PFNVOID)KL_SwitchToThread,
	(PFNVOID)KL_TerminateThread,
	(PFNVOID)KL_LockSchedule,
	(PFNVOID)KL_UnlockSchedule,
    (PFNVOID)KL_SuspendThread,
    (PFNVOID)KL_ResumeThread,

	(PFNVOID)KL_CaptureException,
	(PFNVOID)KL_ReleaseException,
	(PFNVOID)KL_GetComputerNameEx,
	(PFNVOID)KL_SetComputerNameEx,

	(PFNVOID)KL_RegistryIO,
	(PFNVOID)KL_ChangeThreadRotate,//
	NULL,//reserver
	NULL,//reserver for KernelIoControl
//
#ifdef INLINE_PROGRAM	
	(PFNVOID)KL_RegisterApplication,
    (PFNVOID)KL_LoadApplication,
    (PFNVOID)KL_GetApplicationIcon,
#else
	(PFNVOID)NULL,
    (PFNVOID)NULL,
    (PFNVOID)NULL,
#endif
//
	(PFNVOID)KL_CreateProcess,
	(PFNVOID)KL_TerminateProcess,
	(PFNVOID)KL_GetCurrentProcessId,
	(PFNVOID)KL_GetProcessHeap,
	(PFNVOID)KL_MapPtrToProcess,
	(PFNVOID)KL_UnMapPtr,
    (PFNVOID)KL_GetCurrentProcess,
    (PFNVOID)KL_GetCallerProcess,
    (PFNVOID)KL_GetOwnerProcess,
	(PFNVOID)KL_GetExitCodeProcess,
// tls
    (PFNVOID)KL_TlsAlloc,
    (PFNVOID)KL_TlsFree,
    (PFNVOID)KL_TlsGetValue,
    (PFNVOID)KL_TlsSetValue,
	(PFNVOID)KL_TlsGetThreadValue,
	(PFNVOID)KL_TlsSetThreadValue,
// error
    (PFNVOID)KL_SetLastError,
	(PFNVOID)KL_GetLastError,
// module
    (PFNVOID)KL_LoadLibraryEx,
	(PFNVOID)KL_FreeLibrary,
	(PFNVOID)KL_GetProcAddress,
	(PFNVOID)KL_GetModuleFileName,
	(PFNVOID)KL_GetModuleHandle,
	(PFNVOID)KL_FreeLibraryAndExitThread,
	(PFNVOID)KL_DisableThreadLibraryCalls,
	(PFNVOID)KL_GetModuleFileHandle,
	(PFNVOID)KL_GetModuleSectionOffset,
// elf dll open
    (PFNVOID)KL_OpenDllModule,
	(PFNVOID)KL_OpenDllDependence,
// virtual mem
#ifdef VIRTUAL_MEM
    (PFNVOID)KL_AllocPhysMem,
	(PFNVOID)KL_FreePhysMem,
	(PFNVOID)KL_VirtualAlloc,
	(PFNVOID)KL_VirtualFree,
	(PFNVOID)KL_VirtualCopy,
	(PFNVOID)KL_VirtualProtect,
#else
    (PFNVOID)NULL,
	(PFNVOID)NULL,
	(PFNVOID)NULL,
	(PFNVOID)NULL,
	(PFNVOID)NULL,
	(PFNVOID)NULL,
#endif
//
	(PFNVOID)KL_GlobalMemoryStatus,//MEM_GLOBALSTATUS
// power manager
    (PFNVOID)KL_PowerOffSystem,
// profil
    (PFNVOID)KL_ProfileKernel,
//
	(PFNVOID)KL_GetCommandLine,
	(PFNVOID)KL_GetProcessUserData,
	(PFNVOID)KL_SetProcessUserData,
	(PFNVOID)KL_OpenProcess,
	(PFNVOID)KL_ReleaseModuleFileHandle,
	(PFNVOID)KL_SetPermissions,
	(PFNVOID)KL_GetPermissions,
	(PFNVOID)KL_SetAlarmInfo,
	(PFNVOID)KL_RefreshAlarm,
	(PFNVOID)KL_GetProcessId

/*
// registry
    (PFNVOID)KL_RegCloseKey,
    (PFNVOID)KL_RegCreateKeyEx,
    (PFNVOID)KL_RegDeleteKey,
    (PFNVOID)KL_RegDeleteValue,
    (PFNVOID)KL_RegEnumKeyEx,
    (PFNVOID)KL_RegFlushKey,
    (PFNVOID)KL_RegEnumValue,
    (PFNVOID)KL_RegOpenKeyEx,
    (PFNVOID)KL_RegQueryInfoKey,
    (PFNVOID)KL_RegQueryValueEx,
    (PFNVOID)KL_RegSetValueEx
*/
};

static const DWORD dwCoreArgs[] = {
	0,	
//  INTR api
    ARG4_MAKE( DWORD, DWORD, DWORD, DWORD ),//KL_IntrInit
	ARG1_MAKE( DWORD ),//KL_IntrDone,
	ARG1_MAKE( DWORD ),//KL_IntrDisable
	ARG1_MAKE( DWORD ),//KL_IntrEnable
// interlock
    ARG1_MAKE( PTR ),//InterlockedIncrement,
    ARG1_MAKE( PTR ),//InterlockedDecrement,
    ARG2_MAKE( PTR, DWORD ),//InterlockedExchange,
    ARG2_MAKE( PTR, DWORD ),//InterlockedExchangeAdd,
    ARG3_MAKE( PTR, DWORD, DWORD ),//InterlockedCompareExchange,
// debug
    ARG1_MAKE( PTR ),//DebugOutString,
//  
    ARG3_MAKE( DWORD, PTR, DWORD ), // AllocPageMem
	ARG2_MAKE( PTR, DWORD ),  // FreePageMem
// semphore...
    ARG4_MAKE( PTR, DWORD, DWORD, PTR ),//CreateSemaphore,
    ARG3_MAKE( DWORD, DWORD, PTR ),//ReleaseSemaphore,
    ARG2_MAKE( PTR, DWORD ),//CreateMutex,
    ARG1_MAKE( DWORD ),//ReleaseMutex,
    ARG4_MAKE( PTR, DWORD, DWORD, PTR ),//CreateEvent,
    ARG1_MAKE( DWORD ),//ResetEvent,
    ARG1_MAKE( DWORD ),//SetEvent,
	ARG1_MAKE( DWORD ),//PulseEvent,
    ARG1_MAKE( PTR ),//InitializeCriticalSection,
    ARG1_MAKE( PTR ),//DeleteCriticalSection,
    ARG1_MAKE( PTR ),//LeaveCriticalSection,
    ARG1_MAKE( PTR ),//EnterCriticalSection,
	0,//ARG1_MAKE( PTR ),//InitializeCriticalSectionAndSpinCount
	0,//ARG0_MAKE(),	 //SetCriticalSectionSpinCount
	ARG1_MAKE( PTR ),    //TryEnterCriticalSection
	0,
	0,
	0,
	0,
	0,
	0,
// misc
    ARG2_MAKE( DWORD, DWORD ),//WaitForSingleObject,
	ARG4_MAKE( DWORD, PTR, DWORD, DWORD ),//WaitForMultipleObjects,
	ARG3_MAKE( DWORD, DWORD, DWORD ),//AllocAPIHandle,
	ARG1_MAKE( DWORD ),//CloseHandle,
	ARG1_MAKE( DWORD ),//Sleep,
	ARG0_MAKE(),//GetTickCount,
	ARG1_MAKE( PTR ),//GetSystemTime,
	ARG1_MAKE( PTR ),//SetSystemTime,
	ARG2_MAKE( DWORD, DWORD ),//KL_ExitSystem
	ARG1_MAKE( PTR ),//KL_GetSystemInfo
	ARG1_MAKE( PTR ),//KL_GetVersion
	ARG12_MAKE( PTR, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD ),// ImplementCallBack
	ARG4_MAKE( PTR, DWORD, DWORD, DWORD ),  // ImplementCallBack4
	ARG0_MAKE(), // KL_GetSysTOC
// heap
    ARG3_MAKE( DWORD, DWORD, DWORD ),//HeapCreate
	ARG1_MAKE( DWORD ),//HeapDestroy,
	ARG3_MAKE( DWORD, DWORD, DWORD ),//HeapAlloc,
	ARG3_MAKE( DWORD, DWORD, PTR ),//HeapFree,
	ARG4_MAKE( DWORD, DWORD, PTR, DWORD ),//HeapReAlloc,
	ARG3_MAKE( DWORD, DWORD, PTR ),//HeapValidate,
	0,                //reserver for HeapLock
	0,                //reserver for HeapUnlock
	0,                //reserver for HeapCompact
	0,                //reserver for HeapSize
	0,                //reserver for HeapWalk
// thread
    ARG6_MAKE( PTR, DWORD, PTR, PTR, DWORD, PTR ),//CreateThread,
    ARG3_MAKE( DWORD, DWORD, DWORD ),//SetThreadPriority,
	ARG1_MAKE( DWORD ),//GetThreadPriority

	ARG2_MAKE( DWORD, DWORD ),//SetThreadPolicy,
	ARG1_MAKE( DWORD ),//
    ARG0_MAKE(),//GetCurrentThread,
    ARG0_MAKE(),//GetCurrentThreadId,
    ARG2_MAKE( DWORD, PTR ),//GetExitCodeThread,
    ARG1_MAKE( DWORD ),//ExitThread,
    ARG0_MAKE(),//SwitchToThread,
	ARG2_MAKE( DWORD, DWORD ),//TerminateThread
	ARG0_MAKE(), //LockSchedule
	ARG0_MAKE(), // UnlockSchedule
    ARG1_MAKE( DWORD ),// KL_SuspendThread,
    ARG1_MAKE( DWORD ),// KL_ResumeThread,
	ARG0_MAKE(),//CaptureException
	ARG0_MAKE(),//ReleaseException
	ARG3_MAKE( DWORD, PTR, PTR ),//GetComputerNameEx
	ARG2_MAKE( DWORD, PTR),//SetComputerNameEx

	ARG3_MAKE( PTR, DWORD, DWORD ),//reserver
	ARG2_MAKE( DWORD, DWORD ),//reserver
	NULL,//reserver
	NULL,//reserver
//
#ifdef INLINE_PROGRAM	
	ARG3_MAKE( PTR, PTR, DWORD ),//RegisterApplication,
    ARG2_MAKE( PTR, PTR ),//LoadApplication,
    ARG2_MAKE( PTR, DWORD ),//GetApplicationIcon,
#else
	0,
	0,
	0,
#endif
//
	ARG10_MAKE( PTR, PTR, PTR, PTR, DWORD, DWORD, PTR, PTR, PTR, PTR ),//CreateProcess,
	ARG2_MAKE( DWORD, DWORD ),//TerminateProcess,
	ARG0_MAKE(),//GetCurrentProcessId,
	ARG0_MAKE(),//GetProcessHeap,
	ARG2_MAKE( DWORD, DWORD ),//MapPtrToProcess,
	ARG1_MAKE( DWORD ),//UnMapPtr
    ARG0_MAKE(),//GetCurrentProcess,
    ARG0_MAKE(),//GetCallerProcess,
    ARG0_MAKE(),//GetOwnerProcess,
	ARG2_MAKE( DWORD, PTR ),//GetExitCodeProcess,
// tls
    ARG0_MAKE(),//TlsAlloc,
    ARG1_MAKE( DWORD ),//TlsFree,
    ARG1_MAKE( DWORD ),//TlsGetValue,
    ARG2_MAKE( DWORD, DWORD ),//TlsSetValue,
	ARG2_MAKE( DWORD, DWORD ),//TlsGetThreadValue,
	ARG3_MAKE( DWORD, DWORD, DWORD ),//TlsSetThreadValue,
// error
    ARG1_MAKE( DWORD ),//SetLastError,
	ARG0_MAKE(),//GetLastError,
// module
    ARG3_MAKE( PTR, DWORD, DWORD ),//LoadLibraryEx,
	ARG1_MAKE( DWORD ),//FreeLibrary,
	ARG2_MAKE( DWORD, PTR ),//GetProcAddress,
	ARG3_MAKE( DWORD, PTR, DWORD ),//GetModuleFileName,
	ARG1_MAKE( PTR ),//GetModuleHandle,
	ARG2_MAKE( DWORD, DWORD ),//FreeLibraryAndExitThread,
	ARG1_MAKE( DWORD ),//DisableThreadLibraryCalls,
	ARG1_MAKE( DWORD ),//GetModuleFileHandle,
	ARG2_MAKE( DWORD, PTR ),//GetModuleSectionOffset,
// elf dll open
    ARG3_MAKE( PTR, DWORD, PTR),//OpenDllModule,
	ARG2_MAKE( PTR, DWORD ),//OpenDllDependence,
// mem
    ARG5_MAKE( DWORD, DWORD, DWORD, DWORD, PTR ),//AllocPhysMem,
	ARG1_MAKE( DWORD ),//FreePhysMem,
	ARG4_MAKE( PTR, DWORD, DWORD, DWORD ),//VirtualAlloc,
	ARG3_MAKE( PTR, DWORD, DWORD ),//VirtualFree
	ARG4_MAKE( PTR, PTR, DWORD, DWORD ),//VirtualCopy
	ARG4_MAKE( PTR, DWORD, DWORD, PTR ),//VirtualProtect,
	ARG1_MAKE( PTR ),// KL_GlobalMemoryStatus
// power manager
    ARG0_MAKE( ),//PowerOffSystem,    
// profile
	ARG2_MAKE( DWORD, PTR ),//Profile
//
    ARG0_MAKE(), // GetCommandLine
	ARG0_MAKE(),
	ARG1_MAKE( DWORD ),
	ARG3_MAKE( DWORD, DWORD, DWORD ),
	ARG2_MAKE( DWORD, DWORD ),//KL_ReleaseModuleFileHandle
	ARG1_MAKE( DWORD ),//KL_SetPermissions
	ARG0_MAKE(),//KL_GetPermissions
	ARG1_MAKE( PTR ), //(PFNVOID)KL_SetAlarmInfo,
	ARG0_MAKE(),//(PFNVOID)KL_RefreshAlarm
	ARG1_MAKE( DWORD )

/*
// registry
    ARG1_MAKE( DWORD ),//RegCloseKey,
    ARG9_MAKE( DWORD, PTR, DWORD, PTR, DWORD, DWORD, PTR, PTR, PTR ),//RegCreateKeyEx,
    ARG2_MAKE( DWORD, PTR ),//RegDeleteKey,
    ARG2_MAKE( DWORD, PTR ),//RegDeleteValue,
    ARG8_MAKE( DWORD, DWORD, PTR, PTR, PTR, PTR, PTR, PTR ),//RegEnumKeyEx,
    ARG1_MAKE( DWORD ),//RegFlushKey,
    ARG8_MAKE( DWORD, DWORD, PTR, PTR, PTR, PTR, PTR, PTR ),//RegEnumValue,
    ARG5_MAKE( DWORD, PTR, DWORD, DWORD, PTR ),
    ARG12_MAKE( DWORD, PTR, PTR, PTR, PTR, PTR, PTR, PTR, PTR, PTR, PTR, PTR ),//RegQueryInfoKey,
    ARG6_MAKE( DWORD, PTR, PTR, PTR, PTR, PTR ),//RegQueryValueEx,
    ARG6_MAKE( DWORD, PTR, DWORD, DWORD, PTR, DWORD ),//RegSetValueEx
*/
};

/**************************************************
声明:BOOL InitialCoreServer( void )
参数:
返回值:
	假如成功,返回TRUE;否则,返回FALSE
功能描述:
	初始化内核服务API
引用:
	被 system.c调用
************************************************/

BOOL InitialCoreServer( void )
{
	//API_Register( API_KERNEL,  (PFNVOID)lpCoreAPI, sizeof( lpCoreAPI ) / sizeof(PFNVOID) );
	KL_RegisterAPIEx( API_KERNEL,  lpCoreAPI, dwCoreArgs, sizeof( lpCoreAPI ) / sizeof(PFNVOID) );
	KL_SetAPIReady( API_KERNEL );
	
	return TRUE;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -