有人可以告诉我如何安装第三方设备驱动程序 以编程方式,如果提供了所有必需的文件,即inf文件,.sys等。该 这个解决方案最小的操作系统应该是Windows2000。
我尝试将.inf
文件复制到Win Folder \ INF文件夹和sys文件中
进入Win文件夹\ system32 \ drivers但每次插入设备,windows
弹出找到新硬件用户界面,这是我想避免的。
以下是我尝试过但该函数返回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;
}
感谢。
答案 0 :(得分:2)
您可以使用InstallHinfSection。
答案 1 :(得分:2)
可能是你使用
PBOOL FileWasInUse = FALSE;
。您应该在
中进行更改BOOL FileWasInUse = FALSE;
并使用& FileWasInUse 在函数调用中使用它(注意& -character)。
答案 2 :(得分:0)
是。首先打电话给
SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (manager)
{
wprintf(L"Opened SC Manager\n");
}
else
{
wprintf(L"Open SC Manager failed\n");
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:\windows\system32\drivers\yourdriver.sys
然后是注册表。您需要在
下为您的驱动程序添加一个条目HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\
此条目(密钥)应具有: 驱动程序名称,显示名称,描述,ErrorControl和Group。
下一步,使用以下命令启动驱动程序:
SC_HANDLE服务= CreateService(经理, DRIVER_NAME, DRIVER_NAME, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, 键名, NULL,NULL,NULL,NULL,NULL);
当KeyName是System32下的驱动程序路径时,如注册表项中所示。例如:
system32\drivers\yourdriver.sys
最后一步:
BOOL result = StartService(service, 0, NULL);
并清理
CloseServiceHandle(manager)