自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从ATL窗口销毁想到的对象生命周期管理

使用ATL窗口时,经常会手动销毁窗口,大致的代码如下:    DestroyWindow();    m_hWnd = NULL;DestoryWindow()调用是同步的,函数返回时窗口已经被销毁。做为一个微软的好公民,手动将m_hWnd置为空是一个好习惯。    但是,这种做法是不合理的。因为m_hWnd是父类的成员,它的值应该由父类控制。其实,在某些情况下这种做法会产生一个隐

2012-04-22 20:35:24 1251

原创 深入了解WM_SIZE

在窗口大小发生改变时,系统往窗口发送WM_SIZE消息,WPARAM指出窗口新的状态,LPARAM给出窗口新的大小。窗口的状态有三种:SIZE_MINIMIZE,SIZE_MAXIMIZE,SIZE_RESTORED。系统根据当前窗口的状态,在产生WM_SIZE消息时指定不同的WPARAM。然而,系统如何知道窗口当前的状态。很显然,系统必须用一些内存保存窗口当前的状态。保存在哪里呢?

2012-03-04 22:36:15 16078

原创 z-order引出的问题

在窗口与窗口之间毫无重叠的情况下,根本不需要关心z-order。然而,当窗口之间出现重叠时,系统就需要通过一个标准来确定窗口的显示顺序。这个标准就是z-order。存在多个因素影响一个窗口的z-order:       1、窗口类型是否为TOPMOST;       2、窗口间的父子关系;       3、窗口间的owner关系;       4、是否为active状态。

2012-02-26 11:13:01 5327 3

原创 什么是AppID

在COM中,安全控制的最小单位是进程,每个进程都有对应的安全控制策略。进程的安全控制策略保存在注册表中,存储位置为:HKCR\AppID\。    AppID指的就是,是一个128位的GUID。该子键保存访问权限、启动权限等安全配置信息。开发COM组件时,可以在COM组件对应的CLSID子键下新建字符串类型的项,名称:AppID,值:该COM组件所在进程的AppID值。这样就表示该COM组

2011-10-19 21:21:56 11859

原创 使用ShellExcecute打开指定目录并选中指定文件的方法

语句如下:    ShellExecute(NULL, _T("open"), _T("explorer"), _T("/select,\"f:\\TDDownload\\down=yes.zip\""), NULL, SW_NORMAL);    注意,第四个参数中路径

2011-10-11 10:02:32 1357

原创 套接字的关闭过程

通常我们调用closesocket关闭套接字,套接字的关闭过程,有以下三种情况:    1、取消没有进行的发送操作,系统在后台发起一个关闭过程,向对等方发送FIN报文,并等待对等方的FIN报文。整个关闭过程不会产生任何的事件(WSAEventSelect)和消息(WSAAsy

2011-09-23 23:30:39 4784

原创 套接字的属性

以前我总是将是否处于阻塞模式和是否可以进行异步IO操作混淆起来。以前,我认为可以进行异步IO操作的套接字必然不是处于阻塞模式;处于阻塞模式的套接字无法进行异步IO操作。最新比较正规地学习win socket开发,终于分清这两个概念。    其实,是否处于阻塞模式、是否可以进行

2011-09-21 22:38:37 2945

原创 你的“重叠IO”是真正异步的吗?

什么是同步IO?什么是异步IO?在windows下,一个IO读操作可以分为两大步:1、从IO设备读取数据,保存在系统的缓冲区;2、从系统缓冲区拷贝到用户的缓冲区。如果一个读操作的两个步骤都不在用户线程中执行,那么这个读操作就是异步的;只要有一个步骤在用户线程中

2011-09-21 21:09:07 3398 2

原创 关系依赖倒置原则

首先,解释几个概念。    高级组件、低级组件    假设有类A,类B。类A的方法中有调用了类B的方法。我们认为类A依赖于类B,类A是基于类B实现的。相对于类B而言,类A是“高级组件”。相对于类A而言,类B是“低级组件”。    所谓“关系依赖倒置原则”,是指

2011-09-06 22:55:59 513

原创 DllMain相关注意事项

1、在DllMain的DLL_PROCESS_ATTACH分支中,尽量只调用kernel32.dll中的函数。因为其他系统api可能依赖于其他dll,而那些dll有可能还没有被加载到进程空间中且依赖于当前DllMain所在的dll,这样会导致循环依赖;    其实,在用户进程

2011-09-06 22:49:31 916

原创 使用WTL::CBitmap时需要注意的一个事项

CBitmap::LoadBitmap可以从EXE模块中获取指定资源的位图句柄(HBITMAP),该函数内部使用WIN32 API:LoadBitmap加载资源。仔细查看API LoadBitmap的remark部分,可以发现该API加载后得到的位图是一个“设备相关的位图”。这样就存在一些缺陷:这种位图无法选入到打印机中;如果当前的系统配置改变,加载得到的位图也会跟着改变。本人在实际项目中

2011-06-20 11:34:00 1119

转载 条款18:避免使用vector

原文地址:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/0679f2ec71efa42363d09fcc.html做为一个STL容器,vector确实只有两个问题。第一,它不是一个STL容器。第二,它并不容纳bool。除此以外,就没有什么要反对的了。一个东西不能成为STL容器只因为会有人会说它是。一个东西要成为STL容器

2011-06-14 22:53:00 561

原创 ATL的另一个陷阱

ATL早期提供了宏A2W,W2A进行编码转换,但是该组宏存在以下缺点:1、默认认为转换前的参数(A2W)、转换后的结果(W2A)的编码是ANSI;2、转换后结果保存在栈上。 该组宏无法满足我们从UTF8、UCS2之间的互相转换,并且有可能导致栈溢出。鉴于此,当我发

2011-05-30 12:11:00 1487

原创 WSADuplicateSocket、WSASocket失败,错误码为WSAEINVAL(10022)

PS:最近又发现一种无法复用套接字的情况,修改一下。2011/10/11 16:24一、失败的原因:1、MS的解释    http://support.microsoft.com/kb/216603/en-us 2、目标进程和当前进程不在同一个se

2011-03-11 18:08:00 5253

原创 线程退出时,其拥有的窗口资源也会被释放掉。

http://msdn.microsoft.com/en-us/library/ms686724%28v=vs.85%29.aspx  Terminating a thread has the following results:Any resources o

2011-03-06 17:38:00 694

原创 ATL的BUG

CStringA strA(_T("");CStringW strW("");以上语句调用GetLastError()会返回ERROR_INSUFFICIENT_BUFFER.原因在于CString内部会调用WideCharToMultiByte.MultiByt

2011-02-20 15:09:00 789

原创 关于复用套接字

可以通过WSADuplicateSocket在进程内共享套接字,但是在什么时候调用closesocket关闭套接字,却没有明确的做法。 之前,我是在进程退出时统一关闭这些套接字。但是,这种做法会在极少数的XP+IE6环境下崩溃(必崩)。至今,原因未明。 由于套接字

2011-02-16 01:22:00 879

原创 IE下载流程之臆测篇

1、如何让IE关闭套接字? 返回0,或者返回SOCKET_ERROR并设置合适的错误码。 2、IE如何处理已访问过的URL? 如果当前访问的URL在很短的时间前也被访问过,那么IE会尝试从缓存获取结果。 如果通过返回0让IE关闭套接字的话,IE会认

2011-02-15 10:43:00 545

原创 InternetGetCookieEx

AYU说在IE6.0下,这个API会将ucs-2的字符串当成UTF-8处理,从而返回错误的长度。

2011-02-11 19:05:00 1766

原创 单一内核、微内核

内核:操作系统的核心代码,且运行于内核模式下。 如果内核的所有模块都在同一进程中,就称为单一内核;如果内核的模块在不同进程中,就称为微内核。 WINDOWS NT系列的OS将一些非传统意义上的内核模块(如GDI)放在内核中,因此WINDOWS不是纯粹意义上的微

2011-01-06 14:07:00 1397

原创 Differences between WM_NOTIFY and WM_COMMAND

WM_COMMAND 用户的操作导致的消息,比如用户选择了某个菜单项、按下某个快捷键、点击某个按钮。程序员处理这些消息。 WM_NOTIFY 控件跟父窗口沟通的渠道。父窗口处理这些消息。 ==============================

2010-12-30 21:11:00 563

原创 窗口自绘

在做一些异形窗口时,往往会响应以下NC消息:WM_NCPAINT, WM_NCACTIVATE, WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE。但是,对于NC区的处理方式会受到系统版本及桌面主题的影响。最明显的一个例子是,在XP和WIN7下,窗口标

2010-12-30 14:50:00 2086

原创 ATL中修改文本控件的文本颜色

1、添加以下宏,处理WM_CTLCOLOR*消息 MESSAGE_HANDLER(WM_CTLCOLOR*, OnCtlColor) 2、在OnCtlColor中:LRESULT CAboutDlg::OnCtlColor(UINT /*uMsg*/, WPA

2010-12-13 11:08:00 742

原创 WinInet API的一些陷阱

1、虽然MSDN说InternetQueryDataAvailable、InternetReadFile这两个API是同步的,但实际上这两个API也可以异步调用。当调用这两函数时,如果返回FALSE,且GetLastError返回ERROR_IO_PENDING,那么表示这是一个

2010-11-30 21:17:00 773

原创 BHO开发中的IE事件响应原理

PS:本文适合于对虚表、模板等语法特性熟悉的朋友。ATL的IDispEventImpl简化了事件响应的编码流程。一般需要3个步骤:1、  继承IDispEventImpl:public IDispEventImplCSayHello, &DIID_DWebBrow

2010-10-20 20:45:00 4878

原创 不会崩溃的strcpy

lstrcpyn内部如下实现 LPTSTR lstrcpyn(LPTSTR pszDst, LPCTSTR pszSrc, int iMaxLength){    __try    {        int nLength = max(_tcslen(ps

2010-10-15 20:18:00 637

原创 存在真正的“提升进程(线程)权限”程序吗?

据我所知,从用户态角度来说,是不可能的。 网上流传的两个提升权限API :公开的AdjustTokenPrivileges or 未公开的RtlAdjustPrivliege其实只是将进程(线程)Access Token中已经拥有的特权(Previlege)从Disa

2010-10-12 17:37:00 1849 1

转载 [转自“看雪论坛”]RtlAdjustPrivliege (http://bbs.pediy.com/showthread.php?t=76552)

前言:今天逆向一个非常实用的函数RtlAdjustPrivliege这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息。先来看看这个函数的定义(Winehq给出):引用:

2010-10-12 17:26:00 8921

原创 访问权限

在MSDN中搜索ACCESS_MASK可以了解标准权限,对于对象相关的权限说明,可以搜索那些需要权限参数且与对象相关的API,比如OpenProcess,里面就有介绍进程对象相关的权限。

2010-10-09 17:00:00 470

原创 在用户态防止全局钩子注入

项目需要,研究了一个礼拜,防止全局钩子注入的功能基本实现。今天偶然在网路上搜索相关主题,发现“看雪论坛”有前辈早就讨论过这个问题,且提出了解决方案,思路与在下不谋而合。不过据我的分析,该前辈的解决方案还有些缺陷。至少应该从以下角度改进:1、当全局钩子的LoadLibraryE

2010-10-09 14:23:00 2151

原创 兼容性问题

“林子大,什么鸟都有”,为了对广大用户负责,程序必须要有极高的兼容性。编写代码时,一定要考虑API所必须的系统版本,切记。

2010-10-09 14:13:00 399

原创 WINDOWS系统DLL专业网站

如果您想获取有关系统DLL的详尽信息,可以访问:http://dll.paretologic.com/index.php 该网站是微软合作伙伴,其对每个DLL的描述值得信赖。

2010-10-09 14:08:00 956

转载 转自“看雪论坛”--NtQuerySystemInformation

ProcessExplorer原理分析之句柄处理 by sucsor/RCT1,如何获得各进程的句柄  使用NtQuerySystemInformation函数的SystemHandleInformation=16号功能.  其相关结构定义如下:  typedef

2010-09-27 20:10:00 2464 2

转载 A Crash Course on the Depths of Win32™ Structured Exception Handling

Of all the facilities provided by Win32®operating systems, perhaps the most widely used but underdocumented is structured exception handli

2010-09-25 21:06:00 997

原创 调用约定明确了栈的恢复责任。嗯,是恢复责任,不是压栈……

调用约定明确了栈的恢复责任。嗯,是恢复责任,不是压栈……

2010-09-12 20:06:00 490

原创 什么是UDP连接数?这是一个错误的概念

做了一些实验,UDP连接数的概念终于搞清了,原来是大家乱取名称。360获取的UDP连接数,无非就是通过调用GetExtendedUdpTable获取,而MSDN对这个API的解释根本没有出现连接数字眼。MSDN只是说这个API会获取所有已绑定地址的UDP套接字。还有360忽略对s

2010-09-11 16:17:00 7654

转载 RFC3629

Network Working Group F. YergeauRequest for Comments: 3629 Alis Technol

2010-09-02 20:44:00 2306

原创 单精度浮点数(IEEE754)

单精度浮点数占据4个字节,4个字节的分配如下:(a)第一位为符号位,0表示正,1表示负;(b)第2~9位为阶码,采用移码表示;(c)第10~32位为尾数,采用原码表示。 (1)给定32位串,如何转换成十进制数假设内存中存在32位串:CD CC 08 41。因为INTEL CPU采用little endian存储方式,所以其真实的值为:41 08 CC CD。将其写成二进制形

2010-05-22 12:11:00 18527 2

原创 Windows中字体磅值的含义(草稿版)

      在英式度量体系中 1磅=1/72英寸,对于17寸的CRT而言,大小为10磅的字体最适合阅读。假设字体大小的磅值是物理意义上的,那么当电脑外接一个投影仪时,由于系统的所有属性均没变,所以在投影仪上显示的字体的大小也是10磅。但是,投影仪离观看者的距离已经变长很多,相对而言字体就会显得很小,不适宜观看者的阅读。      WINDOWS为了用户能够在不同设备条件下取得同样的用户体验

2010-04-27 10:12:00 2420

原创 窗口背景的刷新问题

影响背景刷新的因素有:1、注册窗口类时,是否指定了hbrBackground;2、调用InvalidateRect时,第三个参数的取值。可以分为以下三种情况:1、未指定hbrBackgroundBeginPaint返回的PAINTSTRUCT的成员fErase为TRUE2、指定了hbrBackground且调用InvalidateRect时第三个参数为FALSE

2010-04-13 15:37:00 1082

空空如也

空空如也

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

TA关注的人

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