Вызовите Blue Screen of Death с помощью Управляемого кода

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
19
задан Jon Seigel 18 May 2010 в 01:47
поделиться

8 ответов

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

Вам действительно не нужно ничто для блевания, по сути, всего, что необходимо сделать, находка KeBugCheck (Исключая) функцией, и вызовите это.

http://msdn.microsoft.com/en-us/library/ms801640.aspx http://msdn.microsoft.com/en-us/library/ms801645.aspx

Для вручную инициированных катастрофических отказов, Вы хотите к используемому 0xE2 (MANUALLY_INITIATED_CRASH) или 0xDEADDEAD (MANUALLY_INITIATED_CRASH1) как контрольный код ошибки. Они резервируются явно для того использования.

Однако нахождение функции может оказаться немного хитрым. Windows DDK может помочь (проверьте Ntddk.h) - я не имею его в наличии в данный момент, и я, может казаться, не нахожу решающую информацию прямо сейчас - я думаю , это находится в ntoskrnl.exe или ntkrnlpa.exe, но я не уверен, и в настоящее время не имею инструментов для проверки его.

Вы могли бы найти легче просто записать простое приложение C++ или что-то, что вызывает функцию и затем просто выполнение это.

, Обратите внимание, я принятие , что Windows не блокирует Вас от доступа к функции от пространства пользователя (.NET могла бы иметь некоторые специальные положения). Я не протестировал его сам.

15
ответ дан 30 November 2019 в 04:12
поделиться

Я не знаю, работает ли это действительно, и я уверен, что Вам нужны права администратора, но Вы могли бы установить Ключ реестра CrashOnCtrlScroll и затем использовать SendKeys для отправки Блокировки CTRL+Scroll Lock+Scroll.

, Но я полагаю, что это должно прибыть из Драйвера Клавиатуры, таким образом, я предполагаю, что простой SendKeys не достаточно хорош, и необходимо было бы или так или иначе сцепиться в Драйвер Клавиатуры (звучит действительно грязным), или проверка того, что CrashDump имеет API, который можно назвать с P/Invoke.

http://support.microsoft.com/kb/244139

Имя HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
: тип данных CrashOnCtrlScroll
: Значение REG_DWORD
: 1
Перезапуск

4
ответ дан 30 November 2019 в 04:12
поделиться

Я должен был бы сказать "нет". Вы имели бы к p/invoke и взаимодействовали бы с драйвером или другим кодом, который живет в пространстве ядра. код.NET живет далеко удаленный из этой области, хотя был некоторый разговор об управляемых драйверах в будущих версиях Windows. Просто ожидайте еще несколько лет, и можно отказать далеко точно так же, как наши неуправляемые друзья.

3
ответ дан 30 November 2019 в 04:12
поделиться

Насколько я знаю, что реальный BSOD требует отказа в коде привилегированного режима. Vista все еще имеет BSOD's, но они являются менее частыми, потому что новая модель драйвера имеет меньше драйверов в привилегированном режиме. Любые отказы непривилегированного режима просто приведут к Вашему уничтожаемому приложению.

Вы не можете выполнить управляемый код в привилегированном режиме. Таким образом, если Вы хотите к BSOD, необходимо использовать PInvoke. Но даже это довольно трудно. Необходимо сделать, некоторые действительно представляют себе, что PInvokes заставляет что-то в привилегированном режиме блевать.

, Но среди тысяч ТАК пользователей существует, вероятно, кто-то, кто сделал это :-)

2
ответ дан 30 November 2019 в 04:12
поделиться

Вы могли использовать инструмент Online OSR, который инициировал катастрофический отказ ядра. Я никогда не пробовал его сам, но я предполагаю, что Вы могли просто выполнить его через стандартный класс .net Process:

http://www.osronline.com/article.cfm?article=153

2
ответ дан 30 November 2019 в 04:12
поделиться

Мне когда-то удалось генерировать BSOD на Windows XP с помощью Системы. Сеть. Сокеты в.NET 1.1 безответственно. Я мог повторять его справедливо регулярно, но к сожалению который был несколько лет назад, и я не помню точно, как я инициировал его, или имейте исходный код вокруг больше.

1
ответ дан 30 November 2019 в 04:12
поделиться

Попробуйте живой videoinput, использующий directshow в directx8 или directx9, большинство вызовов переходит к видеодрайверам привилегированного режима. Я успешно выполнился в большом количестве "синих" экранов при выполнении процедуры обратного вызова из живого videocaptureing источника, особенно если обратный вызов занимает много времени, может остановить весь Драйвер ядра.

1
ответ дан 30 November 2019 в 04:12
поделиться

Для управляемого кода возможно вызвать bugcheck, когда это имеет доступ к дефектным драйверам ядра. Однако это был бы драйвер ядра, который непосредственно вызывает BSOD (например, DirectShow uffe BSODs, сокет Terence Lewis BSODs или BSODs, замеченный при использовании БитТоррента с определенными сетевыми адаптерами).

Прямой доступ непривилегированного режима к привилегированным ресурсам низкого уровня может вызвать bugcheck (например, набрасывая на Device\PhysicalMemory, если он не повреждает Ваш жесткий диск сначала; Vista не предоставляет доступ непривилегированного режима к физической памяти).

, Если Вы просто хотите файл дампа, предложение Mendelt использования WinDbg является намного лучшей идеей, чем использование ошибки в драйвере ядра. К сожалению, эти .dump команда не поддерживается для локальной отладки ядра, таким образом, Вам был бы нужен второй ПК, подключенный по сериалу или 1394 или VM, соединенный по виртуальному последовательному порту. LiveKd может быть опцией единственного ПК, если Вам не нужно состояние дампа памяти, чтобы быть абсолютно последовательными.

1
ответ дан 30 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: