diff --git a/device/win_usb/usbview/devnode.c b/device/win_usb/usbview/devnode.c index a832b98..e0e2a05 100644 --- a/device/win_usb/usbview/devnode.c +++ b/device/win_usb/usbview/devnode.c @@ -123,6 +123,7 @@ DriverNameToDeviceInst( { done = TRUE; *pDevInfo = deviceInfo; + deviceInfo = INVALID_HANDLE_VALUE; CopyMemory(pDevInfoData, &deviceInfoData, sizeof(deviceInfoData)); FREE(buf); break; @@ -137,7 +138,7 @@ DriverNameToDeviceInst( Done: - if (bResult == FALSE) + //if (bResult == FALSE) { if (deviceInfo != INVALID_HANDLE_VALUE) { diff --git a/device/win_usb/usbview/enum.c b/device/win_usb/usbview/enum.c index 1973b70..6ffc9a3 100644 --- a/device/win_usb/usbview/enum.c +++ b/device/win_usb/usbview/enum.c @@ -3807,7 +3807,16 @@ void free_usb_device_info(PUSBDEVICEINFO pudi) if (pudi->ConfigDesc) FREE(pudi->ConfigDesc); if (pudi->StringDescs) + { + PSTRING_DESCRIPTOR_NODE next = pudi->StringDescs->Next; FREE(pudi->StringDescs); + while (next) + { + pudi->StringDescs = next; + next = pudi->StringDescs->Next; + FREE(pudi->StringDescs); + } + } if (pudi->BosDesc) FREE(pudi->BosDesc); if (pudi->ConnectionInfoV2) diff --git a/device/win_usb/usbview/enum.h b/device/win_usb/usbview/enum.h index 3b37763..8f4b441 100644 --- a/device/win_usb/usbview/enum.h +++ b/device/win_usb/usbview/enum.h @@ -96,11 +96,11 @@ Revision History: #else -#define ALLOC(dwBytes) GlobalAlloc(GPTR,(dwBytes)) +#define ALLOC(dwBytes) allocate_mem(dwBytes) // GlobalAlloc(GPTR,(dwBytes)) -#define REALLOC(hMem, dwBytes) GlobalReAlloc((hMem), (dwBytes), (GMEM_MOVEABLE|GMEM_ZEROINIT)) +//#define REALLOC(hMem, dwBytes) GlobalReAlloc((hMem), (dwBytes), (GMEM_MOVEABLE|GMEM_ZEROINIT)) -#define FREE(hMem) GlobalFree((hMem)) +#define FREE(hMem) free(hMem) // GlobalFree((hMem)) #define CHECKFORLEAKS() @@ -111,6 +111,16 @@ Revision History: #define STR_INVALID_POWER_STATE "(invalid state) " #define STR_UNKNOWN_CONTROLLER_FLAVOR "Unknown" +FORCEINLINE void* allocate_mem(size_t len) +{ + void* mem = malloc(len); + + if (mem) + memset(mem, 0, len); + + return mem; +} + FORCEINLINE VOID InitializeListHead(