自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 A trap about .net asynchronous programming

An article about asynchronous programming which results in deadlock.

2016-10-20 16:46:08 355

原创 mysql编译问题集

一、环境操作系统:lubuntumysql版本:mysql5.1.34二、问题1、No curses/termcap library found原因:缺少ncurses库解决方法:apt-get install libncurses5-dev2、configure: error: C++ preprocessor "/lib/cpp" fails sanit

2015-09-21 16:30:15 1528

原创 Java异常丢失原因之猜想

先来看段代码:public class ExceptionHandler { public ExceptionHandler() { } boolean testEx() throws Exception { boolean ret = true; try { ret = testEx

2015-09-16 14:11:35 498

原创 Windbg调试异常

总结了在windbg中对异常发生位置进行迅速定位的步骤。

2014-04-08 20:36:30 3762

原创 CoInitialize浅析二

最近工作比较忙,在粗略分析了CoInitialize之后我们一直没有再深入研究,下面言归正传。前面我们初步了解到了CoInitialize其实是通过调用CoInitializeEx来实现功能的,而后者最终调用了wCoInitializeEx函数,如果能进一步了解这个函数的内部实现,那么我们对COM环境的初始化过程就比较清晰了。好,我们下面继续看wCoInitializeEx的汇编代码,这次我们分段

2011-11-21 23:56:38 4039 3

原创 CoInitialize浅析一

大家都知道程序中若要使用COM组件则必须要先调用CoInitialize,该函数主要是用来初始化COM运行环境。但这个函数的作用域是以线程为单位还是以进程为单位呢?也许大家已经通过测试程序摸索出答案,没错,是以线程为单位。今天我们就稍微再深入一下,通过分析CoInitialize的具体实现来印证我们的想法。我们先来看看CoInitialize的汇编769B2A24

2011-11-15 14:58:44 21241

原创 VC在debug版和release版中分配堆的区别

问题现象及测试代码     前几天有同事无意中用debug版的主程序调用了release版的dll中的某个输出函数,该函数new了一块内存并将指针返回给主程序并由后者释放,主程序在调用delete释放内存时断言失败。在排查问题时,同事念叨了一句“难道debug版和release版分配的内存不一样?”,这个问题我之前的确没有注意过,于是便进行了简单探索。本文内容主要针对VC6进行探索,其他版本V

2011-10-27 14:25:41 5255

原创 常用汇编对照

本文用来记录和积累常见汇编对应的C语句。

2011-08-12 14:24:28 637

转载 对金山卫士界面的摸索

<br />http://bbs.code.ijinshan.com/viewthread.php?tid=632&extra=page%3D1

2011-01-29 12:44:00 686

转载 最近写的一个关于金山卫士主界面的简单分析

<br />http://bbs.code.ijinshan.com/viewthread.php?tid=605&extra=page%3D2

2011-01-29 12:43:00 552

原创 ddk无法编译utf-8编码方式的源文件

ddk无法编译utf-8编码方式的源文件

2011-01-10 10:27:00 552

原创 说说前两天干的搓事!

代码未编译进来导致调试器找不到相应的符号。

2010-12-30 11:32:00 486

原创 内核态可以修改常量?

今天发现一个很奇怪的现象,一个指针指向某常量,在用户态如果对该指针指向的内容进行修改程序肯定会崩溃的,但是在内核态程序却可以正常执行。经过测试,我发现在内核态当中如果修改了该指针所指向内存的内容,系统似乎会自动为其分配一块内存,后续的操作会在这块新分配的内存中生效,而原来那块常量所在的内存并不会被修改。

2010-12-24 15:33:00 632

原创 inf文件初探

摘要:本文讨论了仅支持右键安装Windows WDM驱动的inf文件的格式,介绍了相关规则、执行顺序和必需Section。关键词:WDM,INF一、简介INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。通过inf文件可以指示安装程序完成:1、文件的复制、删除和重命名操作;2、添加或删除注册表项;3、更新系统设置文件(如:Autoexec.bat、Config.sys、

2010-12-09 14:57:00 1279

原创 为串口过滤驱动加上显示串口收发内容的应用程序

最近顺带着进一步完善前面的串口过滤驱动,将过滤的内容能够在应用中显示以方便使用。我的方案是应用程序通过DeviceIoControl发送取过滤内容的请求,在驱动IRP_MJ_DEVICE_CONTROL的派遣函数中通过StartIo例程取列表中的数据;而列表中的数据则由驱动的IRP_MJ_READ的完成例程以及IRP_MJ_WRITE的派遣函数放入,从而达到将数据送到应用程序的目的。在修改过程

2010-01-31 15:20:00 1124

原创 ANSI_STRING和UNICODE_STRING的成员变量Length很重要

这几天灾在将前面写的那个简单串口过滤驱动进行小小的改动,原来程序只能在加载时挂接一个固定的串口,这就导致过滤驱动不能在实际当中使用。因此,决定将要挂接的串口的驱动名称通过应用程序调用DeviceIoControl传进来,但发现IoAttachDevice和IoAttachDeviceToDeviceStack始终返回STATUS_OBJECT_NAME_NOT_FOUND,为了这个折腾了好几天才解

2010-01-19 21:18:00 902

原创 一个简单的串口过滤驱动及一点体会

最近写一个简单的串口过滤驱动,代码如下:driver.h #ifdef __cplusplusextern "C"{#endif#include #ifdef __cplusplus}#endif#define PAGEDCODE code_seg("PAGE")#define LOCKEDCODE code_seg()#define INITCODE code_seg("

2010-01-13 21:57:00 2030

原创 如何在批处理文件中获取该批处理文件所处位置?

在批处理文件中获取该文件当前位置一般都用%cd%来获取,但在Vista下这个方法就不行了,我用了一个迂回的方法达到这个目的,不知道大家有没有更好的办法了。 @echo %0 >> %temp%/Install.tmp@for /F %%a in (%temp%/Install.tmp) do @set LocalPath=%%~da%%~pa@del /Q %temp%/Install

2008-05-07 16:14:00 947

原创 利用msscript control在程序向VB脚本传递自定义对象的另一法

在网上找了好多关于在程序中向VB脚本传递自定义对象的文章,一般都采用script control的AddObject方法,不过这个方法有个缺点,那就是在VB脚本中必须要知道程序传递给脚本的对象的名字,这样就使程序的扩充性受到了限制,我把我最近摸索的另一个方法跟大家共享一下。其实这里最关键的是要知道在VB脚本中,对象都要支持自动化,这样当程序要向VB脚本的函数或过程传递自定义对象参数时,这个对象

2008-04-04 23:21:00 1677

原创 修改文件夹的属性

最近在工作中需要修改由程序自己创建的文件夹的属性,在其安全属性中需要将Users用户组的权限改为完全控制, 原打算在CreateDirectory时指定SECURITY_ATTRIBUTES参数的,不过以前做程序时该参数一直使用NULL,从没有针对安全做过程序;同时,考虑到操作系统各版本的兼容,于是就直接通过cacls.exe来实现了。ShellExecute(NULL, NULL, "cac

2007-11-22 19:27:00 901

原创 Vista下UAC兼容程序开发的几点体会

1、当应用程序需要提升权限时UAC总是会提示;2、VC6编译的可执行程序默认是以“管理员”之类的较高的用户权限运行的;3、如果将VC6的工程直接转换至.Net2005,编译的可执行程序仍默认以“管理员”之类的较高用户权限运行的,这可能与工程中某些配置有关,如果有哪位大侠知道请告诉我。目前我解决这个问题的办法是在.Net2005中新建一个工程,然后将VC6工程下的各个类文件添加到新工程中,编译后的可

2007-08-31 22:53:00 1043

原创 sfilter的DriverEntry例程中创建的控制设备对象之作用

看了在filemon的DriverEntry例程中创建的设备对象类型是filemon自定义的,而sfilter的DriverEntry例程中创建的设备对象类型是FILE_DEVICE_DISK_FILE_SYSTEM。我把sfilter的DriverEntry例程中创建的设备对象改为自定义类型,编译后sfilter仍可以正常运行。然后我就进一步试验,我把sfilter的DriverEntry例程中

2007-02-05 19:58:00 1584 1

原创 写一个最简单的WDM驱动

虽然能在网上找到很多 所谓Hello World的WDM例子程序,但都含有太多功能性的东西,反而让初学者无所适从,我就有这个体会,现在把我自己的第一个Hello World程序放在这里。#include "ntifs.h"//驱动卸载例程,该例程也可以不定义。若不定义该例程驱动可以正常运行,但驱动不能动态卸载,只有重启机器才//能卸载驱动VOID Unload(IN PDRIVER_OBJECT

2007-02-02 23:18:00 1751

原创 搭建环境写驱动

一、安装Microsoft Visual C++6二、安装Windows DDK三、安装Compuware  DriverStudio四、 打开DDK Build Setting,点击Launch Program按钮自动调用Microsft Visual C++五、用Microsoft Visual C++打开工程,并编译生成驱动。注:可以使用Compuware DriverStudio中自带的工

2007-01-31 21:55:00 822

原创 IRP简介

IRP是一个内核“对象”,它是一个预定义的数据结构,带有一组对它进行操作的I/O管理器例程。I/O管理器接收一个I/O请求,然后在把它传递到合适的驱动程序栈中的最高驱动程序之前,分配并初始化一个IRP。一个IRP有一个固定的首部和可变数目的IRP栈单元块。IRP栈为向下生长的栈,具有先进后出的特点。IoGetCurrentIrpStackLocation获取指向当前栈单元的指针。 在许多情况下,使

2007-01-30 21:20:00 1649

原创 DRIVER_OBJECT和DEVICE_OBJECT的关系

从开始接触驱动以来,一直对DRIVER_OBJECT和DEVICE_OBJECT之间的关系很是困惑,经过一段时间的学习,大概了解了两者之间的关系。DRIVER_OBJECT是驱动程序在内核中的数据结构,每个驱动程序有唯一DRIVER_OBJECT,IO管理器使用驱动程序对象代表每个设备驱动程序,驱动程序描述了驱动程序的载入到内存什么地方,驱动程序的大小和它的主要入口点(MajorFunction数

2007-01-14 00:02:00 2088

原创 关于Windows中断的一点疑惑

最近在看微软的IRQL_thread,其中有关中断的几个地方不能太确定,先寒一个A thread’s scheduling priority and the processor’s current IRQL determine whether a running thread can be pre-empted or interrupted. In thread pre-emption, th

2006-12-17 12:35:00 1080

原创 MFC类库中几个常见类的使用须知

1、CString类在使用其GetAt(int) 成员函数时,应保证GetLength() > 0,否则会抛出异常;2、CFileDialog类的文件类型过滤应该写成这样的形式:DLL(*.dll)|*.dll||任意文件(*.*)|*.*||;注意,中间不能有空格;不同文件类型之间用||分隔; 其他类在后续使用中若碰到问题再做记录。

2006-07-21 14:52:00 1131

转载 面向对象软件设计的“开—闭”原则

1.什么是开闭原则        “开—闭”原则是指软件实体应当对扩展性开放,对修改关闭。即软件实体应该在不修改的前提下扩展,这个原则实际上为软件设计指明了目标。我们知道软件设计应当充分考虑软件的可维护性,即需求发生变化的时候软件结构能够灵活地适应这种变化。就评价软件的可维护性而言,“开—闭”原则提供了一个依据。实际上,设计模式的应用就是使软件的结构在某种程度上满足“开—闭”原则。2.“开—闭”原

2006-06-13 15:14:00 1426 1

转载 面向对象的设计原则-类设计原则

在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。 1. 开闭原则(the Open Closed Principle OCP)  一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、

2006-06-13 14:53:00 951

转载 面向对象的设计原则

单一职责原则(SRP)——分离耦合的职责就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合到一起,一个职责的变化可能会影响这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生的时候,会引起意想不到的破坏。 我们把职责定义为“变化的原因”。如果你能想到多于一个动机去改变一个类,那么这个类就有多于一个职责。  “开-闭”原则(O

2006-06-13 14:49:00 843

原创 我的同步串口类

头文件// SerialPort.h: interface for the CSerialPort class.// 类名: CSerialPort// 创建人: 郑新华// 创建日期:2005-7-13// 概述:该类封装了对串口的基本操作,目前为同步操作,日后逐渐完善为同步//       异步可配置状态///////////////////////////////////////////

2006-06-08 14:39:00 1766

原创 我的Base64编码类,实际使用中

头文件// Base64.h: interface for the CBase64 class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_BASE64_H__8FF94494_89EB_4F4D_A8B4_B97BC7A14062__INCLUDED_)#

2006-06-08 14:37:00 1178

转载 一位老工程师给年轻人的“十大忠告”

1、好好规划自己的路,不要跟着感觉走;  根据个人的理想来安排自己的生活,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,痛快一些,那么就需要慎重安排自己的的轨迹,从一个行业入手逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会以后,钱根本不是问题,频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是

2006-06-08 14:31:00 789

原创 将二进制数据放在XML文件中。

一、为什么要把二进制数据放在XML文件中?说到这个问题我想所有XML的好处都可以算作是将二进制数据放在XML文件中的好处了;此外,对于后续的文件解析工作,我们可以充分利用现在的XML的访问接口进行解析,从而降低了解析工作量,也就是说站在巨人的肩膀上。二、两个关键知识点1、XML是基于文本的,内容必须都是文本;2、Base64算法将输入的字符串或一段数据编码成只含有{A-

2006-06-08 13:28:00 5221

原创 使用FileSystemWatcher时应注意的两个小问题

1、FileSystemWatcher的Filter属性中,对于要监控的文件类型,应该以“*.文件后缀”的形式出现,如:*.xml;2、对于重复使用的FileSystemWatcher对象,如该对象作为成员变量时,每次开始监控时应该先执行.Created -= m_EventHandler的操作,然后再执行 .Created += m_EventHandler操作。其中m_EventHandl

2006-06-07 15:13:00 1562

原创 使用Microsoft Date And Time Picker Control 6.0(SP6)时要注意的小问题

注意:1、使用SetWindowText设置控件内容无效;2、设置控件内容时,应该按照年、月、日、时、分、秒的顺序进行设置,否则会抛出异常。

2006-05-31 15:08:00 12257 1

原创 使用SAX解析XML

为什么使用SAX?因为SAX的效率较高,占用内存小,内存使用量只为一个节点的大小,所以是轻量级XML解析工具。但也由此带来了一些负面的东西,SAX是只向前的和只读的。在数据的备份和恢复时,如果数据备份为XML形式的话,那么就可以用SAX了,因为DOCUMENT太巨大,如果备份的数据有上G的话,这根本就是不现实的。SAX的使用在StdAfx.h中添加:#import raw_i

2006-05-30 12:42:00 1832

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除