我想在 Windows XP 下为 Ext2 分区安装驱动程序,安装将使用自写的 Inno Setup 脚本完成。我需要为此调用哪些 API 函数?从我到目前为止搜索的内容来看,我似乎不需要 inf 文件,因此不需要调用 SetupCopyOEMInf。但我不知道该怎么做...
请赐教!
我想在 Windows XP 下为 Ext2 分区安装驱动程序,安装将使用自写的 Inno Setup 脚本完成。我需要为此调用哪些 API 函数?从我到目前为止搜索的内容来看,我似乎不需要 inf 文件,因此不需要调用 SetupCopyOEMInf。但我不知道该怎么做...
请赐教!
当您询问安装驱动程序需要哪些 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 文章。
好吧,我找到了更多信息:
MSDN声明“您应该使用 INF 文件安装文件系统驱动程序”(通过调用SetupCopyOEMInf
等),但也指出在 Win2k 和旧系统上,“文件系统驱动程序通常由服务控制管理器安装”
我在 sourceforge找到了另一个带有 Inno Setup 安装脚本的 Ext2 驱动程序。他们只是在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"
当然,根据相关驱动程序的具体情况,Parameters
可能需要在子项中添加更多条目。
我仍然希望有人能够对这个问题有更多的了解,特别是关于如何使用 inf 文件进行安装的一些细节,因为这是 MS 推荐的方式。
来吧,伙计们!这里有一个不错的赏金!
有很多方法可以解决这个问题。
1/ 查看产品是否有静默安装模式(例如,使用配置文件进行安装)。然后,您只需将其合并到您自己的安装中。
2/ 有一些程序可以模拟用户,例如 Rational Robot(我不建议这样做,因为它是商业的,但周围可能有免费的)。我们主要将它们用于图形应用程序的自动化测试,但它们也可以很容易地使用它来运行安装程序。
3/ 联系开发人员以查看实际安装过程需要什么,然后复制它。
4/ 微软有许多系统工具(这里)可以跟踪对文件系统、注册表等的更改。您可以使用它们对安装过程进行逆向工程,并在您自己的安装中执行相同的操作。
就个人而言,我会先选择3号。开发人员会很高兴知道他们的产品正在被使用,并且可以很容易地提供信息。他们甚至可能为您编写一个静默安装程序,因为这将是他们的产品在企业环境中的一个额外卖点(向他们建议)。
我写了一个 TDI 过滤器驱动程序。
当我开始编写 .inf 文件时,我花了两个星期的痛苦才让某些东西起作用,但我仍然没有真正理解它,因为它没有真正的意义;你必须做的似乎很武断。当我尝试使用 INF 文件时,它们几乎完全没有文档记录,而且异常复杂。