From b35218961942aa8740ab82010757cd0807196866 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Tue, 9 Mar 2010 00:20:06 +0000 Subject: removed resource.h + add cfmgr32 DLL refs --- driver-install_2008.vcproj | 6 +----- driver-resources_2008.vcproj | 4 ---- libusb/os/driver_install.c | 22 ++++++++++++++++++++++ libusb_2008.sln | 1 + msvc/driver_resources.rc | 2 +- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/driver-install_2008.vcproj b/driver-install_2008.vcproj index b902484..a2182c1 100644 --- a/driver-install_2008.vcproj +++ b/driver-install_2008.vcproj @@ -275,11 +275,7 @@ > - - diff --git a/driver-resources_2008.vcproj b/driver-resources_2008.vcproj index 3dbaa88..5e6f977 100644 --- a/driver-resources_2008.vcproj +++ b/driver-resources_2008.vcproj @@ -285,10 +285,6 @@ > - - diff --git a/libusb/os/driver_install.c b/libusb/os/driver_install.c index f04e78e..0855f0f 100644 --- a/libusb/os/driver_install.c +++ b/libusb/os/driver_install.c @@ -88,6 +88,7 @@ const struct res resource[] = { {"AMD64_DLL1" , "amd64", "WdfCoInstaller01009.dl {"X86_DLL2", "x86", "winusbcoinstaller2.dll"} }; const int nb_resources = sizeof(resource)/sizeof(resource[0]); +extern char* sanitize_path(const char* path); char* guid_to_string(const GUID guid) { static char guid_string[MAX_GUID_STRING_LENGTH]; @@ -109,6 +110,19 @@ void free_di(struct driver_info *start) } } +bool cfgmgr32_available = false; + +static int init_cfgmgr32(void) +{ + DLL_LOAD(Cfgmgr32.dll, CM_Get_Parent, TRUE); + DLL_LOAD(Cfgmgr32.dll, CM_Get_Child, TRUE); + DLL_LOAD(Cfgmgr32.dll, CM_Get_Sibling, TRUE); + DLL_LOAD(Cfgmgr32.dll, CM_Get_Device_IDA, TRUE); + DLL_LOAD(Cfgmgr32.dll, CM_Get_Device_IDW, TRUE); + + return LIBUSB_SUCCESS; +} + struct driver_info* list_driverless(void) { unsigned i, j; @@ -126,6 +140,10 @@ struct driver_info* list_driverless(void) struct driver_info *ret = NULL, *cur = NULL, *drv_info; bool driverless; + if (!cfgmgr32_available) { + init_cfgmgr32(); + } + // List all connected USB devices dev_info = SetupDiGetClassDevs(NULL, "USB", NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); if (dev_info == INVALID_HANDLE_VALUE) { @@ -166,6 +184,7 @@ struct driver_info* list_driverless(void) continue; } */ + // TODO: can't always get a device desc => provide one if ( (!SetupDiGetDeviceRegistryProperty(dev_info, &dev_info_data, SPDRP_DEVICEDESC, ®_type, (BYTE*)desc, MAX_KEY_LENGTH, &size)) ) { @@ -180,7 +199,9 @@ struct driver_info* list_driverless(void) i, r); continue; } + sanitized_short = sanitize_path(path); + if (sanitized_short == NULL) { usbi_err(NULL, "could not sanitize path for device %d", i); continue; @@ -224,6 +245,7 @@ struct driver_info* list_driverless(void) token = strtok (NULL, "#&"); } } + return ret; } diff --git a/libusb_2008.sln b/libusb_2008.sln index 00c19fe..15eae8d 100644 --- a/libusb_2008.sln +++ b/libusb_2008.sln @@ -7,6 +7,7 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lsusb", "examples\lsusb_2008.vcproj", "{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}" ProjectSection(ProjectDependencies) = postProject {9AA0E745-1A0A-4700-8ECB-6A6DE9DBF8B9} = {9AA0E745-1A0A-4700-8ECB-6A6DE9DBF8B9} + {BA852F82-4329-4CBE-82AA-9947FB48AD83} = {BA852F82-4329-4CBE-82AA-9947FB48AD83} {349EE8F9-7D25-4909-AAF5-FF3FADE72187} = {349EE8F9-7D25-4909-AAF5-FF3FADE72187} EndProjectSection EndProject diff --git a/msvc/driver_resources.rc b/msvc/driver_resources.rc index b74831d..492f1d0 100644 --- a/msvc/driver_resources.rc +++ b/msvc/driver_resources.rc @@ -1,6 +1,6 @@ // Microsoft Visual C++ generated resource script. // -#include "resource.h" +//#include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -- cgit v1.2.1