看不见DOS进程??(100分)

  • 主题发起人 主题发起人 creation-zy
  • 开始时间 开始时间
C

creation-zy

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个程序用TFindProc控件列出当前系统的全部进程,但我发现它列出的进程比FPE等工具软件
列出的数量要少。以前还可以凑合着用,现在发现了一个大问题:我的程序看不见DOS进程!
如富甲天下2这个DOS游戏。
FPE到底使用了什么技术?最好给出源代码。

以下是TFindProc控件枚举进程的代码:
var
;i:Integer;
;snap ; : THandle;
;pe32 ; : TPROCESSENTRY32;
begin
;snap := 0;
;for i := 0 to fProcessList.Count-1 do
; ;fProcessList.Objects.Free;
;fProcessList.Clear;
;try
; snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
; if snap < > 0 then begin
; ;pe32.dwSize := SizeOf(TPROCESSENTRY32);
; ;if Process32First(snap, pe32) then begin
; ; AddProcess(pe32);
; ; while Process32Next(snap, pe32) do
; ; ;AddProcess(pe32);
; ;end;
; end;
;finally
; CloseHandle(snap);
;end;
End;

它列出的进程数比FPE少太多了...
 
说实话
这个问题不太好解决
我这样的人
如果不把windows的原代码看上5遍以上
很难有大的收获
或许你看看《windows核心编程》
能有些启发
 
我是不是应该列出16位的进程?有没有这个功能?
 
我已经用了终极武器了...
; 打开TLHelp32.pas没找到关于16位进程的函数;
; Microsoft Visual Studio 6.0 Tools--Depends--打开kernel32.dll
--找到CreateToolHelp32Snapshot函数--在附近没有找到有关16位进程的函数
--在整个kernel32.dll中寻找"16"--只找到几个无关的东西... 5555555555555
(Win2000 Advanced Server)

难道在别的系统dll中有关于16位进程的函数吗?
 
高手何在?
别对我说Win2000没有16位进程——任务管理器的“选项”菜单中明明有“显示16位任务”。
 
16位进程是在 wow(windows on windows) 子系统上运行的。wow 子系统的核心是
ntvdm,你可以在找到 ntvdm 进程之后枚举它的全部子进程,就可以找到 16 位
进程。
 
mikedeakins:
; 高手就是高手!果然是这样。
但是在Win98下怎么办呢?能不能给出一段代码,列出和FPE显示出的一样多的进程,
只给出应该调用什么API函数也可以。谢谢!
 
windows 98 我只在参加微软产品测试的时候用过,后来就再也不用了。
windows 98 应当怎样处理我也不知道。
 
看不见? WINOLD
 
我好像已经找到突破口了:
——在Win98里开一个DOS窗口,此时,在进程列表中就会多出一个“WINOA386.MOD”进程,
通过我的分析,发现它就是DOS进程!

但是还有一个问题:
; 我无法从进程相关信息中获得该DOS进程实际正在运行的程序的名称,如果同时开两个DOS进程,
就分不清谁是谁了。
 
我碰到这个问题也很头痛,希望高手能帮忙啊!
 
你竟然在研究这么底层的技术?!
 
这很有必要吗? 毕竟WIN开始不支持DOS了,DOS要被淘汰了,错了!是已经抛弃DOS了!
 
没有错,winoa386.mod(Win Old App)就是DOS进程,MSDN曾经有一篇文章探讨VDM Debug,我
没有珍惜,到寻找时已经后悔莫及,如果 。。。[:)]

请到MSDN搜索VDM Debug API的相关信息 ,也许会有收获的
http://www.natasoft.com/products/index.html 我一直使用IntraSpy来查看系统进程,它可以
做到对winoa386的分析。
 
to DragonPC_???:
; 非常感谢![:)] Downloading...
; 是不是我搜索不得法,在MSDN上好像没看到相关内容?

; 另外还有一个问题:FPE显示进程使用了什么技术?怎么用Process32Next找不到那么多?
 
对于 winoa386.mod 进程确实有一些处理,就是我前面所说的 VDM Debug API,对应早期的
一个叫做VDM??.HLP文件,等我找找先。

PS,那个软件并没有告诉你如何解决你的问题,只是它解决了你的问题而已 [:)]
 
http://www.microsoft.com/msj/defaultframe.asp?page=/msj/0898/hood0898.htm&nav=/msj/0898/newnav.htm
介绍 VDM Debug API 的文章,希望对你有帮助,我没有那个决心将它读完 [:D]
 
>>我没有那个决心将它读完
; 我理解——好长呀!
; 我大致看了一下,其中并没有提到winoa386.mod,主要是关于NTVDM的——
a brief overview of how Windows NT runs programs for 16-bit Windows and MS-DOS® [:(]
 
你没有看到他的范例吗?

就是枚举所有dos下面的16位应用程序的呀。VDMDBG.HLP - VDMDBG.DLL(我没有找到)文件
有函数叫做VDMEnumTaskWOW VDMEnumTaskWOWEx VDMEnumProcessWOW 这就是你要找得东西呀。
 
后退
顶部