阅读:2716回复:14
inf驱动安装问题
我现在有一个inf文件。我想通过程序安装这个驱动程序,我试了几个办法都搞不定;下面是我试过的现象或尝试:
1.点鼠标右健安装没反应,好像不成功硬件列表中没有 2.控制面板中添加新硬件形式可以添加到硬件列表中 3.我想通过SetupCopyOEMInfo的方式安装也没反应。 4.我要实现的功能是:--选择这个驱动文件--〉调用这个驱动文件---〉弹出微软的数字签名信息(是否继续安装)--〉用户选择--〉安装成功。 5.我在调用这个驱动文件---〉弹出微软的数字签名信息这一步卡住了。 请大虾们指教。 |
|
最新喜欢:![]() |
沙发#
发布于:2003-02-21 20:17
你的INF文件是干什么的呀?
没驱动的事呀。 |
|
板凳#
发布于:2003-02-21 22:30
我的inf文件是别人的驱动,我想通过Platform SDK: Setup API或相关函数来实现调用别人的inf文件实现驱动安装
|
|
地板#
发布于:2003-02-22 10:09
m_hInf = SetupOpenInfFile(m_strInf, NULL, INF_STYLE_WIN4, NULL); if (m_hInf == INVALID_HANDLE_VALUE) return GetLastError(); if (!SetupDiGetINFClass(m_strInf, &m_guid, classname, sizeof(classname), NULL))//获得GUID,类名 return GetLastError(); GetWindowsDirectory(InfPath, MAX_PATH); strcat(InfPath,\"\\\\system32\\\\drivers\"); DWORD cbData = sizeof(InfPath); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_DRIVER_PATH_KEY, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS )//打开注册表 { if (RegDeleteValue(hKey,\"SourcePath\") == ERROR_SUCCESS)//删除健值 { PBYTE tempDir; DWORD sizedir; sizedir = strlen(InfPath)+2; tempDir = new BYTE[sizedir]; memset(tempDir, 0, sizedir); memcpy(tempDir, InfPath, sizedir); //添加健值 if (RegSetValueEx(hKey,TEXT(\"SourcePath\"),0,REG_SZ,tempDir,cbData) == ERROR_SUCCESS) { int i; i = 0; } } } m_hinfo = SetupDiCreateDeviceInfoList(&m_guid, NULL); m_devinfo.cbSize = sizeof(m_devinfo); //creates a new device information element and adds it as a new member to the specified device information set if (!SetupDiCreateDeviceInfo(m_hinfo, classname, &m_guid, NULL, NULL, DICD_GENERATE_ID, &m_devinfo)) return GetLastError(); DWORD size = strlen(m_strID) + 2; tempID = new BYTE[size]; memset(tempID,0,size); memcpy(tempID,m_strID,size); //sets the specified Plug and Play device property. if (!SetupDiSetDeviceRegistryProperty(m_hinfo, &m_devinfo, SPDRP_HARDWAREID, tempID, size)) return GetLastError(); //calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code) if (!SetupDiCallClassInstaller(/*DIF_REGISTERDEVICE*/DIF_INSTALLDEVICE, m_hinfo, &m_devinfo)) return GetLastError();//return BOOL reboot = FALSE; GetWindowsDirectory(InfPath, MAX_PATH); strcat(InfPath,\"\\\\inf\\\\\"); strcat(InfPath,m_strInf); //Given an INF and a hardware ID, UpdateDriverForPlugAndPlayDevices installs updated drivers for devices that match the hardware ID if (!UpdateDriverForPlugAndPlayDevices( NULL, m_strID, InfPath, INSTALLFLAG_FORCE, &reboot)) { errorno = GetLastError(); return errorno; } SetupCloseInfFile(m_hInf); delete[] tempID; //MessageBox(NULL,\"Install OK\",\"Install\",MB_OK); return 0; 在SetupDiCallClassInstaller时返回错误了,0xe0000219,是不是参数传的不对?第一个参数我试了很多都是一样的返回值。 |
|
地下室#
发布于:2003-02-24 21:20
有人愿意解释一下这个inf文件各字段的含义吗?
安装驱动时windows是如何调用文件中的各个字段的? ; Windows Modem Setup File ; Copyright (c) 1999 Microsoft Corporation ; Manufacturer: Siemens, 23.04.2001 Author: Karlo B. ; ; rev. 01.05.2001 by Tobias W. (W2K) ; rev. 17.05.2001 K.B. +++ hangup hinzugef |
|
5楼#
发布于:2003-02-25 09:20
是西门子手机的MODEM驱动
|
|
6楼#
发布于:2003-02-26 09:47
是西门子手机的modem驱动。你知道如何安装吗?
|
|
7楼#
发布于:2003-03-07 14:15
我也编一个程序,调用inf文件自动安装usb->serial芯片的驱程,可是无从下手,耐心等待你的结果。
|
|
8楼#
发布于:2003-03-08 13:56
我监控别人的程序发现可以使用如下13个函数实现,但我不知道如何组织,现在在每个每个函数的测试,好累哦
SetupDiEnumDeviceInfo SetupDiCreateDevRegKeyA SetupDiRegisterDeviceInfo SetupDiGetSelectedDriverA SetupDiCallClassInstaller SetupDiSetDeviceRegistryPropertyA SetupDiGetDeviceRegistryPropertyA SetupDiCreateDeviceInfoList SetupDiGetINFClassA SetupDiCreateDeviceInfoA SetupDiOpenDevRegKey SetupDiGetClassDevsA SetupDiDestroyDeviceInfoList :( |
|
9楼#
发布于:2003-03-25 09:38
楼上的如果你已经仅使用这十几个函数就做成了安装程序(即没有使用newdev.h),能不能给我发一份原码,我现在要做98下的安装程序,98下只有setupapi.h没有newdev.h,小弟在这里先谢了!!!
|
|
|
10楼#
发布于:2003-06-21 12:30
呵呵!我也在等待!如果作好了,能不能公开一下啊!谢谢了!
|
|
11楼#
发布于:2003-06-22 19:32
////////////////////////////////
98下的安装程序,98下只有setupapi.h没有newdev.h //////////////////////////////// 98下的安装程序只需要手动更改注册表就可以了 |
|
|
12楼#
发布于:2003-06-22 21:02
jr1017,能说清楚点吗?
|
|
13楼#
发布于:2005-03-16 16:36
这里的REG_DRIVER_PATH_KEY指的是哪一个路径啊?怎么来的? |
|
14楼#
发布于:2005-05-09 20:14
I know
|
|