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

📄 resource.c

📁 wince下的源代码集合打包
💻 C
📖 第 1 页 / 共 3 页
字号:
			*lpSubBlock = 0;			nCmp = 1;			while (((int)pBlock->wTotLen > sizeof(VERBLOCK)) && ((int)pBlock->wTotLen <= (LPBYTE)lpEndSubBlock-(LPBYTE)pBlock)) {				if (!(nCmp=kstrcmpi(lpStart, pBlock->szKey)))					break;				pBlock=(VERBLOCK*)((LPBYTE)pBlock+DWORDUP(pBlock->wTotLen));			}			*lpSubBlock = cTemp;			if (nCmp)				goto NotFound;		}	}	*puLen = pBlock->wValLen;	lpStart = (LPWSTR)((LPBYTE)pBlock+DWORDUP((sizeof(VERBLOCK)-sizeof(WCHAR))+(strlenW(pBlock->szKey)+1)*sizeof(WCHAR)));	*lplpBuffer = lpStart < (LPWSTR)((LPBYTE)pBlock+pBlock->wTotLen) ? lpStart : (LPWSTR)(pBlock->szKey+strlenW(pBlock->szKey));	bString = pBlock->wType;	*lpEndBlock = cEndBlock;	LocalFree(lpSubBlockOrg);	return (TRUE);NotFound:	KSetLastError(pCurThread,ERROR_RESOURCE_NAME_NOT_FOUND);	*lpEndBlock = cEndBlock;	LocalFree(lpSubBlockOrg);	return (FALSE);}DWORD SC_GetFileVersionInfoSizeW(LPWSTR lpFilename, LPDWORD lpdwHandle) {	LPBYTE lpres;	BOOL inRom;	DWORD o32rva, dwRet = 0;	VERHEAD *pVerHead;	if (lpdwHandle)		*lpdwHandle = 0;	DEBUGMSG(ZONE_ENTRY,(L"SC_GetFileVersionInfoSizeW entry: %8.8lx %8.8lx\r\n",lpFilename, lpdwHandle));	if (lpres = OpenResourceFile(lpFilename, &inRom, &o32rva)) {		if (pVerHead = (VERHEAD *)ExtractOneResource(lpres, MAKEINTRESOURCE(VS_VERSION_INFO), VS_FILE_INFO, o32rva, &dwRet)) {			if (((DWORD)pVerHead->wTotLen > dwRet) || (pVerHead->vsf.dwSignature != VS_FFI_SIGNATURE))				KSetLastError(pCurThread,ERROR_INVALID_DATA);			else				dwRet = pVerHead->wTotLen;			LocalFree(pVerHead);		}		if (!inRom)			LocalFree(lpres);	}	DEBUGMSG(ZONE_ENTRY,(L"SC_GetFileVersionInfoSizeW exit: %8.8lx\r\n",dwRet));	return dwRet;}BOOL SC_GetFileVersionInfoW(LPWSTR lpFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData) {	LPBYTE lpres;	BOOL inRom, bRet = FALSE;	DWORD o32rva, dwTemp;	VERHEAD *pVerHead;	DEBUGMSG(ZONE_ENTRY,(L"SC_GetFileVersionInfoW entry: %8.8lx %8.8lx %8.8lx %8.8lx\r\n",lpFilename, dwHandle, dwLen, lpData));	if (dwLen < sizeof(((VERHEAD*)lpData)->wTotLen))		KSetLastError(pCurThread,ERROR_INSUFFICIENT_BUFFER);	else if (lpres = OpenResourceFile(lpFilename, &inRom, &o32rva)) {		if (pVerHead = (VERHEAD *)ExtractOneResource(lpres, MAKEINTRESOURCE(VS_VERSION_INFO), VS_FILE_INFO, o32rva, &dwTemp)) {			if (((DWORD)pVerHead->wTotLen > dwTemp) || (pVerHead->vsf.dwSignature != VS_FFI_SIGNATURE))				KSetLastError(pCurThread,ERROR_INVALID_DATA);			else {				dwTemp = (DWORD)pVerHead->wTotLen;				if (dwTemp > dwLen)					dwTemp = dwLen;				memcpy(lpData,pVerHead,dwTemp);				((VERHEAD*)lpData)->wTotLen = (WORD)dwTemp;				bRet = TRUE;			}			LocalFree(pVerHead);		}		if (!inRom)			LocalFree(lpres);	}	DEBUGMSG(ZONE_ENTRY,(L"SC_GetFileVersionInfoSizeW exit: %d\r\n",bRet));	return bRet;;}void AToUCopy(WCHAR *wptr, LPBYTE aptr, int maxlen) {	int len;	for (len = 1; (len<maxlen) && *aptr; len++)		*wptr++ = (WCHAR)*aptr++;	*wptr = 0;}#define COMP_BLOCK_SIZE PAGE_SIZEBYTE lpDecBuf[COMP_BLOCK_SIZE];DWORD cfile=0xffffffff,cblock=0xffffffff;DWORD SC_GetRomFileBytes(DWORD type, DWORD count, DWORD pos, LPVOID buffer, DWORD nBytesToRead) {	TOCentry *tocptr;	FILESentry *filesptr;	DWORD dwBlock,bRead,csize, fullsize;	LPVOID buffercopy;	ROMChain_t *pROM = ROMChain;//	DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileBytes entry: %8.8lx %8.8lx %8.8lx %8.8lx %8.8lx\r\n",//		type,count,pos,buffer,nBytesToRead));	if (type == 2) {		while (pROM && (count >= pROM->pTOC->numfiles)) {			count -= pROM->pTOC->numfiles;			pROM = pROM->pNext;		}		if (!pROM) {//			DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileBytes exit: %8.8lx\r\n",0));			return 0;		}		tocptr = &(((TOCentry *)&pROM->pTOC[1])[pROM->pTOC->nummods]);		filesptr = &(((FILESentry *)tocptr)[count]);		if (pos > filesptr->nRealFileSize) {//			DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileBytes exit: %8.8lx\r\n",0));			return 0;		}		if (pos + nBytesToRead > filesptr->nRealFileSize)			nBytesToRead = filesptr->nRealFileSize - pos;		if (!nBytesToRead)			fullsize = 0;		else {			fullsize = nBytesToRead;			buffercopy = buffer;			LockPages(buffercopy,fullsize,0,LOCKFLAG_WRITE);			EnterCriticalSection(&RFBcs);			if (filesptr->nRealFileSize == filesptr->nCompFileSize)				memcpy(buffer,(LPBYTE)filesptr->ulLoadOffset+pos,nBytesToRead);			else if (!filesptr->nCompFileSize)				memset(buffer,0,nBytesToRead);			else while (nBytesToRead) {				dwBlock = pos/COMP_BLOCK_SIZE;				bRead = nBytesToRead;				if ((pos + bRead-1)/COMP_BLOCK_SIZE != dwBlock)					bRead = COMP_BLOCK_SIZE - (pos&(COMP_BLOCK_SIZE-1));				if ((count != cfile) || (dwBlock != cblock)) {					if (dwBlock == filesptr->nRealFileSize/COMP_BLOCK_SIZE)						csize = filesptr->nRealFileSize - (COMP_BLOCK_SIZE*dwBlock);					else						csize = COMP_BLOCK_SIZE;					if (bRead == csize)						Decompress((LPBYTE)filesptr->ulLoadOffset,filesptr->nCompFileSize,buffer,csize,dwBlock*COMP_BLOCK_SIZE);					else {						Decompress((LPBYTE)filesptr->ulLoadOffset,filesptr->nCompFileSize,lpDecBuf,csize,dwBlock*COMP_BLOCK_SIZE);						cfile = count;						cblock = dwBlock;						memcpy(buffer,lpDecBuf+(pos&(COMP_BLOCK_SIZE-1)),bRead);					}				} else					memcpy(buffer,lpDecBuf+(pos&(COMP_BLOCK_SIZE-1)),bRead);				buffer = (LPVOID)((LPBYTE)buffer+bRead);				nBytesToRead -= bRead;				pos += bRead;			}			LeaveCriticalSection(&RFBcs);			UnlockPages(buffercopy,fullsize);		}//		DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileBytes exit: %8.8lx\r\n",fullsize));		return fullsize;	}//	DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileBytes exit: %8.8lx\r\n",0));	return 0;}LPVOID SC_MapUncompressedFileW(LPCWSTR pFileName, LPDWORD pLen) {	DWORD loop;	TOCentry *tocptr;	FILESentry *filesptr;	BYTE *bTrav;	const WCHAR *wTrav;	ROMChain_t *pROM = ROMChain;	for (pROM = ROMChain; pROM; pROM = pROM->pNext) {		tocptr = &(((TOCentry *)&pROM->pTOC[1])[pROM->pTOC->nummods]);		for (loop = 0; loop < pROM->pTOC->numfiles; loop++) {			filesptr = &(((FILESentry *)tocptr)[loop]);			for (bTrav = filesptr->lpszFileName, wTrav = pFileName; *wTrav && (*wTrav == *bTrav); wTrav++, bTrav++)				;			if (!*wTrav && !*bTrav) {				if (filesptr->nRealFileSize != filesptr->nCompFileSize) {					KSetLastError(pCurThread,ERROR_INVALID_FLAGS);					return 0;				}				if (pLen)					*pLen = filesptr->nRealFileSize;				return (LPVOID)filesptr->ulLoadOffset;			}		}	}	KSetLastError(pCurThread,ERROR_FILE_NOT_FOUND);	return 0;}const PFNVOID ExtraMethods[] = {	(LPVOID)SC_EventModify,			// 000	(LPVOID)SC_ReleaseMutex,		// 001	(LPVOID)SC_CreateAPIHandle,		// 002	(LPVOID)SC_MapViewOfFile,		// 003	(LPVOID)SC_ThreadGetPrio,		// 004	(LPVOID)SC_ThreadSetPrio,		// 005	(LPVOID)SC_SelectObject,		// 006	(LPVOID)SC_PatBlt,				// 007	(LPVOID)SC_GetTextExtentExPointW,// 008	(LPVOID)SC_GetSysColorBrush,	// 009	(LPVOID)SC_SetBkColor,			// 010	(LPVOID)SC_GetParent,			// 011	(LPVOID)SC_InvalidateRect,		// 012	(LPVOID)SC_RegOpenKeyExW,		// 013	(LPVOID)SC_RegQueryValueExW,	// 014	(LPVOID)SC_CreateFileW,			// 015	(LPVOID)SC_ReadFile,			// 016	(LPVOID)SC_OpenDatabaseEx,		// 017	(LPVOID)SC_SeekDatabase,		// 018	(LPVOID)SC_ReadRecordPropsEx,	// 019	(LPVOID)SC_RegCreateKeyExW,		// 020	(LPVOID)SC_DeviceIoControl,		// 021	(LPVOID)SC_CloseHandle,			// 022	(LPVOID)SC_RegCloseKey,			// 023	(LPVOID)SC_ClientToScreen,		// 024	(LPVOID)SC_DefWindowProcW,		// 025	(LPVOID)SC_GetClipCursor,		// 026	(LPVOID)SC_GetDC,				// 027	(LPVOID)SC_GetFocus,			// 028	(LPVOID)SC_GetMessageW,			// 029	(LPVOID)SC_GetWindow,			// 030	(LPVOID)SC_PeekMessageW,		// 031	(LPVOID)SC_ReleaseDC,			// 032	(LPVOID)SC_SendMessageW,		// 033	(LPVOID)SC_SetScrollInfo,		// 034	(LPVOID)SC_SetWindowLongW,		// 035	(LPVOID)SC_SetWindowPos,		// 036	(LPVOID)SC_CreateSolidBrush,	// 037	(LPVOID)SC_DeleteMenu,			// 038	(LPVOID)SC_DeleteObject,		// 039	(LPVOID)SC_DrawTextW,			// 040	(LPVOID)SC_ExtTextOutW,			// 041	(LPVOID)SC_FillRect,			// 042	(LPVOID)SC_GetAsyncKeyState,	// 043	(LPVOID)SC_GetDlgCtrlID,		// 044	(LPVOID)SC_GetStockObject,		// 045	(LPVOID)SC_GetSystemMetrics,	// 046	(LPVOID)SC_RegisterClassWStub,	// 047	(LPVOID)SC_RegisterClipboardFormatW, // 048	(LPVOID)SC_SetBkMode,			// 049	(LPVOID)SC_SetTextColor,		// 050	(LPVOID)SC_TransparentImage,	// 051	(LPVOID)SC_IsDialogMessageW,	// 052	(LPVOID)SC_PostMessageW,		// 053	(LPVOID)SC_IsWindowVisible,		// 054	(LPVOID)SC_GetKeyState,			// 055	(LPVOID)SC_BeginPaint,			// 056	(LPVOID)SC_EndPaint,			// 057	(LPVOID)SC_PerformCallBack4,	// 058	(LPVOID)SC_CeWriteRecordProps,	// 059	(LPVOID)SC_ReadFileWithSeek,	// 060	(LPVOID)SC_WriteFileWithSeek,	// 061};ERRFALSE(sizeof(ExtraMethods) == sizeof(ExtraMethods[0])*62);BOOL SC_GetRomFileInfo(DWORD type, LPWIN32_FIND_DATA lpfd, DWORD count) {	TOCentry *tocptr;	FILESentry *filesptr;	ROMChain_t *pROM = ROMChain;	extern const PFNVOID Win32Methods[];	DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo entry: %8.8lx %8.8lx %8.8lx\r\n",type,lpfd,count));	switch (type) {		case 1:			while (pROM && (count >= pROM->pTOC->nummods)) {				count -= pROM->pTOC->nummods;				pROM = pROM->pNext;			}			if (!pROM) {				DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",FALSE));				return FALSE;			}			tocptr = &(((TOCentry *)&pROM->pTOC[1])[count]);			lpfd->dwFileAttributes = (tocptr->dwFileAttributes | FILE_ATTRIBUTE_INROM | FILE_ATTRIBUTE_ROMMODULE) & ~FILE_ATTRIBUTE_ROMSTATICREF;			lpfd->ftCreationTime = tocptr->ftTime;			lpfd->ftLastAccessTime = tocptr->ftTime;			lpfd->ftLastWriteTime = tocptr->ftTime;			lpfd->nFileSizeHigh = 0;			lpfd->nFileSizeLow = tocptr->nFileSize;			AToUCopy(lpfd->cFileName,tocptr->lpszFileName,MAX_PATH);			DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",TRUE));			return TRUE;		case 2:			while (pROM && (count >= pROM->pTOC->numfiles)) {				count -= pROM->pTOC->numfiles;				pROM = pROM->pNext;			}			if (!pROM) {				DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",FALSE));				return FALSE;			}			tocptr = &(((TOCentry *)&pROM->pTOC[1])[pROM->pTOC->nummods]);			filesptr = &(((FILESentry *)tocptr)[count]);			lpfd->dwFileAttributes = filesptr->dwFileAttributes | FILE_ATTRIBUTE_INROM;			lpfd->ftCreationTime = filesptr->ftTime;			lpfd->ftLastAccessTime = filesptr->ftTime;			lpfd->ftLastWriteTime = filesptr->ftTime;			lpfd->nFileSizeHigh = 0;			lpfd->nFileSizeLow = filesptr->nRealFileSize;			AToUCopy(lpfd->cFileName,filesptr->lpszFileName,MAX_PATH);			DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",TRUE));			return TRUE;		case 3:			*(LPVOID *)lpfd = Win32Methods;						*(BOOL UNALIGNED *)count = bAllKMode;			return TRUE;		case 4:			*(LPVOID *)lpfd = ExtraMethods;			return TRUE;		case 5:#ifdef CELOG						if (pTOC->ulKernelFlags & KFLAG_CELOGENABLE) {				// Tell COREDLL that CeLogData is present.				*((LPBOOL)lpfd) = TRUE;			} else {				*((LPBOOL)lpfd) = FALSE;			}#else			*((LPBOOL)lpfd) = FALSE;#endif			return TRUE;		case 0xffffffff:			for (count = 0; count < pROM->pTOC->nummods; count++) {				tocptr = &(((TOCentry *)&pROM->pTOC[1])[count]);				if (!StrCmpAPascW(tocptr->lpszFileName,lpfd->cFileName)) {					DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",TRUE));					return TRUE;				}			}			for (count = 0; count < pROM->pTOC->numfiles; count++) {				tocptr = &(((TOCentry *)&pROM->pTOC[1])[pROM->pTOC->nummods]);				filesptr = &(((FILESentry *)tocptr)[count]);				if (!StrCmpAPascW(filesptr->lpszFileName,lpfd->cFileName)) {					DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",TRUE));					return TRUE;				}			}			DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",FALSE));			return FALSE;	}			DEBUGCHK(0);	DEBUGMSG(ZONE_ENTRY,(L"SC_GetRomFileInfo exit: %8.8lx\r\n",FALSE));	return FALSE;}

⌨️ 快捷键说明

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