4

我想在 Windows XP 下为 Ext2 分区安装驱动程序,安装将使用自写的 Inno Setup 脚本完成。我需要为此调用哪些 API 函数?从我到目前为止搜索的内容来看,我似乎不需要 inf 文件,因此不需要调用 SetupCopyOEMInf。但我不知道该怎么做...

请赐教!

4

4 回答 4

6

当您询问安装驱动程序需要哪些 API 函数时,这是我用来在 C 中加载驱动程序的一些代码:

bool LoadDriver( const char * cpDriverPath, const char * cpDriverName )
{
    SC_HANDLE hSCService;
    SC_HANDLE hSCManager;

    hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if( hSCManager == NULL )
        return false;

    hSCService = CreateService( hSCManager, cpDriverName, cpDriverName,
                                SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
                                SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
                                cpDriverPath, NULL, NULL, NULL, NULL, NULL );

    if( hSCService == NULL && GetLastError() == ERROR_SERVICE_EXISTS )
        hSCService = OpenService( hSCManager, cpDriverName, SERVICE_ALL_ACCESS );

    if( hSCService == NULL )
        return false;

    if( !StartService( hSCService, 0, NULL ) )
    {
        if( GetLastError() != ERROR_SERVICE_ALREADY_RUNNING )
            return false;
    }

    CloseServiceHandle( hSCManager );
    CloseServiceHandle( hSCService );

    return true;
}

您可能希望对文件系统驱动程序使用 SERVICE_BOOT_START 而不是 SERVICE_DEMAND_START。如果您不能编写 Inno 脚本来执行上述操作,您总是可以从上面制作一个小的 EXE,并让 Inno 作为安装后运行它。

如果你想走 INF 路线,请查看这篇 Microsoft 文章

于 2009-02-04T12:28:39.647 回答
1

好吧,我找到了更多信息:

MSDN声明“您应该使用 INF 文件安装文件系统驱动程序”(通过调用SetupCopyOEMInf等),但也指出在 Win2k 和旧系统上,“文件系统驱动程序通常由服务控制管理器安装”

在 sourceforge找到了另一个带有 Inno Setup 安装脚本的 Ext2 驱动程序。他们只是在HKLM\SYSTEM\CurrentControlSet\Services\.

我相信添加这些条目等于使用该工具创建一个服务,该sc.exe工具在内部调用OpenSCManagerCreateServiceapi。我更喜欢注册表方式,因为它更容易,而且我认为使用 api 调用没有任何优势,因为总是需要重新启动。

所以我最终得到了这个解决方案:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourService]
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"Type"=dword:00000001
"DisplayName"="YourServiceDisplayName"
"ImagePath"="System32\Drivers\YourService.sys"

当然,根据相关驱动程序的具体情况,Parameters可能需要在子项中添加更多条目。

我仍然希望有人能够对这个问题有更多的了解,特别是关于如何使用 inf 文件进行安装的一些细节,因为这是 MS 推荐的方式。

来吧,伙计们!这里有一个不错的赏金!

于 2009-02-04T11:54:25.877 回答
0

有很多方法可以解决这个问题。

1/ 查看产品是否有静默安装模式(例如,使用配置文件进行安装)。然后,您只需将其合并到您自己的安装中。

2/ 有一些程序可以模拟用户,例如 Rational Robot(我不建议这样做,因为它是商业的,但周围可能有免费的)。我们主要将它们用于图形应用程序的自动化测试,但它们也可以很容易地使用它来运行安装程序。

3/ 联系开发人员以查看实际安装过程需要什么,然后复制它。

4/ 微软有许多系统工具(这里)可以跟踪对文件系统、注册表等的更改。您可以使用它们对安装过程进行逆向工程,并在您自己的安装中执行相同的操作。

就个人而言,我会先选择3号。开发人员会很高兴知道他们的产品正在被使用,并且可以很容易地提供信息。他们甚至可能为您编写一个静默安装程序,因为这将是他们的产品在企业环境中的一个额外卖点(向他们建议)。

于 2009-02-06T02:26:36.647 回答
0

我写了一个 TDI 过滤器驱动程序。

当我开始编写 .inf 文件时,我花了两个星期的痛苦才让某些东西起作用,但我仍然没有真正理解它,因为它没有真正的意义;你必须做的似乎很武断。当我尝试使用 INF 文件时,它们几乎完全没有文档记录,而且异常复杂。

于 2009-03-29T06:47:56.850 回答