Winapi 在Windows中安装文件系统驱动程序的api函数有哪些?

Winapi 在Windows中安装文件系统驱动程序的api函数有哪些?,winapi,installation,driver,Winapi,Installation,Driver,我想在Windows XP下为Ext2分区安装一个驱动程序,安装将使用一个自编的Inno安装脚本完成。我需要为此调用哪些API函数?从谷歌搜索到目前为止,我似乎不需要inf文件,因此不需要调用SetupCopyOEMInf。但是我不知道该怎么做 请开导我 好吧,我找到了更多的信息: 声明“您应该使用INF文件安装文件系统驱动程序”(通过调用SetupCopyOEMInfetc),但还指出,在Win2k和更早的系统上,“文件系统驱动程序通常由服务控制管理器安装” 我还发现了另一个附带Inno安装脚

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


请开导我

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

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

我还发现了另一个附带Inno安装脚本的软件。他们只是在
HKLM\SYSTEM\CurrentControlSet\Services\
下添加了一些注册表项

我认为添加这些条目等于使用
sc.exe
工具创建服务,该工具在内部调用
OpenSCManager
CreateService
api。我更喜欢注册表方式,因为它更简单,而且我认为使用api调用没有好处,因为总是需要重新启动

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

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourService]
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"Type"=dword:00000001
"DisplayName"="YourServiceDisplayName"
"ImagePath"="System32\Drivers\YourService.sys"
当然,根据相关驱动程序的具体情况,可能需要在
参数
子项中输入更多的项

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


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

当您询问安装驱动程序需要哪些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;
}
您可能希望对文件系统驱动程序使用服务启动,而不是服务需求启动。如果你不能编写一个Inno脚本来完成上述任务,你可以从上面创建一个小的EXE,并让Inno在安装后运行它


如果您想沿着INF路线前进,请查看。

有许多方法可以实现这一点

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

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

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

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


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

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


当我开始编写.inf文件时,我花了两周的时间才开始工作,但我仍然没有真正理解它,因为它没有真正意义;你必须做的事情似乎很武断。当我试图使用INF文件时,它们几乎完全没有文档记录,而且非常复杂。

如果是在网上找到的,它不是附带了说明吗?如果这是你自己写的东西,你以前是怎么安装的,在开发的时候测试它的?它附带了一个安装程序,但是我想把它和一些其他东西一起打包到我自己的安装程序中,这样我就可以轻松地调整我家里每一个新的Windows安装。这是ext2cow吗?我对此很感兴趣,但我认为它只适用于linux。它被称为“用于Windows的Ext2可安装文件系统”,因为我已经怀疑INF方式相当复杂。。。叹气你知道你给出的例子是否需要重新启动吗?按照我的使用方式(使用服务需求启动),它不需要重新启动。