/// <summary> /// Кнопка "Обратиться к странице" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { bool isPageFault = false; int pageNumberInPageTable = Convert.ToInt32(textBoxNumberInPageTable.Text); Process process = os.GetCheckedProcess(Convert.ToInt32(textBoxPID.Text)); int startAvailableMemory = process.AvailableMemory; try { process.AccessPage(pageNumberInPageTable, Hardware); } catch (PageFault pageFault) { isPageFault = true; os.PageFaultExeptionHandler(os.GetCheckedProcess(Convert.ToInt32(textBoxPID.Text)), pageFault.PageFaultNumber); } catch (Exception e1) { MessageBox.Show(e1.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } textBoxListing.Clear(); if (os.IsProcessKilled(Convert.ToInt32(textBoxPID.Text))) { textBoxListing.Text = "Процесс был убит"; dataGridView2.Rows.Clear(); int pid = Convert.ToInt32(textBoxPID.Text); for (int i = 0; i < dataGridView1.Rows.Count; i++) { if ((int)dataGridView1.Rows[i].Cells[1].Value == pid) { dataGridView1.Rows.RemoveAt(i); dataGridView1.Update(); break; } } textBoxPID.Clear(); textBoxTableAdress.Clear(); textBoxPageTableEntry.Clear(); textBoxNumberInPageTable.Clear(); textBoxPIDtoStart.Clear(); } else { int numberOfNewlySelectedPages = (process.AvailableMemory - startAvailableMemory) / os.PageSize; int numberOfReplacedPages; if (numberOfNewlySelectedPages == 0) { numberOfReplacedPages = 1; } else { numberOfReplacedPages = 0; } UpdateDataGridView2(); TextBoxPageStatusUpdate(process, Convert.ToInt32(textBoxNumberInPageTable.Text)); textBoxPageTableEntry.Text = os.GetBitArrayStringFormat(process.PageTable.PageTableEntries[Convert.ToInt32(textBoxNumberInPageTable.Text)].Entry); textBoxListing.Text = "Обработка ошибки отсутствия страницы " + isPageFault.ToString() + "\r\n"; if (isPageFault) { textBoxListing.Text += "Выделено новых страниц " + numberOfNewlySelectedPages + "\r\n" + "Замещено страниц " + numberOfReplacedPages + "\r\n"; } textBoxListing.Text += "\r\nИзмененные данные процесса находятся тут: " + os.CurrentDirectoryName + "\\" + process.FileName; } }