使用INF文件c++以编程方式安装驱动程序
Installing a driver programmatically using INF file c++
这里有人能告诉我如何安装第三方设备驱动程序吗如果提供了所有所需的文件,即inf文件、.sys等,则以编程方式。这个此解决方案应使用的最低操作系统是Windows2000。
我尝试将.inf
文件复制到Win Folder\INF文件夹和sys文件中进入Win文件夹\system32\drivers,但每次插入设备时,窗口弹出"找到新硬件"用户界面,这正是我试图避免的。
以下是我尝试过的内容,但函数返回error 87 (The parameter is incorrect)
。
HINF HInf;
UINT ErrorLine;
BOOL bRes = FALSE;
PBOOL FileWasInUse = FALSE;
LPCSTR szSourceFileName = _T("C:\Drivers_HypercomP1320\hypvcpusb.inf");
LPCSTR szInfFileName = _T("hypvcpusb.inf");
PVOID Context = NULL;
HInf = SetupOpenInfFile ( szSourceFileName, NULL, INF_STYLE_WIN4, &ErrorLine);
LPCSTR SourceFile = ("hypvcp.sys");
LPCSTR SourcePathRoot = _T("C:\Drivers_HypercomP1320");
LPCSTR DestinationName = _T("C:\WINDOWS\system32\drivers\hypvcp.sys");
bRes = SetupInstallFileEx ( HInf, NULL, SourceFile, SourcePathRoot, DestinationName, SP_COPY_FORCE_IN_USE,
(PSP_FILE_CALLBACK)CopyMsgHandler, Context, FileWasInUse);
DWORD dwVal = GetLastError();
SetupCloseInfFile(HInf);
// Callback function
UINT CopyMsgHandler (UINT Context, UINT Notification,UINT_PTR Param1, UINT_PTR Param2)
{
UINT rtnValue = NO_ERROR;
return rtnValue;
}
谢谢。
是。你首先打电话给
SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (manager)
{
wprintf(L"Opened SC Managern");
}
else
{
wprintf(L"Open SC Manager failedn");
return;
}
然后将.inf文件存储在szInfFileName中,您可以调用:
HInf = SetupOpenInfFile(szInfFileName.c_str(), NULL, INF_STYLE_WIN4, &ErrorLine);
然后你打电话给
if (SetupInstallFileEx(HInf, NULL, SourceFile, SourcePathRoot, DestinationName, SP_COPY_NEWER_OR_SAME, NULL, Context, &FileWasInUse) == NULL)
SourceFile=驱动程序文件名(以.sys结尾)SourcePathRoot=驱动程序文件的位置(将是程序运行的路径)DestinationName=要安装的驱动程序的完整路径(例如:
c:windowssystem32driversyourdriver.sys
然后是注册表。你需要在下为你的司机添加一个条目
HKEY_LOCAL_MACHINESystemCurrentControlSetServices
此条目(密钥)应具有:驱动程序名称、显示名称、说明、ErrorControl和Group。
下一步,您使用启动驱动程序
SC_HANDLE service = CreateService(manager,
DRIVER_NAME,
DRIVER_NAME,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
KeyName,
NULL, NULL, NULL, NULL, NULL);
当KeyName是System32下的驱动程序路径时,如注册表项中所示。例如:
system32driversyourdriver.sys
最后一步:
BOOL result = StartService(service, 0, NULL);
和清理
CloseServiceHandle(manager)
您可以使用InstallHinfSection。
这可能是您使用
PBOOL FileWasInUse=FALSE;
你应该在中更改它
BOOL FileWasInUse=FALSE;
并在函数调用中使用&FileWasInUse(注意&-字符)。
相关文章:
- 在Ubuntu 16.04上安装Cilk时出现问题
- 如何在c++中为模板函数实例创建快捷方式
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- C++:如何在CLion IDE中安装Boost
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 如何以编程方式在Linux中获取安装点的源设备
- 以独立于路径/安装/构建的方式了解资源路径的好方法
- 在Debian Jessie上安装多个g++工具链的最佳方式是什么
- Qt/C++/Android - 如何安装 .APK文件以编程方式
- 如何使用c++语言以编程方式获取已安装的所有Java JRE(JVM)及其路径
- 如何以编程方式从签名文件安装数字证书
- 使用C++以编程方式执行静默安装
- 如何以编程方式检查Windows Server 2016上是否安装了桌面体验
- 使用INF文件c++以编程方式安装驱动程序
- 以编程方式删除Windows中的COM端口(安装API?)