进程的关联性
- 通常,进程中的线程可以在主机的任何CPU上执行。
- 然而,也可以强迫线程在可用CPU的一个子集上运行,这一点叫“处理器关联性”。
- 子进程继承了其父进程的关联性。
进程的错误模式
- 与每个进程都关联了一组标志。
- 这些标志的作用是让系统知道进程如何相应严重错误,包括磁盘介质错误、未处理的异常、文件查找错误以及数据对齐错误。
- 进程可以调用SetErrorMode来告诉系统如何处理这些错误:
标志 | 描述 |
SEM_FAILCRITICALERRORS | 系统不显示严重处理程序消息框,并将错误返回主调程序 |
SEM_NOGPFAULTERRORBOX | 系统不显示常规保护错误消息框,此标志只应该由调试程序设置;该调试程序用一个异常处理程序来自行处理常规保护错误 |
SEM_NOOPENFILEERRORBOX | 系统查找文件失败时,不显示消息框 |
SEM_NOALIGNMENTFAULTEXCEPT | 系统自动修改内存对齐错误,并使应用程序看不到这些错误 |
- 默认情况下,子进程会继承父进程的错误模型标志。
换言之,如果一个进程已经打开了SEM_NOGPFAULTERRORBOX标志,并且生成了一个子进程,则子进程也会打开这个标志。
但是,子进程并不知道自己打开了这个标志,在处理子进程的时候,或许根本没有考虑到要处理这种GP错误。这种情况下,如果一个GP错误发生在了子进程的一个线程中了,则子进程可能会在不通知用户的情况下终止。 - 父进程是可以阻止子进程继承其错误模式标志的。方法是在创建子进程的时候指定CREATE_DEFAULT_ERROR_MODE标志。
进程当前所在的驱动器和目录
- 如果不提供完整的路径名,各种Windows函数会在当前驱动器的当前目录下查找文件和目录。
- 系统在内部跟踪记录着一个进程的当前驱动器和目录。由于这种信息是以一个进程为单位维护的,所以加入进程中的一个线程更改了当前驱动器或目录,那么对于该进程中的所有线程来说,此信息被修改了。
- 一个线程有两个方法获取或设置其所在进程的当前驱动器或目录
- 如果提供的缓冲区不够大,GetCurrentDirectory将返回保存此文件夹所需要的字符数(包括末尾的'\0'),而且该函数不会向缓冲区复制任何内容。这种情况下,可以将缓冲区设为NULL。
如果调用成功了,就会返回字符串的长度(字符数)。这个长度并不包含末尾的'\0'。
进程的当前目录
- 虽然上面说系统跟踪记录着进程的当前驱动器和目录,但是它没有记录每个驱动器的当前目录。
- 不过,利用操作系统提供的支持,可以处理多个驱动器的当前目录。而这个支持是通过进程的环境字符串来提供的,例如:
- 上面的变量指出了进程在C驱动器的当前目录和在D驱动器的当前目录。
- 如果调用一个函数,并且传入的路径名限定的是当前驱动器以外的驱动器,系统会在进程的环境块中查找与指定驱动器号或盘符号相关联的变量。
如果找到了,系统就将变量的值作为当前目录使用。
如果没有找到,系统就假定指定驱动器的当前目录是它的根目录。
- Windows的文件函数从来不会添加或更改驱动器号环境变量,它们只读取这些变量。
- 注意,如果有需要更改当前目录:
- 使用C运行库函数_chdir,而不是直接使用上面这个SetCurrentDirectory函数。
- 因为_chdir在其内部调用了SetCurrentDirectory这个函数,并且,它还调用了SetEnvironmentVariable来添加或修改环境变量,从而使得不同的驱动器的当前目录得以保留。
- 如果父进程创建了一个希望传递给子进程的环境块,子进程的环境块就不会自动继承父进程的当前目录。而是,子进程的当前目录是默认为每个驱动器的根目录。
- 如果希望子进程进程父进程的当前目录,父进程就必须在生成子进程之前,创建这些驱动器号环境变量,并把它们添加到环境块中。
- 父进程可以通过GetFullPathName来获得它的当前目录:
- 驱动器号环境变量通常放在环境块的开始处。
系统版本
- GetVersion
- 高位字返回MS-DOS版本号
- 低位字返回Windows版本号
- 每个字中,高位字节代表主版本号,低位字节代表此版本号
- GetVersionEx
- 解决GetVersion主次版本号颠倒的困惑
OSVERSIONINFOEX
dwOSVersionInfoSize
- 调用之前必须设为sizeof(dwOSVersionInfoSize)
- 或sizeof(OSVERSIONINFOEX)
dwMajorVersion
- 主机系统的主版本号
dwMinorVersion
- 主机系统的次版本号
dwBuildNumber
- 当前系统的构建版本号
dwPlatformId
- 标识当前系统支持的套件
- VER_PALTFORM_WIN32s(Win32s)
- VER_PALTFORM_WIN32_WINDOWS(Windows 95/98)
- VER_PALTFORM_WIN32_NT(Windows NT/2000/XP/Server 2003/Vista)
szCSDVersion
- 此字段包含额外的文本,提供了与已安装的操作系统有关的更多的信息
WServicePackMajor
- 最新安装的Service Pace的主版本号
wServicePackMinor
- 最新安装的Service Pace的次版本号
wSuiteMask
- 标识当前系统上可用的suite
- VER_SUITE_SMALLBUSINESS
- VER_SUITE_ENTERPRISE
- VER_SUITE_BACKOFFICE
- VER_SUITE_RESTRICTED
- VER_SUITE_EMBEDDEDNT
- VER_SUITE_DATACENTER
- VER_SUITE_SINGLEUSERTS
- VER_SUITE_PERSONAL
- VER_SUITE_BLADE
- VER_SUITE_EMBEDDED_RESTRICTED
- VER_SUITE_SECURITY_APPLIANCE
- VER_SUITE_STORAGE_SERVER
- VER_SUITE_COMPUTE_SERVER
wProductType
- 指出安装的是以下操作系统产品中的哪一个
- VER_NT_WORKSTATION
- VER_NT_SERVER
- VER_NT_DOMAIN_CONTROLLER
wReserved
- 保留,供将来使用
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Soui五05/30
- ♥ WindowsHOOK相关03/17
- ♥ Windows 高级调试 _ 内存破坏03/21
- ♥ 各平台调试方法总结记述一09/25
- ♥ Windows 核心编程 _ 内核对象:线程同步一07/29
- ♥ Soui六06/01