• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > USB驱动安装文件setup的制作问题

USB驱动安装文件setup的制作问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了usb驱动文件,win7 usb驱动文件,usb驱动文件下载,usb驱动文件夹在哪,usb驱动inf文件下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: USB驱动安装文件setup的制作问题
描述:

USB驱动安装时setup程序如何使得设备接到PC时不用手动指向某个驱动inf和sys所在地文件夹,而是直接让系统从某个文件夹安装驱动?通过改inf文件的SourceDisksNames字段能否解决?否则是否设置注册表?


解决方案1:

发表于: 2004/7/27 - 10:26 
/*************************************************************************************
*
* Name: FindWdmDevice
* Desc: Find the device info
* Para: HardwareId: the device's hardware id
* pDeviceINfoData: Save the device info
* Retn: if find the device info, return DeviceInfoSet that contain the device info, 
* Otherwise return INVALID_HANDLE_VALUE
*
***************************************************************************************/
HDEVINFO
FindWdmDevice( 
IN LPCTSTR HardwareId,
IN PSP_DEVINFO_DATA pDeviceInfoData
)
{
HDEVINFO DeviceInfoSet;
DWORD i;
DWORD DataT;
LPTSTR p;
CCHAR Buffer[ 1024 ];
DWORD BufferSize = 0;
if( HardwareId == NULL || pDeviceInfoData == NULL )
return INVALID_HANDLE_VALUE;
//
// Create a Device Information Set with all present devices.
//
DeviceInfoSet = SetupDiGetClassDevs(NULL, // All Classes
0,
0, 
DIGCF_ALLCLASSES ); 
if( DeviceInfoSet == INVALID_HANDLE_VALUE )
{
TRACE( "GetClassDevs(All Present Devices) failedn" );
return INVALID_HANDLE_VALUE;
}
TRACE( "Search for Device ID: [%s]n", HardwareId );
pDeviceInfoData->cbSize = sizeof(SP_DEVINFO_DATA);
for ( i=0; SetupDiEnumDeviceInfo( DeviceInfoSet, i, pDeviceInfoData ); i++ )
{
// 获取DEVICE_ID
BufferSize = sizeof( Buffer );
if( !SetupDiGetDeviceRegistryProperty(
DeviceInfoSet,
pDeviceInfoData,
SPDRP_HARDWAREID,
&DataT,
(PBYTE)Buffer,
BufferSize,
&BufferSize) )
{
// 未知错误
// TRACE1( "GetDeviceRegistryProperty failed: 0x%x", GetLastError() );
continue;
}
// 按字符串比较(一个设备可能有多个ID )
for( p = Buffer; *p && ( p < &Buffer[BufferSize] ); p += lstrlen( p ) + sizeof( TCHAR ) )
{
// TRACE1( "Device: %s", p );
if (!_tcsicmp( HardwareId, p ) )
{
// 找到了指定的设备
return DeviceInfoSet;
}
}
}// for
// 没找到
SetupDiDestroyDeviceInfoList(DeviceInfoSet);
return INVALID_HANDLE_VALUE;
}
typedef BOOL ( WINAPI *FPUpdatePNPDevice )( HWND hwndParent, LPCTSTR HardwareId, LPCTSTR FullInfPath, DWORD InstallFlags, PBOOL bRebootRequired OPTIONAL );
typedef BOOL ( WINAPI *FPSetupCopyOEMInf )( LPCTSTR, LPCTSTR, DWORD, DWORD, LPTSTR, DWORD, PDWORD, LPTSTR* );
/*************************************************************************************
*
* Name: UpdateWinNTDriver
* Desc: Update the device driver under WindowsNT based os
* Para: InfPath: the device's inf file path, must include full path and file name
* HardwareId: the device's hardware id
* pisNeedReboot: ture means need restart the windows to complete the install
* Retn: return TRUE means install success, otherwise install failed
*
***************************************************************************************/
BOOL
UpdateWinNTDriver(
IN LPCTSTR InfPath,
IN LPCTSTR HardwareId,
IN OUT PBOOL pisNeedReboot 
)
{
HDEVINFO DeviceInfoSet;
SP_DEVINFO_DATA DeviceInfoData;
FPUpdatePNPDevice fpUpdatePNPDevice;
FPSetupCopyOEMInf fpSetupCopyOEMInf;
HMODULE hModule;
BOOL bRet = FALSE;
DWORD dwErrCode;
DeviceInfoSet = FindWdmDevice( HardwareId, &DeviceInfoData );
if( DeviceInfoSet == INVALID_HANDLE_VALUE )
{
hModule = LoadLibrary( "SetupApi.dll" );
if( hModule != NULL )
{
fpSetupCopyOEMInf = ( FPSetupCopyOEMInf )
GetProcAddress( hModule, "SetupCopyOEMInfA" );
if( fpSetupCopyOEMInf == NULL )
{
TRACE1( "Get SetupCopyOEMInf function failed: 0x%x", GetLastError() );
bRet = FALSE;
}
else
{
bRet = ( *fpSetupCopyOEMInf )( InfPath, NULL, SPOST_PATH, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL );
if( !bRet )
{
dwErrCode = GetLastError();
TRACE1( "SetupCopyOEMInf failed: 0x%x", dwErrCode );
if( dwErrCode == ERROR_FILE_EXISTS )
{
TRACE0( "The inf file exists" );
bRet = TRUE;
}
}
}
FreeLibrary( hModule );
}
return bRet;
}
SetupDiDestroyDeviceInfoList( DeviceInfoSet );
hModule = LoadLibrary( "newdev.dll" );
if( hModule != NULL )
{
fpUpdatePNPDevice = ( FPUpdatePNPDevice )
GetProcAddress( hModule, "UpdateDriverForPlugAndPlayDevicesA" );
if( fpUpdatePNPDevice == NULL )
{
TRACE0( "UpdateDriverForPlugAndPlayDevice function not find" );
FreeLibrary( hModule );
return FALSE;
}
bRet = ( *fpUpdatePNPDevice )( GetDesktopWindow(), 
HardwareId,
InfPath,
INSTALLFLAG_FORCE,
pisNeedReboot
);
if( !bRet )
{
TRACE1( "UpdateDriverForPlugAndPlayDevice failed: 0x%x", GetLastError() );
}
FreeLibrary( hModule );
}
return bRet;
}
 
/*************************************************************************************
*
* Name: UpdateWin9xDriver
* Desc: Update the device driver under Windows9x based os
* Para: InfPath: the device's inf file path, must include full path and file name
* HardwareId: the device's hardware id
* pisNeedReboot: ture means need restart the windows to co

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • USB驱动安装文件setup的制作问题

相关文章

  • 2017-06-05 如何读到扫描仪的特征序列号?
  • 2017-06-05 不会焊板子就不是好硬件工程师?
  • 2017-06-05 在基于linux30的arm_a9中移植mt9m001cmossensor
  • 2017-06-05 Windows下中断定时如何实现
  • 2017-06-05 windows2000有几种驱动程序?
  • 2017-06-05 如何获得Lua表中的entry数?
  • 2017-06-05 求文件系统驱动例子
  • 2017-06-05 uC/OS-II做嵌入式开发!!我就是找不到LIB库啊??
  • 2017-06-05 exe文本编辑来改变运行结果的问题?
  • 2017-06-05 CC1101接收部分求助

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c语言中嵌入lua
    • NTDDK编译的驱动注册后无法启动
    • 高分寻CPU原理相关电子书
    • 100分请问大侠刻录软件的实现
    • STM32调试ADS1256模块,初始化失败,DRDY一直为高电平,有木有谁调过的,给点建议,万分感谢!!!
    • 枚举音频设备
    • 枚举成功的USB,通信不可以可能有哪些问题
    • help:pcibusmaster驱动,应用程序如何访问commonbuffer
    • 关于vs1003和ds1302的sclk引脚
    • 关于IP电话驱动程序!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有