摘要:
1、通常,驱动程序在某些不可预测线程的上下文中应该使用异步方式处理I/O请求。我们使用术语任意线程上下文(arbitrary thread context)来描述驱动程序并不知道(或并不关心)处理器当前执行在哪一个线程上的上下文。 2、 Windows 2000使用对称多处理器模型,即所有的处理器都是相同的,系统任务和用户模式程序可以执行在任何一个处理器上,并且所有处理器都平等地访问内存。多处理器... 阅读全文
摘要:
一、HOOK1、局部钩子 OS感知鼠标或键盘事件,产生相应的消息,把此消息放到应用程序的消息队列中,应用程序通过调用GetMessage函数取出消息,然后调用DispatchMessage函数将这条消息调度给OS,OS会调用在设计窗口类时指定的应用程序窗口过程对这一消息进行处理。 可以通过SetWindowsHookEx来安装一个HOOK钩子过程;类似于必经道路上的路卡或查哨的;Before terminating, an application must call the UnhookWindowsHookEx function to free system resources associ 阅读全文
摘要:
1、宽字符串向字符串转换 static string ws2s(const wstring& ws) { std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C"; setlocale(LC_ALL, "chs"); const wchar_t* _Source = ws.c_str(); size_t _Dsi... 阅读全文
摘要:
基本概念: 可以把ActiveX控件看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到容器程序中,与容器一起运行。容器应用程序是可以嵌入或链接对象的 应用程序;服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。如Word中嵌入Excel,则Word就是一个容器应用程序,而 Excel就是服务器应用程序。 ActiveX控件的后缀名可以是[.ocx][.dll]等。作为一个典型的ActiveX控件,它具有方法,属性,事件这三种特性。ActiveX底层是通过COM技术实现的。 BEGIN_DISPATCH_MAP,调度/派遣映射是MFC提供的一种映射机制,主要是为了让外部应 阅读全文
摘要:
在编译ATL工程后,生成的dll在本电脑上能用,在别人的电脑上不能用。通过Depends工具分析一下,原来是编译选项没有选对,别的电脑上没有我生成的dll需要的基础dll文件,选成静态链接库就好了。故而总结一下几个编译选项,主要来自于参考1中链接网址;当然,更详细的介绍可以参见参考2中microsoft网址上介绍。 1、VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/M... 阅读全文
摘要:
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。1、我们可以把完成某种功能的函数放在一个动态链接库中,提供给其它函数调用。Windows API中所有的函数都包含在DLL中,其中三个最重要:1)Kernal32.dll 包含那些用于内存管理,进程和线程的函数,如CreateThread函数。2)User32.dll 包含执行用户界面任务,如窗口的创建和消息的传送的函数,如3)CreateWindow函数。3)GDI32.dll 用于画图的显示文本的函数。2、静态 阅读全文
摘要:
1、通过打印,用KdPrint2、存储dump信息。电脑属性,高级,设置,小内存存储。Dump信息用WinDbg查看。3、使用WinDbg调试工具1)设置符号表在系统环境变量,用户变量中设置_NT_SYMBOL_PATH,值为srv*c:\symbols*http://msdl.microsoft.com/download/symbols意为将http地址处下载的符号表存储于c:\symbols下。http://www.cnblogs.com/mydomain/archive/2010/10/14/1851681.html设置用户生成的驱动程序的符号表文件(pdb文件):通过File-Ima 阅读全文
摘要:
过滤驱动程序可以修改已有驱动的功能,也可以对数据进行过滤加密。WDM驱动需要通过注册表记录指定加裁的过滤驱动,OS会读取这些值完成加载,其可以是高层过滤,也可以是低层过滤。而NT较为灵活,不用设置注册表,直接在内存中寻找设备对象,然后自行创建过滤驱动并将自己附加在这个驱动之上。 过滤驱动的入口函数需要将所有的IRP都设置派遣例程,因为过滤驱动要保证所有上层传递下来的IRP都能够接收到。如果想修改某个IRP的处理,例如键盘读取输入的键盘扫描码,可以在派遣例程中设置完成例程,在完成例程中修改IRP的处理。 一般,将介于FDO与PDO间的过滤驱动程序称为低层过滤驱动程序,而将附加在FDO上面的称为高 阅读全文
摘要:
注册表读写的一个例子 阅读全文
摘要:
you must understand the differences between a driver-created synchronous input/output request packet (IRP) and an asynchronous request.Synchronous (Threaded) IRPAsynchronous (Non-Threaded) IRPCreated by using IoBuildSynchronousFsdRequest or IoBuildDeviceIoControlRequest.Created by using IoBuildAsync 阅读全文