文章目录

  • 使用互斥体创建单一实例
  • DLL延迟加载与资源的释放
    • DLL延迟加载
    • 导入资源
    • 资源释放

转载自甘迪文著的《Windows黑客编程》。

使用互斥体创建单一实例

// 判断是否重复运行
BOOL IsAlreadyRun()
{HANDLE hMutex = NULL;hMutex = ::CreateMutex(NULL, FALSE, "TEST");if (hMutex){if (ERROR_ALREADY_EXISTS == ::GetLastError()){return TRUE;}}return FALSE;
}

DLL延迟加载与资源的释放

DLL延迟加载

DLL延迟加载设计步骤:属性->链接器->输入->延迟加载DLL->输入: DLL文件名

导入资源

在添加资源中选择自定义,在新建自定义资源对话框中输入资源类型,然后确认。
然后将其导入。

资源释放

//弹出错误信息
void FreeRes_ShowError(char *pszText)
{char szErr[MAX_PATH] = { 0 };::wsprintf(szErr, "%s Error[%d]\n", pszText, ::GetLastError());
#ifdef _DEBUG::MessageBox(NULL, szErr, "ERROR", MB_OK | MB_ICONERROR);
#endif
}//释放资源
/*
uiResouceName :指定资源名称或ID
lpszResourceType:指定资源类型
lpszSaveFileName:释放到的文件名称
*/
BOOL FreeMyResource(UINT uiResouceName, char *lpszResourceType, char *lpszSaveFileName)
{// 获取指定模块里的指定资源HRSRC hRsrc = ::FindResource(NULL, MAKEINTRESOURCE(uiResouceName), lpszResourceType);if (NULL == hRsrc){FreeRes_ShowError("FindResource");return FALSE;}// 获取资源的大小DWORD dwSize = ::SizeofResource(NULL, hRsrc);if (0 >= dwSize){FreeRes_ShowError("SizeofResource");return FALSE;}// 将资源加载到内存里HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc);if (NULL == hGlobal){FreeRes_ShowError("LoadResource");return FALSE;}// 锁定资源LPVOID lpVoid = ::LockResource(hGlobal);if (NULL == lpVoid){FreeRes_ShowError("LockResource");return FALSE;}// 保存资源为文件FILE *fp = NULL;fopen_s(&fp, lpszSaveFileName, "wb+");if (NULL == fp){FreeRes_ShowError("LockResource");return FALSE;}fwrite(lpVoid, sizeof(char), dwSize, fp);fclose(fp);return TRUE;
}

Windows黑客编程第二章相关推荐

  1. windows核心编程-第二章 Unicode

    第2章U n i c o d e 随着M i c r o s o f t公司的Wi n d o w s操作系统在全世界日益广泛的流行,对于软件开发人员来说,将目标瞄准国际上的各个不同市场,已经成为一个 ...

  2. mfc编程vc6.0实现进程的创建和通信_免费送书:windows黑客编程技术详解

    01 书怎么送 点赞并留言,关注在下面的公众号后台回复「抽奖」,弹出小程序后点击参与. 开奖时间是 7 月 7 号 20:00 ,一定要留意微信消息,如果你中奖了,请尽快在中奖页面提交收件人信息并备注 ...

  3. Windows黑客编程基础

    俗话说:"万事开头难",编程也不例外,初学者如何入门关键要有一份正确的理论作指 导,下面的这篇文章虽不能说是至理名言,但我相信通过作者细腻的分析.讲解和引导, 定能给初学者起到启蒙 ...

  4. 读书 - Delphi下深入Windows核心编程 第二天

    技术交流,DH讲解. 今天进入这书第二章 钩子(HOOK). 先说说钩子是什么? 钩子其实就在你环境中加上一层过滤,在特殊情况下就触发钩子回调函数. 比如说我们安装了全局的键盘钩子,那么当我们按动键盘 ...

  5. 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1.java关键字 abstract boolean break byte case catch char class const continue default do d ...

  6. 学习完windows网络编程第一章后做的UDPTest程序

    该程序分成Client和Server两部分,在一个solution中,两个Project client会给server分别发送一个ASCII的字符串,一个含有中文字符的Unicode字符串,最后发一个 ...

  7. windows网络编程第二版 第三章 Internet Protocol 读书笔记

    1. 本章主要讲述IP方面的东西,解释了IPv4, IPv6.在后面的两个章节中,讲述了地址和名字的解析(Address and Name Resolution),以及如何书写一个IPv4, IPv6 ...

  8. Windows核心编程 第二十章 DLL的高级操作技术

    第2 0章 D L L的高级操作技术 看了下这章的内容,谈不上高级,都是些常用相关,但是还是有一些细节需要注意. 20.1 DLL模块的显式加载和符号链接 如果线程需要调用D L L模块中的函数,那么 ...

  9. Windows核心编程 第九章 线程与内核对象的同步(下)

    9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...

  10. Python计算机视觉编程第二章——局部图像描述子

    Python计算机视觉编程 局部图像描述子 (一)Harris 角点检测器 (二)SIFT(尺度不变特征变换) 2.1 兴趣点 2.2 描述子 2.3 检测兴趣点 2.4 匹配描述子 (三)匹配地理标 ...

最新文章

  1. c++自底向上算符优先分析_c语言运算符的优先级
  2. 就是这么迅猛的实现搜索需求--转
  3. PHPUnit测试框架学习(1)
  4. 博通的“交钥匙”策略
  5. linux 查看服务器作业,linux – 如何在服务器负载较低时运行作业?
  6. JS循环执行函数setInterval
  7. 二进制编译安装mysql_二进制编译安装mysql
  8. ROS 教程之 vision: 摄像头标定camera calibration
  9. 新站如何迅速提高流量和被百度收录的技巧绝版
  10. pc android 凤凰,PC上玩安卓,选凤凰系统还是模拟器?
  11. 计算机应用基础word的课件,计算机应用基础之word2010课件
  12. 系统软硬件测试工具介绍
  13. hashcat破解密码规则示例
  14. CVPR 2021 Pre-Trained Image Processing Transformer
  15. 透明图片怎么发给别人_如何在网上 1 分钟就搜到高清优质图片?这 3 个搜图网站一定要收藏好...
  16. 计算机考研854题型,2017年中央民族大学854计算机基础综合考研大纲
  17. 机器学习:SVR支持向量机回归
  18. c语言程序设计刘会超答案,C语言程序设计案例教程
  19. springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
  20. 放假安排 自己MARK

热门文章

  1. Android 开发一定要看的15个实战项目
  2. 五大好用的开源MySQL管理工具
  3. MySQL图形化管理工具
  4. kis 2009 key/卡巴斯基2009 key/kis 8.0 0.454 key/卡巴斯基 8.0 0.454 key
  5. gps模拟器 matlab,基于Matlab/Simulink的数字中频GPS信号软件模拟器
  6. win10计算机管理字体糊,win10字体发虚模糊正确解决方法(5个方法)
  7. java版教材管理系统源码
  8. 原理探究——空间平滑MUSIC算法
  9. 烟台市建筑物矢量数据(Shp格式+带高度)
  10. svn汉化依然失败无解