/******************************************************************************* * * (C) COPYRIGHT MICROSOFT CORP., 1993-1995 * TITLE: ENUMFAIL.CPP * VERSION: 1.0 * AUTHOR: jsenior * DATE: 10/28/1998 * ******************************************************************************** * * CHANGE LOG: * * DATE REV DESCRIPTION * ---------- ------- ---------------------------------------------------------- * 10/28/1998 jsenior Original implementation. * *******************************************************************************/ #include "usbpopup.h" #include "itemfind.h" #include "debug.h" #include "usbutil.h" // // Refresh the contents of the treeview control. // Find all hubs with unused ports on them. If there are none, find some which // have devices requiring less than 100 mA. // BOOL UsbEnumFailPopup::Refresh() { TV_INSERTSTRUCT item; int i=0; //, size; PUSB_ACQUIRE_INFO acquireInfoController = 0; BOOL result = FALSE; TCHAR buf[MAX_PATH]; String hubName = HubAcquireInfo->Buffer; // // Set the window's title bar and the rest of the messages // LoadString(gHInst, IDS_ENUMERATION_FAILURE, buf, MAX_PATH); SetWindowText(hWnd, buf); if (!SetTextItem(hWnd, IDC_POWER_NOTIFICATION, IDS_ENUMFAIL_NOTIFICATION) || !SetTextItem(hWnd, IDC_POWER_EXPLANATION, IDS_ENUMFAIL_COURSE) || !SetTextItem(hWnd, IDC_POWER_RECOMMENDATION, IDS_ENUMFAIL_RECOMMENDATION)) { goto OvercurrentRefreshError; } // // Clear all UI components, and then recreate the rootItem // UsbTreeView_DeleteAllItems(hTreeDevices); if (rootItem) { DeleteChunk(rootItem); delete rootItem; } rootItem = new UsbItem; AddChunk(rootItem); // // Get the controller name and enumerate the tree // acquireInfoController = GetControllerName(WmiHandle, InstanceName); if (!acquireInfoController) { goto OvercurrentRefreshError; } if (!rootItem->EnumerateController(0, acquireInfoController->Buffer, &ImageList, 0)) { goto OvercurrentRefreshError; } acquireInfoController = (PUSB_ACQUIRE_INFO) LocalFree(acquireInfoController); if (rootItem->child) { if (!deviceItem.configInfo->devInst) { // // Device has been removed by either the hub or the user. Find the // hub that the device was attached to and highlight the port. // UsbItemActionFindOvercurrentHubPort f2(hubName, deviceItem.cxnAttributes.ConnectionIndex); rootItem->Walk(f2); if (f2.GetDevice()) { result=InsertTreeItem (hTreeDevices, rootItem->child, TreeView_GetRoot(hTreeDevices), &item, TrueAlways, UsbItemActionFindOvercurrentHubPort::IsValid, UsbItemActionFindOvercurrentHubPort::IsExpanded); } } else { // // The device hasn't been removed by either the hub or the user yet // Find the overcurrent device // UsbItemActionFindOvercurrentDevice f1(deviceItem.configInfo->devInst); rootItem->Walk(f1); if (f1.GetDevice()) { // // Device is still attached // result=InsertTreeItem (hTreeDevices, rootItem->child, TreeView_GetRoot(hTreeDevices), &item, TrueAlways, UsbItemActionFindOvercurrentDevice::IsValid, UsbItemActionFindOvercurrentDevice::IsExpanded); } } } return result; OvercurrentRefreshError: if (acquireInfoController) { LocalFree(acquireInfoController); } return FALSE; }