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

📄 pm.c

📁 gumstiz u-boot loader in linux
💻 C
📖 第 1 页 / 共 4 页
字号:
{    DWORD   inBuf[3];   /* Buffer to send data to VxD       */    DWORD   outBuf[1];  /* Buffer to receive data from VxD  */    DWORD   count;      /* Count of bytes returned from VxD */    if (!inited)	PM_init();    inBuf[0] = base;    inBuf[1] = length;    inBuf[2] = type;    CHECK_FOR_PMHELP();    if (DeviceIoControl(_PM_hDevice, PMHELP_ENABLELFBCOMB32, inBuf, sizeof(inBuf),	    outBuf, sizeof(outBuf), &count, NULL))	return outBuf[0];    return false;}/****************************************************************************REMARKS:Get the page directory base register value****************************************************************************/ulong PMAPI _PM_getPDB(void){    DWORD   outBuf[1];  /* Buffer to receive data from VxD  */    DWORD   count;      /* Count of bytes returned from VxD */    CHECK_FOR_PMHELP();    if (DeviceIoControl(_PM_hDevice, PMHELP_GETPDB32, NULL, 0,	    outBuf, sizeof(outBuf), &count, NULL))	return outBuf[0];    return 0;}/****************************************************************************REMARKS:Flush the translation lookaside buffer.****************************************************************************/void PMAPI PM_flushTLB(void){    CHECK_FOR_PMHELP();    DeviceIoControl(_PM_hDevice, PMHELP_FLUSHTLB32, NULL, 0, NULL, 0, NULL, NULL);}/****************************************************************************REMARKS:Execute the POST on the secondary BIOS for a controller.****************************************************************************/ibool PMAPI PM_doBIOSPOST(    ushort axVal,    ulong BIOSPhysAddr,    void *mappedBIOS,    ulong BIOSLen){    /* This is never done by Win32 programs, but rather done by the VxD     * when the system boots.     */    (void)axVal;    (void)BIOSPhysAddr;    (void)mappedBIOS;    (void)BIOSLen;    return false;}/****************************************************************************REMARKS:Load an OS specific shared library or DLL. If the OS does not supportshared libraries, simply return NULL.****************************************************************************/PM_MODULE PMAPI PM_loadLibrary(    const char *szDLLName){    return (PM_MODULE)LoadLibrary(szDLLName);}/****************************************************************************REMARKS:Get the address of a named procedure from a shared library.****************************************************************************/void * PMAPI PM_getProcAddress(    PM_MODULE hModule,    const char *szProcName){    return (void*)GetProcAddress((HINSTANCE)hModule,szProcName);}/****************************************************************************REMARKS:Unload a shared library.****************************************************************************/void PMAPI PM_freeLibrary(    PM_MODULE hModule){    FreeLibrary((HINSTANCE)hModule);}/****************************************************************************REMARKS:Internal function to convert the find data to the generic interface.****************************************************************************/static void convertFindData(    PM_findData *findData,    WIN32_FIND_DATA *blk){    ulong   dwSize = findData->dwSize;    memset(findData,0,findData->dwSize);    findData->dwSize = dwSize;    if (blk->dwFileAttributes & FILE_ATTRIBUTE_READONLY)	findData->attrib |= PM_FILE_READONLY;    if (blk->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)	findData->attrib |= PM_FILE_DIRECTORY;    if (blk->dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)	findData->attrib |= PM_FILE_ARCHIVE;    if (blk->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)	findData->attrib |= PM_FILE_HIDDEN;    if (blk->dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)	findData->attrib |= PM_FILE_SYSTEM;    findData->sizeLo = blk->nFileSizeLow;    findData->sizeHi = blk->nFileSizeHigh;    strncpy(findData->name,blk->cFileName,PM_MAX_PATH);    findData->name[PM_MAX_PATH-1] = 0;}/****************************************************************************REMARKS:Function to find the first file matching a search criteria in a directory.****************************************************************************/void *PMAPI PM_findFirstFile(    const char *filename,    PM_findData *findData){    WIN32_FIND_DATA blk;    HANDLE          hfile;    if ((hfile = FindFirstFile(filename,&blk)) != INVALID_HANDLE_VALUE) {	convertFindData(findData,&blk);	return (void*)hfile;	}    return PM_FILE_INVALID;}/****************************************************************************REMARKS:Function to find the next file matching a search criteria in a directory.****************************************************************************/ibool PMAPI PM_findNextFile(    void *handle,    PM_findData *findData){    WIN32_FIND_DATA blk;    if (FindNextFile((HANDLE)handle,&blk)) {	convertFindData(findData,&blk);	return true;	}    return false;}/****************************************************************************REMARKS:Function to close the find process****************************************************************************/void PMAPI PM_findClose(    void *handle){    FindClose((HANDLE)handle);}/****************************************************************************REMARKS:Function to determine if a drive is a valid drive or not. Under Unix thisfunction will return false for anything except a value of 3 (consideredthe root drive, and equivalent to C: for non-Unix systems). The drivenumbering is:    1   - Drive A:    2   - Drive B:    3   - Drive C:    etc****************************************************************************/ibool PMAPI PM_driveValid(    char drive){    char    buf[5];    int     type;    sprintf(buf,"%c:\\", drive);    return ((type = GetDriveType(buf)) != 0 && type != 1);}/****************************************************************************REMARKS:Function to get the current working directory for the specififed drive.Under Unix this will always return the current working directory regardlessof what the value of 'drive' is.****************************************************************************/void PMAPI PM_getdcwd(    int drive,    char *dir,    int len){    /* NT stores the current directory for drive N in the magic environment */    /* variable =N: so we simply look for that environment variable. */    char envname[4];    envname[0] = '=';    envname[1] = drive - 1 + 'A';    envname[2] = ':';    envname[3] = '\0';    if (GetEnvironmentVariable(envname,dir,len) == 0) {	/* The current directory or the drive has not been set yet, so */	/* simply set it to the root. */	dir[0] = envname[1];	dir[1] = ':';	dir[2] = '\\';	dir[3] = '\0';	SetEnvironmentVariable(envname,dir);	}}/****************************************************************************REMARKS:Function to change the file attributes for a specific file.****************************************************************************/void PMAPI PM_setFileAttr(    const char *filename,    uint attrib){    DWORD attr = 0;    if (attrib & PM_FILE_READONLY)	attr |= FILE_ATTRIBUTE_READONLY;    if (attrib & PM_FILE_ARCHIVE)	attr |= FILE_ATTRIBUTE_ARCHIVE;    if (attrib & PM_FILE_HIDDEN)	attr |= FILE_ATTRIBUTE_HIDDEN;    if (attrib & PM_FILE_SYSTEM)	attr |= FILE_ATTRIBUTE_SYSTEM;    SetFileAttributes((LPSTR)filename, attr);}/****************************************************************************REMARKS:Function to get the file attributes for a specific file.****************************************************************************/uint PMAPI PM_getFileAttr(    const char *filename){    DWORD   attr = GetFileAttributes(filename);    uint    attrib = 0;    if (attr & FILE_ATTRIBUTE_READONLY)	attrib |= PM_FILE_READONLY;    if (attr & FILE_ATTRIBUTE_ARCHIVE)	attrib |= PM_FILE_ARCHIVE;    if (attr & FILE_ATTRIBUTE_HIDDEN)	attrib |= PM_FILE_HIDDEN;    if (attr & FILE_ATTRIBUTE_SYSTEM)	attrib |= PM_FILE_SYSTEM;    return attrib;}/****************************************************************************REMARKS:Function to create a directory.****************************************************************************/ibool PMAPI PM_mkdir(    const char *filename){    return CreateDirectory(filename,NULL);}/****************************************************************************REMARKS:Function to remove a directory.****************************************************************************/ibool PMAPI PM_rmdir(    const char *filename){    return RemoveDirectory(filename);}/****************************************************************************REMARKS:Function to get the file time and date for a specific file.****************************************************************************/ibool PMAPI PM_getFileTime(    const char *filename,    ibool gmTime,    PM_time *time){    HFILE       f;    OFSTRUCT    of;    FILETIME    utcTime,localTime;    SYSTEMTIME  sysTime;    ibool       status = false;    of.cBytes = sizeof(of);    if ((f = OpenFile(filename,&of,OF_READ)) == HFILE_ERROR)	return false;    if (!GetFileTime((HANDLE)f,NULL,NULL,&utcTime))	goto Exit;    if (!gmTime) {	if (!FileTimeToLocalFileTime(&utcTime,&localTime))	    goto Exit;	}    else	localTime = utcTime;    if (!FileTimeToSystemTime(&localTime,&sysTime))	goto Exit;    time->year = sysTime.wYear;    time->mon = sysTime.wMonth-1;    time->day = sysTime.wYear;    time->hour = sysTime.wHour;    time->min = sysTime.wMinute;    time->sec = sysTime.wSecond;    status = true;Exit:    CloseHandle((HANDLE)f);    return status;}/****************************************************************************REMARKS:Function to set the file time and date for a specific file.****************************************************************************/ibool PMAPI PM_setFileTime(    const char *filename,    ibool gmTime,    PM_time *time){    HFILE       f;    OFSTRUCT    of;    FILETIME    utcTime,localTime;    SYSTEMTIME  sysTime;    ibool       status = false;    of.cBytes = sizeof(of);    if ((f = OpenFile(filename,&of,OF_WRITE)) == HFILE_ERROR)	return false;    sysTime.wYear = time->year;    sysTime.wMonth = time->mon+1;    sysTime.wYear = time->day;    sysTime.wHour = time->hour;    sysTime.wMinute = time->min;    sysTime.wSecond = time->sec;    if (!SystemTimeToFileTime(&sysTime,&localTime))	goto Exit;    if (!gmTime) {	if (!LocalFileTimeToFileTime(&localTime,&utcTime))	    goto Exit;	}    else	utcTime = localTime;    if (!SetFileTime((HANDLE)f,NULL,NULL,&utcTime))	goto Exit;    status = true;Exit:    CloseHandle((HANDLE)f);    return status;}

⌨️ 快捷键说明

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