网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等。 当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段。 首先来看看 Security::SecWalkCommonProlog 函数 (Security.cpp:406) 定义的特殊帧。首先会跳过遍历操作的调用者自己的帧;然后当进行堆栈遍历指定最大帧数为1时,跳过所有 Reflection/Remoting 调用的内部帧;最后针对 LookForMyCallersCaller 这种特殊调用,以及指定最大帧数进行处理。 以下内容为程序代码: BOOL Security::SecWalkCommonProlog (SecWalkPrologData * pData, MethodDesc * pMeth, StackWalkAction * pAction, CrawlFrame * pCf) { *pAction = SWA_CONTINUE; // 跳过 CAS 检测调用帧 if ((pData->pStackMark != NULL) && !IsInCalleesFrames(pCf->GetRegisterSet(), pData->pStackMark)) return TRUE; // 跳过内部函数帧,如 Reflection / Remoting 调用的内部帧等等 if (pData->dwFlags & CORSEC_SKIP_INTERNAL_FRAMES) { // 跳过 Remoting.Messaging.StackBuilderSink.PrivateProcessMessage 方法 if (pMeth == s_stdData.pMethPrivateProcessMessage) { pData->bSkippingRemoting = TRUE; return TRUE } // 跳过 Remoting 透明代理帧 if (!pCf->IsFrameless() && pCf->GetFrame()->GetFrameType() == Frame::TYPE_TP_METHOD_FRAME) { pData->bSkippingRemoting = FALSE; return TRUE; } // 跳过 Remoting 帧 if (pData->bSkippingRemoting) return TRUE; // 跳过 Refection 相关类型的方法帧 MethodTable *pMT = pMeth->GetMethodTable(); if (pMT == s_stdData.pTypeRuntimeMethodInfo || pMT == s_stdData.pTypeMethodBase || pMT == s_stdData.pTypeRuntimeConstructorInfo || pMT == s_stdData.pTypeConstructorInfo || pMT == s_stdData.pTypeRuntimeType || pMT == s_stdData.pTypeType || pMT == s_stdData.pTypeRuntimeEventInfo || pMT == s_stdData.pTypeEventInfo || pMT == s_stdData.pTypeRuntimePropertyInfo || pMT == s_stdData.pTypePropertyInfo || pMT == s_stdData.pTypeActivator || pMT == s_stdData.pTypeAppDomain || pMT == s_stdData.pTypeAssembly) { return TRUE; } } // 如果只希望检测调用者的调用者两级,则跳过其他的所有帧 if ((pData->pStackMark != NULL) && (*pData->pStackMark == LookForMyCallersCaller) && !pData->bFoundCaller) { pData->bFoundCaller = TRUE; return TRUE; } // 最多只检测 cCheck 帧 if (pData->cCheck >= 0) { if (pData->cCheck == 0) { pData->dwFlags |= CORSEC_STACKWALK_HALTED; *pAction = SWA_ABORT; return TRUE; } else { --(pData->cCheck); } } return FALSE; } 在跳过了这些无需处理的堆栈帧后,CodeAccessCheckStackWalkCB 函数将对 Assembly/AppDomain 变化,和显式指定安全对象的情况,进行 CAS 检测。 网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。 |
温馨提示:喜欢本站的话,请收藏一下本站!