- 博客(54)
- 收藏
- 关注
原创 从ATL窗口销毁想到的对象生命周期管理
使用ATL窗口时,经常会手动销毁窗口,大致的代码如下: DestroyWindow(); m_hWnd = NULL;DestoryWindow()调用是同步的,函数返回时窗口已经被销毁。做为一个微软的好公民,手动将m_hWnd置为空是一个好习惯。 但是,这种做法是不合理的。因为m_hWnd是父类的成员,它的值应该由父类控制。其实,在某些情况下这种做法会产生一个隐
2012-04-22 20:35:24
1262
原创 深入了解WM_SIZE
在窗口大小发生改变时,系统往窗口发送WM_SIZE消息,WPARAM指出窗口新的状态,LPARAM给出窗口新的大小。窗口的状态有三种:SIZE_MINIMIZE,SIZE_MAXIMIZE,SIZE_RESTORED。系统根据当前窗口的状态,在产生WM_SIZE消息时指定不同的WPARAM。然而,系统如何知道窗口当前的状态。很显然,系统必须用一些内存保存窗口当前的状态。保存在哪里呢?
2012-03-04 22:36:15
16125
原创 z-order引出的问题
在窗口与窗口之间毫无重叠的情况下,根本不需要关心z-order。然而,当窗口之间出现重叠时,系统就需要通过一个标准来确定窗口的显示顺序。这个标准就是z-order。存在多个因素影响一个窗口的z-order: 1、窗口类型是否为TOPMOST; 2、窗口间的父子关系; 3、窗口间的owner关系; 4、是否为active状态。
2012-02-26 11:13:01
5386
3
原创 什么是AppID
在COM中,安全控制的最小单位是进程,每个进程都有对应的安全控制策略。进程的安全控制策略保存在注册表中,存储位置为:HKCR\AppID\。 AppID指的就是,是一个128位的GUID。该子键保存访问权限、启动权限等安全配置信息。开发COM组件时,可以在COM组件对应的CLSID子键下新建字符串类型的项,名称:AppID,值:该COM组件所在进程的AppID值。这样就表示该COM组
2011-10-19 21:21:56
12060
原创 使用ShellExcecute打开指定目录并选中指定文件的方法
语句如下: ShellExecute(NULL, _T("open"), _T("explorer"), _T("/select,\"f:\\TDDownload\\down=yes.zip\""), NULL, SW_NORMAL); 注意,第四个参数中路径
2011-10-11 10:02:32
1391
原创 套接字的关闭过程
通常我们调用closesocket关闭套接字,套接字的关闭过程,有以下三种情况: 1、取消没有进行的发送操作,系统在后台发起一个关闭过程,向对等方发送FIN报文,并等待对等方的FIN报文。整个关闭过程不会产生任何的事件(WSAEventSelect)和消息(WSAAsy
2011-09-23 23:30:39
4856
原创 套接字的属性
以前我总是将是否处于阻塞模式和是否可以进行异步IO操作混淆起来。以前,我认为可以进行异步IO操作的套接字必然不是处于阻塞模式;处于阻塞模式的套接字无法进行异步IO操作。最新比较正规地学习win socket开发,终于分清这两个概念。 其实,是否处于阻塞模式、是否可以进行
2011-09-21 22:38:37
2956
原创 你的“重叠IO”是真正异步的吗?
什么是同步IO?什么是异步IO?在windows下,一个IO读操作可以分为两大步:1、从IO设备读取数据,保存在系统的缓冲区;2、从系统缓冲区拷贝到用户的缓冲区。如果一个读操作的两个步骤都不在用户线程中执行,那么这个读操作就是异步的;只要有一个步骤在用户线程中
2011-09-21 21:09:07
3415
2
原创 关系依赖倒置原则
首先,解释几个概念。 高级组件、低级组件 假设有类A,类B。类A的方法中有调用了类B的方法。我们认为类A依赖于类B,类A是基于类B实现的。相对于类B而言,类A是“高级组件”。相对于类A而言,类B是“低级组件”。 所谓“关系依赖倒置原则”,是指
2011-09-06 22:55:59
528
原创 DllMain相关注意事项
1、在DllMain的DLL_PROCESS_ATTACH分支中,尽量只调用kernel32.dll中的函数。因为其他系统api可能依赖于其他dll,而那些dll有可能还没有被加载到进程空间中且依赖于当前DllMain所在的dll,这样会导致循环依赖; 其实,在用户进程
2011-09-06 22:49:31
940
原创 使用WTL::CBitmap时需要注意的一个事项
CBitmap::LoadBitmap可以从EXE模块中获取指定资源的位图句柄(HBITMAP),该函数内部使用WIN32 API:LoadBitmap加载资源。仔细查看API LoadBitmap的remark部分,可以发现该API加载后得到的位图是一个“设备相关的位图”。这样就存在一些缺陷:这种位图无法选入到打印机中;如果当前的系统配置改变,加载得到的位图也会跟着改变。本人在实际项目中
2011-06-20 11:34:00
1133
转载 条款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
571
原创 ATL的另一个陷阱
ATL早期提供了宏A2W,W2A进行编码转换,但是该组宏存在以下缺点:1、默认认为转换前的参数(A2W)、转换后的结果(W2A)的编码是ANSI;2、转换后结果保存在栈上。 该组宏无法满足我们从UTF8、UCS2之间的互相转换,并且有可能导致栈溢出。鉴于此,当我发
2011-05-30 12:11:00
1553
原创 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
5322
原创 线程退出时,其拥有的窗口资源也会被释放掉。
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
707
原创 ATL的BUG
CStringA strA(_T("");CStringW strW("");以上语句调用GetLastError()会返回ERROR_INSUFFICIENT_BUFFER.原因在于CString内部会调用WideCharToMultiByte.MultiByt
2011-02-20 15:09:00
801
原创 关于复用套接字
可以通过WSADuplicateSocket在进程内共享套接字,但是在什么时候调用closesocket关闭套接字,却没有明确的做法。 之前,我是在进程退出时统一关闭这些套接字。但是,这种做法会在极少数的XP+IE6环境下崩溃(必崩)。至今,原因未明。 由于套接字
2011-02-16 01:22:00
885
原创 IE下载流程之臆测篇
1、如何让IE关闭套接字? 返回0,或者返回SOCKET_ERROR并设置合适的错误码。 2、IE如何处理已访问过的URL? 如果当前访问的URL在很短的时间前也被访问过,那么IE会尝试从缓存获取结果。 如果通过返回0让IE关闭套接字的话,IE会认
2011-02-15 10:43:00
557
原创 单一内核、微内核
内核:操作系统的核心代码,且运行于内核模式下。 如果内核的所有模块都在同一进程中,就称为单一内核;如果内核的模块在不同进程中,就称为微内核。 WINDOWS NT系列的OS将一些非传统意义上的内核模块(如GDI)放在内核中,因此WINDOWS不是纯粹意义上的微
2011-01-06 14:07:00
1422
原创 Differences between WM_NOTIFY and WM_COMMAND
WM_COMMAND 用户的操作导致的消息,比如用户选择了某个菜单项、按下某个快捷键、点击某个按钮。程序员处理这些消息。 WM_NOTIFY 控件跟父窗口沟通的渠道。父窗口处理这些消息。 ==============================
2010-12-30 21:11:00
572
原创 窗口自绘
在做一些异形窗口时,往往会响应以下NC消息:WM_NCPAINT, WM_NCACTIVATE, WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE。但是,对于NC区的处理方式会受到系统版本及桌面主题的影响。最明显的一个例子是,在XP和WIN7下,窗口标
2010-12-30 14:50:00
2099
原创 ATL中修改文本控件的文本颜色
1、添加以下宏,处理WM_CTLCOLOR*消息 MESSAGE_HANDLER(WM_CTLCOLOR*, OnCtlColor) 2、在OnCtlColor中:LRESULT CAboutDlg::OnCtlColor(UINT /*uMsg*/, WPA
2010-12-13 11:08:00
751
原创 WinInet API的一些陷阱
1、虽然MSDN说InternetQueryDataAvailable、InternetReadFile这两个API是同步的,但实际上这两个API也可以异步调用。当调用这两函数时,如果返回FALSE,且GetLastError返回ERROR_IO_PENDING,那么表示这是一个
2010-11-30 21:17:00
785
原创 BHO开发中的IE事件响应原理
PS:本文适合于对虚表、模板等语法特性熟悉的朋友。ATL的IDispEventImpl简化了事件响应的编码流程。一般需要3个步骤:1、 继承IDispEventImpl:public IDispEventImplCSayHello, &DIID_DWebBrow
2010-10-20 20:45:00
4899
原创 不会崩溃的strcpy
lstrcpyn内部如下实现 LPTSTR lstrcpyn(LPTSTR pszDst, LPCTSTR pszSrc, int iMaxLength){ __try { int nLength = max(_tcslen(ps
2010-10-15 20:18:00
648
原创 存在真正的“提升进程(线程)权限”程序吗?
据我所知,从用户态角度来说,是不可能的。 网上流传的两个提升权限API :公开的AdjustTokenPrivileges or 未公开的RtlAdjustPrivliege其实只是将进程(线程)Access Token中已经拥有的特权(Previlege)从Disa
2010-10-12 17:37:00
1865
1
转载 [转自“看雪论坛”]RtlAdjustPrivliege (http://bbs.pediy.com/showthread.php?t=76552)
前言:今天逆向一个非常实用的函数RtlAdjustPrivliege这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息。先来看看这个函数的定义(Winehq给出):引用:
2010-10-12 17:26:00
8940
原创 访问权限
在MSDN中搜索ACCESS_MASK可以了解标准权限,对于对象相关的权限说明,可以搜索那些需要权限参数且与对象相关的API,比如OpenProcess,里面就有介绍进程对象相关的权限。
2010-10-09 17:00:00
476
原创 在用户态防止全局钩子注入
项目需要,研究了一个礼拜,防止全局钩子注入的功能基本实现。今天偶然在网路上搜索相关主题,发现“看雪论坛”有前辈早就讨论过这个问题,且提出了解决方案,思路与在下不谋而合。不过据我的分析,该前辈的解决方案还有些缺陷。至少应该从以下角度改进:1、当全局钩子的LoadLibraryE
2010-10-09 14:23:00
2190
原创 WINDOWS系统DLL专业网站
如果您想获取有关系统DLL的详尽信息,可以访问:http://dll.paretologic.com/index.php 该网站是微软合作伙伴,其对每个DLL的描述值得信赖。
2010-10-09 14:08:00
1172
转载 转自“看雪论坛”--NtQuerySystemInformation
ProcessExplorer原理分析之句柄处理 by sucsor/RCT1,如何获得各进程的句柄 使用NtQuerySystemInformation函数的SystemHandleInformation=16号功能. 其相关结构定义如下: typedef
2010-09-27 20:10:00
2525
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
1016
原创 什么是UDP连接数?这是一个错误的概念
做了一些实验,UDP连接数的概念终于搞清了,原来是大家乱取名称。360获取的UDP连接数,无非就是通过调用GetExtendedUdpTable获取,而MSDN对这个API的解释根本没有出现连接数字眼。MSDN只是说这个API会获取所有已绑定地址的UDP套接字。还有360忽略对s
2010-09-11 16:17:00
7723
转载 RFC3629
Network Working Group F. YergeauRequest for Comments: 3629 Alis Technol
2010-09-02 20:44:00
2357
原创 单精度浮点数(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
18866
2
原创 Windows中字体磅值的含义(草稿版)
在英式度量体系中 1磅=1/72英寸,对于17寸的CRT而言,大小为10磅的字体最适合阅读。假设字体大小的磅值是物理意义上的,那么当电脑外接一个投影仪时,由于系统的所有属性均没变,所以在投影仪上显示的字体的大小也是10磅。但是,投影仪离观看者的距离已经变长很多,相对而言字体就会显得很小,不适宜观看者的阅读。 WINDOWS为了用户能够在不同设备条件下取得同样的用户体验
2010-04-27 10:12:00
2490
原创 窗口背景的刷新问题
影响背景刷新的因素有:1、注册窗口类时,是否指定了hbrBackground;2、调用InvalidateRect时,第三个参数的取值。可以分为以下三种情况:1、未指定hbrBackgroundBeginPaint返回的PAINTSTRUCT的成员fErase为TRUE2、指定了hbrBackground且调用InvalidateRect时第三个参数为FALSE
2010-04-13 15:37:00
1119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人