diff options
author | Pete Batard <pbatard@gmail.com> | 2010-03-09 00:20:06 +0000 |
---|---|---|
committer | Pete Batard <pbatard@gmail.com> | 2010-03-09 00:20:06 +0000 |
commit | b35218961942aa8740ab82010757cd0807196866 (patch) | |
tree | 6bce833cb65f209a5800445862a8d4bd40805ed4 /libusb | |
parent | cb781bf531ee56c5cbb06e3595edf73eedfe7bca (diff) | |
download | libusb-b35218961942aa8740ab82010757cd0807196866.tar.gz |
removed resource.h + add cfmgr32 DLL refsa163
Diffstat (limited to 'libusb')
-rw-r--r-- | libusb/os/driver_install.c | 22 |
1 files changed, 22 insertions, 0 deletions
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; } |