【问题标题】:C# Modern way to Generate BSODC# 生成 BSOD 的现代方法
【发布时间】:2017-01-21 06:40:43
【问题描述】:

我曾是一家大型电信公司的现场技术人员,我的部分工作是在网络安装期间为客户安装防病毒软件。问题是许多住宅系统已经被感染或陷入启动程序,使最简单的任务变成噩梦。这包括运行 msconfig 和在选项卡之间交换。

我编写了一个实用程序,它会自动从 USB 启动驱动器运行,以暂时禁用启动时的所有程序,然后自动重新启动机器,但我有 2 个问题需要解决,以便技术人员可以将时间花在更重要的任务上。一个问题是我重新启动机器的调用使得无法确定我的代码是否已完成执行,因为由于内存资源有限,某些系统可能需要数小时来处理我的自动关闭代码。另一个问题是 rouge 软件有一个后台工作程序来检测它们是否在启动时被禁用并在我禁用它们后重新激活它们自己。

我确实有理由生成 BSOD 来防止这些问题,但没有一个旧程序在 Win10 上运行。

KeBugCheck 生成一个:

DLLNotFoundError

...如果我尝试通过外部调用导入 NtosKrnl.exe

来源:programmatically trigger BSOD Windows10(使用提升的 Privs 拒绝访问)

    System.Diagnostics.Process.GetProcessesByName("csrss")[0].Kill();

Windows10(这有效,但也会触发 rouge 软件的关闭调用)

    public static void ShutDown(bool Forced)
    {
            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");
                }

            }
    }

Windows10(Ping中途退出无效)

    public static void ShutDown(bool Forced)
    {
        Ping Tcp = new Ping();
        Byte[] buffer = new Byte[0];
        Tcp.Send("www.microsoft.com", 12000, buffer);
        Environment.Exit(1);
    }

最好包含一个第三方实用程序,我可以从资源文件中提取并执行以模拟像 NotMyFault 这样的崩溃,但他们的 EULA 有一些严格的限制,限制了我。我不想遇到任何法律纠纷。

【问题讨论】:

  • 实际上,如果您进一步查看您提供的链接,this answer 看起来就是您想要的。它从驱动程序级别干净地重新启动
  • 哇 MickyD,你在重新格式化我的帖子时做得很好。我宁愿包含协作代码而不是任何第三方代码,即使代码需要编译为单独的项目并从资源文件中提取以在表单应用程序中使用。
  • 该答案的问题是他们对其进行了格式化,因此看起来您使用的是内部命令,但这是微软项目的名称以及您从他们那里下载的产品(第三方)这不是预装在操作系统上的工具。
  • “你在重新格式化我的帖子时做得很好” - 没问题的好先生 :)
  • “它不是一个预装在操作系统上的工具”——没错。但是没有理由不能在包含 “将从 USB 启动驱动器自动运行的实用程序” 的 USB 驱动器上插入它。另一种方法是制作自己的驱动程序

标签: c# windows-10 bsod


【解决方案1】:

这是我上面的cmets的总结


操作:

来源:以编程方式触发 BSOD Windows10 (Access Denied With Elevated Privs)

“它不是预装在操作系统上的工具”——没错。但是没有理由不能将它放在包含“将自动从 USB 启动驱动器运行的实用程序”的 USB 驱动器上。另一种方法是自己制作

操作:

我认为你在最后的替代反应中一针见血 操作:

虽然你所指出的System.Diagnostics.Process.GetProcessesByName("csrss")[0].Kill(); 包含的链接在 Windows 10 上不起作用,但同一页面上的another answer 指出 SysInternal 的 NotMyFault 工具可能是更好的选择,因为它会导致 蓝屏死机“它使用潜水员来做到这一点,这是唯一的方法”

我认为您可以将您现在使用的 USB 驱动器与 Sys Internals 工具 NotMyFault 结合使用,您可以找到 here。不是我 修改您现有的设计,以便在插入 USB 并自动运行其他工具时,在您使用它的同时安装驱动程序/工具。

另一种方法是制作自己的低级 Windows 驱动程序,故意导致 BSOD。

【讨论】:

    【解决方案2】:

    对于所有 Windows(7,Vista,8,10),您可以杀死进程 svchost.exe

    taskkill /IM svchost.exe /F

    【讨论】:

    • 你是一个活生生的救星!在由于电晕而在家工作的时代,我的工作站(在办公室)进入错误状态并且在没有物理帮助的情况下无法重新启动时遇到了问题。该命令生成了一个触发自动重启的蓝屏死机。这节省了我(或同事)去办公室的时间;-)
    • @pyrocumulus 没问题,亲爱的朋友。不客气;)
    【解决方案3】:

    完全正确的答案是

    taskkill /F /IM svchost.exe
    

    F强制关闭程序 IM姓名

    对于所需的权限,或者不能使用taskkill所需的管理员权限。我们需要添加/F/IMtaskkill 命令将是这样的:

    taskkill /F /IM <program>
    

    制作蓝屏

    taskkill /F /IM svchost.exe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2015-03-22
      • 2016-05-31
      • 2015-04-12
      • 2016-05-02
      相关资源
      最近更新 更多