编程
Tinna_zhang
目前从事云操作系统产品相关工作。
展开
-
动态链接库使用.def导出一个c++类的函数
1、导出函数的参数为char*时候,调用规约要使用__stdcall,使用__cdecl会报错。2、给win32程序添加.def的时候,要在项目属性-》连接器-》输入-》模块定义文件 里面添加你的def,才没有乱七八糟前缀的导出函数。比如:创建一个EnableKeyboard.def文件,里面包含下面内容,就是导出类里的Keyboard_Enable函数。LIBRARY"k原创 2016-05-20 18:18:30 · 4529 阅读 · 0 评论 -
inet_addr()和IN_ADDR
1、inet_addr()的功能是将一个点分十进制的IPv4转换成一个长整数型数(u_long类型)原文:The Windows Sockets inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the原创 2013-12-27 17:20:14 · 8203 阅读 · 2 评论 -
驱动蓝屏后简单的分析dump文件
1: kd> !analyze–vDebugging Details:------------------ *** ERROR: Moduleload completed but symbols could not be loaded for ntnfapi.sys EXCEPTION_CODE:(NTSTATUS) 0xc0000005 - 0x%08lx FAU原创 2014-01-09 19:38:52 · 10756 阅读 · 1 评论 -
net start 驱动 返回:发生系统错误6 句柄无效
使用vs2013编译驱动win7版本,编译之前没有Set the KMDF version导致错误net start 驱动 返回:。“发生系统错误6 句柄无效”文档中说:The operating system that you specified in your configuration is called the target operating system原创 2013-12-24 16:09:06 · 5299 阅读 · 1 评论 -
win7 下VS2003 全文搜索就停止反应的解决方案
Win7 32bit/64bit环境下,在使用VS2003的查找功能时,会导致VS2003无响应。解决方法:找到VS2003的安装目录,修改"...\Microsoft Visual Studio .NET 2003\Common7\IDE"目录下的devenv.exe的属性,将其兼容性中的“禁用视觉主题”打钩,如图:如不禁用桌面元素,则在VS2003中移动浮动窗口时会不太转载 2013-12-22 15:34:05 · 2863 阅读 · 2 评论 -
WDF
WDF是Vista及其以后OS的驱动模型,意为Windows Driver Foundation,此模型比WDM更先进、合理(微软是这样说的),将WDF中关于电源、PnP等一些复杂的细节由微软实现,所以在此模型上开发驱动会 比以前要简单。转载 2013-12-22 15:30:42 · 917 阅读 · 0 评论 -
筛选器“headerfiles”下已存在项目“***.h”
筛选器“header files”下已存在项目“***.h”vs2013添加现有头文件后,再次打开文件会出现问题:筛选器“header files”下已存在项目“***.h”解决方案是 重新添加现有头文件,在项目右键点击添加,而不是在“header files”点击右键。原创 2013-12-19 11:11:52 · 3582 阅读 · 0 评论 -
Big Endian 和 Little Endian
Big Endian 和 Little Endian 一、字节序来自:http://ayazh.gjjblog.com/archives/1058846/谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little end转载 2013-12-31 15:55:00 · 682 阅读 · 0 评论 -
驱动对象、设备对象、设备栈----驱动程序基础概念
简要说明 1. 向内存中载入一个驱动程序文件,就会有一个驱动对象(DRIVER_OBJECT)产生 2. 以驱动 i8042prt 为例简要说明过程(在这里我先做个说明,对于同时插有 ps/2 键盘和 ps/2 鼠标的计算机上, i8042prt 会创建两个设备对象,一个用于键盘,一个用于鼠标。i8042prt 是完成 ps/2 键盘驱动主要功能的驱动程转载 2013-12-17 11:02:53 · 718 阅读 · 0 评论 -
ipch文件夹和.sdf文件是什么 vs2010(转)
在使用Visual Studio 2010开发C++程序的时候,会发现有一些奇怪的文件被创建出来,比如一个叫ipch的文件夹,和一个与工程同名的.sdf文件,而且ipch下面的文件和.sdf文件都很大,至少有10M,大项目可能超过100M,那这些文件是干什么用的呢?这些文件是Visual Studio用来保存预编译的头文件和Intellisense用的,删除这些文件对于工程的开发完全没有影响。那如转载 2013-12-13 10:46:32 · 1580 阅读 · 1 评论 -
使用指针忘记分配空间,导致WideCharToMultiByte崩溃
上下文环境:wchPassword是一个宽字符的字符串,想要转换成窄的被老代码调用。代码:char *chCKeyPassWord;int nCKeyLength = WideCharToMultiByte(CP_ACP,0,wchPassword,-1,chCKeyPassWord,0,NULL,NULL);WideCharToMultiByte(CP_ACP,0,wch原创 2013-12-12 15:29:49 · 1835 阅读 · 0 评论 -
解决windows7驱动调试KdPrint不能输出的问题
我使用的是双机调试方式,开始以为调试起来会很方便,环境很快搭好,但问题来了,另一台机器上的windbg 上怎么也打印不出来。后来通过查找资料,看到有人介绍修改注册表的办法来解决内核输出的问题。具体办法是在注册表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/中新建key,名字为Debug Print转载 2013-12-08 12:26:22 · 3123 阅读 · 1 评论 -
KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRING
KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRINGKdPrint/DbgPrint and UNICODE_STRING/ANSI_STRING KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRINGJust to remember:NT likes string of the follow转载 2013-12-07 14:49:08 · 3273 阅读 · 1 评论 -
windbg虚拟机调试符号表设置
在D盘建立一个MySysSymbols文件夹,用于存放自己的符号文件. 然后给这个文件夹创建一个快捷方式,把它放到C:\Documents and Settings\你的用户名\SendTo文件夹下. 这样,以后编译完驱动以后,直接在符号文件上右击->发送到"MySysSymbols"就可以了,转载 2013-11-08 15:22:37 · 1716 阅读 · 0 评论 -
登录方式CredentialProvider的优点
总结一下新的登录方式CredentialProvider的优点: 1、实现所谓的“会话隔离”使用Credential Provider 方式实现“操作系统服务以及其他关键进程”和“用户进程”在不同的 会话(session)中运行,这样有利于提高安全性。 2、基于COM的设计,使得登录界面可以添加微软给定的控件,来实现开发者想要实现的功能。即用一致的外观和方法来完成不同的原创 2014-01-23 16:11:14 · 5104 阅读 · 0 评论 -
GetCurrentDirectory & GetModuleFileName
GetCurrentDirectory只是返回操作系统的当前目录,并不一定返回你的应用程序的目录。比如你在应用程序中调用了打开文件对话框,你选择了一个文件,那么,这个文件所在的目录就成了操作系统的当前目录了。因此,千万不要用这个函数作为获取应用程序目录的手段。获取当前应用程序主目录的方法是GetModuleFileName,先获取应用程序文件路径,然后截取调应用程序文件名称就是应用程序主目录了转载 2014-02-20 15:08:48 · 1007 阅读 · 2 评论 -
VC++ DLL 导出函数
VC++ DLL 导出函数 经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系。VC++支持两种语言:即C/C++,这也是造成DLL导出函数差异的根源我们用VS2008新建个DLL工程,工程名为“TestDLL”把默认的源文件后缀 .CPP改转载 2014-03-12 15:48:31 · 9815 阅读 · 2 评论 -
修改VS2008(vc)中工程解决方案类的名字
修改VS2008(vc)中工程/解决方案/类的名字原文地址:http://blog.csdn.net/chenvsa/article/details/6288372 因为不小心打错了或其他原因会修改vs2008的工程/解决方案/类的名字 以下是方法: 一、先修改工程名/解决方案名 举例,原先的工程名为AAA 想要改成BBB 1.找到工转载 2016-03-16 10:54:29 · 2239 阅读 · 0 评论 -
为何与0xff进行与运算
为何与0xff进行与运算在剖析该问题前请看如下代码public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i String hex = Integer.toHexString(b[ i ] & 0xFF); if (hex.len转载 2015-03-18 16:50:30 · 6870 阅读 · 1 评论 -
TDI Filter 过滤驱动
By Fanxiushu 2013, 引用和转载请注明原作者为了让大家有兴趣阅读下去,举个正在使用的可能大家都比较熟悉的例子: 360 的安全卫士里,有个流量防火墙的功能,它可以监视每个进程的流量情况,可以限制上传下载速度,等等。他的驱动部分的就是一个 TDI Filter 驱动。TDI Filter ,这是个快被微软淘汰的驱动模式,但是为了兼容,又不得不使用的驱动。转载 2015-03-11 10:44:13 · 987 阅读 · 0 评论 -
#pragma pack (n) 惹的祸
今天遇到了一个问题,使用数据流传输的数据在解析的时候数据错位,想了很久,发现是#pragma pack (n)惹的祸。首先,解析方使用了编译字节设置,但是在发送方没有使用,于是用同样的结构体解析数据时候,有两个字节被0占用了。后来统一使用,问题解决。如下图的struct结构体:不使用#pragma pack (1)时候,在解析RemotPort后是没问题的,再解析Remot原创 2015-03-19 15:29:19 · 1143 阅读 · 0 评论 -
STL中bind2nd的用法
原文路径,感谢分享:http://blog.csdn.net/starlee/article/details/1486327比如我们有下面的类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout "Output from method转载 2015-03-25 11:46:22 · 733 阅读 · 0 评论 -
64位进程调用32位dll的解决方法
最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的遇到了64位进程需要调用32位dll的问题。由于有一些32位dll没有源代码,无法重新编译为64位dll,所以只能想办法解决64位进程调用32位dll问题,这个问题让我很是挠头了几天。相关资料转载 2014-12-18 17:38:29 · 2156 阅读 · 1 评论 -
Com组件的内存分配和释放,CredentialProvider SHStrDup 字符串拷贝问题
一、简介熟悉CredentialProvider的同学应该知道,他为一个Com组件,于是,在这里的内存分配(字符串拷贝)的一系列操作就要按照con的标准来。二、Com组件的内存分配和释放COM提供的任务内存分配器,通过IMalloc接口调用。此接口由CoGetMalloc返回。分配内存可以使用IMalloc::Alloc,释放可由IMalloc::Free完成。为了简化CO原创 2014-09-01 12:01:38 · 3671 阅读 · 0 评论 -
C++ 运算符流操作符重载和友元
/************************************************************************************************ * 名 称: friend.cpp * 功 能:学习C++ Premier 的笔记之操作符重载,友元 * 描 述:1、友元函数:允许函数访问类的所有成员。转载 2014-09-23 15:13:38 · 1014 阅读 · 0 评论 -
在父窗口的中间位置显示子窗口 MFC
CRect rect;GetWindowRect(rect);//该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。//rect获得的坐标为当前窗体的坐标,对于显示器屏幕的最左上角为(0,0)点坐标,向下移动多少就加值多少//假设要显示的对话框宽320,高140,(320,140),left、right是X轴坐标,left-right则为宽父窗体的宽,同理原创 2014-08-07 11:53:24 · 13730 阅读 · 0 评论 -
定义struct
1、struct REC{int n; char c;};REC t1,t2;//修改 struct REC t1,t2;因为不是所有编译器都支持你那种写法2、typedef struct REC{int n=0;char c=’A’;}t1,t2;REC t1,t2不知道你什么意思,不过可以这样写typedef struct {int n=0;char c=转载 2014-07-29 15:10:43 · 816 阅读 · 0 评论 -
CString与string之间的转换
1、CString -> stringCString strCstrSource("Is a test");string strTarget;strTarget = strCstrSource.GetBuffer(0);2、 string->CStringstring strSource = "Is a test";CString strCstrTarget;原创 2014-07-28 15:29:14 · 1854 阅读 · 0 评论 -
OpenSSL 信息摘要算法
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用.转载 2014-04-24 14:41:54 · 2811 阅读 · 0 评论 -
loadlibrary 返回错误126 找不到指定的模块
hLibE = LoadLibrary(Dll_name);int n = GetlaseError();````````````````````````````````````````````````````````````````n 一直返回126,找都不到指定的模块。但是链接库Dll_name是在工程目录下的丫。找了很久,发现要加载的链接库Dll_name是存在的,但是要载入原创 2014-03-12 15:25:15 · 11964 阅读 · 4 评论 -
Filter & Filter Engine 名词解释
FilterA filter defines several filtering conditions for filtering TCP/IP network data and an action that is to be taken on the data if all the filtering conditions are true.一个过滤器为tcp/ip网络数据定义了几个过滤翻译 2013-11-05 20:54:14 · 1343 阅读 · 0 评论 -
带参数的构造函数
一、带参数的构造函数可以知道:①带参数的构造函数中的形参,其对应的实参在定义对象时给定。②用这种方法可以方便地实现对不同的对象进行不同的初始化。在例9.1中构造函数不带参数,在函数体中对数据成员赋初值。这种方式使该类的每一个对象都得到同一组初值(例如例9.1中各数据成员的初值均为0)。但是有时用户希望对不同的对象赋予不同的初值。可以采用带参数的构造函数,在调用不转载 2013-11-20 17:34:12 · 4290 阅读 · 0 评论 -
STL中List,Vector,Map,Set的理解
转 STL中List,Vector,Map,Set的理解 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整转载 2012-02-20 17:55:50 · 390 阅读 · 0 评论 -
用socket编写C/S结构程序的流程图
用socket编写C/S结构程序的流程图借用别人的流程图提醒自己编程的步骤1.面向连接的套接字的系统调用时序图无连接协议的套接字调用时序图面向连接的应用程序流程图原文地址:http://www.cppblog.com/geforcex/archive/2006/03/23/4506.html转载 2012-02-14 09:53:16 · 2517 阅读 · 0 评论 -
服务程序需要注意的地方
如何编写NT Service在MSDN->Platform SDK->DLLs, Processes, and Threads->Service中说得很清楚了,在这里我就不多说了,这里我就只说一些我个人认为的在编写service过程中要注意的地方。 0、在我们通过控制面板或NET START命令启动一个service时, Service Control Manager (SCM)从注册表里转载 2011-12-30 16:15:56 · 1676 阅读 · 0 评论 -
全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. -------1. 请高手用VC举个例子. 2. 如何在不同的C文件中以static形式来转载 2012-01-30 15:40:33 · 9558 阅读 · 4 评论 -
C语言之详解#ifdef等宏
C语言之详解#ifdef等宏 这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序转载 2011-11-30 19:17:15 · 1068 阅读 · 0 评论 -
ModifyStyle
CWnd::ModifyStyleBOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );返回值:如果成功地修改了风格,则返回非零值;否则返回0。参数: dwRemove 指定了在修改风格时要清除的窗口风格。 dwAdd 指定了在修改风格时要加入的窗口风格。 nFlags 要传递给Se转载 2011-11-30 18:41:36 · 2463 阅读 · 0 评论 -
预备知识—程序的内存分配
预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(sta转载 2011-11-21 19:21:40 · 442 阅读 · 0 评论 -
如何在对话框上显示一张图片
如何在对话框上显示一张图片在对话框上显示一张图片,可能是一个比较常用的功能,在MFC中提供了OnPaint()绘图函数,下面结合这个函数,提供 几种在对话框上显示一张图片的代码。首先假设你有一张24位的图片,放在e:\下,然后建立一个dialog based的MFC程序。利用picture control显示拖动一个picture control到dialog上,ID为转载 2011-11-17 18:14:33 · 3321 阅读 · 1 评论