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

在Windows中安装文件系统驱动程序的api是什么?

  •  5
  • Treb  · 技术社区  · 17 年前

    请开导我!

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

    正如你所问的,安装驱动程序需要哪些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路线,请查看 this Microsoft article .

        2
  •  1
  •   Treb    17 年前

    MSDN SetupCopyOEMInf 但也注意到在Win2k和较旧的系统上, '文件系统驱动程序通常由服务控制管理器安装'

    我找到了另一个 Ext2 driver at sourceforge 它附带了Inno Setup安装脚本。在那里,他们只是在下面添加了一些注册表项 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

    来吧,伙计们!这里有丰厚的赏金可供捕捞!

        3
  •  0
  •   paxdiablo    17 年前

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

        4
  •  0
  •   user82238 user82238    17 年前