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

📄 pm.c

📁 uboot在arm处理器s3c2410的移植代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************                   SciTech OS Portability Manager Library**  ========================================================================**    The contents of this file are subject to the SciTech MGL Public*    License Version 1.0 (the "License"); you may not use this file*    except in compliance with the License. You may obtain a copy of*    the License at http://www.scitechsoft.com/mgl-license.txt**    Software distributed under the License is distributed on an*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or*    implied. See the License for the specific language governing*    rights and limitations under the License.**    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.**    The Initial Developer of the Original Code is SciTech Software, Inc.*    All Rights Reserved.**  ========================================================================** Language:     ANSI C* Environment:  32-bit Windows NT device drivers.** Description:  Implementation for the OS Portability Manager Library, which*               contains functions to implement OS specific services in a*               generic, cross platform API. Porting the OS Portability*               Manager library is the first step to porting any SciTech*               products to a new platform.*****************************************************************************/#include "pmapi.h"#include "drvlib/os/os.h"#include "sdd/sddhelp.h"#include "mtrr.h"#include "oshdr.h"/*--------------------------- Global variables ----------------------------*/char                _PM_cntPath[PM_MAX_PATH] = "";char                _PM_nucleusPath[PM_MAX_PATH] = "";static void (PMAPIP fatalErrorCleanup)(void) = NULL;static char *szNTWindowsKey     = "\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion";static char *szNTSystemRoot     = "SystemRoot";static char *szMachineNameKey   = "\\REGISTRY\\Machine\\System\\CurrentControlSet\\control\\ComputerName\\ComputerName";static char *szMachineNameKeyNT = "\\REGISTRY\\Machine\\System\\CurrentControlSet\\control\\ComputerName\\ActiveComputerName";static char *szMachineName      = "ComputerName";/*----------------------------- Implementation ----------------------------*//****************************************************************************REMARKS:Initialise the PM library.****************************************************************************/void PMAPI PM_init(void){    /* Initialiase the MTRR module */    MTRR_init();}/****************************************************************************REMARKS:Return the operating system type identifier.****************************************************************************/long PMAPI PM_getOSType(void){    return _OS_WINNTDRV;}/****************************************************************************REMARKS:Return the runtime type identifier.****************************************************************************/int PMAPI PM_getModeType(void){    return PM_386;}/****************************************************************************REMARKS:Add a file directory separator to the end of the filename.****************************************************************************/void PMAPI PM_backslash(char *s){    uint pos = strlen(s);    if (s[pos-1] != '\\') {	s[pos] = '\\';	s[pos+1] = '\0';	}}/****************************************************************************REMARKS:Add a user defined PM_fatalError cleanup function.****************************************************************************/void PMAPI PM_setFatalErrorCleanup(    void (PMAPIP cleanup)(void)){    fatalErrorCleanup = cleanup;}/****************************************************************************REMARKS:Handle fatal errors internally in the driver.****************************************************************************/void PMAPI PM_fatalError(    const char *msg){    ULONG   BugCheckCode = 0;    ULONG   MoreBugCheckData[4] = {0};    char    *p;    ULONG   len;    if (fatalErrorCleanup)	fatalErrorCleanup();#ifdef DBG	/* Send output to debugger, just return so as not to force a reboot */#pragma message("INFO: building for debug, PM_fatalError() re-routed")	DBGMSG2("SDDHELP> PM_fatalError(): ERROR: %s\n", msg);	return ;#endif    /* KeBugCheckEx brings down the system in a controlled */    /* manner when the caller discovers an unrecoverable */    /* inconsistency that would corrupt the system if */    /* the caller continued to run. */    /* */    /* hack - dump the first 20 chars in hex using the variables */    /*      provided - Each ULONG is equal to four characters... */    for(len = 0; len < 20; len++)	if (msg[len] == (char)0)	    break;    /* This looks bad but it's quick and reliable... */    p = (char *)&BugCheckCode;    if(len > 0) p[3] = msg[0];    if(len > 1) p[2] = msg[1];    if(len > 2) p[1] = msg[2];    if(len > 3) p[0] = msg[3];    p = (char *)&MoreBugCheckData[0];    if(len > 4) p[3] = msg[4];    if(len > 5) p[2] = msg[5];    if(len > 6) p[1] = msg[6];    if(len > 7) p[0] = msg[7];    p = (char *)&MoreBugCheckData[1];    if(len > 8) p[3] = msg[8];    if(len > 9) p[2] = msg[9];    if(len > 10) p[1] = msg[10];    if(len > 11) p[0] = msg[11];    p = (char *)&MoreBugCheckData[2];    if(len > 12) p[3] = msg[12];    if(len > 13) p[2] = msg[13];    if(len > 14) p[1] = msg[14];    if(len > 15) p[0] = msg[15];    p = (char *)&MoreBugCheckData[3];    if(len > 16) p[3] = msg[16];    if(len > 17) p[2] = msg[17];    if(len > 18) p[1] = msg[18];    if(len > 19) p[0] = msg[19];    /* Halt the system! */    KeBugCheckEx(BugCheckCode, MoreBugCheckData[0], MoreBugCheckData[1], MoreBugCheckData[2], MoreBugCheckData[3]);}/****************************************************************************REMARKS:Return the current operating system path or working directory.****************************************************************************/char * PMAPI PM_getCurrentPath(    char *path,    int maxLen){    strncpy(path,_PM_cntPath,maxLen);    path[maxLen-1] = 0;    return path;}/****************************************************************************PARAMETERS:szKey       - Key to query (can contain version number formatting)szValue     - Value to get information forvalue       - Place to store the registry key data readsize        - Size of the string buffer to read intoRETURNS:true if the key was found, false if not.****************************************************************************/static ibool REG_queryString(    char *szKey,    const char *szValue,    char *value,    DWORD size){    ibool                           status;    NTSTATUS                        rval;    ULONG                           length;    HANDLE                          Handle;    OBJECT_ATTRIBUTES               keyAttributes;    UNICODE_STRING                  *uniKey = NULL;    UNICODE_STRING                  *uniValue = NULL;    PKEY_VALUE_FULL_INFORMATION		fullInfo = NULL;    STRING                          stringdata;    UNICODE_STRING                  unidata;    /* Convert strings to UniCode */    status = false;    if ((uniKey = _PM_CStringToUnicodeString(szKey)) == NULL)	goto Exit;    if ((uniValue = _PM_CStringToUnicodeString(szValue)) == NULL)	goto Exit;    /* Open the key */    InitializeObjectAttributes( &keyAttributes,				uniKey,				OBJ_CASE_INSENSITIVE,				NULL,				NULL );    rval = ZwOpenKey( &Handle,		      KEY_ALL_ACCESS,		      &keyAttributes );    if (!NT_SUCCESS(rval))	goto Exit;    /* Query the value */    length = sizeof (KEY_VALUE_FULL_INFORMATION)	   + size * sizeof(WCHAR);    if ((fullInfo = ExAllocatePool (PagedPool, length)) == NULL)	goto Exit;    RtlZeroMemory(fullInfo, length);    rval = ZwQueryValueKey (Handle,			    uniValue,			    KeyValueFullInformation,			    fullInfo,			    length,			    &length);    if (NT_SUCCESS (rval)) {	/* Create the UniCode string so we can convert it */	unidata.Buffer = (PWCHAR)(((PCHAR)fullInfo) + fullInfo->DataOffset);	unidata.Length = (USHORT)fullInfo->DataLength;	unidata.MaximumLength = (USHORT)fullInfo->DataLength + sizeof(WCHAR);	/* Convert unicode univalue to ansi string. */	rval = RtlUnicodeStringToAnsiString(&stringdata, &unidata, TRUE);	if (NT_SUCCESS(rval)) {	    strcpy(value,stringdata.Buffer);	    status = true;	    }	}Exit:    if (fullInfo) ExFreePool(fullInfo);    if (uniKey) _PM_FreeUnicodeString(uniKey);    if (uniValue) _PM_FreeUnicodeString(uniValue);    return status;}/****************************************************************************REMARKS:Return the drive letter for the boot drive.****************************************************************************/char PMAPI PM_getBootDrive(void){    char path[256];    if (REG_queryString(szNTWindowsKey,szNTSystemRoot,path,sizeof(path)))	return 'c';    return path[0];}/****************************************************************************REMARKS:Return the path to the VBE/AF driver files.****************************************************************************/const char * PMAPI PM_getVBEAFPath(void){    return "c:\\";}/****************************************************************************REMARKS:Return the path to the Nucleus driver files.****************************************************************************/const char * PMAPI PM_getNucleusPath(void){    static char path[256];    if (strlen(_PM_nucleusPath) > 0) {	strcpy(path,_PM_nucleusPath);	PM_backslash(path);	return path;	}    if (!REG_queryString(szNTWindowsKey,szNTSystemRoot,path,sizeof(path)))	strcpy(path,"c:\\winnt");    PM_backslash(path);    strcat(path,"system32\\nucleus");    return path;}/****************************************************************************REMARKS:Return the path to the Nucleus configuration files.****************************************************************************/const char * PMAPI PM_getNucleusConfigPath(void){    static char path[256];    strcpy(path,PM_getNucleusPath());    PM_backslash(path);    strcat(path,"config");    return path;}/****************************************************************************REMARKS:Return a unique identifier for the machine if possible.****************************************************************************/const char * PMAPI PM_getUniqueID(void){    return PM_getMachineName();}/****************************************************************************REMARKS:Get the name of the machine on the network.****************************************************************************/const char * PMAPI PM_getMachineName(void){    static char name[256];    if (REG_queryString(szMachineNameKey,szMachineName,name,sizeof(name)))	return name;    if (REG_queryString(szMachineNameKeyNT,szMachineName,name,sizeof(name)))	return name;    return "Unknown";}/****************************************************************************REMARKS:Check if a key has been pressed.****************************************************************************/int PMAPI PM_kbhit(void){    /* Not used in NT drivers */    return true;}/****************************************************************************REMARKS:Wait for and return the next keypress.****************************************************************************/int PMAPI PM_getch(void){    /* Not used in NT drivers */    return 0xD;}/****************************************************************************REMARKS:Open a console for output to the screen, creating the main event handlingwindow if necessary.****************************************************************************/PM_HWND PMAPI PM_openConsole(    PM_HWND hwndUser,    int device,    int xRes,    int yRes,    int bpp,    ibool fullScreen){    /* Not used in NT drivers */    (void)hwndUser;    (void)device;    (void)xRes;    (void)yRes;    (void)bpp;    (void)fullScreen;    return NULL;}/****************************************************************************REMARKS:Find the size of the console state buffer.****************************************************************************/int PMAPI PM_getConsoleStateSize(void){    /* Not used in NT drivers */    return 1;}/****************************************************************************REMARKS:Save the state of the console.****************************************************************************/void PMAPI PM_saveConsoleState(    void *stateBuf,    PM_HWND hwndConsole){    /* Not used in NT drivers */    (void)stateBuf;    (void)hwndConsole;}/****************************************************************************REMARKS:Set the suspend application callback for the fullscreen console.****************************************************************************/void PMAPI PM_setSuspendAppCallback(    PM_saveState_cb saveState){    /* Not used in NT drivers */    (void)saveState;}/****************************************************************************REMARKS:Restore the console state.****************************************************************************/void PMAPI PM_restoreConsoleState(    const void *stateBuf,    PM_HWND hwndConsole){    /* Not used in NT drivers */    (void)stateBuf;    (void)hwndConsole;}/****************************************************************************REMARKS:Close the fullscreen console.****************************************************************************/void PMAPI PM_closeConsole(    PM_HWND hwndConsole){    /* Not used in NT drivers */    (void)hwndConsole;}/****************************************************************************REMARKS:Set the location of the OS console cursor.****************************************************************************/void PMAPI PM_setOSCursorLocation(    int x,    int y){    /* Nothing to do for Windows */    (void)x;    (void)y;}/****************************************************************************REMARKS:Set the width of the OS console.****************************************************************************/void PMAPI PM_setOSScreenWidth(    int width,    int height){    /* Nothing to do for Windows */    (void)width;    (void)height;}

⌨️ 快捷键说明

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