Window系统
文章平均质量分 79
simbi
232
展开
-
病毒编程奥秘:DLL的远程注入技术详解
DLL的远程注入技术是目前Win32病毒广泛使用的一种技术。使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运行。 这样一来,普通的进程管理器就很难发现这种病毒了,而且即使发现了也很难清除,因为只要病毒寄生的进程不终止运行,那么这个DLL就不会在内存中卸载,用户也就无法在资源管理器中删除这个DLL文件,真原创 2005-12-25 16:13:00 · 959 阅读 · 0 评论 -
内存池(version1.1)
再参考了《Modern C++ Design》的FixedAllocator的设计,并且优化了一下算法,虽然最坏时间复杂度还是O(N)的,但是在通常情况下,new/delete的使用已经获得了比较好的性能了。Chunk.h和version1.0的差不多,只是去掉了析构函数,让Chunk直接被FixedAlloctor操作Chunk.h#ifndef CHUNK_H#define CHUNK_H转载 2008-05-09 17:36:00 · 329 阅读 · 0 评论 -
堆栈,堆栈,堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)转载 2008-05-14 16:52:00 · 514 阅读 · 0 评论 -
关于内存映射文件技术处理大文件
Windows对文件的读写提供了很丰富的操作手段,如:1. FILE *fp, fstearm...; (C/C++)2. CFile, CStdioFile...; (MFC)3. CreateFile, ReadFile...;(API)在处理一般的文件(文本/非文本),这些足够了。然而在处理比较大的文件如几十M, 几百M, 甚至上G的文件, 这时再用一般手段处理,系统就显的力不从心了要把文件转载 2008-05-22 09:51:00 · 510 阅读 · 0 评论 -
在主进程中捕获子进程的异常
今天的话题是:如何在得到子进程的异常呢?????众所周知,在WIN32中可以通过SEH来进行结构化异常处理。但是,如果启动的进程不是我们写的,当 然不能给他的代码强行加上_try _catch...然后它崩掉的时候就会弹出一个华丽丽的非法操作对话框。。。然后就囧了。。。当然,这是因为M$的__try, __expect,__final只限于处理进程内部,同一个线程内,位于 __try {}转载 2009-01-04 17:51:00 · 2730 阅读 · 4 评论 -
仅通过崩溃地址找出源代码的出错行
作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?……错啦!我相信我的看法是不会有人反对的——那就是,程序发生了崩溃! “该程序执行了非法操作,即将关闭。请与你的软件供应商联系。”,呵呵,这句 M$ 的“名言”,恐怕就是程序员最担心见到的东西了。有的时候,自己的程序在自己的机器上运行得好好的,但是到了别人的机器上就崩溃了;有时自己在编写和测试的过程中就莫名其妙地遇到了非法操转载 2009-01-08 10:51:00 · 757 阅读 · 1 评论 -
如何在VS2005中开发ATL服务器
以前一直使用VC6.0来开发ATL服务, 最近开始使用VS2005来开发,结果看到向导生成的框架后傻了眼,根本找不到以前熟悉的void CServiceModule::Run()函数了,VS2005生成的整个框架如下:#include "stdafx.h"#include "resource.h"#include "XXXAgent.h"#include #include "MainThr转载 2008-12-04 11:01:00 · 1139 阅读 · 0 评论 -
用 VC++ 2008 编写 Windows Service(系统服务)
现在许多 Windows Service 应用都可以用 c# 很好的完成,不过毕竟是托管代码,性能上不及非托管的 VC。网上能找到的 VC 写系统服务的例子,多数都用的 VC6(ATL3.0)。ATL3.0 写系统服务也很不错,只是封装的不很完善,还需要用户写不少代码。ATL7.0 及后续带的系统服务的模板有了更新,用起来简单多了。本文以 ATL 9.0 为例。文章只是流水般的写了一下转载 2008-12-04 11:11:00 · 3617 阅读 · 1 评论 -
VS2005快捷键
快捷键功能 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT + C显示类视图窗口 F4 显示属性窗口 SHIFT + F4显示项目属性窗口 CTRL + SHIFT + E显示资源视图 F12 转到定义 CTRL + F12转到声明 CTRL + ALT + J对象浏览 CT转载 2008-12-12 10:15:00 · 502 阅读 · 0 评论 -
解开 Windows 下的临界区中的代码死锁
临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用。 本文深入研究临界区的原理,以揭示在查找死锁和确认性能问题过程中的有用信息。它还包含一个便利的实用工具程序,可以显示所有临界区及其当前状态。在我们许多年的编程实践中,对于 Win32® 临界区没有受到非常多转载 2008-04-16 13:56:00 · 361 阅读 · 0 评论 -
字节对齐
当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首地址等于整个结转载 2007-12-17 15:02:00 · 406 阅读 · 0 评论 -
DLL详解
比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EX原创 2006-02-08 23:15:00 · 1043 阅读 · 0 评论 -
键盘钩子
系统钩子和DLL 钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。 在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全转载 2006-07-26 17:58:00 · 644 阅读 · 0 评论 -
VC++动态链接库(DLL)编程深入浅出(一)
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。被过滤广告 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL转载 2007-03-26 22:38:00 · 1099 阅读 · 0 评论 -
vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。 WinExec 两个参数,前一个指定路径,后一个指定显示方式。 ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件转载 2007-05-06 23:45:00 · 35997 阅读 · 11 评论 -
串行通信的基本原理及用MFC实现串口通信编程
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。 实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重转载 2007-09-04 15:35:00 · 993 阅读 · 1 评论 -
VC多线程编程
一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延转载 2007-11-08 09:38:00 · 482 阅读 · 0 评论 -
将ACTIVEX打包成CAB包
星期六上班..相当的郁闷..没办法,为了口饭吃...今天客户要求把我们的视频监控控件做成可以自动安装的,也就是输入一个网址,如果控件在本地没注册,就自动安装...(之前是要用户手动下载EXE安装程序安装).....先GOOGLE了一下...嘻..打包成CAB可以解决该问题.....好..三下除二..制作CAB包.....好..打包完成...测试---->光荣的喧布,打包失败...........原创 2007-11-17 15:59:00 · 1760 阅读 · 3 评论 -
Unicode与char类型串的转换
一。Unicode字符串转换char类型串一般有以下几种方法1.调用 WideCharToMultiByte() API; int WideCharToMultiByte ( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpM转载 2007-12-05 10:49:00 · 2082 阅读 · 0 评论 -
使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
本文关键字:Minidumps, Windows, SEH, VisualC, .NET摘要本文讲述了 minidumps 是怎样工作的、当你的程序崩溃的时候应该如何生成它们、以及如何在 Visual Studio .NET 中将它们重新读入。原文作者:Andy Pennell中文翻译:Victor原文链接转载 2010-03-10 16:35:00 · 794 阅读 · 0 评论