public void EnumModules(DebugEnumModulesDelegate callback) { var debugInfo = this.GetDebugInformation(); if (debugInfo.Modules == IntPtr.Zero) throw new InvalidOperationException("Module information does not exist."); MemoryRegion modulesInfo = new MemoryRegion(debugInfo.Modules); var modules = modulesInfo.ReadStruct<RtlProcessModules>(); for (int i = 0; i < modules.NumberOfModules; i++) { var module = modulesInfo.ReadStruct<RtlProcessModuleInformation>(RtlProcessModules.ModulesOffset, i); if (!callback(new ModuleInformation(module))) break; } }
/// <summary> /// Enumerates module information. /// </summary> /// <param name="callback">The callback for the enumeration.</param> public void EnumModules(DebugEnumModulesDelegate callback) { RtlDebugInformation debugInfo = this.GetDebugInformation(); if (debugInfo.Modules == IntPtr.Zero) { throw new InvalidOperationException("Module information does not exist."); } MemoryRegion modulesInfo = new MemoryRegion(debugInfo.Modules); RtlProcessModules modules = modulesInfo.ReadStruct <RtlProcessModules>(); for (int i = 0; i < modules.NumberOfModules; i++) { var module = modulesInfo.ReadStruct <RtlProcessModuleInformation>(RtlProcessModules.ModulesOffset, RtlProcessModuleInformation.SizeOf, i); if (!callback(new ModuleInformation(module))) { break; } } }