三.MFC DLL窗口的创建和注入显示

一、什么是MFC

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量.其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类.我们之前接触到的是控制台,这里我们就可以接触到了窗口.

二、DLL

动态链接库英文为DLL,是Dynamic Link Library的缩写.

DLL是一个包含可由多个程序,同时使用的代码和数据的库,这里暂且简单的了解下就行 后面还会细致的分析.

三、创建第一个MFC DLL

3.1 创建项目

3.1.1 选择文件-选择项目-选择MFC/ATL-选择MFC动态链接库

3.1.2 设置项目名称-设置项目存放路径-点击确认

3.1.3 选择DLL类型为静态链接到MFC的常规DLL-点击确认-即可完成MFC DLL的创建

3.1.4 我们在解决方案资源管理器中可以看到我们创建的项目的目录结构,会比之前我们创建的控制台项目多出很多源文件.这些文件主要是MFC框架的一些初始化和配置,是编译器为我们生成好的.

3.2 基本介绍

主要介绍2个基本函数

我们点击查看MFCLibrary1.cpp

会看到这个初始化函数

当DLL被加载后会触发函数InitInstance()  常常做一些初始化工作 比如窗口的创建 显示 等等

有了初始化当然也会有一个清理资源函数的触发

当DLL被卸载了会触发函数ExitInstance(); 做一些资源清理工作 比如 对象的释放 等等

    virtual BOOL InitInstance();//当DLL被加载的时候 会调用  我们可以用来 对 窗口的创建和 显示 还有一些初始化操作
    virtual int ExitInstance();//当DLL 被卸载的时候 调用  我们可以用来 对资源的清理 操作 比如 对象的释放等等

3.3 添加窗口

首先来看看怎么添加一个主窗口

3.3.1 右键点击资源文件-弹出菜单

3.3.2 选择添加-选择资源-弹出资源对话框

3.3.3 选择Dialog-选择新建-即可创建一个窗口

 3.3.4 此时窗口创建成功

3.3.5 窗口资源添加后我们需要给窗口绑定一个类,右键点击窗口空白处-弹出菜单-选择添加类

 

3.3.6 弹出对话框- 设置一个自定义类名(MFCMainDialog)其他默认不变-点击确认

3.3.7 此时会多出一个MFCMainDialog.h 和 MFCMainDialog.cpp文件 这2个文件就相当于和刚才那个窗口绑定了(原理我们暂时不讲)

以后需要操作这个新建的窗口就需要对这2个文件做相应的修改

3.4 利用线程创建窗口

3.4.1 由于我们需要把刚才添加的窗口资源给创建显示出来,我们第一步需要添加与这个窗口绑定的2个文件中的头文件MFCMainDialog.h

在源文件MFCLibrary1.cpp中添加

3.5.2 在上节课中我们介绍了线程的创建,这里我们就不必多说.

现在需要在我们刚才介绍的当DLL被加载的函数InitInstance()中创建一个线程,然后在线程回调函数中创建一个模态窗口.

MFCMainDialog *pMFCMainDialog=NULL;
DWORD WINAPI ThreadCallBack(LPARAM lparam)
{
     if(pMFCMainDialog)
       pMFCMainDialog =new MFCMainDialog();
     pMFCMainDialog->DoModal();//创建模态窗口 然后堵塞 等待窗口关闭后继续往下执行  
     FreeLibraryAndExitThread(theApp.m_hInstance, 1);//释放 会触发ExitInstance();
     return 1;
}
BOOL MFCLibrary1::InitInstance()//当DLL 被调用的时候 触发这个函数
{
MFCLibrary1::InitInstance();//先调用父类的这个函数
::CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCallBacl, 0, 0, 0);//不会堵塞
return TRUE;
}

四、注入DLL验证是否创建成功

利用注入器把DLL注入到一个程序(注意DLL是32位还是64位注入到对应位数的程序中)中,观察是否窗口显示出来

迪大交流群:285530835

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL Server SQL注入是一种常见的网络攻击技术,它利用了应用程序对输入数据的不正确或不充分验证,从而允许攻击者在数据库执行恶意SQL语句。 SQL注入的攻击原理是通过在应用程序的输入注入恶意的SQL代码,从而欺骗数据库执行非授权的查询或修改操作。攻击者可以通过输入恶意代码来绕过应用程序的认证和访问控制,直接访问和操纵数据库的敏感数据。 为了防止SQL注入攻击,开发人员应该采取以下预防措施: 1. 输入验证和过滤:应用程序应该对所有的用户输入进行验证和过滤,确保只有合法的数据才被传递给数据库。例如,过滤所有的特殊字符和SQL保留字。 2. 参数化查询:使用参数化查询可以防止SQL注入攻击。参数化查询将用户输入作为参数传递给SQL语句,而不是直接将其拼接到SQL语句。 3. 最小权限原则:数据库用户应该被分配最小必需的权限,以限制其对数据库的访问和操作。这样即使发生SQL注入攻击,攻击者也无法执行危险的操作。 4. 错误信息保护:应用程序应该避免向用户显示详细的错误信息,特别是关于数据库结构和错误的信息。攻击者可以利用这些信息来更好地了解数据库的结构和发现潜在的攻击点。 总结来说,预防SQL注入攻击需要开发人员在设计和实现应用程序时提高警惕,并采取合适的措施来验证和过滤用户输入,使用参数化查询,限制数据库用户的权限,并保护错误信息。这样才能有效地防止SQL注入攻击并保护数据库的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迪大学院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值