MFC入门到精通1-创建项目
开发环境搭建
出现错误
第一步,进入下列目录C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86,复制rc.exe和rcdll.dll两个文件
第二步,进入目录C:\Program Files (x86)\Windows Kits\10\bin\x86,将上述文件粘贴,即可,问题解决。
一个简单的demo
1.切换到资源状态
2.打开页面布局
3.添加按钮
修改每个按钮的属性值
Caption | ID |
---|---|
打开驱动设备 | IDC_BUTTON_CREATE |
关闭驱动设备 | IDC_BUTTON_CLOSE |
写数据 | IDC_BUTTON_IO_WRITE |
读数据 | IDC_BUTTON_IO_READ |
添加进程保护 | IDC_BUTTON_ADD |
卸载进程保护 | IDC_BUTTON_REMOVE |
按钮对齐快捷方式
双击打开驱动设备按钮进入代码行
//打开驱动设备对象
HANDLE DeviceHandle = NULL;
void CMFCApplicationDlg::OnBnClickedButtonCreate()
{// TODO: 在此添加控件通知处理程序代码DeviceHandle = CreateFileW(L"\\??\\MyDriver",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
}
双击关闭驱动设备按钮进入代码行
void CMFCApplicationDlg::OnBnClickedButtonClose()
{// TODO: 在此添加控件通知处理程序代码CloseHandle(DeviceHandle);//IRP_MJ_CLOSE
}
双击写数据按钮进入代码行
#include <winioctl.h>
#define IOTEST CTL_CODE(FILE_DEVICE_UNKNOWN,0X800,METHOD_BUFFERED,FILE_ANY_ACCESS)void CMFCApplicationDlg::OnBnClickedButtonIoWrite()
{// TODO: 在此添加控件通知处理程序代码DWORD dwRetSize = 0;//返回字节数typedef struct TINPUT_BUF{DWORD m_arg1;DWORD m_arg2;DWORD m_arg3;DWORD m_arg4;DWORD m_arg5;DWORD m_arg6;}TINPUT_BUF;//结构TINPUT_BUF inBuf = { 1,2,3,4,5,0x6ABC666 };//数组示例DWORD OutBuf[6] = { 0 };//输出缓冲区DeviceIoControl(DeviceHandle,//CreateFile打开驱动设备 返回的句柄IOTEST,//控制码 CTL_CODE&inBuf,//输入缓冲区指针sizeof(inBuf),//输入缓冲区大小&OutBuf,//返回缓冲区sizeof(OutBuf),//返回缓冲区大小&dwRetSize, //返回字节数NULL);//打印返回参数CString csStr;csStr.Format(L"EXE: 接收驱动层返回的参数(%x,%x,%x,%x,%x,%x dwRetSize=%d", OutBuf[0], OutBuf[1], OutBuf[2], OutBuf[3], OutBuf[4], OutBuf[5], dwRetSize);OutputDebugStringW(csStr);
}
双击添加进程保护
// TODO: 在此添加控件通知处理程序代码//添加保护UpdateData(TRUE);//窗口数据更新到变量DWORD dwRetSize = 0;//返回字节数char buftest[256];sprintf_s(buftest, "yjx:EXE R3 读写测试 控制码=%X\n", IO_READ_WRITE_TEST);OutputDebugStringA(buftest);//int 传入数据[3] = { 3,7,8 };UINT32 传入数据 = m_PID;// { 3, 6, 5 };//数组示例int OutBuf = 0;DeviceIoControl(DeviceHandle,//CreateFile打开驱动设备 返回的句柄IO_添加受保护的PID,//控制码 CTL_CODE&传入数据,//输入缓冲区指针sizeof(传入数据),//输入缓冲区大小&OutBuf,//输出缓冲区sizeof(OutBuf),//返回缓冲区大小&dwRetSize, //返回字节数NULL);
双击移除进程保护
//移出保护UpdateData(TRUE);//窗口数据更新到变量DWORD dwRetSize = 0;//返回字节数char buftest[256];sprintf_s(buftest, "yjx:EXE R3 读写测试 控制码=%X\n", IO_READ_WRITE_TEST);OutputDebugStringA(buftest);//int 传入数据[3] = { 3,7,8 };UINT32 传入数据 = m_PID;// { 3, 6, 5 };//数组示例int OutBuf = 0;DeviceIoControl(DeviceHandle,//CreateFile打开驱动设备 返回的句柄IO_删除受保护的PID,//控制码 CTL_CODE&传入数据,//输入缓冲区指针sizeof(传入数据),//输入缓冲区大小&OutBuf,//输出缓冲区sizeof(OutBuf),//返回缓冲区大小&dwRetSize, //返回字节数NULL);
静态编译会自动把MFC的库编译进去,不然的话会在目标系统上跑不起来。如果目标系统没有2017的支持库,或者是开发环境。
MFC入门到精通1-创建项目相关推荐
- PyTorch系列入门到精通——模型创建与nn.Module
PyTorch系列入门到精通--模型创建与nn.Module
- C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)...
一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...
- 博客基础_django_python从入门到实践_创建项目_创建应用
创建项目 制定规范 创建一简单博客网页,有固定分类,每个分类下又可以添加具体博客条目,每个条目保留作者,发布时间. 创建虚拟环境 虚拟环境是系统的一个位置,可以在其中安装包,与其他python包隔离. ...
- Django框架(入门超细笔记 创建项目步骤 )
在安装Django之前,我们首先需要安装Python开发的虚拟环境 virtualenv. 一.学习django我们要先下载虚拟环境 1.在cmd中输入命令:pip install v ...
- Pr 入门教程:如何创建项目?
欢迎观看 Premiere Pro 教程,小编带大家学习 Pr 的基本编辑技巧,了解工作区和如何创建新项目. 第一次启动 Premiere Pro 时,会看到这样的画面,这是「开始」屏幕,里面有一些选 ...
- 最新《JPA入门到精通JAVA进阶项目实战》
『课程介绍』: 通过对本课程的学习,能够对JPA能够有全面的认识,简化现有Java EE和Java SE应用开发工作.用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐 ...
- Python从入门到精通(加项目实战)学习视频
自己购买的一套 下载地址:https://pan.baidu.com/s/1i7owHIt 第一部分 1.编程语言介绍 2.Python基础,介绍历史.发展情况及现状Python安装.环境准备编程风格 ...
- Go语言从入门到精通 -【web项目实战篇】- Json详解
本节核心内容 介绍GoLang自带的json包的核心功能方法 介绍如何利用Tag对Json结构体实现更多的控制 介绍Json的编码器和解码器 介绍如何解决复合结构体的数据读取问题 介绍了开发中一些常见 ...
- CANoe 从入门到精通
目录 前言 初级篇 实践篇 前言 本专栏主要分为二个部分: 第一部分是初级篇,主要介绍CANoe中常用的模块: 第二部分是实践篇,主要是带领大家一起做一个项目,此项目是BootLoader刷写的上位机 ...
- 视频教程-Spring框架快速入门到精通-Java
Spring框架快速入门到精通 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥18.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...
最新文章
- linux配置java环境变量 转过几个,这个最详细和靠谱
- 【数据挖掘笔记一】引论
- C#实现RSA加密解密
- librosa能量_语音MFCC提取:librosa amp;amp; python_speech_feature(2019.12)
- NOIP模拟测试16「Drink·blue·weed」
- PolarDB-X 云原生分布式数据库 > API参考 > API参考(2017版本) > 数据库管理类 API > 删除 DRDS 数据库
- 无法使用闩锁类型 sh 读取并闩锁页_InnoDB数据锁第2.5部分“锁”(深入研究)...
- CentOS6.7安装Open***服务端
- 线程的创建方式及Runnable与Callable的区别
- python 24点题目分析_24点游戏的递归解法和Python实现
- Python实现一个代码行数统计工具(以C/C++为例)
- 搜题公众号题库对接教程
- C++网站开发MVC框架TreeFrog Framework教程——7.ERB模板
- 国内主流云厂商下一代云主机最大可售卖384核
- 用计算机创造一个宇宙,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的,真实世界...
- 银河麒麟系统飞腾CPU安装达梦数据库
- 用了postman,接口测试不用愁了
- 英语六级常考核心词汇02
- SparkRDD——行动算子
- 计算方法之非线性方程组求解
热门文章
- 皮尔森相关系数与方差膨胀因子介绍及关系 附python代码
- 汽车故障诊断技术【7】
- vld/rdy协议 断言
- [4K测试视频] 杜比4K UHD蓝光演示碟 Dolby.UHD.BluRay.Demo.Disc.March.2018.2160p.BluRay下载
- 保利威 API设置直播回放
- 各种多媒体软件安装教程
- 基于C++和QT实现的房贷计算器设计
- 各种网线的分类和区别
- App后台开发运维——架构设计
- 照相长度测试软件,拍张照片就知道你的长度了,还要什么测量工具!