private static unsafe void RunFunctionWithConservativelyReportedBufferInternal <T>(int cbBuffer, IntPtr pfnTargetToInvoke, ref T context, ref RuntimeImports.ConservativelyReportedRegionDesc regionDesc) { fixed(RuntimeImports.ConservativelyReportedRegionDesc *pRegionDesc = ®ionDesc) { int cbBufferAligned = (cbBuffer + (sizeof(IntPtr) - 1)) & ~(sizeof(IntPtr) - 1); // The conservative region must be IntPtr aligned, and a multiple of IntPtr in size void *region = stackalloc IntPtr[cbBufferAligned / sizeof(IntPtr)]; RuntimeImports.RhInitializeConservativeReportingRegion(pRegionDesc, region, cbBufferAligned); RawCalliHelper.Call <T>(pfnTargetToInvoke, region, ref context); RuntimeImports.RhDisableConservativeReportingRegion(pRegionDesc); } }