加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在Windows上,控制台窗口所有权如何工作?

发布时间:2020-12-14 01:58:35 所属栏目:Windows 来源:网络整理
导读:从另一个控制台应用程序启动控制台应用程序时,控制台所有权如何工作? 我看到四种可能性: 第二个应用程序在其生命周期内从第一个应用程序继承控制台,控制台在退出时返回到原始所有者. 每个应用程序都有自己的控制台. Windows然后以某种方式将两者的内容合并
从另一个控制台应用程序启动控制台应用程序时,控制台所有权如何工作?

我看到四种可能性:

>第二个应用程序在其生命周期内从第一个应用程序继承控制台,控制台在退出时返回到原始所有者.
>每个应用程序都有自己的控制台. Windows然后以某种方式将两者的内容合并到用户可见的“控制台”中
>第二个应用程序获取属于第一个应用程序的控制台的句柄.
>控制台放在共享内存中,两个应用程序都具有相同的“所有权”

我很可能错过了一些东西,这四个选项都没有充分描述Windows对其控制台的作用.

如果答案接近选项4.我的后续问题是两个过程中的哪一个负责管理窗口? (在需要刷新/重绘屏幕时处理图形更新等)

一个具体的例子:运行CMD.然后,使用CMD运行[console application]. [控制台应用程序]将写入与CMD正在使用的控制台窗口相同的内容.

解决方法

你的四种可能性实际上都不是这样,你后续问题的答案是“两个过程中哪一个负责管理窗口?”,这两个过程都不??是负责任的. TUI程序根本不需要了解任何关于Windows的内容,而且,在幕后,它们甚至不必连接到GUI.

控制台是对象,通过句柄访问,就像文件,目录,管道,进程和线程一样.单个进程不会通过其句柄“拥有”控制台,而是一个进程“拥有”任何具有打开句柄的文件.对于控制台的句柄由父进程的子进程继承,其方式与所有其他(可继承)句柄相同.你的TUI应用程序,由CMD生成,只是继承了CMD说它应该继承的标准句柄,当它调用CreateProcess()时 – 它们通常是CMD的标准输入,输出和错误(除非命令行告诉CMD)使用一些其他句柄作为孩子的标准输入,输出和错误).

控制台不依赖于CMD.只要存在(a)控制台输入或输出缓冲区的任何打开句柄或(b)否则“附加”到控制台的任何进程,它们就存在.因此,在您的示例中,您可以杀死CMD,但只有当您终止子进程时,控制台才会被实际销毁.

在版本6.1之前的Windows NT中,负责显示其中呈现控制台的GUI窗口的过程是CSRSS,即客户端 – 服务器运行时子系统.窗口处理代码在WINSRV.DLL中,其中包含“控制台服务器” – 在封面下 – 执行控制台I / O的Win32程序进行LPC调用.在Windows NT 6.1中,由于原因covered by Raymond Chen,此功能从CSRSS移出到CSRSS产生的权限较低的进程中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读