自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows驱动编程关于IRP串行处理的一些函数的说明

typedef struct _KDEVICE_QUEUE {                                        //IRP队列来实现串行  CSHORT Type;  CSHORT Size;  LIST_ENTRY devicelisthead;  KSPIN_LOCK Lock;  BOOLEAN Busy;  } KDEVICE_QUEUE, *PK...

2018-09-14 15:53:24 457

原创 Windows驱动编程(关于IoCopyCurrentIrpStackLocationToNext和IoSetCompletionRoutine以及IoCallDriver)

首先看看IoCopyCurrentIrpStackLocationToNext的实现:#define IoCopyCurrentIrpStackLocationToNext( Irp ) { \ PIO_STACK_LOCATION __irpSp; \ PIO_STACK_LOCATION __nextIrpSp; \ __ir...

2018-09-13 16:41:07 780

原创 字节对齐

用的最多的两个方法1:#pragma pack(push,n)     #pragma pack(pop)其中上一句是设置字节对齐的参数n,下一句是取消该字节对齐设置。 2.__declspec(align(n))这一句也是设置字节对齐不过这一句最常用的方式是在结构体内部指定某一特定的成员的起始偏移地址。测试代码如下:#pragma pack(show)    //...

2018-08-03 14:49:48 602

原创 windows GDI编程中关于窗口和视口,逻辑坐标和设备坐标的转换

映射方法(Mapping Mode)逻辑单位坐标轴方向MM_TEXT(默认方式)1 pixelX轴正方向朝右,Y轴正方向朝下MM_LOMETRIC0.1 mmX轴正方向朝右,Y轴正方向朝上MM_HIMETRIC0.0

2017-11-15 17:12:53 750

原创 关于库函数里申请的内存空间在库函数外释放的问题的一些总结

其实之前就碰到过这种问题,只不过当时的做法是学了很多windows库函数的做法:假如现在需要调用int fun(char * pData);函数从库里面取得一段数据。1.先调用fun(NULL)一次,返回值是填充所取数据所需的内存空间的大小(一般是字节数);2.根据返回的字节数大小,申请内存空间,再次调用fun(pData);这次返回的数据就填充在了pData里了。3.用完pDat

2017-10-23 17:06:25 1488

原创 C++ string的COW和SSO

还记得书本上的关于深拷贝和浅拷贝的问题吗?如果自己写的一个类TestClass,采用的是默认的构造函数,或者采用自定义的构造函数(但是没有实现深拷贝)。那么下面的代码:class TestClass{public:char * p;};TestClass a;TestClass  b(a);TestClass  c = a;上诉都是浅

2016-09-30 11:36:43 4318

原创 大端字节(big-endian)和小端字节(little-endian):到底哪些地方要注意字节顺序

引起我对这个问题的思考的原因是因为unicode的编码格式UTF-8,UTF-8是没有字节顺序的。这个编码格式会把unicode字符集中的一个字符编码成1个或者多个字节。而UTF-8编码格式是经常用于网络传输的格式。如:XML文档大多数都是用的UTF-8格式存储的,这样利于网络传输。那么问题来了既然UTF-8把一个字符可能编码成了2个或3个字节,代表这个字符的2个或3个字节的编码为什么没有字节顺序

2016-03-09 09:34:59 1148

原创 MFC中的WM_NOTIFY消息的反射

在父窗口收到子控件的WM_NOTIFY通知消息后的处理流程,MFC源代码如下:BOOL CWnd::OnNotify(WPARAM, LPARAM lParam, LRESULT* pResult){ ASSERT(pResult != NULL); NMHDR* pNMHDR = (NMHDR*)lParam; HWND hWndCtrl = pNMHDR->hwndFrom;

2016-03-08 15:34:23 856

原创 MFC中关于基于对话框的应用程序的WM_COMMAND消息的流动路径

网上面很多关于WM_COMMAND消息在基于文档视图模型的APP中的流动方向的讲解,但是我在项目中做的都是基于对话框的APP,所以这里就只介绍WM_COMMAND在对话框中的流动方向。如果对话框里有个按钮,鼠标在按钮上点击后所发生的事情如下:1.鼠标在按钮上点击一下。2.系统产生WM_LBUTTONDOWN消息和WM_LBUTTONUP消息。说明:如果这两个消息都在在按钮上触发的(

2016-03-05 16:59:17 1897

原创 关于”unicode字符是2个字节“这句话的讨论

很多人,即使是有一些项目经验的人,都说过这句话。但是如果深入的理解什么是unicode之后就会知道,原来我们经常说的这句话“unicode字符是2个字节”这句话是有问题的。要说清楚这个问题,首先就要说清楚unicode到底是什么。unicode是一个标准,也可以说是世界上的语言字符和数字映射的一种标准。它没有限制字符的数量,但是可能这个标准规定的映射只是映射了一部分字符。每个字符映射一个c

2016-02-26 13:58:36 10827

原创 ANSI和unicode编码

看到笔记本上的关于这两个概念的比较,感觉这个知识点还是得记下来。1.首先要说明ascii和ANSI的区别。ascii的全称为:American Standard Code for Information Interchange中文解释为:美国信息交换标准码。ANSI的全称为:AMERICAN NATIONAL STANDARDS INSTITUTE中文解释为

2016-02-25 20:03:00 1949

原创 关于WaitForMultipleObjects函数监测事件状态的问题

多个内核对象被触发时,WaitForMultipleObjects选择其中序号最小的返回。而WaitForMultipleObjects它只会改变使它返回的那个内核对象的状态。这儿又会产生一个问题,如果序号最小的那个对象频繁被触发,那么序号比它大的内核对象将的不到被出理的机会。 为了解决这一问题,可以采用双WaitForMultipleObjects检测机制来实现。这是在百度百科上

2016-02-23 17:32:23 787

原创 问题:为什么OVERLAPPED结构中的event必须得是手动的event

上网查了下关于这方面的讨论,貌似都是一句"必须得是手动event",没有对这个必须的条件进行解释。把问题写在这里,自己能时不时的思考一下。也希望有答案的朋友们可以留言。

2016-02-23 17:25:24 580

原创 关于GetOverlappedResult函数的一些知识

之前在写重叠I\O的代码的时候,记得那时是从网络上拷贝的代码例子。在关于重叠操作的等待结果时,一般都是如下的过程:先  调用waitformultipleobject或waitforsingleobject函数来等待某一个I\O请求绑定的事件对象的激活。等到激活事件对象后,再调用GetOverlappedResult函数取得重叠I\O的结果,这里GetOverlappedResult的返回值一

2016-02-20 15:52:53 12443

原创 socket的overlapped(重叠) I\O和其他socket I\O模型的区别

在刚开始接触socket I\O模型的时候,一眼看去,好像WSAEventSelect模型和overlapped I\O的模型是差不多的。看网上的示例代码,都是先把一个事件对象和socket绑定,然后等待事件对象的激活再进行相应的操作。但是经过仔细研究之后发现两者的差别是非常之大的。区别:1.发起I\O请求的流程:WSAEventSelect模型:是在绑定的socket上有注册过的感兴

2016-02-20 10:58:01 1317

原创 阻塞socket和非阻塞socket(二)

非阻塞socket:一般在项目中我们很多情况下都是有多个socket传输数据,而管理多个socket有几种I/O模型。如select模型、WSAAsyncSelect模型、WSAEventSelect模型、Overlapped I\O模型、完成端口等等。根据项目的具体的情况选择相应的I\O模型。我在项目中用到最多的就是WSAAsyncSelect模型、WSAEventSelect模型这

2016-02-19 10:53:56 705

原创 阻塞socket和非阻塞socket(一)

刚开始做项目时,要用到socket通信。那时为了弄清socket编程做了几个实验,主要是针对send和recv在几种特殊的情况下的返回值。阻塞socket:   特殊情况(1):在接收端和发送端正常频繁的接受和发送时,突然关闭接收端的socket(优雅的关闭,调用closesocket函数),此时的发送端的send函数返回-1,WSAGetLastError 的编码为10054.代表W

2016-02-17 20:18:41 922

原创 新的开始

之前一直想着要写技术博客,但是却一直没有成行。总觉得用纸质的笔记本记录的东西更加亲切和自然,但是自从昨天提了离职后开始想着翻阅一下笔记本,却发现只有文字的记录。想着可能一年两年的自己看着文字就能记起来的知识,可能再时间长一点就不会这么容易了。  趁现在刚好有点时间,把笔记本上相对较为混乱的文字记录再整理一遍,让自己再复习一遍的同时,也分享给大家。

2016-02-17 15:59:02 266

空空如也

空空如也

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

TA关注的人

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