您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:33 来源:vckbase.com

本文章共2662字,分2页,当前第1页,快速翻页:
 

定制调试诊断工具和实用程序
——摆脱DLL"地狱"(DLL Hell)的困扰(三)

原著:Christophe Nasarre
编译:NorthTibet

逆风编程精品

下载源代码:Debugsrc0206.exe (583KB)
原文出处:Windows XP:Escape from DLL Hell with Custom Debugging and Instrumentation Tools and Utilities


本文假设你熟悉 Win32,DLL

如何获取进程的命令行
  方法 描述 GetName 以NULL作为参数,调用 GetModuleBaseName ,最后去掉扩展名 “.EXE” GetFileName 以NULL作为参数,调用 GetModuleFileNameEx GetMainWindowHandle 参见GetMainWindowHandle GetMainWindowTitle GetParentProcessID 用ProcessBasicInformation作为参数调用NtQueryInformationProcess GetKERNELHandleCount 用ProcessHandleCount作为参数调用NtQueryInformationProcess GetUSERHandleCount 用GR_USEROBJECTS作为参数调用GetGuiResources GetGDIHandleCount 用GR_GDIOBJECTS作为参数调用GetGuiResources GetWorkingSet 调用GetProcessMemoryInfo GetCmdLine 参见GetProcessCmdLine GetOwner 参见GetProcessOwner的细节 GetSessionID ProcessIdToSessionId (参见对快速用户转换的讨论部分——Windows XP的一个新特性) GetModuleList CModuleList是一个对EnumProcessModules 和GetModuleFileNameEx的打包类 GetChildrenCount 以及子进程清单 要获取某个进程的子进程列表,目前还没这样的API(即便有也未公开)可供使用。但是,因为某个进程的父进程是已知的,所以将某个进程加到其父进程的子进程列表中不难(参见SetChildrenList的实现)

上表列出的方法中有一个是 GetCmdLine,这个函数返回进程的命令行。实际上,它并不是真正地返回命令行,而是返回进程启动时接收的参数。例如,如果你安装了微软Power Toys中的TweakUI程序(可以在vckbase站点下载),当你在Windows的资源管理器中的任何文件夹上单击右键,则在弹出的上下文菜单中都会有一个"Run Command Prompt Here"菜单项。执行这个菜单命令后,会弹出命令提示窗口,并且所点击的目录为当前工作目录。
  但是你怎么知道cmd.exe被调用的时候用的是什么参数呢?那么在微软的调试工具(可以在vckbase站点下载)中有一个命令行程序TLIST.EXE,用它可以知道cmd.exe运行的参数,TLIST.EXE是个控制台程序,其输出的信息包括运行进程清单以及命令行,如果用进程ID作为参数调用此程序,例如用cmd.exe的进程ID作为参数载C:盘根目录(C:\)运行TLIST:


C:\>tlist 632

 632 CMD.EXE           C:\WINNT\System32\cmd.exe - tlist 632

   CWD:     C:\

   CmdLine: C:\WINNT\System32\cmd.exe /k cd "C:\"

   VirtualSize:    13408 KB   PeakVirtualSize:    13412 KB

   WorkingSetSize:   948 KB   PeakWorkingSetSize:   952 KB

   NumberOfThreads: 1

    968 Win32StartAddr:0x4ad1a420 LastErr:0x000000cb State:Waiting

  5.0.2195.1600 shp  0x4ad00000  cmd.exe

  5.0.2195.1600 shp  0x77f80000  ntdll.dll

  5.0.2195.1600 shp  0x77e80000  KERNEL32.dll

  5.0.2195.1600 shp  0x77e10000  USER32.dll

  5.0.2195.1340 shp  0x77f40000  GDI32.DLL

  5.0.2195.1600 shp  0x77db0000  ADVAPI32.dll

  5.0.2195.1615 shp  0x77d40000  RPCRT4.DLL

     6.1.8637.0 shp  0x78000000  MSVCRT.dll

 
 
本文章更多内容1 - 2 - 下一页>>
相关文章

VC初学者入门系列之二:消息循环
PhotoShop插件开发之选区(Selection)
编写多文档应用程序
COM 组件设计与应用(五)——用 ATL 写第一
MFC程序员的WTL指南: 中文版序言
不重起Windows直接更改IP地址
类似于FlashGet的悬浮框的制作
毫秒定时器
C :使用 Visual C 2005 的现代语言特色
IP Messenger 详细分析
WMI 的一个实现
自绘按钮的实现
《系统飞狐》系列软件中的“系统监视器”开
定时显示远程计算机的桌面
一个实用的CToolBar扩展类CToolBarEx
简单实用的Xml解析类
SQL Server 索引结构及其使用(三)
图形显示特技算法
论程序设计方法
可以替代系统记事本的程序

相关评论


本文章所属分类:首页 VC++

  热门关键字: