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

📄 mdppc.c

📁 wince下的源代码集合打包
💻 C
📖 第 1 页 / 共 3 页
字号:
	    // end of the scope as the new control PC address and call	    // the termination handler.	    if (ScopeTable->ScopeRecord[Index].JumpTarget != 0) {		if (TargetPc == ScopeTable->ScopeRecord[Index].JumpTarget)		    break;	    } else {		DispatcherContext->ControlPc =			ScopeTable->ScopeRecord[Index].EndAddress + 4;		TerminationHandler = (TERMINATION_HANDLER)ScopeTable->ScopeRecord[Index].HandlerAddress;		__C_ExecuteTerminationHandler(TRUE, TerminationHandler, (ULONG)EstablisherFrame);	    }	    }	}    }    // Continue search for exception or termination handlers.    return ExceptionContinueSearch;}typedef PCONTEXT LPCONTEXT;BOOL DoThreadGetContext(HANDLE hTh, LPCONTEXT lpContext) {	PTHREAD pth;	if (!(pth = HandleToThread(hTh))) {		SetLastError(ERROR_INVALID_HANDLE);		return FALSE;	}	if (lpContext->ContextFlags & ~(CONTEXT_FULL|CONTEXT_DEBUG_REGISTERS)) {		SetLastError(ERROR_INVALID_PARAMETER);		return FALSE;	}	if (pth->pThrdDbg && pth->pThrdDbg->psavedctx) {		ULONG ulOldAky = CurAKey;		SETCURKEY((DWORD)-1);		if (lpContext->ContextFlags & CONTEXT_CONTROL) {			lpContext->Msr = pth->pThrdDbg->psavedctx->Msr;			lpContext->Iar = pth->pThrdDbg->psavedctx->Iar;			lpContext->Lr = pth->pThrdDbg->psavedctx->Lr;			lpContext->Ctr = pth->pThrdDbg->psavedctx->Ctr;		}		if (lpContext->ContextFlags & CONTEXT_INTEGER) {			lpContext->Gpr0 = pth->pThrdDbg->psavedctx->Gpr0;			lpContext->Gpr1 = pth->pThrdDbg->psavedctx->Gpr1;			lpContext->Gpr2 = pth->pThrdDbg->psavedctx->Gpr2;			lpContext->Gpr3 = pth->pThrdDbg->psavedctx->Gpr3;			lpContext->Gpr4 = pth->pThrdDbg->psavedctx->Gpr4;			lpContext->Gpr5 = pth->pThrdDbg->psavedctx->Gpr5;			lpContext->Gpr6 = pth->pThrdDbg->psavedctx->Gpr6;			lpContext->Gpr7 = pth->pThrdDbg->psavedctx->Gpr7;			lpContext->Gpr8 = pth->pThrdDbg->psavedctx->Gpr8;			lpContext->Gpr9 = pth->pThrdDbg->psavedctx->Gpr9;			lpContext->Gpr10 = pth->pThrdDbg->psavedctx->Gpr10;			lpContext->Gpr11 = pth->pThrdDbg->psavedctx->Gpr11;			lpContext->Gpr12 = pth->pThrdDbg->psavedctx->Gpr12;			lpContext->Gpr13 = pth->pThrdDbg->psavedctx->Gpr13;			lpContext->Gpr14 = pth->pThrdDbg->psavedctx->Gpr14;			lpContext->Gpr15 = pth->pThrdDbg->psavedctx->Gpr15;			lpContext->Gpr16 = pth->pThrdDbg->psavedctx->Gpr16;			lpContext->Gpr17 = pth->pThrdDbg->psavedctx->Gpr17;			lpContext->Gpr18 = pth->pThrdDbg->psavedctx->Gpr18;			lpContext->Gpr19 = pth->pThrdDbg->psavedctx->Gpr19;			lpContext->Gpr20 = pth->pThrdDbg->psavedctx->Gpr20;			lpContext->Gpr21 = pth->pThrdDbg->psavedctx->Gpr21;			lpContext->Gpr22 = pth->pThrdDbg->psavedctx->Gpr22;			lpContext->Gpr23 = pth->pThrdDbg->psavedctx->Gpr23;			lpContext->Gpr24 = pth->pThrdDbg->psavedctx->Gpr24;			lpContext->Gpr25 = pth->pThrdDbg->psavedctx->Gpr25;			lpContext->Gpr26 = pth->pThrdDbg->psavedctx->Gpr26;			lpContext->Gpr27 = pth->pThrdDbg->psavedctx->Gpr27;			lpContext->Gpr28 = pth->pThrdDbg->psavedctx->Gpr28;			lpContext->Gpr29 = pth->pThrdDbg->psavedctx->Gpr29;			lpContext->Gpr30 = pth->pThrdDbg->psavedctx->Gpr30;			lpContext->Gpr31 = pth->pThrdDbg->psavedctx->Gpr31;			lpContext->Cr = pth->pThrdDbg->psavedctx->Cr;			lpContext->Xer = pth->pThrdDbg->psavedctx->Xer;		}		if (lpContext->ContextFlags & CONTEXT_FLOATING_POINT) {		}		if (lpContext->ContextFlags & CONTEXT_DEBUG_REGISTERS) {		}		SETCURKEY(ulOldAky);	} else {		if (lpContext->ContextFlags & CONTEXT_CONTROL) {			lpContext->Msr = pth->ctx.Msr;			lpContext->Iar = pth->ctx.Iar;			lpContext->Lr = pth->ctx.Lr;			lpContext->Ctr = pth->ctx.Ctr;		}		if (lpContext->ContextFlags & CONTEXT_INTEGER) {			lpContext->Gpr0 = pth->ctx.Gpr0;			lpContext->Gpr1 = pth->ctx.Gpr1;			lpContext->Gpr2 = pth->ctx.Gpr2;			lpContext->Gpr3 = pth->ctx.Gpr3;			lpContext->Gpr4 = pth->ctx.Gpr4;			lpContext->Gpr5 = pth->ctx.Gpr5;			lpContext->Gpr6 = pth->ctx.Gpr6;			lpContext->Gpr7 = pth->ctx.Gpr7;			lpContext->Gpr8 = pth->ctx.Gpr8;			lpContext->Gpr9 = pth->ctx.Gpr9;			lpContext->Gpr10 = pth->ctx.Gpr10;			lpContext->Gpr11 = pth->ctx.Gpr11;			lpContext->Gpr12 = pth->ctx.Gpr12;			lpContext->Gpr13 = pth->ctx.Gpr13;			lpContext->Gpr14 = pth->ctx.Gpr14;			lpContext->Gpr15 = pth->ctx.Gpr15;			lpContext->Gpr16 = pth->ctx.Gpr16;			lpContext->Gpr17 = pth->ctx.Gpr17;			lpContext->Gpr18 = pth->ctx.Gpr18;			lpContext->Gpr19 = pth->ctx.Gpr19;			lpContext->Gpr20 = pth->ctx.Gpr20;			lpContext->Gpr21 = pth->ctx.Gpr21;			lpContext->Gpr22 = pth->ctx.Gpr22;			lpContext->Gpr23 = pth->ctx.Gpr23;			lpContext->Gpr24 = pth->ctx.Gpr24;			lpContext->Gpr25 = pth->ctx.Gpr25;			lpContext->Gpr26 = pth->ctx.Gpr26;			lpContext->Gpr27 = pth->ctx.Gpr27;			lpContext->Gpr28 = pth->ctx.Gpr28;			lpContext->Gpr29 = pth->ctx.Gpr29;			lpContext->Gpr30 = pth->ctx.Gpr30;			lpContext->Gpr31 = pth->ctx.Gpr31;			lpContext->Cr = pth->ctx.Cr;			lpContext->Xer = pth->ctx.Xer;		}		if (lpContext->ContextFlags & CONTEXT_FLOATING_POINT) {		}		if (lpContext->ContextFlags & CONTEXT_DEBUG_REGISTERS) {		}	}	return TRUE;}BOOL DoThreadSetContext(HANDLE hTh, const CONTEXT *lpContext) {	PTHREAD pth;	if (!(pth = HandleToThread(hTh))) {		SetLastError(ERROR_INVALID_HANDLE);		return FALSE;	}	if (lpContext->ContextFlags & ~(CONTEXT_FULL|CONTEXT_DEBUG_REGISTERS)) {		SetLastError(ERROR_INVALID_PARAMETER);		return FALSE;	}	if (pth->pThrdDbg && pth->pThrdDbg->psavedctx) {		ULONG ulOldAky = CurAKey;		SETCURKEY((DWORD)-1);		if (lpContext->ContextFlags & CONTEXT_CONTROL) {			pth->pThrdDbg->psavedctx->Msr = (pth->pThrdDbg->psavedctx->Msr & 0xfffff9ff) | (lpContext->Msr & 0x00000600);			pth->pThrdDbg->psavedctx->Iar = lpContext->Iar;			pth->pThrdDbg->psavedctx->Lr = lpContext->Lr;			pth->pThrdDbg->psavedctx->Ctr = lpContext->Ctr;		}		if (lpContext->ContextFlags & CONTEXT_INTEGER) {			pth->pThrdDbg->psavedctx->Gpr0 = lpContext->Gpr0;			pth->pThrdDbg->psavedctx->Gpr1 = lpContext->Gpr1;			pth->pThrdDbg->psavedctx->Gpr2 = lpContext->Gpr2;			pth->pThrdDbg->psavedctx->Gpr3 = lpContext->Gpr3;			pth->pThrdDbg->psavedctx->Gpr4 = lpContext->Gpr4;			pth->pThrdDbg->psavedctx->Gpr5 = lpContext->Gpr5;			pth->pThrdDbg->psavedctx->Gpr6 = lpContext->Gpr6;			pth->pThrdDbg->psavedctx->Gpr7 = lpContext->Gpr7;			pth->pThrdDbg->psavedctx->Gpr8 = lpContext->Gpr8;			pth->pThrdDbg->psavedctx->Gpr9 = lpContext->Gpr9;			pth->pThrdDbg->psavedctx->Gpr10 = lpContext->Gpr10;			pth->pThrdDbg->psavedctx->Gpr11 = lpContext->Gpr11;			pth->pThrdDbg->psavedctx->Gpr12 = lpContext->Gpr12;			pth->pThrdDbg->psavedctx->Gpr13 = lpContext->Gpr13;			pth->pThrdDbg->psavedctx->Gpr14 = lpContext->Gpr14;			pth->pThrdDbg->psavedctx->Gpr15 = lpContext->Gpr15;			pth->pThrdDbg->psavedctx->Gpr16 = lpContext->Gpr16;			pth->pThrdDbg->psavedctx->Gpr17 = lpContext->Gpr17;			pth->pThrdDbg->psavedctx->Gpr18 = lpContext->Gpr18;			pth->pThrdDbg->psavedctx->Gpr19 = lpContext->Gpr19;			pth->pThrdDbg->psavedctx->Gpr20 = lpContext->Gpr20;			pth->pThrdDbg->psavedctx->Gpr21 = lpContext->Gpr21;			pth->pThrdDbg->psavedctx->Gpr22 = lpContext->Gpr22;			pth->pThrdDbg->psavedctx->Gpr23 = lpContext->Gpr23;			pth->pThrdDbg->psavedctx->Gpr24 = lpContext->Gpr24;			pth->pThrdDbg->psavedctx->Gpr25 = lpContext->Gpr25;			pth->pThrdDbg->psavedctx->Gpr26 = lpContext->Gpr26;			pth->pThrdDbg->psavedctx->Gpr27 = lpContext->Gpr27;			pth->pThrdDbg->psavedctx->Gpr28 = lpContext->Gpr28;			pth->pThrdDbg->psavedctx->Gpr29 = lpContext->Gpr29;			pth->pThrdDbg->psavedctx->Gpr30 = lpContext->Gpr30;			pth->pThrdDbg->psavedctx->Gpr31 = lpContext->Gpr31;			pth->pThrdDbg->psavedctx->Cr = lpContext->Cr;			pth->pThrdDbg->psavedctx->Xer = lpContext->Xer;		}		if (lpContext->ContextFlags & CONTEXT_FLOATING_POINT) {		}		if (lpContext->ContextFlags & CONTEXT_DEBUG_REGISTERS) {		}		SETCURKEY(ulOldAky);	} else {		if (lpContext->ContextFlags & CONTEXT_CONTROL) {			pth->ctx.Msr = (pth->ctx.Msr & 0xfffff9ff) | (lpContext->Msr & 0x00000600);			pth->ctx.Iar = lpContext->Iar;			pth->ctx.Lr = lpContext->Lr;			pth->ctx.Ctr = lpContext->Ctr;		}		if (lpContext->ContextFlags & CONTEXT_INTEGER) {			pth->ctx.Gpr0 = lpContext->Gpr0;			pth->ctx.Gpr1 = lpContext->Gpr1;			pth->ctx.Gpr2 = lpContext->Gpr2;			pth->ctx.Gpr3 = lpContext->Gpr3;			pth->ctx.Gpr4 = lpContext->Gpr4;			pth->ctx.Gpr5 = lpContext->Gpr5;			pth->ctx.Gpr6 = lpContext->Gpr6;			pth->ctx.Gpr7 = lpContext->Gpr7;			pth->ctx.Gpr8 = lpContext->Gpr8;			pth->ctx.Gpr9 = lpContext->Gpr9;			pth->ctx.Gpr10 = lpContext->Gpr10;			pth->ctx.Gpr11 = lpContext->Gpr11;			pth->ctx.Gpr12 = lpContext->Gpr12;			pth->ctx.Gpr13 = lpContext->Gpr13;			pth->ctx.Gpr14 = lpContext->Gpr14;			pth->ctx.Gpr15 = lpContext->Gpr15;			pth->ctx.Gpr16 = lpContext->Gpr16;			pth->ctx.Gpr17 = lpContext->Gpr17;			pth->ctx.Gpr18 = lpContext->Gpr18;			pth->ctx.Gpr19 = lpContext->Gpr19;			pth->ctx.Gpr20 = lpContext->Gpr20;			pth->ctx.Gpr21 = lpContext->Gpr21;			pth->ctx.Gpr22 = lpContext->Gpr22;			pth->ctx.Gpr23 = lpContext->Gpr23;			pth->ctx.Gpr24 = lpContext->Gpr24;			pth->ctx.Gpr25 = lpContext->Gpr25;			pth->ctx.Gpr26 = lpContext->Gpr26;			pth->ctx.Gpr27 = lpContext->Gpr27;			pth->ctx.Gpr28 = lpContext->Gpr28;			pth->ctx.Gpr29 = lpContext->Gpr29;			pth->ctx.Gpr30 = lpContext->Gpr30;			pth->ctx.Gpr31 = lpContext->Gpr31;			pth->ctx.Cr = lpContext->Cr;			pth->ctx.Xer = lpContext->Xer;		}		if (lpContext->ContextFlags & CONTEXT_FLOATING_POINT) {		}		if (lpContext->ContextFlags & CONTEXT_DEBUG_REGISTERS) {		}	}	return TRUE;}//// Walk the HAL KVA Memory Map and find the KVA for// a given physical address.//PVOID Phys2Virt(DWORD pfn){    int		i = 0;    DWORD	va;       // Virtual Base Address of section    DWORD	pa;       // Physical Base Address of section    DWORD	pau;      // Physical Address Upper Bound of section    DWORD	pfnmb;    // PFN rounded down to 1MB    //    // The end of the table is marked by an entry with a ZERO size.    //	while( OEMMemoryMap[i].Size )	{        va = OEMMemoryMap[i].KernelVirtualAddress & 0x1FF00000;        pa = OEMMemoryMap[i].PhysicalAddress & 0xFFF00000;        pau = pa + (OEMMemoryMap[i].Size << 20) - 1;        pfnmb = pfn & 0xfff00000;        if ((pfnmb >= pa) && (pfnmb <= pau))		{            return ((PVOID) ((pfn - pa) + va + 0x80000000));		}        i++;    }    DEBUGMSG(ZONE_PHYSMEM, (TEXT("Phys2Virt() : PFN (0x%08X) not found!\r\n"), pfn));    return ((PVOID) (pfn | 0xFFF00000));}

⌨️ 快捷键说明

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