Kei*_*h4G 9 c c++ windows dll winapi
我有一个调用的过程CreateProcess
.似乎CreateProcess
返回非零表示成功.但是,然后立即设置该过程的HANDLE,表示该过程已退出.当我打电话时GetExitCodeProcess
,STATUS_DLL_NOT_FOUND
然后返回.
我知道DLL丢失了.我甚至知道究竟是哪一个.但是,我不明白的是如何以编程方式解决这个问题.
我注意到Windows将显示一个对话框,说明该进程无法启动,因为它无法找到指定的DLL(屏幕截图:http://www.mediafire.com/view/?kd9ddq0e2dlvlb9).在对话框中,Windows指定缺少哪个DLL.但是,我发现无法以编程方式自行获取该信息.
如果进程无法启动并将返回STATUS_DLL_NOT_FOUND
,我如何以编程方式检索目标进程所链接的库名称,该名称无法找到?这样我就可以在错误报告中自动记录在给定安装中DLL似乎丢失或损坏的内容.
CreateProcess返回0表示成功。
CreateProcess()
返回a BOOL
,其中0是FALSE
,也就是失败不成功。
如果某个进程无法启动并返回STATUS_DLL_NOT_FOUND,我如何以编程方式检索找不到目标进程所链接到的库名?
不幸的是,没有用于此的API。唯一的选择是手动访问并枚举可执行文件的IMPORTS
表以查明其使用的DLL,然后递归访问并枚举其IMPORTS
表,手动检查找到的每个DLL参考,以查看该DLL文件是否存在于操作系统的搜索路径中或不。
非常困难的方法是:解析.EXE和.DLL文件并创建.DLL文件的依赖关系树。
我认为没有一种方法可以获取丢失的 DLL 文件列表:当 Windows 发现一个丢失的 DLL 文件时,它会停止加载,因此如果丢失一个 DLL 文件,您将无法发现是否丢失了更多 DLL 文件。
您可能遇到的另一个问题是旧的 DLL 版本可能缺少“导出”(函数)。这比依赖树更难检测。
归档时间: |
|
查看次数: |
1604 次 |
最近记录: |