C/C++
文章平均质量分 79
Jinhill
信息安全专家,中国银联移动支付国家标准制定专家组成员
展开
-
用Socket和MSHTML对象模型创建自己的浏览器
HTTP协议和WEB浏览器的诞生给我们的网络增加了更多的精彩。但在实际应用中我们可能会有不同的需要而不是单纯的使用浏览器,譬如在我们的应用程序中加入浏览互联网的功能。微软的ChtmlView类很方便的实现了网页浏览。但是它很不灵活,无法使用户动态地在网页上修改自己想要的元素。本文探讨一些方法使用Socket传输Html文档,利用微软的动态MSHTML对象模型实现一些浏览器的内部机制。 大家知道HT原创 2009-01-07 10:59:00 · 1272 阅读 · 0 评论 -
CHTMLView处理显示数据
不是通过指定navigate来DisplayHTML Code,而是把代码放在CString里,可以动态的改变Code而让CHtmlViewDisplay出来 用CHtmlView::GetHtmlDocumentMethod取得document对象的IDispatch接口,然后用IDispatch::QueryInterface找到IHTMLDocument2接口, 调用IH原创 2009-01-07 11:05:00 · 1766 阅读 · 0 评论 -
SSL连接建立过程分析(3)
2.12 SSL_accept SSL_accept()函数完成SSL协商的服务器端操作:/* ssl/ssl_lib.c */int SSL_accept(SSL *s) { if (s->handshake_func == 0) /* Not properly initialized yet */ SSL_set_accept_state(s); return(s->m原创 2009-01-08 09:32:00 · 5111 阅读 · 0 评论 -
ATL问题集
#1 如何使用控件不能改变大小?答:有时我们需要创建不可改变大小的控件,像那种在运行时没有界面的控件(例:时间控件,SysInfo 等),想做到这种功能的话,请把以下代码加入到控件类的构造函数: m_bAutoSize = TRUE; SIZEL size = {24, 24};AtlPixelToHiMetric(&size, &m_sizeExtent);m_sizeNatu原创 2009-01-09 10:57:00 · 2046 阅读 · 0 评论 -
如何禁用对 VisualC++ 中 CHtmlView 默认弹出式菜单
点击这里察看该文章的英文版: 236312 ([url]http://support.microsoft.com/kb/236312/en-us/)[/url]文章编号 : 236312 最后修改 : 2006年11月21日 修订 : 3.1 本页概要更多信息步骤来禁用默认弹出式菜单参考概要创建默认 CHtmlView Appwizard 应用。 当您右键单击 MicrosoftInternetE转载 2009-01-09 14:00:00 · 1818 阅读 · 0 评论 -
CHtmlView中如何禁用HTML页面的上下文菜单
1.添加"MyIEWnd.h"// MyIEWnd.h: interface for the CMyIEWnd class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_MYIEWND_H__348AB709_5BCD_4815_BE原创 2009-01-09 16:00:00 · 1398 阅读 · 0 评论 -
SSL连接建立过程分析(2)
2.6 SSL_CTX_set_default_passwd_cb[_userdata]()这个函数比较简单,就是设置SSL要加载的证书的口令,如果不设置的话加载证书时会出提示符要求输入口令的,这样在程序中使用就比较麻烦,该函数就是预先将口令保存,在读证书时自动使用。实现该功能的有两个函数SSL_CTX_set_default_passwd_cb()和SSL_CTX_set_default原创 2009-01-08 09:31:00 · 6103 阅读 · 5 评论 -
SSL连接建立过程分析(5)
2.14 SSL_readSSL结构(struct ssl_st)中的s2,s3指针分别指向SSL2和SSL3的状态结构,这些状态结构中都有用于读的rbuf,其中保存SSL会话接收到的原始数据,另外还有保存记录的rrec,用来保存解码后的数据。在SSL结构中有个指针packet是指向原始数据的。SSL_read()实现从SSL通道中读取数据,送到应用程序的数据是已经经过SSL解封装的了。原创 2009-01-08 09:52:00 · 4296 阅读 · 0 评论 -
SSL连接建立过程分析(6)
2.15 SSL_write SSL结构(struct ssl_st)中的s2,s3指针分别指向SSL2和SSL3的状态结构,这些状态结构中都有用于写的wbuf,写操作相对读操作要简单一些。SSL_write()实现向SSL通道中写数据,应用程序只需要向里写入明文数据,SSL通道自动对这些数据进行加密封装。/* ssl/ssl_lib.c */int SSL_write(SSL原创 2009-01-08 09:53:00 · 6194 阅读 · 0 评论 -
SSL连接建立过程分析(4)
2.13 SSL_connect SSL_connect()这个函数完成SSL协商的客户端操作:/* ssl/ssl_lib.c */int SSL_connect(SSL *s) { if (s->handshake_func == 0) /* Not properly initialized yet */ SSL_set_connect_state(s); return原创 2009-01-08 09:45:00 · 3712 阅读 · 0 评论 -
谈WINAPI和CALLBACK这两个宏
WINAPI和CALLBACK这两个宏有什么区别呢?_stdcall _cdecl _pascal _fastcall这些关键字是什么意思,有什么区别呢?首先看MSDN里给出的解释,不过有些语焉不详哦WINAPI ·Use in place of FAR PASCAL in API declarations. If you are writing a DLL with export转载 2008-11-17 17:37:00 · 995 阅读 · 0 评论 -
20个VC开发小技巧
//一、打开CD-ROMmciSendString("Set cdAudio door open wait",NULL,0,NULL);//二、关闭CD_ROMmciSendString("Set cdAudio door closed wait",NULL,0,NULL);//三、关闭计算机OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构OsVersi原创 2009-01-10 17:52:00 · 1015 阅读 · 0 评论 -
CTreeCtrl 右键选中节点并显示菜单
void C***Dlg::OnRclickTreeKey(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code here// 选中当前右键点击的节点POINT pos ;if(!GetCursorPos(&pos)) return ;m_KeyList.ScreenToCl原创 2009-01-12 12:28:00 · 1772 阅读 · 0 评论 -
MFC中用正则表达式进行有效性验证
正则表达式最实用的一个地方是验证用户输入。它可以轻松验证邮编、电话号码、信用卡号码——以及现实世界中各种类型的信息。一个正则表达式可以替换成打甚至上百行过程代码。UNIX 和 Web 编程语言如 Perl从一开始就有正则表达式,但在 Windows 世界或MFC,从来都是使用第三方库,一直到 .NET 框架才结束这个局面。因此现在 .NET 提供一个完整的正则表达式库,为什么不在MFC应用程序中使原创 2009-01-18 15:11:00 · 7778 阅读 · 0 评论 -
使用BHO定制你的IE浏览器
2006-08-15 05:00作者:朱先中出处:慧都控件网责任编辑:方舟 一、简介 有时,你可能需要一个定制版本的浏览器。在这种情况下,你可以自由地把一些新颖但又不标准的特征增加到一个浏览器上。结果,你最终有的只是一个新但不标准的浏览器。Web浏览器控件只是浏览器的分析引擎。这意味着仍然存在若干的与用户接口相关的工作等待你做――增加一个地址栏,工具栏,历史记录,状态栏,频道栏转载 2009-02-03 11:50:00 · 1371 阅读 · 0 评论 -
vc中的release和debug版本的区别
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此原创 2008-12-08 15:46:00 · 1436 阅读 · 2 评论 -
IE 浏览器ActiveX 控件创建过程
1. Activex 控件是怎么安装的一个HTML 中嵌入控件的例子object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width=转载 2009-02-25 17:51:00 · 2761 阅读 · 0 评论 -
获取IE (控件)的所有链接(包括Frameset, iframe)
IE 顶层 body 节点通过IHTMLElement->get_all 方法无法获取iframe 里面的节点列表 CComPtrIHTMLElement> body; CComPtrIDispatch> spDispCollection;body->get_all(&spDispCollection);所以要获取iframe/frame(frameset) 里面的节点列表的话, 则转载 2009-02-25 17:53:00 · 1814 阅读 · 0 评论 -
使用HttpSendRequest函数POST数据时应该注意的一点
测试用例代码 CString szHeaders; szHeaders ="EmployeeID: "+UserID+"/r/n"; szHeaders+="EmployeePassword: "+Password+""; // HTTPRequest Response;// memset(&Response, NULL, sizeof(HTTPRequest));// if (!MCHttp原创 2009-02-26 17:43:00 · 11770 阅读 · 1 评论 -
C调用汇编函数
11.asm: .386 .model flat , stdcall .code PUBLIC foo foo proc a : DWORD , b : DWORD mov eax , a add eax , b ret foo原创 2008-12-12 18:16:00 · 3292 阅读 · 0 评论 -
函数调用规范__cdecl和__stdcall的区别
__cdecl __stdcall C 和 C++ 程序的缺省调用规范 为了使用这种调用规范,需要你明确的加上 __stdcall (或 WINAPI )文字。即 return-type __stdcall function-name[(argument-list)] 在被调用函数 (C原创 2008-12-12 18:11:00 · 2236 阅读 · 0 评论 -
default lib conflicts with use of other libs
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library MSDN上的解释为:You are trying to link with incompatible libraries. Important The run-time原创 2008-12-22 10:18:00 · 1338 阅读 · 0 评论 -
CreateFileMapping的用法
测试创建和打开文件映射的时候老是得到"句柄无效"的错误, 仔细看了MSDN以后才发觉是函数认识不透, 这里把相关的解释翻译出来 HANDLE CreateFileMapping( HANDLE hFile, //物理文件句柄 LPSECURITY_ATTRIBUTES lpAttributes, //安全设置 DWORD flProtect,原创 2008-12-24 14:33:00 · 1778 阅读 · 0 评论 -
SSL连接建立过程分析(1)
Https协议:SSL建立过程分析web访问的两种方式:http协议,我们一般情况下是通过它访问web,因为它不要求太多的安全机制,使用起来也简单,很多web站点也只支持这种方式下的访问.https协议(Hypertext Transfer Protocol over Secure Socket Layer),对于安全性要求比较高的情况,可以通过它访问web,比如工商银行https:/原创 2008-12-26 16:43:00 · 43710 阅读 · 7 评论 -
URL字符串解析(UrlDecode vc)
#define IsHexNum(c) ((c >= 0 && c = A && c = a && c CString Utf8ToStringT(LPSTR str){ _ASSERT(str); USES_CONVERSION; WCHAR *buf; int length = MultiByteToWideChar(CP_UTF8, 0, str, -1,原创 2009-03-16 13:46:00 · 2188 阅读 · 0 评论 -
修改注册表开机自动启动程序
修改注册表开机自动启动程序HKEY hKey; char szFileName[256];GetModuleFileName(NULL,szFileName,256);RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE//Microsoft//windows//currentversion//run",&hKey);if(m_bAutoRun){原创 2009-03-24 16:51:00 · 1879 阅读 · 0 评论 -
字符串转换_BSTR/LPSTR/LPWSTR/Char
一、BSTR、LPSTR和LPWSTR在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。 那么什么是BSTR、LPSTR以及LPWSTR呢? BSTR(Basic STRing,B转载 2009-03-26 10:51:00 · 1110 阅读 · 0 评论 -
LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main错误的解决
最近写一个ATL的项目,最终realease的时候出现了这个问题,当时吓了一跳,后来发现了问题,代码没有错误是配置搞错了,因为debug没有任何问题。出错原因:使用了CRT函数,这些函数需要CRT启动代码,就会出现这种链接错误。因为Release配置的Preprocessor definitions中定义了_ATL_MIN_CRT,它把将CRT启动代码从Dll中删除了。最简单的办法就是工程设置中删原创 2009-04-03 16:05:00 · 4323 阅读 · 1 评论 -
NXCOMPAT选项和数据执行保护DEP
概述 在安全编码实践一中我们谈到GS编译选项和缓存溢出。缓存溢出的直接后果就是可能导致恶意代码的远程执行。GS选项存在自身的局限,例如,有若干方法可以绕过GS选项的保护。 在这篇文章里,我们会介绍另外一个非常重要的安全特性:数据执行保护,即DEP-Data Execution Prevention,以及与之对应的NXCOMPAT选项。 在栈溢出程序例子中,我们看到原创 2009-04-27 16:19:00 · 3100 阅读 · 0 评论 -
INNO SETUP卸载程序中加入自定义窗体(窗口)
INNO SETUP卸载程序中加入自定义窗体(窗口) [Setup] AppName=My Program AppVerName=My Program v.1.2 DefaultDirName={pf}/My Program [Files] Source: Files/*; DestDir: {app} [_Code] const bidDelAll = 1; bidSk原创 2009-05-05 12:03:00 · 2186 阅读 · 1 评论 -
服务程序中如何以当前登陆用户身份运行程序
开发中有时会遇到这样的问题,当服务程序需要使用某些功能时,由于用户的关系而受到限制,比如访问注册表的HKEY_CURRENT_USER键,使用网络等等,这时候就需要以当前登陆用户的身份去进行操作,通常会创建一个进程来完成需要的功能。如果使用CreateProcess来创建进程的话,新创建的进程和服务程序依然是相同的用户身份,还是无法达到目的,只有使用CreateProcessAsUser了。但原创 2009-07-20 11:07:00 · 1671 阅读 · 0 评论 -
VC应用程序之图标标题探究
首先是 图标问题: 1.改变应用程序图标: A.把你的ico拷贝到res文件夹下,将Mytest.ico删掉,将自己的*.ico重命名为Mytest.ico,然后编译运行程序就可以看到产生的Mytest.exe的图标变样了,哈哈^&^. B.代码的方法——将下面的代码段拷贝到CMytest.cpp下的BOOL CMytestApp::InitInstance(){...}中的最后原创 2009-05-06 14:47:00 · 1908 阅读 · 1 评论 -
如何将标记为可安全编写脚本和初始化的 MFC ActiveX 控件
默认,MFC ActiveX 控件不被标记为可安全编写脚本和可安全初始化。 该控件在 Internet Explorer 中运行该安全级别设置为中等或高时,这一明显。 在这两种模式任一,警告可能会显示控件的数据不安全,或者不在控件是可安全编写脚本来使用。 有一个控件可用于消除这些错误的两个方法。 第一个包括实现 IObjectSafety 接口的控件,并可用于更改它们的行为和成为"安全"如果在 I原创 2009-07-21 16:13:00 · 1793 阅读 · 0 评论 -
如何确定硬件 DEP 可用且已在计算机上配置
数据执行保护 (DEP) 是一套硬件和软件技术,可对内存执行额外检查,以防被恶意代码利用。除了显式包含可执行代码的内存位置外,硬件实施 DEP 会将进程中的所有内存位置全部标记为不可执行。有一种恶意代码攻击尝试从不可执行的内存位置插入代码并加以运行。DEP 可截获这些攻击并引发异常,以此来帮助阻止此类攻击。本文介绍硬件实施 DEP 的使用要求,并说明如何确认 Windows 中的硬件 DEP 是否原创 2009-07-28 17:43:00 · 2831 阅读 · 0 评论 -
实现和IE浏览器交互的几种方法的介绍
实现和IE浏览器交互的几种方法的介绍 浙江大学计算机系 胡朝晖 陈奇 俞瑞钊 ---- 1.引言 ---- 如何实现对IE浏览器中对象的操作是一个很有实际意义问题,通过和IE绑定的DLL我们可以记录IE浏览过的网页的顺序,分析用户的使用行为和模式。我们可以对网页的内容进行过滤和翻译,可以自动填写网页中经常需要用户填写的Form内容等等,我们所有的例子代码都是通过VC来表示的,采用的原理是通过和IE原创 2009-07-30 21:19:00 · 2632 阅读 · 0 评论 -
如何从 VC WebBrowser 应用程序中调用脚本函数
为了调用脚本函数存在的网页上,您必须使用自动化 ; 换句话说,IDispatch。 使用以下步骤来调用脚本函数从 Visual C++ 应用程序的网页上存在的: 获取在 HTML 文档的 IDispatch。 调用利用 IDispatch:: GetIDsOfNames 获取脚本函数的 ID。 调用 IDispatch:: Invoke 执行该函数。下面的 Visual C原创 2009-07-30 21:43:00 · 2828 阅读 · 0 评论 -
利用DIID_DWebBrowserEvents2接口接收WebBrowser事件
接收事件的途径依靠开发工具你创建客户应用程序,你可以接收事件通过不同的途径. 显然, 在Vb中接收事件同在VC中接收事件相比是如此不同和容易.在 C++ 应用中,你可以用不同的技术,通过使用 ATL, MFC, 或者标准C++.Visual Basic 中接收事件 Visual Basic是创建大多数类型应用的最轻松的工具, 所以我告诉你VB是处理事件最溶的工具时也不要惊奇. ATL 和 Vi原创 2009-08-02 09:44:00 · 6975 阅读 · 2 评论 -
VC将窗口置最前
windows下简单的调用Setforegroundwindow并不能将窗口置最前,我找到三种方法可以实现该功能。1、先置topmost,然后取消 SetWindowPos(HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); SetWindowPos(HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOM原创 2009-08-04 14:15:00 · 5822 阅读 · 1 评论 -
线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点
使用多线程技术可以显著地提高程序性能,本文就讲讲在程序中如何使用工作线程,以及工作线程与主线程通讯的问题。 一 创建线程 使用MFC提供的全局函数AfxBeginThread()即可创建一个工作线程。线程函数的标准形式为 UINT MyFunProc(LPVOID );此函数既可以是全局函数,也可以是类的静态成员函数。之所以必须是静态成员函数,是由于类的非静态成员函数原创 2009-08-08 23:33:00 · 1361 阅读 · 3 评论 -
NT系统下木马进程的隐藏与检测
在WIN9X中,只需要将进程注册为系统服务就能够从进程查看器中隐形,可是这一切在WINNT中却完全不同,无论木马从端口、启动文件上如何巧妙地隐藏自己,始终都不能欺骗WINNT的任务管理器,以至于很多的朋友问我:在WINNT下难道木马真的再也无法隐藏自己的进程了?本文试图通过探讨WINNT中木马的几种常用隐藏进程手段,给大家揭示木马/后门程序在WINNT中进程隐藏的方法和查找的途径。 我们知道,在W原创 2009-08-07 10:07:00 · 1427 阅读 · 0 评论