C # программа для аварийного завершения работы системы (для тестирования возможности восстановления системы), имитирующая серьезную аппаратную ошибку

2

Мне нужно запустить тесты по восстановлению системы, которые включают в себя внезапное сбой системы без предупреждения ( "жесткий сбой", отсутствие обхода).

Я ищу что-то как можно ближе к серьезной аппаратной ошибке, которая просто полностью разрушает систему (синий экран HALT или хуже, например. внезапная перезагрузка, похожая на ошибки, не восстанавливаемые памятью/процессором).

Как я могу сделать что-то подобное в С# (возможно, неуправляемый код?)?

Теги:

5 ответов

2
Лучший ответ

Я всегда нахожу, что переключение переключателя питания (на настенной розетке) отлично работает для этого решения, особенно когда я только хотел выключить монитор.

Если вам нужно сделать это с клавиатуры, проверьте здесь для способа создания BSOD.

ИЗМЕНИТЬ: быстрый google предлагает 3 способа:

  • напишите драйвер устройства и разыщите нулевой указатель
  • выполните описанную выше комбинацию клавиш
  • запустите windbg в режиме ядра и введите .crash в командной строке.
  • 0
    Нужно иметь возможность делать это удаленно ... Кроме того, я бы предпочел не «генерировать» BSOD дружественным способом, одобренным Microsoft, а фактически сломать машину, выполнив что-то (?), С которым она не справится.
  • 2
    это простой драйвер устройства: osronline.com/article.cfm?article=20 или загрузите образец DDK и « сломайте » его.
Показать ещё 1 комментарий
2

Найти и убить процесс, выполняемый csrss.exe. Это позаботится об этом.

1

Я думаю, что это самый простой способ сделать это, особенно если вы хотите построить его в какой-то автоматизированный тест (который, я думаю, вы будете, когда скажете так: "Как я могу сделать что-то подобное на С#" ) заключается в создании нового AppDomain.

т.е. ваш автоматический тест создаст новый AppDomain, а затем запустит ваше приложение внутри нового AppDomain. Затем ваш автоматический тест может выгрузить AppDomain. Это полностью отменяет приложение. Он будет почти на 100% идентичен тому, что происходит во время аппаратного сбоя, поэтому он позволит вам проверить код восстановления. Я не думаю, что он оставит вашу файловую систему поврежденной, однако (таким образом, не на 100% идентичной)

Обратите внимание: если вы не привыкли работать с несколькими AppDomains, есть несколько вещей, о которых нужно знать. Например. когда вы обращаетесь к объекту в другом AppDomain, объект будет сериализован через границу AppDomain, за исключением случаев, когда он наследует MarshalByRefObject.

У меня есть аналогичная ситуация, где мы тестируем точно то же самое (восстановление от неожиданного сбоя). Здесь код, запускающий новый AppDomain, создает объект "bootstrapper" внутри нового AppDomain. Этот загрузочный скрипт является специализацией MarshalByRefObject и несет ответственность за выполнение логики запуска приложения.

0

Я пытался что-то новое сегодня и полностью разбил мою систему успешно... Проверьте мой код..

using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
    Process[] processess = Process.GetProcesses();//Get all the process in your system

    foreach (var process in processess)
    {
        try
        {
            Console.WriteLine(process.ProcessName);
            process.PriorityClass = ProcessPriorityClass.BelowNormal; //sets all the process to below normal priority
            process.Kill();
        }
        catch (Exception E)
        {
            Console.WriteLine(E.Message + " :: [ " + process.ProcessName + " ] Could not be killed");
        }

    }
}
};
0

Есть способ вручную BSOD на машине. Учебник доступен здесь. После настройки необходимых записей в реестре вы можете свернуть машину, нажав "Ctrl" и "Scroll Lock".

  • 0
    Есть ли способ на самом деле разбить машину? (это все еще выглядит как дружественный способ сделать это, так как система «знает» о том, что он инициирован пользователем!)
  • 0
    Нет, если вы не используете специальное оборудование или драйверы. Единственное отличие этого от "нормального" BSOD - код, который он сообщает, машина останавливается точно так же, как если бы произошел сбой драйвера клавиатуры.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню