- 博客(195)
- 资源 (22)
- 问答 (2)
- 收藏
- 关注
原创 玩转Windows服务系列——创建Windows服务
玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理ATL 服务
2021-04-15 16:00:09
228
原创 《寒江独钓 Windows内核安全》——串口的过滤
过滤是在不影响上层和下层的接口,在windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真实驱动程序,就加入了新的功能。1、用到的Windows APIIoAttachDevice——绑定到真实设备上(有名称的设备)/*IoAttachDevice例程将调用方的设备对象附加到命名的目标设备对象,以便将绑定到目标设备的I / O请求首先路由到调用方。*/NTSTATUS IoAttachDevice( PDEVICE_OBJECT SourceDevice, PU
2021-04-12 00:02:54
484
原创 Windows映像劫持调试程序
简介“映像劫持”,也被称为“IFEO”(Image File Execution Options),在Windows NT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。当一个可执行程序位于IFEO的控制中时,它的内存分配则根据该程序的参数来设定,而Windows NT架构的系统能通过这个注册表项使用与可执行程序文件名匹配的项目作为程序载入时的控制依据,最终得以设定一个程序的堆管理机制和一些辅助机制等。出于简化原因,IFEO使用忽略路径的方式来匹配它
2021-03-20 17:07:39
651
原创 驱动开发——WDM+创建设备+与应用层交互
1、内核层代码#include <ntddk.h>#define DEVICE_NAME L"\\Device\\MyFirstDevice"#define SYM_NAME L"\\??\\MyFirstDevice"#define IOCTL_MUL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x9888, METHOD_BUFFERED, FILE_ANY_ACCESS)void DriverUnload(PDRIVER
2021-02-02 22:31:52
426
1
原创 vs2015 + WDK10 + SDK10 编写WDM项目
1、下载地址VS2015 Community WDK10WinSDK102、虚拟机调试环境用来构造虚拟机远程环境,使用windbg调试内核,包括禁用驱动程序强制签名。VirtualKD-Redux-2020.5调试windbg加载、卸载驱动程序A1SysTest v0.3.0.1.exe3、编写驱动程序(一)新建WDM项目(二)新建main.c3、添加以下代码#include <ntddk.h>void DriverUnl
2021-02-02 00:05:53
539
原创 MFC——使用VS2008创建Active x控件
首先了解了容器和服务器程序:容器应用程序是可以嵌入或链接对象的应用程序。例如Word就是容器应用程序。服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序,Excel就是服务器应用程序。1、如何在VS2008中为Active x控件添加属性:https://blog.youkuaiyun.com/Beyond_cn/article/details/375310232、MFC...
2019-09-15 16:15:00
795
原创 基于消息的异步套接字实现的聊天程序
基于消息的异步套接字 Windows套接字在两种模型下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的WinSock函数会一直等待下去,不会立即返回程序(将控制权交换给程序)。而在非阻塞模式下,WinSock函数无论如何都会立即返回。 Windows Sockets为了支持Windows消息驱动极值,使应用程序开发者能够方便地处理网络通信,它对网络时间采用了基...
2019-08-26 23:21:33
493
原创 多线程同步的四种方式——临界区(线程死锁)
问题的引入:模仿12306多人同时抢票。解决方法:使用临界区对象。临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。它并不是核心对象,不是属于操作系统维护的...
2019-08-19 23:03:27
2039
原创 多线程同步的四种方式——事件对象
问题的引入:模仿12306多人同时抢票。解决方法:使用事件对象。事件对象 事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动o重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。 有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变成可调度...
2019-08-18 16:17:10
944
原创 基于多线程的聊天室程序
今天在学习了基于多线程的聊天室程序,另外还加上了socket编程。效果图如下代码如下:1、首先我们需要去加载套接字库,MFC中的函数 AfxSocketInit() 包装了函数 WSAStartup(), 在支持WinSock的应用程序的初始化函数IninInstance()中调用AfxSocketInit()进行初始化,程序则不必调用WSACleanUp(). 需要的头文件...
2019-08-17 22:41:36
649
原创 多线程同步的四种方式——互斥量
问题的引入:模仿12306多人同时抢票。问题代码:#include <Windows.h> //需要调用windows Api#include <iostream>using namespace std;DWORD WINAPI Fun1Proc(LPVOID lpParamter);DWORD WINAPI Fun2Proc(LPVOID lpPar...
2019-08-14 23:13:12
1005
原创 程序、进程和线程的区别
程序、进程和线程1、程序和进程程序:是计算机指令的集合,它以文件的形式存储在次磁盘上。进程:通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。2、进程进程是资源申请、调度和独立运行的单位,因此,他使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,他不占用系统的运行资源。进程由两个部分组成:...
2019-08-14 22:53:34
873
原创 c++动态函数库的生成及调用(两种方式)
DLL中导出函数的声明有两种方式:一种方式是:在函数声明中加上__declspec(dllexport);https://blog.youkuaiyun.com/qq_37059136/article/details/80161727另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。https://blog.csdn.ne...
2019-07-28 22:13:05
1106
原创 破解vba工程密码——VBA代码
新建一个模块,然后复制以下代码,如果出现“文件解密成功”,则表明解密成功Public Sub VBAPassword() Filename = Application.GetOpenFilename("Excel文件(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt", , "VBA破解") If Dir(Filename) ...
2019-07-18 14:57:41
5155
2
原创 C++——在非MFC程序中如何使用定时器(timeSetEvent函数)
在MFC程序中,我们可以通过相应WM_TIMER消息,添加处理函数。在非MFC程序中,如果想用定时器,我们可以使用timeSetEvent函数来实现定时器功能。该函数的功能是启动指定的定时器事件。多媒体计时器在其自己的线程中运行。事件激活后,它会调用指定的回调函数,或设置或脉冲指定的事件对象。函数原型:MMRESULT timeSetEvent( UINT uDelay, ...
2019-07-17 19:47:23
2092
原创 VS2008设置捕获非法访问地址异常
VS2008->Debug->Exceptions->Win32 Exceptions->c0000005 Access violation给勾上,就可以看到从详细的call stack了
2019-01-31 16:58:59
545
原创 C++基于TCP(面向连接)/UDP(面向无连接)的socket编程
基于TCP(面向连接)的socket编程步骤服务器端程序:1、创建套接字(socket);2、将套接字绑定到一个本地地址和端口上(bind);3、将套接字设为监听模式,准备接收客户请求(listen);4、等待客户请求到来。当请求到来后,接收连接请求,返回一个新的对应于此次连接的套接字(accept);5、用返回的套接字和客户端进来通信(send/recv);6、返回。...
2019-01-06 23:14:42
1377
1
原创 mfc—改变控件的颜色、背景、字体以及画图
本周学习了孙鑫老师的第十课,本节课主要讲的是:画图以及改变控件的颜色、背景、字体、大小。 通过上面四个选项,设置我们画图的形状。下面三个选项,设置我们线条的大小、颜色和字体。首先是选择颜色的窗口:窗口mfc已经为我们写好了,我们只需要调用一下,在单文档的view类里面添加相应点击颜色菜单的函数:void CGraphicView::OnColor(){ // T...
2018-12-09 20:39:02
8877
3
转载 mfc—GetTextMetrics与GetTextExtent的区别
GetTextMetrics:获取当前字体的信息GetTextExtent:获取特定的字符串在屏幕上所占的宽度和高度对于这两个函数的作用,我在编程的时候,也有一定的困惑。因此,我也想,其他人在编程的时候也肯定有 同样的困惑。所以我把他们解释一下。不足之处,还请大家多多的添加 批评~~其实,我们对什么困惑呢?函数的调用方法,还是在返回值上?CDC::GetTextMetrics作用:返回当...
2018-12-02 22:14:49
1818
原创 MFC—工具栏的显示、隐藏以及浮动工具栏关闭时改变菜单的选中状态
孙鑫老师的第九课,留下的一个作业:当工具栏在悬浮和停靠状态的显示和隐藏,显示前的位置需要和隐藏(关闭)前的位置保持一致。 其实,关于工具栏的隐藏与显示问题,只需要考虑三种状态:(1)在停靠状态下工具栏的显示与隐藏;(2)在悬浮状态下工具栏的显示与隐藏;(3)在悬浮状态下,通过点击关闭按钮去关闭工具栏,然后在显示工具栏的问题。 对于上面所述的第二种情况,要记住工具栏在将要隐藏时刻的窗...
2018-12-02 21:47:41
3865
2
原创 MFC——获取当前字体的高度、宽度等信息
当我们想往屏幕上面写多行内容时,我们需要之前当前文本的宽度和高度信息。我们可以采用以下方法:void CDialogView::OnDraw(CDC* pDC){ CDialogDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CFont font; font.CreatePointFont(...
2018-11-18 22:01:28
8581
原创 Visual Assist X 快捷键
Visual Assist X 快捷键【Visual Assist X 快捷键】Shift+Alt+F Find References 查找引用Shift+Alt+S FindSynbolDialog 打开查找符号对话框Alt+G GotoImplementation 调到实现Alt+M ListMethodsInCurrentFileAlt+Left Arrow Navi...
2018-11-18 20:51:53
438
原创 MFC——CPropertySheet(属性表单)和CPropertyPage(属性页)——实现分页显示
今天在学习的时候,实现了一种分页显示的功能。如下图:以下是实现步骤:1、在资源文件中添加三个IDD_PROPPAGE_LARGE,也就是三个dialog。我给他们取名为IDD_PROP1、IDD_PROP2、IDD_PROP3,然后随便添加一些控件。2、我们新加三个类,名字叫做CProp1、CProp2、CProp3,基类选择CPropertyPage。在vs2008里...
2018-11-17 23:59:17
5118
原创 MFC-VS2008建立数值型的关联变量
由于vs2008取消了Class Wizard,有时候找不到在哪里建立数值型的关联变量。首先,我们右键点击我们需要建立关联变量的控件,点击添加变量。如下图然后,我们选择选择添加变量的类型。Control为控件型,Value为数值型。添加完后的效果:void CComputerDlg::DoDataExchange(CDataExchange* pDX){ CDialo...
2018-08-04 11:27:19
458
原创 MFC-对话框组合应用-QQ
最近学习了mfc中基于对话框的应用程序开发。总共实现了以下功能:1、登录与登录账户管理;2、账户登录权限管理;3、录入对话框与员工信息管理;具体功能有以下部分:1、登录2、注册3、主对话框4、账户信息管理5、修改用户信息6、员工信息管理7、修改员工信息8、删除员工信息9、添加员工信息10、打开文件...
2018-07-23 23:32:04
491
原创 MFC-核心类库-CWnd的成员函数介绍(三)
CRect类数据成员有left,top,right,和bottom。left左上角X坐标,top左上角Y坐标,right右下角X坐标,bottom右下角Y坐标。rect.InflateRect(3,3);//修改CRect的宽和高,每次增加3,3rect.OffsetRect(5,5);//修改CRect的x、y值,每次增加5,5CWnd类中GetWindowRect(rect);MoveWind...
2018-07-08 21:41:12
2021
原创 MFC-核心类库-CWnd的成员函数介绍(二)
1、CWnd :: FromHandleCWnd在给定窗口句柄时,返回指向对象的指针。如果CWnd对象未附加到句柄,CWnd则会创建并附加临时对象。static CWnd * PASCAL FromHandle(HWND hWnd);2、CWnd::Attach当我们使用MFC创建一个窗口时,是分两步进行的:第一步,new一个CWnd对象,这一步是创建C++对象,但是其中的HWND还是非法的,因为...
2018-07-08 12:02:20
858
原创 MFC-核心类库-CWnd的成员函数介绍(一)
1、CWnd::Create函数 创建指定的子窗口并将它附加到 CWnd 对象。virtual BOOL Create( LPCTSTR lpszClassName, //窗口类型。 LPCTSTR lpszWindowName, //窗口名称。 DWORD dwStyle, //按位组合的窗口样式。 Const RECT&...
2018-07-05 21:48:27
3289
原创 MFC—对话框程序—模式对话框与非模式对话框
一、根据主窗口类型,MFC软件工程可以分为以下几种架构模型:1、SDI(Single Document Interface):单文档界面,一个主框架窗口下只能编辑一份文档。例如:记事本和画笔等。2、MDI(Multiple Document Interface):多文档界面,一个主框架窗口下可以同时编辑多份文档。例如:VC++6.0,Photoshop等软件。3、基于对话框的软件模型:主窗口是通过...
2018-07-03 22:29:21
7601
2
原创 常量指针,指针常量,函数指针与指针函数
1、常量指针:本质是一个指针,表示一个指向常量的指针const int * p; //能够改变指针的指向,但不能改变指针所指对象的值2、指针常量:本质是一个常量,表示一个指针是常量int * const p; //不能改变指针的指向,但可以改变指针所指对象的值3、函数指针:本质是一个指针,表示一个指向函数的指针void (*p)();4、指针函数:本质是一个函数,表示函数的返回值是指针...
2018-03-18 14:05:14
740
原创 类模板+函数模板
在c++中标准模板库主要由容器、算法和其他组件组成,将需要重复利用的功能以模板的形式封装。一般情况下,标准模板库中将算法实现为函数模板,而将容器实现为类模板。 函数模板:使用函数模板可以重写通用函数。 类模板:将类的成员类型参数化。类模板code:#include <iostream>#include <stdio.h>using namespace...
2018-03-11 21:32:48
314
原创 PAT乙级(Basic Level)真题
A+B和C (15)时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)题目描述给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。输入描述:输入第1行给出正整数T(输出描述:对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,
2017-11-29 22:14:36
1409
原创 MFC第一天——Win32实现计算器
今天在学习MFC,第一节课讲得是Win32程序开发,Win32主要使用C语言直接使用API进行开发。Windows95及以后的版本都是32位的操作系统,因此Windows程序开发也叫Win32程序开发。今天的任务是写一个计算器。效果图如下:首先我们需要登录:登录成功后,就可以显示计算器了:加减乘除,都可以(还是浮点数运算)这是项目的文件形式:窗口的设
2017-11-20 20:54:56
779
原创 r语言常用函数(三)
小技巧:当我们输命令时,一行不足以容纳我们想要书写的内容时,我们可以按shift+enter键将一个命令分成多行1.2.9 列表 R列表是以其他对象为成分的有序集合。列表的成分与向量的元素不同,他们不一定是同一数据类型、模式或者相同长度。> mylist<-list(sid=34453,sname="John",marks=c(14.3,12,15))> mylist$sid
2017-11-07 22:03:59
1823
原创 r语言常用函数(二)
1.2.7 数据子集可以在方括号内放入元素的位置来获取向量中的某个元素,正数x表示显示下标为x的元素,负数x表示不显示下标为x的元素。> x<-c(-1,0,1,2,3)> x[2][1] 0> x[-2][1] -1 1 2 3方括号中的命令是逻辑条件> x<-c(-1,0,1,2,3)> x[x>0][1] 1 2 3通过函数names()来给向量中的元素命名
2017-11-06 21:03:47
8389
原创 r语言常用函数(一)
输入ls()或者objects()命令列举出当前内存中的对象> ls()[1] "x" "y"> objects()[1] "x" "y"如果不再需要一个对象时,可以通过rm来删除他> rm(y)向量是R中最基本的数据对象,所有对象都有模式和长度属性。向量在R中使用c()函数创建> v<-c(1,2,3,4,5)> v[1] 1 2 3 4 5> length(v)
2017-11-03 23:10:50
3172
原创 R语言连接mysql
一些常用的数据,处理好,放在mySQL里,以后使用起来也方便。可以用R直接进行分析,具体步骤如下:1、R下载RODBC包,安装好。install.packages(RODBC);2、在http://dev.mysql.com/downloads/connector/odbc下载mySQL ODBC,安装好。3、windows:控制面板->管理工具->数据源(ODBC)->双击-
2017-11-03 11:24:46
357
原创 nyoj20——吝啬的国度
吝啬的国度时间限制:1000 ms | 内存限制:65535 KB难度:3描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。输入第一行输入一个整数M表示测试数据共有M(1每组测试数据
2017-10-25 21:33:56
221
原创 递归与分治——汉若塔问题
移动规则:(1)每次只能移动1个圆盘;(2)任何时刻都不允许将较大的圆盘压在较小的圆盘之上;(3)在满足1,2的前提下,可将圆盘移到a,b,c中的任意一塔座上。#include #include #include #include using namespace std;void move(char a,char b){ printf("%c->%c\n",
2017-10-23 23:13:56
391
原创 递归与分治——排列问题
#include #include #include #include using namespace std;void swap(int a[],int i,int j){ int t=a[i]; a[i]=a[j]; a[j]=t;}void perm(int a[],int k,int m){ if(k==m) { f
2017-10-23 21:21:35
364
Depends.rar
2020-03-14
Dbgview.exe
2020-03-14
Procmon.exe
2020-03-14
procexp.exe
2020-03-14
Procdump.zip
2020-03-13
Office UI设置RibbonX
2019-01-15
plsql 32+64位破解版
2018-03-09
SpringMVC所需要的jar包
2017-07-21
为什么这个程序会Time Limit Exceeded——题目是hdu1754
2015-10-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人