概念和工具 2


注意:Windows API 在SDK中有详细描述。SDK既可以从www.msdn.microsoft.com上看到,也可以从 msdn 光盘中直接获取。关于SDK开发,推荐jeffrey ritcher的 windows via c/c++。(ID注:charles petzold programming windows 也给予严重推荐!!)

 

Windows API 包含数千个函数,主要可分成一下几类:

  • 基础服务
  • 组建服务
  • UI
  • 图形和多媒体
  • 消息
  • 网络
  • Web

(ID注:经常查看SDK的文档的人会发现这个分类是直接从SDK中获取的)

 

本书关注基础服务的原理,比如说 线程,进程,内存管理,io和安全。

 

       .net

   .net由 FCL 和CLR组成,为托管代码提供执行环境,并支持JIT,类型验证,垃圾收集和代码安全。通过这些措施,提高了开发效率和开发质量。相关书籍可以参考jeffrey richter的CLR via c#

CLR是一个用户态COM组件,底层调用标准的windows API来实现相关功能。所以.net不能运行在内核模式。

   win32的历史

windows NT的最初目标是和OS2竞争,因此一开始选定的开发接口是 PM PAI。但是在 NT 项目启动一年后,windows 3.0已经引爆了市场,微软及时的做出了一个艰难又明智的决定:让NT沿着windows3.0的方向发展!直到这个时候,WIN32才被引入,因为3.0上只有WIN16.

虽然win32引入了很多win16没有的功能,但是为了保持兼容性,微软做了很多折中,这会导致win32中有许多接口看起来不太一致

服务 函数 例程

不同的术语,在不同的背景下,意思也各不相同,比如说:服务 既可以指操作系统中可调用的例程,也可以指驱动程序,或者是服务进程。本书的定义如下:

l  window api 函数:windows API中文档化的供外界调用的子程序。比如说: CreateProcess, createfile,getmessage

l  本地系统服务(或者系统调用):

底层未文档化的服务,可从用户模式调用。比如说:CreateProess在底层调用NtCreateUserProcess 来创建进程。第三章有关于系统调用的详细定义。

l  内核支持函数(或者例程)

仅供内核模式调用的例程。比如说:驱动可以调用ExAllocatePoolWithTag从Windows系统堆(pools)分配内存。

Window 服务

通过服务控制管理器启动的进程。比如说:计划任务。

l  DLLS(动态链接库)

DLL是一个二进制文件,包含了一组可供调用的子例程。DLL在windows中随处可见,比如说msvcrt.dll和kernel32.dll。相比于静态链接库,DLL的优势在于相同的代码在内存中只有一份。不可执行的.net程序集也是以DLL的形式存在,但是没有导出函数。CLR通过解析存贮器中的元数据来进行相关调用。

l  进程 线程 工作

粗看起来,程序 和 进程是一样的,其实有着本质的不同。程序是一组静态的指令,而进程包含了用于执行程序的资源。windows的进程由以下部分组成:

私有的虚拟地址空间:由一些虚拟内存地址组成。

可执行文件:定义了指令和数据,可以被映射到虚拟地址空间。

打开句柄列表:包含了各种系统资源的句柄,比如说event,mutex,file。句柄可供所有线程共享。

访问令牌:用于进程安全上下文中,可以识别用户,安全组,特权,UAC,会话。

procssID:全局唯一的标识符

线程:至少一个,0线程的进程也可以存在,但是没什么用。

进程保存了创建者的ID,但是当创建者消失是,该ID不会更新。因此,该ID很可能指向一个不存在的进程。不过目前并没有其他东西以来该ID,所以这不算严重的问题。在process explore里面,通过比较父进程的创建时间,来避免指向错误的父进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值