Windows开发与配置
文章平均质量分 85
主要讲解Windows中的开发和配置
一个程序员的修炼之路
顺势而为
展开
-
Windows C++堆破坏场景及分析
一个堆破坏的老故事还记得第一次碰到堆破坏的时候,大概十年前了,当时在学校开发一个Wireshark插件,可是有一个问题我久久未能解决: 我修改后的Wireshark运行的时候偶尔启动的时候会出现程序崩溃,那时候也不会用Windbg, 后来用Visual Studio启动Wireshark, 也是偶尔报错,这个时候可以看到堆栈,只记得当时是在一个很正常的内存分配或者释放的时候出现崩溃。那么总结为两点:偶尔重现,那么也就是我们常说的还能跑起来,跑不起来那么就重启进程,重启进程无效,那就万能方法重启机器。这原创 2021-08-08 14:34:20 · 3306 阅读 · 3 评论 -
谈一谈Windows中的堆
如果在Windows中编程应该了解一些Windows的内存管理,而堆(Heap)也属于内存管理的一部分。Windows Heap下图参考<<Windows高级调试>>所画,并做了一些小小的修改。可以看出来程序中对堆的直接操作主要有三种:进程默认堆。每个进程启动的时候系统会创建一个默认堆。比如LocalAlloc或者GlobalAlloc也是从进程默认堆上分配内存。你也可以使用GetProcessHeap获取进程默认堆的句柄,然后根据用这个句柄去调用HeapAlloc达到在系统原创 2021-07-28 16:02:53 · 2254 阅读 · 0 评论 -
从一个单元测试用例来说说编程中的编码问题
在编程中,大多数程序员都离不开编码问题: 系统的默认区域和语言设置,代码文件的编码,以及代码中字符串的编码。编码简述以及Windows默认配置一提到编码大家最熟悉的莫过于ASCII(American Standard Code for Information Interchange), 其采用7个bit表示128个字符,包含了常见的英文字符、数字,控制字符等。 但是ASCII不包含中文,日文等文字的编码,便出现了针对中文的编码GB2312,GBK等编码,针对日文的Shift_JIS编码,他们都兼容ASC原创 2021-07-10 17:38:59 · 554 阅读 · 2 评论 -
free一个合法的地址也会导致crash?
场景描述在Windows平台上使用C++开发了一个服务,其中组合了各种各样的第三方组件,一般以lib/dll和头文件的形式使用。有这样一种场景,如下图所示,应用程序申请了一段内存ptr, 但在调用lib.dll的函数接口中其调用了free(ptr)。一般来说我们也尽量避免在一个组件中申请内存,而在另一个组件中释放,这里恰巧是一个bug导致了跨组件的内存申请和释放。那么请各位读者思考一下,这样会有问题吗?如果你是一个老司机,也许已经发现,在某些情况下会在调用free(ptr)的时候导致程序crash。原创 2021-03-06 21:59:18 · 587 阅读 · 0 评论 -
实现一个Windows服务
你是否想过要实现一个Windows程序,可以让它在系统启动的时候自动运行?或者后台运行,不显示界面?或者希望运行的时候能够方便的指定权限?那么Windows服务可以满足你的需求。本文主要介绍如何用C++编写一个具有监测功能的Windows服务。先根据以下三点进行讲解:Windows服务是如何管理和运行的?如何实现和使用Windows服务?如何实现一个具有监测功能的Windows服务?Windows服务控制管理器Windows控制服务管理器(Service Control Manager)主要原创 2021-01-17 09:00:51 · 2093 阅读 · 0 评论 -
“操作无法完成,因为其中的文件夹或文件已在另一个程序中打开”解决方法
有时候,当我们删除某个文件夹的时候,提示操作无法完成,因为其中的文件夹或文件已在另一个程序中打开。 如下图所示:这个时候我们一般会尝试如下的操作:先看看是不是有程序正在使用这个目录下的文件,比如 Visual Studio,可是,有时候我们关闭了程序后,可还是会继续提示这样的错误或者继续删除目录下的其他文件,直到发现是哪个文件无法删除,然后再想想是不是有其他程序打开了呢?如果还是找不到/想不到呢?终极方法登出账户或者重启机器,好吧,这个是万能解决方法。不过作为一个程序员应该有更加精准的方法,原创 2020-12-06 13:52:54 · 10000 阅读 · 1 评论 -
配置PDB符号文件服务
配置PDB符号文件服务器的想法刚入职的小木,前不久刚刚解决了一次crash问题《Windbg分析程序崩溃实践》。 小木没有松懈,继续进行项目代码和Debug技术的学习,同时也思考了一个问题**“产品每隔一段时间就会发布新的版本,当出现Crash问题的时候得手动去拷贝响应版本的pdb文件到本机进行调试,有没有什么方式可以实现自动化呢?”** 嗯,小木是一个合格的程序员,程序员就是致力于让重复的工作自动化。小木继续想,如果能把产品每次发布的pdb文件存储到一个服务器,就像微软的symbol server原创 2020-11-21 20:05:30 · 936 阅读 · 2 评论 -
C/C++编程教训----函数内静态类对象初始化非线程安全(C++11之前)
不少程序员在编写程序的时候,会使用函数内静态(static)变量,既能满足函数内这个变量可以持久的记录某些信息,又使其访问范围的控制局限于函数内。但函数内静态类对象初始化是非线程安全的。问题背景在我们产品中对log4cxx做了一些简单的封装 (采用VS2005编译),其中会调用到getWarn这个接口。由于这个函数存在非线程安全的问题,导致程序Crash。为了更好的描述问题,博主后面采用一个简单的例原创 2017-09-03 16:57:59 · 3427 阅读 · 1 评论 -
Windows中实现不依赖账户登录的开机启动程序
在Windows中很多的任务,我们希望能够在Windows 启动之后自动运行。举个例子,公司有个订饭系统,基本每天都需要登录去订饭,于是写一个脚本实现自动订饭。可是你的电脑每天要关机,当然不希望开机后还需要手动运行这个订饭脚本了。于是此时我们要将其这种脚本实现为开机自动启动脚本。 但要注意本文要讲的开机启动的程序,是在用户还没有登录的情况下实现启动的。换句话说,本文描述的开机启动的程序运行在Ses原创 2017-05-12 14:23:00 · 23812 阅读 · 1 评论 -
Loader Lock引起的一个Bug
在Windows中,让程序模块化实现的一种方式,就是让其实现为动态链接库。然后在主程序启动的时候隐式或者显示的去加载动态链接库。但是如果不恰当的编写动态链接库的DllMain函数,将会引起意想不到的Bug哦,比如典型的Loader Lock死锁问题。这不,我们产品中就碰到了一个由于Loader Lock而引起的Bug....1. 背景介绍 当主程序在启动的时候,隐式或者显原创 2014-10-13 15:29:34 · 4950 阅读 · 1 评论 -
Windbg调试----Windbg入门
Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。相关资料本人也是在维护和开发产品的过程中使用过Windbg,但并未对Windbg进行过系统和深入的学习,也通过这一系列的博客来完善自己对Windbg以及周边知识的理解与使用。我也列出自己正在或者即将阅读的书/资料与原创 2016-08-05 13:26:41 · 64238 阅读 · 3 评论 -
Windbg局部变量显示不正确
Windbg中局部变量显示不正确原创 2016-08-17 13:25:53 · 2423 阅读 · 2 评论 -
Windows程序Dump收集
发布给客户的程序,出现问题后,通过Debug Log经常很难分析出原因。比如说程序崩溃,程序死锁,内存泄漏等,这个时候从客户那里收集程序Dump,本文主要描述了几种收集dump的工具。adplus收集Dumpadplus是windows 调试工具集中的一个工具,安装了WDK或者Windbg后在安装目录都有。现在很多的OS 都是64位了,但有时候Crash的程序是32位,有时候Crash的程序是64位原创 2017-01-12 15:14:10 · 1559 阅读 · 0 评论 -
Windbg无法捕获strcpy_s crash时的函数调用栈的研究
问题描述在一年前,发现产品的windows service总是崩溃,但每次用windbg attach或者adplus产生dump,总是不能捕获到程序出错时候的栈,而且crash的时候只能看到少数甚至只剩一个线程。后来用windbg单步调试终于找到的罪魁祸首,原来是出错在strcpy_s这个函数。但是为什么直接用windbg attach或者adplus没法获取第一现场呢?当程序比较简单的时候原创 2017-01-22 09:46:31 · 1743 阅读 · 0 评论 -
让应用程序只启动一次
在编写应用程序,有时候会有 让应用程序只启动一次的 要求。一. 命名的内核对象 利用 内核中的命名对象 名称不能重复这一特性,来实现 应用程序的只启动一次的请求。 以Mutex为例,可以利用CreateMutex函数:HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的原创 2012-07-09 11:10:03 · 2443 阅读 · 0 评论 -
Win7程序提升权限
在Windows Xp以及之前的Windows版本中,当具有管理员权限的账户登录后,创建一个安全令牌(security token),之后其他应用程序启动后将会具有这个令牌,继承管理员账户的高权限,从而更容易对系统造成破坏。于是在Windows vista之后的版本中进行了改动,具有管理员权限的用户登录之后,除了创建安全令牌之外,还会创建一个经过筛选的安全令牌(将只被授予标准用户的权限)。原创 2012-08-13 15:49:37 · 7400 阅读 · 11 评论 -
修改IP、DNS、MAC工具VC源码实现
实验室IP和MAC绑定,而且经常来回于各个实验室和宿舍,频繁的地址切换,带来了相当的烦恼。想做这样一个工具是很久以前的想法,可到现在都没有做;没有行动的想法都是空谈,抱着锻炼自己行动力的决心,完成了这个小工具。一.工具介绍 工具界面展示: 本工具主要功能: (1)能够找出所有的网卡适配器,并显示适配器的IP、MAC等信息 (2)能够修改IP、原创 2012-06-15 23:04:51 · 13751 阅读 · 12 评论 -
内存泄露、内存溢出以及解决方法
内存泄露是指程序在运行过程中动态申请的内存空间不再使用后没有及时释放,从而很可能导致应用程序内存无线增长。更广义的内存泄露包括未对系统的资源的及时释放,比如句柄等。内存溢出即用户在对其数据缓冲区操作时,超过了其缓冲区的边界;尤其是对缓冲区写操作时,缓冲区的溢出很可能导致程序的异常。一.内存泄露“知己知彼,方能百战不殆”,如果我们能够比较清楚的了解在编程的时候哪些情况容易导致内存泄露,通原创 2012-05-10 14:30:56 · 68639 阅读 · 3 评论 -
逃逸的小球(BALL Escape)
由于最近要找工作,要将自己浸泡在编码的环境中热身,也抱着认真学习MFC精神的意图编写了这个小程序;本文章重在锻炼MFC中绘图、按键控制,编写过程中也遇到了一些困难,尤其是第四节提到的关键技术攻克,还望各位大侠指点。一. 功能介绍此应用程序具有一个红球和30个蓝球,用户按F2开始游戏,通过键盘方向键控制红球走向避免和篮球进行碰撞,记录红球逃逸时间,测试用户的应变能力;背景音乐采用经典魂斗原创 2012-06-09 01:31:46 · 3418 阅读 · 4 评论 -
程序RPC 1726错误问题的追踪
最近在客户环境中碰到了一个头疼的问题,一个节点通过RPC连接到另一个节点成功,但是在发送RPC报文的时候,却返回了1726错误。错误信息 先来看看MSDN的解释,"这个远程调用失败了",这句话信息含量真是太少了啊,出现错误我肯定知道是远程调用失败了啊。RPC_S_CALL_FAILED1726 (0x6BE)The remote procedure call failed原创 2015-08-21 11:08:19 · 2568 阅读 · 0 评论 -
Visual Studio的工程依赖
今天在查看Visual Studio中A工程的时候,发现在VS链接页面的Command链接了B.lib静态库,可是我找遍了配置选项,也没找到配置的地方啊!!!经过探索发现,原来是工程依赖隐含了这个条件。 也就是说工程依赖至少实现了一下两个功能: (1) 定义了工程编译的顺序,比如A工程依赖B工程,则编译A工程的时候回去先编译B工程 (2) 隐含了静态链接Lib文件,比如原创 2015-10-09 16:23:11 · 3057 阅读 · 0 评论 -
Windows命令行无法删除文件
最近负责我们团队的自动化测试工作,在一个测试用例中,需要将一个病毒拷贝到测试机上,扫描过后,清理现场,通过命令行命令删除病毒。命令执行和命令结果如下:C:\test\virus>del virus.iniC:\test\virus\virus.iniAccess is denied.居然出现了Access Denied,分析步骤如下(自己真是傻傻分不清楚啊):(1) 手动从Wind原创 2013-12-30 16:05:56 · 2214 阅读 · 0 评论 -
“Internet连接共享访问被启用时,出现了一个错误” 解决方法
本人电脑Win7,前段时间还能共享本地连接给无线上网,现在共享的时候却莫名的出现了错误:“Internet连接共享访问被启用时,出现了一个错误”。通过查找得到共享需要开启服务"Internet Connection sharing",在运行中输入services.msc,进入服务管理界面,企图打开服务"Internet Connection sharing",打开失败!!!授人以鱼不如授人原创 2012-05-31 11:27:43 · 170045 阅读 · 18 评论 -
hosts文件配置
hosts文件位于" C:\Windows\System32\drivers\etc "目录下,用于转换名字与IP地址的转换。 在浏览器中通过域名访问网站,首先查看hosts文件中是否存在域名与IP的地址转换,如果存在则直接根据IP地址进行访问;否则向DNS服务器发送请求,根据返回结果中的IP进行访问。 那么hosts文件带来了哪些用途呢?1. 提升了网站的访问速度原创 2012-06-29 15:57:27 · 17716 阅读 · 1 评论 -
SQL Server 2000安装程序配置服务器失败
因为在Windows Server2003上进行反复的重启安装进行尝试,花费了太多时间,所以记录下来帮助别人,同时也为自己保留一份记录。错误信息在安装SQL Server 2000过程中,出现错误提示:"SQL Server 2000 安装程序配置服务器失败,参考服务器错误日志和C:\Windows\sqlstp.log了解更多信息。"解决方法安装失败首先想原创 2012-09-01 20:09:13 · 24465 阅读 · 0 评论 -
MFC双缓冲区重绘克制闪烁
MFC在控件中进行绘图,动态的图型或者窗口的一些操作都会进行重绘。重绘过程先刷新绘图的控件背景,然后在OnPaint方法中进行图形绘制。这会引起一个问题:当刷新后再绘制视觉上会产生闪烁的效果。 在先前的一篇博客中(碰撞的小球,http://blog.csdn.net/cjf_iceking/article/details/7647062),刚好碰到了这样的问题。原先采用背景色覆盖当前位置原创 2012-06-24 16:57:39 · 5238 阅读 · 0 评论