进程的细节

从今天开始,重新学习一些细节性质的东西

 

一.在VS开发环境中,应用程序的入口点:

_tWinMain               WinMainCRTStartup

_tWinMain               wWinMainCRTStartup

_tmain                     mainCRTStartup

_tmain                     wmainCRTStartup

相关的介绍 请参考<Windows核心编程> 这4个入口函数在crtexe.c文件中

这些启动函数主要是初始化一些全局变量

如果要使用这些全局变量,请包含stdlib.h

 

二.进程的实例句柄,其值大概是其载入内存的基址(GetModuleHandle)

 

三.进程的命令行

参考

GetCommandLine和CommandLineToArgW

 

四.进程的环境变量

GetEnviromentStrings

FreeEnviromentStrings

 

用户登录Windows时,系统会创建外壳Shell进程,并将一组环境变量与其关联,系统通过检查注册表中的2个注册表项来获得初始的环境字符串

第一个注册表项包含应用于系统的所有环境变量的列表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Enviroment

第二个注册表项包含应用于当前登录用户的所有环境变量列表

HKEY_CURRENT_USER\Enviroment

用户可以在环境变量中添加或删除这些环境变量

 

应用程序还可以使用各种注册表函数来修改这些注册表项,不过,为了使改动对所有的应用程序生效,用户必须注销并重新登录.有的应用程序(比如资源管理器,控制面板)可以在其主窗口接受到WM_SETTINGCHANGE消息时,用新的注册表项来更新他们的环境变量.例如,假如更新了注册表项,并希望应用程序立即更新他们的环境块,可以进行如下调用

SendMessage(HWND_BROADCAST,MW_SETTINGCHANGE,0,(LPARAM)TEXT("Enviroment"));

 

通常子进程会继承一组环境变量,这些环境变量和父进程的环境变量相同.不过,父进程可以控制哪些环境变量允许子进程继承,这里所说的继承,是指子进程获得父进程的环境块的一个副本,这个副本子进程可以随意修改而不会影响到父进程.

 

GetEnviromentVariable来判断一个环境变量是否存在于进程的环境变量块中,一般这个函数的安全的用法是调用2次,第一次调用cchValue中传入0,那么函数返回时会返回缓冲区需要的大小,

ExpandEnviromentStrings函数来检测可替换的环境变量字符串(比如%User%)其用法和上面的差不多(详细的介绍请参考Windows核心编程  进程的环境变量块)

 

最后可以使用SetEnviromentVariable函数添加一个变量,删除一个变量,或者修改一个变量

 

五进程的错误模式

SetErrorMode设置进程的错误模式

如果希望子进程不继承某些父进程的错误模式,请在CreateProcess中指明

 

六.进程的当前目录

GetCurrentDirectory

例如一个进程有如下2个环境变量

=C:=C:\Bin

=D:=D:\bin

当前程序在C\Bin目录下,而且我们的程序调用CreateFile来打开D:ReadMe.txt,那么系统就会查找环境变量=D:.由于=D:变量是存在的,所以系统将尝试从D:\bin目录下打开这个文件.如果=D:变量不存在,那么系统就会试着从D盘的根目录打开ReadMe.txt.

可以使用C语言运行库函数_chdir函数而不是SetCurrentDirectory函数来更改设置当前目录._chdir函数在内部调用SetCurrentDirectory.但_chdir还会调用SetEnviromentVariable来添加或修改环境变量,从而使不同的驱动器的当前目录得以保留

如果一个父进程创建了一个希望传给子进程的环境块,子进程的环境块就不会自动继承父进程的当前目录,相反,子进程的当前目录默认为每个驱动器的根目录.如果希望子进程继承父进程的当前目录,父进程就必须在生成子进程之前,创建这些驱动器号环境变量,并把它们添加到环境变量块中,父进程通过调用GetFullPathName来获取他的当前目录


七.系统版本
GetVersion
GetVersionEx-------OSVERSIONINFOEX
为了进一步简化编程,Windows Vista还提供了VerifyVersionInfo,它能比较主机系统的版本和应用程序要求的版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven环境快速搭建(转)

最近&#xff0c;开发中要用到maven&#xff0c;所以对maven进行了简单的学习。因为有个maven高手在身边&#xff0c;所以&#xff0c;很快就上手了&#xff0c;我这里算是自我总结吧。关于maven是什么东东&#xff0c;请参考其它文章。 ----------------准备工作-------------…

cocos2d-x3.0 相对布局(一)

2dx相对布局和Android非常类似。假设前完成Android它应该是easy入门。Size widgetSize Director::getInstance()->getWinSize();Text* alert Text::create("Layout", "fonts/Marker Felt.ttf", 30 );alert->setColor(Color3B(159, 168, 176));aler…

管理员以标准权限运行时

在XP时代,大多数用户都用一个管理员(administrator)帐号来登录Windows 利用这个账户,用户几乎能没有任何限制的访问重要的系统资源,因为该账户被授予了很高的权限,一旦用这个帐号登录了xp以及xp之前的操作系统,Windows操作系统就会创建一个安全令牌(security token).每当有代码…

HDU 4791 amp; ZOJ 3726 Alice#39;s Print Service (数学 打表)

题目链接&#xff1a; HDU:http://acm.hdu.edu.cn/showproblem.php?pid4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId5072 Problem DescriptionAlice is providing print service, while the pricing doesnt seem to be reasonable, so people using…

夺命雷公狗---ECSHOP---08---商品页的拇改成星星

<strong>用户评价&#xff1a;</strong>{*---------商品评价星星开始----------*}<img src"./images/stars{$goods.comment_rank}.gif" alt"comment rank {$goods.comment_rank}">{*---------商品评价星星结束-------*} 这里主要是要有星…

文件指针

一.移动文件指针 SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod dwMoveMethod 指明移动的模式 FILE_BEGIN 不管文件处于什么地方,总是从文件的头部开始移动,这时的位置参数相当于指定了一个绝对位置 FILE_CURRENT 从当前的文件指针处开始移…

见证下的自我变化-2014全年总结

又是一年总结季&#xff0c;回过头看看看自己的成长&#xff0c;心里真的是满满的喜悦之情…… 一年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux学习篇】This virtual machine is configured for 64-bit guest operating systems.……

在学习Linux的基本操作的时候&#xff0c;安装虚拟环境则提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各种拒绝的心理&#xff0c;所以屏蔽了这个错误&#xff0c;但是屏蔽永远也解决不了问题的&#xff0c;所以自己则尝试百度…

图解SSIS监视文件夹并自动导入数据

图解SSIS监视文件夹并自动导入数据 原文:图解SSIS监视文件夹并自动导入数据 演示案例&#xff1a;让系统自动监视文件夹&#xff0c;并把文件夹下面的excel文件导入到sql中&#xff0c;之后清空目录。这个过程以往都需要写程序来实现或者定时执行&#xff0c;现在可以用ssis来订…

DLL转Lib

在C中,为了允许操作符重载和函数重载,C编译器往往按照某种规则改写每一个入口点的符号名,以便使用同一个名字(具有不同的参数类型或者是不同的作用域)有多种不同的用法,而不会打破现有基于C的链接器,.这项技术通常被称为改编(Name Mangling)或者名称修饰(Name Decoration),许多…

WP8手机解锁时提示“请确保IPOVERUSBSVC服务正常运行”解决方法

如果你各种重启服务 卸载手机 重装驱动都试过了还不行&#xff0c;请看看你是否安装了Hyper-v或Vitualbox虚拟机&#xff0c;很有可能是虚拟交换机造成的。 我在网络连接属性里看到这个 把它卸载后&#xff0c;解锁成功。 解锁后记得重新安装卸载的那个网络服务转载于:https://…

Win32路径操作相关API

一.路径截断与合并 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠 "\" PathAddBackslash 在路径最后加上反斜杠 "\" PathRemoveBlanks 去除路径前后的空格 PathAddExtension 在文件路径后面加上扩展名 PathRemoveExtension 去…

Openjudge-计算概论(A)-称体重

描述&#xff1a; 赵、钱、孙、李四个人中既有大人也有小孩&#xff0c;给他们称体重时发现&#xff0c;他们每个人的体重都不一样&#xff0c;且体重&#xff08;单位&#xff1a;公斤&#xff09;恰好是10的整数倍&#xff0c;且他们的体重都不高 于50公斤&#xff0c;已知赵…

浮点数的存储

-------------------------------------------------------------------------------- 在VC6.0----float环境一共32位 其中第一位是符号位 第二到第9位中间8位为小数点位置&#xff08;指数以127的二进制为原点向下为负指数 向上为正指数&#xff09;后面23位为数据位。 S EE…

第二阶段总结

结合第二阶段后3天&#xff0c;我们试用了UI&#xff0c;antionbar&#xff0c;menu等实用&#xff0c;成功的做出了字体的转换&#xff0c;题目的转化等功能。 其实四则运算&#xff0c;说难不难 说易不易&#xff0c;总结出 主要有付出&#xff0c;就有回报。 menu等做的过程…

const 和指针

c用了那么久&#xff0c;觉得 const 和指针配合到一起的时候就会有点点分不出来。 如下: const Data* pData;Data const * pDataData * const pDataconst Data * const pData Data const * const pData是不是有点晕&#xff1f; 我其实用得最多的是 const Data* pData, 也…

Linux 查看系统用户的登录日志

查看用户登录系统的日志有两类日志记录用户登录的行为&#xff0c;一是记录登录者的数据&#xff0c;一个是记录用户的登录时间一&#xff0c;记录用户登录数据/var/log/wtmp日志文件记录用户登录的数据。但这个文件是被编码的文件&#xff0c;不能直接用vi、cat等命令查看&…

Android -- 自定义权限

在android系统的安全模型中&#xff0c;应用程序在默认的情况下不可以执行任何对其他应用程序&#xff0c;系统或者用户带来负面影响的操作。如果应用需要执行某些操作&#xff0c;就需要声明使用这个操作对应的权限。 &#xff08;在manifest文件中 添加标记&#xff09;。 ap…

Win32 路径操作API

路径操作相关API 路径截断与合并函数 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠“\” PathAddBackslash 在路径最后加上反斜杠“\” PathRemoveBlanks 去除路径前后的空格 PathAddExtension 在文件路径后面加上扩展名 Pa…

dbms_output.put_line长度限制问题

dbms_output.put_line长度限制问题对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767. 如果报错buffer overflow, 执行如下语句即可:set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED对于10g以下版本dbms_output.put_line最大长度限制是255.转载于…