![个人头像照片](https://ucc.alicdn.com/avatar/img_549ec0fb89fbd36f61d148fccaa340bb.jpg)
暂无个人介绍
Windows上有两种主流的程序安装技术,一种是编写setup.exe文件,在程序安装时读取inf配置文件,将压缩保存于cab文件中的文件释放到指定位置,并进行环境设置。第二种方法是使用Windows Installer服务创建msi文件,由Windows服务读取msi文件中的配置信息和文件进行程序安装。
Socket就是系统提供的一种使用传输层的网络协议进行数据传输的程序设计接口规范,经过Socket封装的应用程序不再需要处理与TCP协议相关的内容。诸如连接时的三次握手、分包、包头解析、重传、滑动窗口等行为应用程序都不需关注,而只需要像使用系统中的其他I/O接口一样进行输入和输出操作即可。
区域(Regions)、路径(Paths)与修剪(Clip)操作 一、区域[2] 区域是一种对象,具有形状、位置、大小,用于进行填充、绘制、反转、边沿勾勒等操作,或用于限制DC的输出范围(修剪)。
一、绘制图形 GDI所能绘制形状有很多种,可区分为标准形状和非标准形状。标准形状使用几个简单、确定的属性就可以确定的形状,比如矩形(左上角点位置和长度)、椭圆(使用外切矩形)、圆角矩形(一个矩形加圆角半径)、弓形、扇形。
一、GDI的几个示例与概念 1、笔和话刷的基本操作 示例 画笔示例 **************************************//* 头文件 */#include /* 函数声明 */void GdiOut(HDC hdc);// WinMainint WI...
GDI是Graphics Device Interface(图形设备接口)的简称,当Windows应用程序需要显示点、线、图像、文字等内容,在显示器或打印输入这些内容时,就需要使用到GDI。图形设备接口是Windows图形界面的基础。
使用了通知区域图标的程序应该是图形用户界面的程序,具有窗口,和一般的窗口程序一样,应该创建一个主窗口,并处理窗口消息。 一、相关API 1、Shell_NotifyIcon Sends a message to the taskbar's status area.
Shell可以实现扩展,Shell扩展程序可以实现以下功能。 ◇为特定文件类型、所有文件类型、网络邻居、回收站、驱动器、网络共享文件夹、打印机、光盘驱动器、目录、文件夹背景(窗口的空白处)等Shell对象的右键菜单(称作上下文件菜单,Context Menu)增加菜单项。
二、文件协助(File Associations) File Associations可以指定Shell在显示、处理特定文件类型的文件时的方式,包括如下几个方面: ◇双击文件时,哪个应用程序应该被用来打开这个文件; ◇文件的图标; ◇在Explorer中浏览时显示的文件类型等; ◇文件的右键菜单中显示的指令(菜单项); ◇一些用户界面细节,比如当鼠标指针停留在图标上时所弹出的提示信(Infotip)。
所谓Shell(壳),一般是指由操作系统提供的,用于计算机用户向操作系统输入相关指令并得到结果的程序。Shell可以字符形式的,也可以是图形界面形式的。 Windows Shell最重要的组成部件是explorer.exe。
NSA的一些相关概念 NAS(Network Attached Storage,网络附属存储)是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便于对不同主机和应用服务器进行访问的技术。
1、动态数据交换(DDE)和网络动态数据交换(NDDE)[1,2] DDE可能是最为强大的进程间通信方式,实现也非常复杂。通信的两端分为服务端与客户端,两端都需要具有窗口。 一个DDE的通信过程大致如下: DDE会话由客户端发起,先初始化一个会话。
WM_COPYDATA是一个非常特殊的消息,此消息可能携带一个比较大的消息参数,而其他消息都只能携带两个固定大小的参数(WPARAM和LPARAM)。 在发送WM_COPYDATA消息时,WM_COPYDATA的wParam参数应该赋值为发送此消息的窗口,而lParam消息参数指向一个COPYDATASTRUCT结构类型的变量。
剪贴板由系统定义,并不属于任何一个特定的进程。系统中所有进程都可以访问和设置剪贴板。很多具有“复制”、“粘贴”功能的文字编译程序都是通过剪贴板进行操作。 剪贴板最大的特点就是数据传输没有明确的目标,数据是被动访问的,设置剪贴板的程序并不知道所设置的数据什么时候被访问,也不知道被哪个进程访问,剪贴板中的内容也可以多次访问,直到新的数据写入。
管道是一种用于在进程间共享数据的机制,其实质是一段共享内存。Windows系统为这段共享的内存设计采用数据流I/0的方式来访问。由一个进程读、另一个进程写,类似于一个管道两端,因此这种进程间的通信方式称作“管道”。
进程的地址空间是私有的。出于安全性的目的,如果一个进程不具有特殊的权限,是无法访问另外一个进程的内存空间的,也无法知道内存中保存的数据的意义。但是在一些具体的应用情况下需要多个进行相互配合,有时计算机用户也需要在多个应用程序之间交换数据。
一、基本概念 GetVersionEx GetSystemInfo GetWindowsDirectory GetSystemDirectory Getting System Information[2] Time[3] Registry[4~6,1:P291] 示例:遍历子键和键值 二、其它 1、通过注册表设置一个自启动的程序 程序的自启动有很多种方法,注册表是其中最常用的一种,有多个键具有这种功能。
一、基本概念 1、Windows系统是消息(Message)驱动的。当用户操作输入设备,产生硬件中断后,系统内核会得到这此硬件中断,硬件在系统中经过复杂的运算和处理最终变成消息。消息被系统发送给指定窗口。
一、基本概念 Windows的用户界面分为两个部分:字符图形界面和图形用户界面。字符图形界面较为简单,主要内容包括如何在界面上读取用户输入,如何向界面终端输出信息。如何控制界面的字体、背景、颜色等。
一、基本概念 1、服务是一种在系统中常驻的程序,服务可以在系统启动时自启动(先于用户登录)。当一个应用程序需要常驻在系统,或者随时为其他应用程序提供服务时,可以使用服务应用程序。一般编写网络服务端程序时需要使用服务。
一、基本概念 常见的线程同步方法(对象)有: 互斥对象(Mutex),事件对象(Event),信号量(Semaphore),临界区(critical section)等。 Synchronization Functions[1] 在同步过程中,两个最重要的概念是同步对象和等待函数。
一、基本概念 1、进程是应用程序的实例。进程包括一个虚拟地址空间及代码、数据、对象等程序运行所需环境和资源的集合。在内存空间中包括若干可执行的代码、数据、资源、一系列对系统对象操作的句柄,安全上下文、进程标识符(PID),环境变量等程序执行的环境。
二、堆管理 用户使用内存分配函数分配的内存都位于堆中,所以使用堆管理函数对内存进行分配、释放等是最为直接的方式。 Windows系统中,每个进程都有自己的堆,每个进程的堆的数量也有所不同。
4、进程的内存空间 1)进程虚拟地址空间的实现 Windows系统中每个进程都有一个私有的虚拟地址空间,系统需要将每个进程的虚拟地址都映射到物理内存地址上。为了实现系统中每个进程都有一个私有的虚拟地址空间,系统为每一个进程都创建一个页目录( Directory)和一组页表。
一、相关概念 1、内存主要储存程序运行时所需的机器代码、数据等内容。 内存的最小存储单元是字节,内存中的每一个字节都有一个地址。在32位系统上,使用32位的数来表示内存地址,因此一共可以表示232 (4294967296-4G)个字节。
一、基本概念 1、磁盘分区(Partitions) 磁盘是装到计算机上的存储设备,比如常见的硬盘。磁盘分区是为了便于管理和使用物理硬盘,而在一个物理硬盘上划分可以各自独立工作的一些逻辑磁盘。
一、编译选项 用nmake批量构造程序;makefile是nmake的配置文件。VC编译过程如下: 更多关于编译选项的介绍,可以参见[1],[2,27~38]。 VC\bin目录下 二、环境变量 set 常用环境变量 如下引用环境变量 %环境变量% 通过Set PATH="C:\";%PATH...
一、Windows API 的功能分类 1、系统基本服务 文件系统:对文件的操作等;磁盘分卷的管理等。 内存管理:内存分配等,分页机制。 进程、线程和模块 设备IO、驱动程序控制 调试与错误处理 Windows系统信息:包括注册表操作,及其它基本信息。
3、派遣例程的职责 •派遣函数立即完成该IRP。 •把该IRP传递到处于同一堆栈的下层驱动程序。 •排队该IRP以便由这个驱动程序中的其它例程来处理。 每个设备对象都自带一个请求队列对象,下面是使用这个队列的标准方法: NTSTATUS DispatchXxx(...) { ... IoMarkIrpPending(Irp); IoStartPacket(device, Irp, NULL, NULL); return STATUS_PENDING; } 一旦我们调用了IoStartPacket函数,就不要再碰IRP。
一、IRP MdlAddress(PMDL)域指向一个内存描述符表(MDL),该表描述了一个与该请求关联的用户模式缓冲区。如果顶级设备对象的Flags域为DO_DIRECT_IO,则I/O管理器为IRP_MJ_READ或IRP_MJ_WRITE请求创建这个MDL。
关于同步 执行在某线程上下文中的代码在任何时刻都可能被系统夺去控制权。另外,只有在多处理器的计算机上才能真正实现多线程的并发执行。Windows NT为解决一般的同步问题提供了两种方法,一个是中断请求优先级(IRQL)方案,另一个是在关键代码段周围声明和释放自旋锁。
内存管理 1)内核模式与用户模式地址 图示 地址空间中用户模式部分和内核模式部分 每个用户模式进程都有自己的地址上下文,它把用户模式的虚拟地址映射成一组唯一的物理页帧。这意味着,当Windows NT调度器把控制从一个进程的当前线程切换到另一个进程的某个线程时,与进程相对应的虚拟地址空间也被更换。
1、Summary of Kernel-Mode Support Routines http://msdn.microsoft.com/en-us/library/ff563889%28VS.85%29.aspx 决不在内核模式服务函数的参数中使用带有侧效的表达式。
4、DriverUnload例程 在WDM驱动程序中,DriverUnload例程的作用就是释放DriverEntry例程在全局初始化过程中申请的任何资源,但它几乎没什么可做。如果你在DriverEntry中备份了RegistryPath串,应该在这里释放备份所占用的内存。
图示 原图2-13 DRIVER_OBJECT数据结构 I/O管理器使用驱动程序对象来代表每个设备驱动程序,见图2-13。就象我们将要讨论的许多数据结构一样,驱动程序对象是部分不透明的。这意味着虽然 DDK头中公开了整个结构,但我们仅能直接访问或修改结构中的某些域。
1、通常,驱动程序在某些不可预测线程的上下文中应该使用异步方式处理I/O请求。我们使用术语任意线程上下文(arbitrary thread context)来描述驱动程序并不知道(或并不关心)处理器当前执行在哪一个线程上的上下文。
一、HOOK 1、局部钩子 OS感知鼠标或键盘事件,产生相应的消息,把此消息放到应用程序的消息队列中,应用程序通过调用GetMessage函数取出消息,然后调用DispatchMessage函数将这条消息调度给OS,OS会调用在设计窗口类时指定的应用程序窗口过程对这一消息进行处理。
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.
基本概念: 可以把ActiveX控件看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到容器程序中,与容器一起运行。容器应用程序是可以嵌入或链接对象的 应用程序;服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。
在编译ATL工程后,生成的dll在本电脑上能用,在别人的电脑上不能用。通过Depends工具分析一下,原来是编译选项没有选对,别的电脑上没有我生成的dll需要的基础dll文件,选成静态链接库就好了。
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。 1、我们可以把完成某种功能的函数放在一个动态链接库中,提供给其它函数调用。
1、通过打印,用KdPrint 2、存储dump信息。电脑属性,高级,设置,小内存存储。Dump信息用WinDbg查看。 3、使用WinDbg调试工具 1)设置符号表 在系统环境变量,用户变量中设置_NT_SYMBOL_PATH,值为 srv*c:\symbols*http://msdl.microsoft.com/download/symbols意为将http地址处下载的符号表存储于c:\symbols下。
过滤驱动程序可以修改已有驱动的功能,也可以对数据进行过滤加密。WDM驱动需要通过注册表记录指定加裁的过滤驱动,OS会读取这些值完成加载,其可以是高层过滤,也可以是低层过滤。而NT较为灵活,不用设置注册表,直接在内存中寻找设备对象,然后自行创建过滤驱动并将自己附加在这个驱动之上。
注册表读写的一个例子 #include "stdafx.h"#include "iostream"#include "string"#include "Windows.h"//注册表项#ifndef TEST_APP_REG#define TEST_APP_REG "Software...
you must understand the differences between a driver-created synchronous input/output request packet (IRP) and an asynchronous request.
An IRP completion routine can return either STATUS_MORE_PROCESSING_REQUIRED or STATUS_SUCCESS. The I/O manager uses the following rules when it ex...
关于RS-232,485等系列的驱动编写,类似于USB等,见[1]。 摄像头驱动程序 WDM摄像头驱动程序分两部分,一部分是类驱动(Class Driver)程序,由MS提供,提供了标准接口,一部分是小驱动(Mini Driver)程序,用户编写。
SD(Secure Digital Memory Card)IO卡是在SD内存卡接口基础之上发展起来的接口。SDIO协议类似于USB总线协议。 和USB总路线类似,SDIO总路线也有两端,一端是HOST端,另外一端是DEVICE端,所有指令都是由HOST端发出指令开始,在DEVICE端只要能解析HOST的命令,就可以和HOST进行通信。
USB(Universal Serial Bus)串行通用总线,支持即插即用,也称之为菊链(daisy chaining),因为在一条线缆上可以最多链接127个设备;速度传输速率可达4Mb/s~12Mb/s。
PCI(Peripheral Component Interconnect)总线标准是一种将系统外部设备连接起来的总线标准,速度可以达到133MB/s,它是PC中最重要的总线,其他总路线如ISA总线,USB总线等,都挂载在PCI总线上(通过桥接电路)。