Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вещью клавиатуры является, вероятно, хороший вариант, но если необходимо сделать это кодом, продолжить читать...
Вам действительно не нужно ничто для блевания, по сути, всего, что необходимо сделать, находка 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 могла бы иметь некоторые специальные положения). Я не протестировал его сам.
Я не знаю, работает ли это действительно, и я уверен, что Вам нужны права администратора, но Вы могли бы установить Ключ реестра 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
Перезапуск
Я должен был бы сказать "нет". Вы имели бы к p/invoke и взаимодействовали бы с драйвером или другим кодом, который живет в пространстве ядра. код.NET живет далеко удаленный из этой области, хотя был некоторый разговор об управляемых драйверах в будущих версиях Windows. Просто ожидайте еще несколько лет, и можно отказать далеко точно так же, как наши неуправляемые друзья.
Насколько я знаю, что реальный BSOD требует отказа в коде привилегированного режима. Vista все еще имеет BSOD's, но они являются менее частыми, потому что новая модель драйвера имеет меньше драйверов в привилегированном режиме. Любые отказы непривилегированного режима просто приведут к Вашему уничтожаемому приложению.
Вы не можете выполнить управляемый код в привилегированном режиме. Таким образом, если Вы хотите к BSOD, необходимо использовать PInvoke. Но даже это довольно трудно. Необходимо сделать, некоторые действительно представляют себе, что PInvokes заставляет что-то в привилегированном режиме блевать.
, Но среди тысяч ТАК пользователей существует, вероятно, кто-то, кто сделал это :-)
Вы могли использовать инструмент Online OSR, который инициировал катастрофический отказ ядра. Я никогда не пробовал его сам, но я предполагаю, что Вы могли просто выполнить его через стандартный класс .net Process:
Мне когда-то удалось генерировать BSOD на Windows XP с помощью Системы. Сеть. Сокеты в.NET 1.1 безответственно. Я мог повторять его справедливо регулярно, но к сожалению который был несколько лет назад, и я не помню точно, как я инициировал его, или имейте исходный код вокруг больше.
Попробуйте живой videoinput, использующий directshow в directx8 или directx9, большинство вызовов переходит к видеодрайверам привилегированного режима. Я успешно выполнился в большом количестве "синих" экранов при выполнении процедуры обратного вызова из живого videocaptureing источника, особенно если обратный вызов занимает много времени, может остановить весь Драйвер ядра.
Для управляемого кода возможно вызвать bugcheck, когда это имеет доступ к дефектным драйверам ядра. Однако это был бы драйвер ядра, который непосредственно вызывает BSOD (например, DirectShow uffe BSODs, сокет Terence Lewis BSODs или BSODs, замеченный при использовании БитТоррента с определенными сетевыми адаптерами).
Прямой доступ непривилегированного режима к привилегированным ресурсам низкого уровня может вызвать bugcheck (например, набрасывая на Device\PhysicalMemory
, если он не повреждает Ваш жесткий диск сначала; Vista не предоставляет доступ непривилегированного режима к физической памяти).
, Если Вы просто хотите файл дампа, предложение Mendelt использования WinDbg является намного лучшей идеей, чем использование ошибки в драйвере ядра. К сожалению, эти .dump
команда не поддерживается для локальной отладки ядра, таким образом, Вам был бы нужен второй ПК, подключенный по сериалу или 1394 или VM, соединенный по виртуальному последовательному порту. LiveKd может быть опцией единственного ПК, если Вам не нужно состояние дампа памяти, чтобы быть абсолютно последовательными.