public AddressList getFilteredAddressList(ProcessManager processManager, MemoryHelper memoryHelper, string value, BackgroundWorker worker, ref ulong percent_len, int start, float percent) { AddressList filtered_list = new AddressList(); worker.ReportProgress(start); if (!Check) { return(filtered_list); } ulong address = this.Start; int length = this.Length; const int block_length = 1024 * 1024 * 128; while (length != 0) { int cur_length = block_length; if (cur_length > length) { cur_length = length; length = 0; } else { length -= cur_length; } percent_len += (ulong)cur_length; worker.ReportProgress(start + (int)(((float)percent_len / processManager.TotalMemorySize) * 100 * percent)); byte[] buffer = MemoryHelper.ReadMemory(address, (int)cur_length); byte[] match_value = memoryHelper.StringToBytes(value); memoryHelper.CompareWithFilterList(match_value, address, buffer, filtered_list); address += (ulong)cur_length; } return(filtered_list); }