对进程的小问题~~~~~~~~~

wq06100610 2004-04-16 01:28:56
(1)在使用CreateProcess的时候,其中有个参数是指向STARTUPINFO,在这个数据结构中,有一个结构是表示"进程与指定的桌面相关联",这句话是什么意思呢?难道进程的显示还和某个桌面有关系?不是只有一个桌面吗?给这个参数传递NULL的时候,表示默认的桌面~~默认的桌面是什么呢?(2)进程退出的时候,有一个进程退出代码,这个代码可以和子进程通信用~~但是,这个代码给操作系统,操作系统有什么用呢?比如一个进程的主线程int WINAPI _tWinMain(){}如果只是创建一个窗口,那么一般都是
{
return msg.wParam;
}这个返回给主线程有什么用呢?主线程退出时,这个代码要给进程作为退出代码,交给WINDOWS,这个代码对操作系统什么用呢?期待详解.上的少,分不多,见谅.
...全文
46 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_foo 2004-04-16
  • 打赏
  • 举报
回复
itmaster:
为什么你老喜欢原封不动的转一些东东却不发表意见呢?奇怪.
_foo 2004-04-16
  • 打赏
  • 举报
回复
1.win2000以上确实是有多个桌面的.
例如最初用户登陆时那个是一个桌面,之后进入的那个是另一个桌面.

http://www.codeguru.com/Cpp/I-N/ieprogram/security/article.php/c4387

2.通常情况下系统是不会关心这个代码的.
但有时候你可以想在你的程序中执行另一个进程并等该进程结束后得到该进程的执行情况结果,这时你可以用GetExitCodeProcess来得到.(当然,前提是,另一个进程通常是你自己写的,并且你确切定义了各种退出代码的含义.)
itmaster 2004-04-16
  • 打赏
  • 举报
回复
STARTUPINFO 是一个重要的结构,它决定了子进程出现时主窗口的外观,它对于我们的目标也是至关重要的。通过这个结构就可以隐藏主窗口并且把管道句柄传递给子进程。

以下就是必须要填写的成员:

cb STARTUPINFO结构的大小
dwFlags 二进制标志位,它决定本结构的哪些成员有效,也决定主窗口是显示还是隐藏的状态。在我们的程序中使用STARTF_USESHOWWINDOW 和 STARTF_USESTDHANDLES的组合
hStdOutput 和hStdError 你想要子进程使用的标准输出和标准错误句柄,对我们来说,我们将把管道的写端作为子进程的标准输出和错误。因此当子进程往标准输出或标准错误发送信息时,它实际上把这些信息通过管道传给了父进程
wShowWindow 决定主窗口是显示还是隐藏。我们不希望显示子进程的主窗口,因此把该成员置成SW_HIDE
调用CreateProcess 来创建子进程,但调用成功后子进程仍然不处于激活状态。它被装进了内存但并没有立即运行。

在父进程中关闭管道的写端也是必须的。这是因为父进程并不使用管道的写句柄,而且如果一个管道有两个写入端也就不会工作,因此我们在从管道往外读数据之前必须关闭管道的写端。但是不能在调用CreateProcess 之前关闭,否则管道就坏了。你应当在CreateProcess 刚刚返回并且在读数据之前关闭管道的写端。

现在就可以通过函数ReadFile 在管道的读端读数据了。通过使用ReadFile ,可以使子进程处于运行状态。它将开始执行,并且当它往标准输出( 实际上是管道的写端 )上写数据时,数据就会被送至管道的读端。应当不停调用ReadFile 直至它的返回值为 0 ,也就是说再也没有数据可读了。对从管道读来的数据你可以进行任何处理,在我们的例子中它被显示在 Edit 控件中。

记得用完后关闭管道的读句柄。
wq06100610 2004-04-16
  • 打赏
  • 举报
回复
我再顶~~~~~~~~~~~~~~~
wq06100610 2004-04-16
  • 打赏
  • 举报
回复
顶一下
功能: 执行BAT批处理脚本A,去掉桌面快捷方式图标上的箭头。 执行BAT批处理脚本B, 还原成操作系统桌面图标默认带箭头的状态。 去箭头 或者 还原箭头 两个脚本都能顺带解决其他方法导致的后遗症问题。 其他方法导致的后遗症问题是指下面这两种后遗症。 任务栏被锁定, 快捷方式图标的箭头变黑块 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 特点: 1.无后遗症。 2.实现桌面图标在视觉上毫无污染的境界。可以通过放大镜程序任意等级放大检测,不会发现任何污染。 3.使用了一个自己定制的特殊图标文件作为箭头图标,除此之外不给系统添加其他任何文件。 4.明文批处理,无毒无木马,避免了EXE类程序骑马携毒的嫌疑。 5.一次运行,一次解决,立即生效,无需重启动。根治病患,后顾无忧。不使用自启动,无额外资源消耗。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 版本: 脚本和操作系统是32位或者64位毫无关系。 如果谁在这个问题上还特意故弄玄虚扯上64位系统 那就纯属扯淡。 不过因为图标缓存文件涉及具体路径,所以不同系统会有差别, 最早脚本是基于Win7制作,后来添加WinXP版本。 使用其他系统如果发现路径有差别的话,可以自行修改制作成针对其他系统的脚本。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 缺点: 我设置了障碍,需要虚拟分 3分。 其实脚本并不复杂,如果仔细阅读肯定能自己照样子做出来。 我也不缺分,分对我也不重要。我是支持有能力的用户自己去完成的。 设置3分,只是稍微提高了一点获取门槛,不想被别人随意照搬,然后到处乱发。 脚本和所需资源是早在2014年3月就已完成制作。 上传CSDN时是 2017年2月2日。 之所以上传这东西,因为我发现都到了2017年, 结果去网络上搜索,还是没有彻底解决这个问题的案例。 到处都是照搬照抄那些有后遗症或者不彻底的方案。 如果你能看懂 甚至能按照描述做出来 但还是来下载, 这我当做是对我过去付出的认可 以及 尊重吧。 ------------------------------------------------------------------------------------------------------------------------ 脚本过程 1.强制修改注册表,这样可以修复其他方法导致的锁任务栏这个后遗症。 其实这个强制修改注册表也只是返回到操作系统最原始的样子,可以算作还原吧。 2.复制自制的 视觉透明 数据非透明的图标文件,复制到系统目录下。 3.修改注册表,把快捷方式的箭头图标文件指向自制的特殊图标文件。 4.结束explorer进程。 5.清除图标缓存文件(需要先改属性)。 6.重新启动explorer进程。 ------------------------------------------------------------------------------------------------------------------------ 已经不记得从什么时候开始使用没有箭头的快捷方式图标了。 自己第一次遇到快捷方式图标问题(箭头图标变黑块)是在2013年10月份, 当时并没太在意,只是通过搜索网络找了个普通办法解决了。 但站在现在的位置看当初,那应该是一个临时的处理办法,并不是根治问题的方法。 真正重视并打算弄明白并解决这个问题 是在2014年3月17日到21日的那一段时间。 当时的过程当然是先搜索网络,查看测试当时能找到很多已知的方案, 这是捷径,即站在前人的肩膀上快速了解问题, 掌握大家所利用分的方法,因为里面很可能就包含最终正确方案的一部分。 测试了见过的很多方法,都是先惊喜 最后失望,因为都有问题,不能圆满解决。 还有就是 这卫士 那管家 之类的提供的方法, 应该说这些工具的方案也经历过不同版本,网上见到过评价其导致其他问题。 卫士管家这类工具 那时候我已经很反感了, 早已看透这类东西,所以那时候就已经不用这类东西了。 了解发现 卫士管家这类 他们当然不会直白的使用明文脚本, 而是编译后的程序,有的还不是一次彻底解决问题,需要每次启动后调用一次。 除了卫士管家这类东西之外,那时候网络上已经出现了单独的工具,不少都是挂马的。 虽然能搜到很多,但没有发现能彻底解决的方法。但大体思路已经很清晰, 大家的办法也很相近,只有自己来做才能按照自己的需求彻底解决问题。 其实问题并不算复杂,早期大家的办法不成熟 有后遗症。 后期大家总算摸到门了,但陷在了无尽的尝试和寻找可用的自带图标之中。 然而自带的图标要么是绝对的透明,要么就是有像素的图标, 自带图标不管其像素多少多大,那都是污染。 系统对快捷方式图标的处理方法很特殊,还涉及到图标缓存, 桌面快捷方式的图标是箭头图标和原始快捷方式图标合成的新图标。 有污染的图标自然不是理想的代替箭头的图标。 而系统自带的透明图标会带来黑方块遮挡这个后遗症。 猜测用透明图标的话,在某一特定时刻系统会检测到异常, 然后就用了全黑图标代替透明图标。总之透明图标不能用。 另外检测黑块问题其实不用重新启动系统去检测,注销后再登陆就可以验证是否有问题。 操作系统是机器,跑的是程序,它对透明图标的判断标准当然是绝对的数据标准,不是我们的视觉标准。 所以操作系统检测出透明图标然后用黑块图标替换,这种透明一定是数据级别的绝对透明。 举个不见得完全正确的例子 比如0代表透明,255代表单一颜色的最大值,那么导致黑块的透明图标一定是0这一级别的数据。 而我们人的视觉并不敏锐,如果0代表透明,那么对我们来说1也是透明,甚至10也可能是透明。 但对于操作系统来说1或者10这和透明就毫无关系了,如果有这样的图标 自然就不会惹上黑块这个后遗症。 但操作系统中不会有这种看起来是透明 实际上 即数据上来说并非彻底透明的 毫无意义的图标, 这也是为什么大家都在找系统中可用来替代的图标,但绝对不会有结果的原因。 所以方案只能是自己动手做一个符合自己标准的视觉透明数据不透明的图标。 自制视觉透明图标,基础是一个完全透明的图标, 为了尽可能减少复杂度,只在这个透明图标上添加一个像素点即可。 初期还曾尝试不同颜色的像素点,甚至考虑绝大多数用户桌面的颜色,还有像素点的位置, 但实际上这些并不影响结果,因为最终视觉上不会看到任何像素。 但考虑到理论基础还是选择了中间色 灰色 作为像素点的颜色。 然后利用软件对像素点做平滑处理,模糊处理,高斯模糊处理。 经过这一系列处理后就形成了肉眼看是完全透明的图标, 但理论上是有颜色的图标,这样Windows转换图标时就不会触发黑块问题。 ------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ 早期出现的有缺陷的方法 方法一 核心语句是清除注册表如下注册表项,此法后遗症是任务栏被锁,不能向任务栏添加快捷方式。 reg delete "HKEY_CLASSES_ROOT\lnkfile" /v IsShortcut /f reg delete "HKEY_CLASSES_ROOT\piffile" /v IsShortcut /f 此法虽有不同形式,但无论是BAT命令还是其他不同高级语言编译的EXE,本质上是一样的。 使用高级语言只是换个形式使用命令, 其目的 一是隐藏代码不想公开,还有就是目的不纯 涉及灰色产业链,挂马带毒。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 方法二 是用一个透明图标替换小箭头图标,此法后遗症是导致原来小箭头的图标变成黑块 核心语句 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ Shell Icons" /v 29 /d "%systemroot%\system32\shell32.dll,50" /t reg_sz /f 核心图标文件shell32.dll,图标编号50 此法注销或重启动后会发现快捷方式上的黑块。清理图标缓存文件后重启explorer进程可以暂时解决问题。 所以使用此法的方案往往还会利用自启动,每次进入系统后都执行一次清理图标缓存和重启资源管理器进程。 其实系统里还有其他透明图标,当然 用的话也有后遗症 %SystemRoot%\System32\ImageRes.dll 的第113和115两个图标都是透明图标, 因为是透明图标所以没有污迹,但同样注销后有黑块。 此法的核心是利用一个绝对的透明图标替换箭头图标, 无论使用哪个透明图标都可以归结为此类方法,结果也都是一样,会导致黑块问题。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 方法三 替换小箭头图标,选择了图标资源文件imageres.dll,内部196号图标 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,196" /t reg_sz /f 缺点是 快捷方式图标会染上污迹,脏兮兮 196号图标,并不是全透明无像素图标,它是类似于一道下划线的图标,所以就有了污迹的效果。 196,是1条线。 197,是2条线。 198,是3条线。 使用系统自带的任何其他非透明图标代替箭头图标,都可以归结为此类方法。 虽然结果会有差别,但充其量也就是图标污染程度不同这样的差别。 解决快捷方式箭头问题所需要的图标是视觉上透明,数据级别不透明的图标。 操作系统内设计一个有像素的图标自然是为了看得到,而不是看不到, 对操作系统来说设计那样的图标没有意义,所以操作系统不会自带那样的图标, 因此在操作系统自带的图标范围内找答案不会有结果。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧