Re: 张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件

Windows内核调试

张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件


jlflyfox 2010-04-07, 12:58 下午

我现在的笔记本电脑xp出现了一个很奇怪的问题,安装任何硬件,比如usb lan,都先说找到新硬件,然后提示安装,结果每次都提示找不到指定文件,又不说具体是哪个文件,而驱动盘里面有inf/sys/cat文件,最后安装失败,在相应硬件哪里出现黄色惊叹号,真是郁闷

我现在打算调试下到底哪一步出现了问题,该对哪个程序进行断点设置啊

Re: 张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件


王宇 2010-04-07, 13:22 下午
我上次只跟踪到 setupapi!SetupDiSetDeviceInstallParams、setupapi!SetupDiBuildDriverInfoList 等就没往后跟了,我当时是从 netcfgx!CImplINetCfg::SelectWithFilterAndInstall 开始的。解决问题的一个捷径是开个 Procmon,看安装流程 ( 直到出现黄色惊叹号 ) 的栈回溯信息等。

Re: 张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件


jlflyfox 2010-04-07, 15:49 下午

谢谢,

另外,我在setupapi.log里面看到有“#E154 类别安装程式失败。 错误 2系统找不到指定文件”,我比较气愤为什么这个log不把哪个指定文件给提示出来

 

Re: 张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件


格蠹老雷 2010-04-07, 22:22 下午

建议启用更详细的安装日志,在如下注册表键下,加入一个LogLevel键值,取值为0xFF:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup

细节请参见下面链接中的Word文档,http://www.microsoft.com/whdc/driver/install/setupapilog.mspx 附录A。

Re: 张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件


jlflyfox 2010-04-08, 10:30 上午

多谢张老师和王宇!

问题已经搞定,居然是如下

http://support.microsoft.com/kb/937056

与这个有关

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\Config
 
我自己还没有跟踪到那里,google出来的

 

Re: 张老师或者哪位高手,请问该如何调试系统安装或者加载某个硬件


王宇 2010-04-08, 13:37 下午

这个注册表键值是这里读取的:netcfgx!HrCiSelectComponent()

该函数内部有一个 HrLoadNetworkConfigurationFromRegistry(),伪代码片段如下:

v4 = HrLoadNetworkConfigurationFromRegistry(0x20019u, &Data);

------------------------------------------------------------------------------

__stdcall HrLoadNetworkConfigurationFromRegistry(int a1, LPVOID lpData)
{
    int v2;
    int v4;
    HKEY Type;
    LPVOID lpMem;

    v2 = HrOpenNetworkKey(0x20019u, &Type);
    if ( !v2 )
    {
        if ( HrRegQueryTypeWithAlloc(Type, (LPVOID)L"Config", 3, (int)&lpMem, (int)&v4) )
        ......

其中 HrOpenNetworkKey() 就是打开 "System\\CurrentControlSet\\Control\\Network",如下:

int __stdcall HrOpenNetworkKey(REGSAM samDesired, PHKEY phkResult)
{
    return HrRegOpenKeyEx(HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Control\\Network", samDesired, phkResult);
}

Powered by Community Server Powered by CnForums.Net