07 2011 档案

摘要:讲述MFC AppWizard的原理与MFC程序框架的剖析。AppWizard是一个源代码生成工具,是计算机辅助程序设计工具,WinMain在MFC程序中是 如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的 PreCreateWindow和OnCreate两个函数的着重分析,Windows窗口与C++中的CWnd类的关系。1,寻找WinMain入口: 在安装目录下找到MFC文件夹下的SRC文件夹,SRC下是MFC源代码。 WinMain在APPMODUL.CPP中实现:_tWinMain(HINSTA 阅读全文
posted @ 2011-07-29 13:33 飞翔荷兰人 阅读(2037) 评论(0) 推荐(0)
摘要:计算机核心期刊排名2009年5月4日下午 22:15:51自动化、计算机部分1 计算机学报 北京 中国计算机学会等2 软件学报 北京 中国科学院软件研究所3 计算机研究与发展 北京 中国科学院计算技术研究所等4 自动化学报 北京 中国科学院等5 计算机科学 重庆 国家科技部西南信息中心6 控制理论与应用 广州 中国科学院系统科学研究所等7 计算机辅助设计与图形学学报 北京 中国计算机学会等8 计算机工程与应用 北京 华北计算技术研究所9 模式识别与人工智能 北京 中国自动化学会等10 控制与决策 沈阳 东北大学11 小型微型计算机系统 沈阳 中国科学院沈阳计算机技术研究所12 计算机工程 上海 阅读全文
posted @ 2011-07-29 11:08 飞翔荷兰人 阅读(1761) 评论(0) 推荐(0)
摘要:通过安装Hook过程,可以用来屏蔽消息队列中某些消息,可以与某一线程相关或者与当前桌面的所有线程相关;HHOOK SetWindowsHookEx(int idHook, //Hook的类型WH_*,如WH_MOUSE监视鼠标过程HOOKPROC lpfn, //Hook过程(固定格式):DLL中的过程或者与当前线程处于同一进程的过程HINSTANCE hMod, //DLL的句柄DWORD dwThreadId //1、为零:表示和所有安装的线程相关,hMod需要指定DLL句柄和lpfn指定DLL中的钩子过程; //2、为线程id:hMod为NULL,lpfn为同一进程内的过程;);一、下面 阅读全文
posted @ 2011-07-28 17:35 飞翔荷兰人 阅读(3030) 评论(0) 推荐(0)
摘要:一、Windows API中的所有函数都包含在DLL中。其中有三个最重要的DLL: Kernel32.dll,它包含用于管理内存、进程和线程的各个函数; User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数; GDI32.dll,它包含用于画图和显示文本的各个函数。二、静态库和动态库 静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件); 动态库: 在使用动态库的时候,往往提供两个文件:一个引入库和一 阅读全文
posted @ 2011-07-28 17:34 飞翔荷兰人 阅读(1297) 评论(0) 推荐(0)
摘要:容器和服务器程序容器应用程序时可以嵌入或链接对象的应用程序。Word就是容器应用程序。服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。Excel就是服务器应用程序。ActiveX控件不能独立运行,它必须被嵌入容器应用程序中,和容器应用程序一起运行。Dispatch maps调度映射,主要是MFC提供让外部应用程序可以访问控件的属性和方法Event maps事件映射,控件向包含它的容器发送事件通知接口是外部程序和控件进行通信的协议,可以把接口看作是函数的集合,外部程序通过借口提供的方法,去访问控件的属性和方法。接口中所定义的所有函数都是纯虚函数regsvr32 ...注册控件r 阅读全文
posted @ 2011-07-28 17:33 飞翔荷兰人 阅读(2108) 评论(0) 推荐(0)
摘要:有四种方法1.剪贴板a.创建个ClipBoard的对话框应用程序,加两EditBox和两个Button发送接收。b.具体代码:发送端代码:if(OpenClipboard()){CString str;HANDLE hClip;char *pBuf;EmptyClipboard();GetDlgItemText(IDC_EDIT_SEND,str);hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);pBuf=(char*)GlobalLock(hClip);将句柄转换为指针!strcpy(pBuf,str);GlobalUnlock(hCli 阅读全文
posted @ 2011-07-28 17:32 飞翔荷兰人 阅读(605) 评论(0) 推荐(0)
摘要:1. 事件对象事件对象同上一课中的互斥对象一样属于内核对象,它包含三个成员:使用读数,用于指明该事件是一个自动重置的还是人工重置的事件的布尔值,用于指明该事件处于已通知状态还是未通知状态的布尔值.当人工重置的事件对象得到通知时,等待该事件对象的所有纯种无变为可高度线程,而一个自动重置的事件对象得到通知时,等待该事件对象的线程中人有一个变为可高度线程.所以一般使用线程同步时使用自动重置.创建事件对象:HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全选项,默认为NULLBOOL bManualReset, // re 阅读全文
posted @ 2011-07-28 17:31 飞翔荷兰人 阅读(2208) 评论(0) 推荐(0)
摘要:1. 程序,进程,线程A: 程序是计算机指令的集合,它以文件的形式存储在磁盘上,而进程通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动.一个程序可以对应多个进程.进程是资源申请,高度和独立运行的单位,因此,它使用系统中的运行资源,而程序不能申请系统资源,不能被系统高度也不能作为独立运行的单位,因此它不占系统运行资源.进程组成:<1> 操作系统用来管理进行的内核对象 内核对象也是系统用来存放关于进程的统计信息的地方.内核对象是操作系统内部分配的一个内在块,该内存块是一种数据结构,其成员负责维护该对象的各种信息.<2> 地址空间 它包含所有 阅读全文
posted @ 2011-07-28 17:24 飞翔荷兰人 阅读(1502) 评论(0) 推荐(0)
摘要:sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字(SOCK_STREAM)。基于UDP采用的数据报套接字(SOCK_DGRAM).1.TCP流式套接字的编程步骤在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!服务器端程序:1、加载套接字库2、创建套接字(socket)。3、将套接字绑定到一个本地地址和端口上(bind)。4、将套接字设为监听模式,准备接收客户请求(listen)。5、等待客户请求到来; 阅读全文
posted @ 2011-07-28 17:23 飞翔荷兰人 阅读(530) 评论(0) 推荐(0)
摘要:1. CArchive在菜单打开保存时的代码CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);CArchive ar(&file,CArchive::store);int i=4;char ch='a';float f=1.3f;CString str("http://www.sunxin.org");ar<<i<<ch<<f<<str;以上是保存,打开略2. 文档-视类结构简介OnNewDocument在程序启动时被调 阅读全文
posted @ 2011-07-28 17:21 飞翔荷兰人 阅读(641) 评论(0) 推荐(0)
摘要:1. 常量指针与指针常量的区分char ch[5]="lisi";const char *pStr=ch;//const在*之前,表明指针指向的内容为常量,即为常量指针,但指针可指向其它变量。char * const pStr=ch;//const在*之后,表明指针的地址不能改变,即为指针常量,但指针所指向的内容是可以改变的;const char * const pStr = ch;指向常量的常量指针,指针的地址与指向的内容都不可以改变。2. 对文件读写的三种方法<1>.C语言FILE *pFile=fopen("1.txt","w 阅读全文
posted @ 2011-07-28 17:21 飞翔荷兰人 阅读(2771) 评论(0) 推荐(0)
摘要:1. 画图: a.创建四个菜单,为其添加消息响应; b.在View中添加m_DrawType,保存绘画类型; c.增加成员变量,m_PtOrigin,当按下鼠标左键时,保存此点; d.在OnLButtonUp中画点,线,矩形,椭圆,别忘记设置成透明画刷2. 为其添加一个设置对话框(线型和线宽) a.创建对话框,为其创建一个新类关联它; b.为其中的线宽关联成员变量; c.在View中增加一个菜单,响应新的对话框;d.添加线型选项设置,将其Group属性选中,并为单选按纽关联成员变量。在view中增加一个线型变量m_nLineStyle3 .添加一个颜色对话框 a.实例化一个CColorDial 阅读全文
posted @ 2011-07-28 17:19 飞翔荷兰人 阅读(451) 评论(0) 推荐(0)
摘要:1. 创建4个菜单,为其添加消息响应,用成员变量保存绘画类型。添加LButtonDown和Up消息。2. 当窗口重绘时,如果想再显示原先画的数据,则需要保存数据。为此创建一个新类来记录绘画类型和两个点。class CGraph{public:CPoint m_ptOrigin;//起点CPoint m_ptEnd;//终点UINT m_nDrawType;//绘画类型CGraph();CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);//此为构造函数。virtual ~CGraph();};然后在void CGraphicVie 阅读全文
posted @ 2011-07-28 17:19 飞翔荷兰人 阅读(773) 评论(0) 推荐(0)
摘要:1,修改外观和图标可以在MainFrm中进行,而修改背景和光标只能在View中进行。为什么?因为view的显示挡在了MainFrame的前面。a.在MainFrame中PreCreateWindow()中,在窗口创建之前,用重新注册窗口类的方法,比较麻烦。在PreCreateWindow()中修改也可以用简单的方法,用全局函数//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,0,// LoadIcon(NULL,IDI_WARNING));在窗口创建之后,在OnCreate()中修改//SetWindowLong(m_hW 阅读全文
posted @ 2011-07-28 17:15 飞翔荷兰人 阅读(495) 评论(0) 推荐(0)
摘要:1. Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,现把处理结果输出到屏幕,打印机或者绵输出设备。这就需要用到Windows应用程序的用户接口对话框。对话框就是一个窗口,它不公可以接收消息,而且还可以被移动和关闭,甚至可以在它的客户区中进行绘图。相当于一个窗口,在它上面能够旋转各种标准控件和扩展控件。都是由CWnd类派生来2. 对话框的类型:模态(Model)对话框和非模态(Modeless)对话框模态对话框:指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其它任务。当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象 阅读全文
posted @ 2011-07-28 17:14 飞翔荷兰人 阅读(3551) 评论(0) 推荐(0)
摘要:1. MFC中的顶层菜单默认为弹出菜单(Pop-up),它是不能用来作命令响应的,当取消Pop-up选项后可接受命令响应。2. 消息的分类:标准消息,命令消息,通告消息。[标准消息]:除WM_COMMAND之外,所有以WM_开头的消息。从CWnd类派生的类都可以接收到这一消息;[命令消息]:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget(CWnd的父类)派生的类都可以接收到这一类消息;[通告消息]:由控件产生的消息,例如,按钮的单击,列表框的选 阅读全文
posted @ 2011-07-28 17:13 飞翔荷兰人 阅读(2039) 评论(0) 推荐(0)
摘要:1,创建插入符:void CreateSolidCaret( int nWidth, int nHeight );//创建插入符void CreateCaret( CBitmap* pBitmap );//创建位图插入符void ShowCaret( );//显示插入符void HideCaret( );//隐藏插入符static void PASCAL SetCaretPos( POINT point );//移动插入符号说明:1)创建插入符要在窗口创建完成之后,CreateSolidCaret函数创建的插入符被初始化为隐藏,所以需要调用ShowCaret()将其显示。2)使用CreateC 阅读全文
posted @ 2011-07-28 17:12 飞翔荷兰人 阅读(544) 评论(0) 推荐(0)
摘要:1. 在单文档中view挡在MainFrame的前面。此时如果编写针对MainFrame的mouseClick事件,将不会有反应。因为MFC视类窗口是覆盖在框架窗口上的,因此框架窗口不能感到鼠标消息。因为CWnd类中含有一个窗口句柄,所以可以不必传递窗口句柄参数,直接使用成员函数MessageBox(显示的内容)。2. MFC的消息映射机制:在每个能接收和处理消息的类中,定义一个消息和消息函数对照表,即消息映射表.在消息映射表中,消息与对应的消息处理函数指针成对出现.某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中.当有消息需要处理时,程序只要搜索该消息静态表,查 阅读全文
posted @ 2011-07-28 17:11 飞翔荷兰人 阅读(821) 评论(0) 推荐(0)
摘要:1、课程内容: 讲述MFC AppWizard的原理与MFC程序框架的剖析。AppWizard是一个源代码生成工具,是计算机辅助程序设计工具,WinMain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate两个函数的着重分析,Windows窗口与C++中的CWnd类的关系 在D:\Program Files\VisualSdudio\VC\atlmfc\src\mfc 目录下可以找到appmodul.cpp文件,WinMain函数就在这里。2 阅读全文
posted @ 2011-07-28 10:33 飞翔荷兰人 阅读(1473) 评论(0) 推荐(0)
摘要:C++ 的标准输入输出流 C++中提供了一套输入输出流类的对象,它们是cin 、cout和cerr,对应c语言中的三个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。 cin与>>一起完成输入操作,cout、cerr与<<一起完成输出与标准错误输出。利用cin和cout比C语言中的scanf和printf要方便得多,cin和cout可以自动判别输入输出数据类型而自动调整输入输出格式,不必像scanf和printf那样一个个由用户指定。使用cin,cout不仅方便,而且减少了出错的可能性。对于输出来说,我们像以上方 阅读全文
posted @ 2011-07-26 16:48 飞翔荷兰人 阅读(615) 评论(0) 推荐(1)
摘要:Windows应用程序,操作系统,计算机硬件之间的相互关系 关于API:向下的箭头③表示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。这个关系好比有个机器人能够完成行走的功能,但是,如果人们不告诉它往哪个方向上走,机器人是不会主动行走的。这里的机器人就是操作系统,人们就是应用程序。 那么,应用程序是如何通知操作系统执行某个功能的呢?有过编程经验的读者都应该知道,在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。操作系 阅读全文
posted @ 2011-07-26 11:19 飞翔荷兰人 阅读(773) 评论(0) 推荐(0)
摘要:Fly的博客地址: 网易Fly的博客 阅读全文
posted @ 2011-07-25 16:50 飞翔荷兰人 阅读(269) 评论(0) 推荐(0)
摘要:在驱动编程学习中,往往需要通过DbgPrint或者KdPrint来输出调试信息,对于Check版本,KdPrint只是DbgPrint的一个宏定义,而对于Free版本,KdPrint将被优化掉。这些输出信息可以通过DebugView对内核的监控来看到。KdPrint is identical to the DbgPrint routine in code that is compiled in a checked build environment. This routine has no effect if compiled in a free build environment. Only 阅读全文
posted @ 2011-07-25 16:02 飞翔荷兰人 阅读(1323) 评论(0) 推荐(0)
摘要:什么是ANSI,什么又是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。(对于字符来说ANSI以单字节存放英文字符,以双字节存放中文等字符,而Unicode下,英文和中文的字符都以双字节存放)Unicode码也是一种国际标准编码,采用二个字节编码,与ANSI码不兼容。目前,在网络、Windows系统和很多大型软件中得到应用。8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示汉字,韩国语等有着成千上万个字符的非西方字符肯定就不够了,正是如此才引入了UNICODE标准。 在软件开发中,特别是. 阅读全文
posted @ 2011-07-25 15:28 飞翔荷兰人 阅读(377) 评论(0) 推荐(0)
摘要:1. 为什么要用异常代替错误码?错误码的缺点:1) 默认是可以忽略的,因为调用函数时可以不处理其返回值,从而错误处理要依赖于程序员的主动性,而不是程序机制的要求;2) 不能跨作用域传送,必须逐层向上转发,即使中间没有对错误码进行重新定义;使用异常可以解决解决这两个问题:1) 异常默认是不可忽略的,抛出的异常必须捕获,否则就会报错;2) 异常可以跨作用域传送,从而错误的发现和处理被很好地分离开来;2. 异常和断言的区别:异常被捕获后可以不作处理,程序从捕获位置继续执行。而断言是完全无法忽略的,程序在断言失败处立即终止。因此断言通常用于调试版本,用来发现程序中的逻辑错误。虽然异常也能起到这样的作用 阅读全文
posted @ 2011-07-25 14:52 飞翔荷兰人 阅读(705) 评论(1) 推荐(0)
摘要:1.检查内存可用性在驱动程序开发中,对内存的操作要格外小心。如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃。DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的情况下,试探这段内存的可读写性。VOIDProbeForRead(INCONSTVOID*Address,INSIZE_TLength,INULONGAlignment);VOIDProbeForWrite(INCONSTVOID*Address,INSIZE_TLength,INULONGAlignment);这两个函数不是返回该段内存是否可读写,而是当不可读写的时候,引发一个异常。2.结构化异常处理(1) t 阅读全文
posted @ 2011-07-25 14:51 飞翔荷兰人 阅读(683) 评论(0) 推荐(0)
摘要:1.Lookaside结构频繁的申请和回收内存,会导致在内存上产生大量的内存“空洞”,从而导致最终无法申请内存。DDK为程序员提供了Lookaside结构来解决这个问题。我们可以将Lookaside对象看成是一个内存容器。在初始化的时候,它先向Windows申请了一块比较大的内存。以后程序员每次申请内存的时候,不是直接向Windows申请内存,而是想Lookaside对象申请内存。Looaside会智能的避免产生内存“空洞”。如果Lookaside对象内部内存不够用时,它会向操作系统申请更多的内存。Lookaside一般会在以下情况下使用:1. 程序员每次申请固定大小的内存。2. 申请和回收的 阅读全文
posted @ 2011-07-25 14:50 飞翔荷兰人 阅读(4349) 评论(0) 推荐(0)
摘要:1. 分配内核内存Windows驱动程序使用的内存资源非常珍贵,分配内存时要尽量节约。和应用程序一样,局部变量是存放在栈空间中的。但栈空间不会像应用程序那么大,所以驱动程序不适合递归调用或者局部变量是大型数据结构。如果需要大型数据结构,我们可以在堆中申请。堆中申请的函数有以下几个:(1)PVOID ExAllocatePool( INPOOL_TYPEPoolType, INSIZE_TNumberOfBytes ); (2)PVOID ExAllocatePoolWithTag( INPOOL_TYPEPoolType, INSIZE_TNumberOfBytes, INULONGTag ) 阅读全文
posted @ 2011-07-25 14:48 飞翔荷兰人 阅读(899) 评论(0) 推荐(0)
摘要:一、下载并安装WDK 登陆https://connect.microsoft.com/default.aspx 使用MSN账号免费注册 安装完成后在开始->所有程序中可以看到 Windows Driver Kits (Documentation)两个菜单。二、编写一个C文件 按照驱动开发的文件结构编写first.c , 编写 makefile , 编写 sources.三、编译 使用WDK的build工具四、安装并运行 使用srvinstw.exe安装服务:安装服务->本地计算机->输入sys文件的路径(手动)->设备驱动->NT驱动器目标名->手动。五、查 阅读全文
posted @ 2011-07-21 10:27 飞翔荷兰人 阅读(369) 评论(0) 推荐(0)
摘要:环境及情况说明 环境:sqlserver2008,Struts1.2和Hibernate; 1、使用Hibernate获得数据库的连接,在hibernate中 使用的都是Transaction事务管理器,这个是一个事务,在其中调用备份数据库语句的时候会出现异常 不能在事务内部执行备份或还原操作 的警告; 解决方法:使用下列语句获得连接, Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); if (conn==null||conn.isClosed()) { conn =DriverManager.ge 阅读全文
posted @ 2011-07-15 09:14 飞翔荷兰人 阅读(724) 评论(0) 推荐(0)
摘要:WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。1. WinDbg介绍: Debugging Tools and Symbols: Getting Startedhttp://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx A word for WinDbghttp://mtaulty.com/communityserver/blogs/mike_taultys_blog/archive/2004/08/03/4656.as. 阅读全文
posted @ 2011-07-11 16:14 飞翔荷兰人 阅读(388) 评论(0) 推荐(0)
摘要:Windows内核(一).sys放在Drivers目录下。运行在R0层。在WDK的相应环境中,进行相应代码目录,build.一个内核程序被看作一个PE格式的DLL,它是被Windows整个内核调用的一个DLL,一旦加裁,就成为内核的组成部分。所有的内核内存空间是共享的。内核程序崩溃,Windows系统也就崩溃了。DriverEntry是一个内核程序的入口,以system进程名出现。编写内核的规则:不能调用Windows应用层API函数,而应用内核API。关于字符串,内存处理,打印等,参见前面Rtl函数浮点数要特殊处理在Windows中,不同类型设备的驱动有不同的安装方式,ini文件。非“任何类 阅读全文
posted @ 2011-07-11 15:33 飞翔荷兰人 阅读(424) 评论(0) 推荐(0)
摘要:了解机器码X86所有指令的机器码长度不定,且连续排列,因此读取机器码的唯一方法是从头开始逐条解析指令。nop指令是单字节,可以用作填充替换长指令后的多余区域。XDE32反汇编引擎。关于进一步机器码的构成分析,可以看[6]。CPU权限级与分页机制Intel的x86通过ring级别进行访问控制,共分四级。R0最高,R3最低。现在的操作系统只分两级R0和R3.R0代表内核态,R3代表用户态。运行模式:实模式:CPU启动后处于实模式。只能访问1MB内存,单任务,所有任务都运行在R0层。如DOS。保护模式:支持分段、分页,可运行多任务。如Linux,Window.系统管理模式(SMM)虚拟8086模式: 阅读全文
posted @ 2011-07-11 15:33 飞翔荷兰人 阅读(434) 评论(0) 推荐(0)
摘要:内核线程在驱动中生成的线程一般是系统线程。系统线程所在的进程名为“System”。NTSTATUSPsCreateSystemThread( OUT PHANDLE ThreadHandle, //用来返回句柄,放入一个句柄指针即可 IN ULONG DesiredAccess, //一般总是填写0 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, //NULL IN HANDLE ProcessHandle OPTIONAL, //NULL OUT PCLIENT_ID ClientId OPTIONAL, //NULL IN PKSTART_ 阅读全文
posted @ 2011-07-11 15:32 飞翔荷兰人 阅读(902) 评论(0) 推荐(0)
摘要:汇编部分0、call、ret、push、pop、add、sub都可以操作堆栈,栈顶比栈底的地址小,由esp寄存器指向;1、call 的本质相当于push+jmp,ret的本质相当于pop+jmp。 call用来调用函数,先将下一条指令的地址压栈,再跳转到调用函数的开始处;ret弹出返回指令,再跳转;2、数据传送指令: mov dst,src :数据移动指令; xor eax,eax :快捷的清零指令; lea edi,[ebp-0cch] :load effect address,方括号表示存储器,即ebp-0cch地址处得内容,该指令取得该内容的地址-... 阅读全文
posted @ 2011-07-07 17:48 飞翔荷兰人 阅读(1054) 评论(0) 推荐(0)
摘要:1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。寄存器AX和AL通常称为累加器(Accumulator 阅读全文
posted @ 2011-07-07 16:21 飞翔荷兰人 阅读(598) 评论(0) 推荐(0)
摘要:一、前缀Windows内核函数的命名:Ex... 管理层,ExecutiveHal...硬件抽象层(Hardware Abstraction Layer 仅NT/Windows 2000)Io...I/O管理层(包括即插即用例程)Ke... 核心层,Ke是Kernel的缩写Mm...内存管理层,Memory ManagerOb...对象管理层Po...电源管理层Ps...进程管理层,processRtl...运行时程序库,Runtime LibrarySe...安全管理,SecurityZw...其他例程Cc... 文件缓存管理,Cc是Cache的缩写Cm... 系统配置管理,Configur 阅读全文
posted @ 2011-07-06 13:53 飞翔荷兰人 阅读(485) 评论(0) 推荐(0)
摘要:一、过滤的概念 “过滤”(filter)是极其重要的一个概念。过滤是在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真实驱动程序,就加入了新的功能。二、绑定设备的内核Api之一 通过编程可以生成一个虚拟的设备对象,并“绑定”(Attach)在一个真实的设备上。一旦绑定,则本来操作系统发送给真实设备的请求,就会首先发送到这个虚拟设备。 在WDK中,有多个内核API能实现绑定功能。下面是其中一个函数的原型:NTSTATUSIoAttachDevice(IN PDEVICE_OBJECT SourceDevice,IN PUNICODE_STR 阅读全文
posted @ 2011-07-05 17:09 飞翔荷兰人 阅读(2740) 评论(0) 推荐(1)
摘要:Microsoft Windows Driver Kit (WDK) 包含几个单独的组件。如果您了解 WDK 的结构,您就将知道各种支持文件和信息的查找位置。默认情况下,WDK 组件将安装到计算机硬盘驱动器上的 WDKInstallationPath\BuildNumber\ 文件夹中,其中 WDKInstallationPath 为 WDK 安装到的计算机上的根目录位置(例如,C:\WinDDK),而 BuildNumber 为安装的 WDK 的内部版本号(例如 5600)。这些组件将在安装 WDK 的过程中复制到计算机上,具体取决于您在 WDK 安装向导中选择的选项。最常见的 WDK 组件 阅读全文
posted @ 2011-07-05 09:30 飞翔荷兰人 阅读(4041) 评论(0) 推荐(1)
摘要:零、内核模块所在进程 1、内核模块位于内核空间,而内核空间又被所有的进程共享。因此,内核模块实际上位于任何一个进程空间中。 2、PsGetCurrentProcessId函数能得到当前进程的进程号,函数原型为: HANDLE PsGetCurrentProcessId();返回值时间上就是一个进程ID; 3、当DriverEntry函数被调用时,一般位于系统进程中,因为Windows一般用系统进程来加载内核模块;但是内核模块中分发函数调用时,当前进程一般都不是System进程。windows CE 数据类型大全 http://dev.10086.cn/cmdn/wiki/index.php?d 阅读全文
posted @ 2011-07-04 15:46 飞翔荷兰人 阅读(1804) 评论(1) 推荐(1)
摘要:1.从M$的网站上去下载wdk 我现在下载的是6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso 这个版本2.安装好了之后 建一个目录写入makefile sources first.c文件3.编译ps:遇到一个问题编译的时候报Do not assign include 错误解决办法sources 文件的问题 里面多加了一句 INCLUDE=$(INCLUDE);$(BASEDIR) \inc\ddk去掉就好了 阅读全文
posted @ 2011-07-04 14:18 飞翔荷兰人 阅读(603) 评论(0) 推荐(0)

I Love Lina~