代码之家  ›  专栏  ›  技术社区  ›  Treb

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

  •  4
  • Treb  · 技术社区  · 16 年前

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

    请开导我!

    4 回复  |  直到 16 年前
        1
  •  6
  •   QAZ    16 年前

    当您询问安装驱动程序需要哪些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路线走,请签出 this Microsoft article .

        2
  •  1
  •   Treb    16 年前

    这个 MSDN 声明 '您应该使用INF文件安装文件系统驱动程序' (打电话 SetupCopyOEMInf 等等),但也注意到在Win2k和更旧的系统上,

    我找到了另一个 Ext2 driver at sourceforge 它附带了一个Inno安装脚本。他们只是在下面添加了一些注册表项 HKLM\SYSTEM\CurrentControlSet\Services\ .

    我相信添加这些条目等于创建一个具有 sc.exe OpenSCManager CreateService 应用程序编程接口。我更喜欢注册表方式,因为它更简单,而且我认为使用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推荐的方法。

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

        3
  •  0
  •   paxdiablo    16 年前

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

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

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

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

        4
  •  0
  •   user82238 user82238    15 年前

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

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