WINDOWS核心编程之进程(二)

原创 2007年09月16日 10:18:00
1.进程的实例句柄
加载到进程地址空间的每个可执行文件或DLL文件均被产生一个唯一的实例句柄,就是hinstExe参数.有些这个参数的类型为HMODULE类型,
注意:这两个类型是完全相同的对象。原因在于16位的Windows中,HMODULE和HINSTANCE用于标识不同的东西。
 
当你在vc的环境里的link里category选ouput有个base ,这标识着可执行文件的映像加载到的基地址.vc链接程序使用的默认基地址是0x00400000,这是最低地址,如果指定应确保在0x00400000或大于这个地址。
 
要得到这个地址的值可以用HMODULE GetModuleHandle(PCTSTR pszModule)函数处理。
pszModule就是可执行文件或dll文件的名字,返回就是加载到进程的基地址。如果设定此参数为NULL, 返回的就是可执行文件的基地址了。
注意:可执行文件映像的基地址与可执行文件的基地址的区别.
GetModuleHandle函数的两个重要特性
1.如果调用进程不使用常用的对话框函数,那么调用GetModuleHandle并为它传递:ComDlg32”后,就会返回NULL, 尽管ComDlg32.dll可能加载到了其它进程的地址空间.
2.如果GetModuleHandle(NULL)在dll中调用,返回的也是可执行文件的基地址,而不是DLL文件的基地址.
 
2.进程的命令行
要获得一个指向进程的完整命令行的指针,可以用GetCommandLine函数
GetCommandLine();
函数返回一个指向包含完整命令行的缓存的指针,是个完整路径名.
 
再介绍个函数CommandLineToArgv,它是将字符串分割成它的各个标记,比如argc,其返回一个字符串指针的数组
PWSTR CommandLineToArgv(PWSTR pszCmdLine, int* pNumArgs);
pNumArgs是整数地址,设置为命令行中参数的数目.
CommaneLineToArgv负责在内部分配内存,应用程序不释放该内存,它是在进程运行终止时由os来释放的,如果子自已来释放,应用HeapFree函数
 
3.进程的环境变量
每个进程都有一个与它相关的环境块.环境块是进程的地址空间中分配的一个内存块.每个环境块都包含一组字符串.
例如
VarName1 = VarValue1/0
VarName2 = VarValue2/0
………………………….
/0
注意
例如
XYZ= Windows
ABC=Windows
虽然XYZ与ABC有相同的值,但二者是不同的.
XYZ =Home
XYZ=Work
也是不同的,中间的空格区别了它们
Win98的环境变量写在了autoexec.bat里
Win2000中环境变量的名在
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SessionManager/Environment里
值写在了
HKEY_CURRENT_USER/Environment
只有拥有管理员的身份才可能对其进行修改。
使用DWORD GetEnvironmentVariable(PCTSTR pszName, PTSTR pszValue, DWORD cchValue);可以确定某个环境变量是否存在以及它的值。
第一个参数为名称,第二个为存放变量值的缓存, 第三个参数为缓存的大小(用字符数来表示)。
BOOL SetEnvironmentVariable(PCTSTR pszName, PCTSTR pszValue)修改与添加,删除变量,如果不存在pszName这样的变量就添加一个新的变量,如何存在就修改为pszValue。如果pszValue为NULL,就删除此变量。
 
4.进程的亲缘性
进程中的线程可以在主计算机中的任何一个CPU上执行。但是一个进程的线程可能被强制在可用CPU的子集上运行,这就叫进程的亲缘性。
 
5.进程的错误模式
UINT SetErrorMode(UINT fuErrorMode);
表要加上
CreateProcess里有一个参数指定了这个,使子进程错误如何处理
进程的当前驱动器和目录
如果调用CreateFile打开一个文件(不设定路径),那么系统就在当前驱动器和目录中查找该文件。用DWORD GetCurrentDirectory(DWORD cchCurDir, PTSTR pszCurDIr)可以得到
用BOOL SetCurrentDirectory(PCTSTR pszCurDir); 可以指定路径。
 
6.进程的当前目录
系统对进程的当前驱动器与目录保持跟踪,但它不跟踪每个驱动器的当前目录。这种支持是通过进程的环境字符串来提供的。例如进程有下面的两个环境变量。
=C:=C:/Utility/Bin
=D:=D:/Program Files
上面表示,驱动器C的进程的当前目录是/Utility/Bin, D的是/Program Files;
如果调用一个函数,传递一个驱动器全名,但不是当前的驱动器,那么系统就查看进程的环境块,找出与指定驱动器名相关的变量。如果存在,系统将该变量的值用作当前驱动器。如果不存在,系统将假设指定驱动器的当前目录是它的根目录。
例如进程的当前目录是C:/Utility/Bin,但调用CreateFile打开D:ReadMe.txt, 那么系统查看环境变量=D.如果=D存在,系统就从D:/Program File目录打开该ReadMe.txt文件。如果=D不存在,系统将从驱动器D的根目录来打开ReadMe.txt。
 
待续...............
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

《Windows核心编程》进程

《Windows程序设计》先放下了,不知道为什么,看不下去了,后面的感觉不是那么重要。 开始了《Windows核心编程》。 《Windows核心编程》进程 可以说是读书笔记吧,怎么样从书...
  • l0g1n
  • l0g1n
  • 2012-06-03 12:20
  • 722

windows 核心编程 笔记之 进程

发表时间:2013.5.18 内容:windows进程(process) 作者:郑金玮   如上图所示,windows任务管理器中的进程Tab列中列出了系统管理的所有进程,我们经常利用任务...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

《Windows核心编程》-初识进程

这几天又开始研究《Windows核心编程》,感觉里面有挖不完的宝藏,需要反复的去研读,不断加深自己的印象。然后刚看进程,里面的一些知识点很好,特意记录下来。 @1进程定义:一般将进程定义为一个正在运...

Windows核心编程 第四章 进程(下)

Windows核心编程 第四章 进程(下)

Windows核心编程 第4章 进程

进程由两部分组成:操作系统管理进程的内核对象。存放该进程 的统计信息的地方。 地址空间,包含可执行模块和DLL模块的代码和数据。动态分配的内存(线程堆栈和堆)。 进程是不活泼的,进程当中至少要有一个线...

Windows-核心编程-04-进程详解

什么是进程 今天我讲的是进程. 那么什么是进程呢. QQ.exe打开运行后. 会在系统中创建一个QQ进程. 打开了QQ音乐后. 任务管理器中会多出一个QQMusic.exe. 如下图: ...

Windows核心编程有感-进程

主要解释操作系统如何创建进程、操作进程、关闭进程。 1 进程的组成: 内核对象:操作系统用它来管理进程,保存进程的信息地址空间:包含exe、dl模块的数据和代码 还有动态分配的内...

windows核心编程(四) 关于进程

(1)定义 进程定义成一个正在运行的程序的一个实例,创建进程后会生成一个内核对象,操作系统使用它来管理进程,也是用它来保存进程统计信息的地方。 另外,进程的创建,操作系统会为它分配一块独立的地址空间,...

Windows核心编程 第4章 进程

Windows核心编程 第4章 进程 进程由两部分组成: 操作系统管理进程的内核对象。存放该进程 的统计信息的地方。 地址空间,包含可执行模块和DLL模块的代码和...

《Windows核心编程》——四 进程

前言     一般将进程定义为一个正在运行的程序的一个实例,它由两部分组成:     ①一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方     ②一个地址空间,其中...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)