[Com0com-cvs] com0com/setup devutils.cpp, 1.3, 1.4 devutils.h, 1.2, 1.3 setup.cpp, 1.9, 1.10
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2006-11-10 14:07:48
|
Update of /cvsroot/com0com/com0com/setup In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv2957 Modified Files: devutils.cpp devutils.h setup.cpp Log Message: Implemented remove command Index: devutils.h =================================================================== RCS file: /cvsroot/com0com/com0com/setup/devutils.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** devutils.h 2 Nov 2006 16:20:44 -0000 1.2 --- devutils.h 10 Nov 2006 14:07:40 -0000 1.3 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.3 2006/11/10 14:07:40 vfrolov + * Implemented remove command + * * Revision 1.2 2006/11/02 16:20:44 vfrolov * Added usage the fixed port numbers *************** *** 26,30 **** * Initial revision * - * */ --- 29,32 ---- *************** *** 32,35 **** --- 34,49 ---- #define _C0C_DEVUTILS_H_ + /////////////////////////////////////////////////////////////// + + struct DevProperties { + DevProperties() : pDevId(), pPhObjName(), pLocation() {} + + const char *pDevId; + const char *pPhObjName; + const char *pLocation; + }; + + typedef const DevProperties *PCDevProperties; + class InfFile; *************** *** 37,64 **** HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, BOOL *pRebootRequired, void *pParam); int EnumDevices( InfFile &infFile, ! const char *pDevId, BOOL *pRebootRequired, PDEVCALLBACK pDevCallBack, void *pCallBackParam); BOOL DisableDevices( InfFile &infFile, ! const char *pDevId, BOOL *pRebootRequired); BOOL RestartDevices( InfFile &infFile, ! const char *pDevId, ! const char *pPhDevName, BOOL *pRebootRequired); BOOL RemoveDevices( InfFile &infFile, ! const char *pDevId, BOOL *pRebootRequired); --- 51,92 ---- HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, + PCDevProperties pDevProperties, BOOL *pRebootRequired, void *pParam); + /////////////////////////////////////////////////////////////// + int EnumDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired, PDEVCALLBACK pDevCallBack, void *pCallBackParam); + int DisableDevice( + HDEVINFO hDevInfo, + PSP_DEVINFO_DATA pDevInfoData, + PCDevProperties pDevProperties, + BOOL *pRebootRequired); + BOOL DisableDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired); BOOL RestartDevices( InfFile &infFile, ! PCDevProperties pDevProperties, ! BOOL *pRebootRequired); ! ! BOOL RemoveDevice( ! HDEVINFO hDevInfo, ! PSP_DEVINFO_DATA pDevInfoData, ! PCDevProperties pDevProperties, BOOL *pRebootRequired); BOOL RemoveDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired); *************** *** 69,71 **** --- 97,101 ---- void *pCallBackParam); + /////////////////////////////////////////////////////////////// + #endif /* _C0C_DEVUTILS_H_ */ Index: setup.cpp =================================================================== RCS file: /cvsroot/com0com/com0com/setup/setup.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** setup.cpp 3 Nov 2006 16:13:29 -0000 1.9 --- setup.cpp 10 Nov 2006 14:07:40 -0000 1.10 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.10 2006/11/10 14:07:40 vfrolov + * Implemented remove command + * * Revision 1.9 2006/11/03 16:13:29 vfrolov * Added port name length checkings *************** *** 151,154 **** --- 154,158 ---- HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, + PCDevProperties /*pDevProperties*/, BOOL *pRebootRequired, void *pParam) *************** *** 196,200 **** Trace("change %s %s\n", phPortName, buf); ! RestartDevices(infFile, C0C_PORT_DEVICE_ID, phDevName, pRebootRequired); } else { ShowError(MB_OK|MB_ICONWARNING, err, "portParameters.Save(%s)", phPortName); --- 200,208 ---- Trace("change %s %s\n", phPortName, buf); ! DevProperties devProperties; ! devProperties.pDevId = C0C_PORT_DEVICE_ID; ! devProperties.pPhObjName = phDevName; ! ! RestartDevices(infFile, &devProperties, pRebootRequired); } else { ShowError(MB_OK|MB_ICONWARNING, err, "portParameters.Save(%s)", phPortName); *************** *** 216,220 **** ChangeDeviceParams params(infFile, pPhPortName, pParameters); ! EnumDevices(infFile, C0C_BUS_DEVICE_ID, &rebootRequired, ChangeDevice, ¶ms); if (rebootRequired) --- 224,231 ---- ChangeDeviceParams params(infFile, pPhPortName, pParameters); ! DevProperties devProperties; ! devProperties.pDevId = C0C_BUS_DEVICE_ID; ! ! EnumDevices(infFile, &devProperties, &rebootRequired, ChangeDevice, ¶ms); if (rebootRequired) *************** *** 224,227 **** --- 235,309 ---- } /////////////////////////////////////////////////////////////// + struct RemoveDeviceParams { + RemoveDeviceParams(int _num) : num(_num), res(IDCANCEL) {} + + int num; + int res; + }; + + static BOOL RemoveDevice( + HDEVINFO hDevInfo, + PSP_DEVINFO_DATA pDevInfoData, + PCDevProperties pDevProperties, + BOOL *pRebootRequired, + void *pParam) + { + int i = GetPortNum(hDevInfo, pDevInfoData); + + if (i == ((RemoveDeviceParams *)pParam)->num) { + ((RemoveDeviceParams *)pParam)->res = + DisableDevice(hDevInfo, pDevInfoData, pDevProperties, pRebootRequired); + + if (((RemoveDeviceParams *)pParam)->res != IDCONTINUE) + return FALSE; + + return RemoveDevice(hDevInfo, pDevInfoData, pDevProperties, pRebootRequired); + } + + return TRUE; + } + + int Remove(InfFile &infFile, int num) + { + int res; + BOOL rebootRequired = FALSE; + + do { + RemoveDeviceParams removeDeviceParams(num); + + DevProperties devProperties; + devProperties.pDevId = C0C_BUS_DEVICE_ID; + + EnumDevices(infFile, &devProperties, &rebootRequired, RemoveDevice, &removeDeviceParams); + + res = removeDeviceParams.res; + + } while (res == IDTRYAGAIN); + + if (res == IDCONTINUE) { + for (int j = 0 ; j < 2 ; j++) { + char phPortName[20]; + + SNPRINTF(phPortName, sizeof(phPortName)/sizeof(phPortName[0]), "%s%d", + j ? C0C_PREF_PORT_NAME_B : C0C_PREF_PORT_NAME_A, num); + + DevProperties devProperties; + + devProperties.pDevId = C0C_PORT_DEVICE_ID; + devProperties.pLocation = phPortName; + + RemoveDevices(infFile, &devProperties, NULL); + } + } + + if (rebootRequired) + SetupPromptReboot(NULL, NULL, FALSE); + + if (res != IDCONTINUE) + return 1; + + return 0; + } + /////////////////////////////////////////////////////////////// int Preinstall(InfFile &infFile) { *************** *** 258,262 **** HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, ! BOOL * /* pRebootRequired */, void *pParam) { --- 340,345 ---- HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, ! PCDevProperties /*pDevProperties*/, ! BOOL * /*pRebootRequired*/, void *pParam) { *************** *** 287,291 **** HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, ! BOOL * /* pRebootRequired */, void *pParam) { --- 370,375 ---- HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, ! PCDevProperties /*pDevProperties*/, ! BOOL * /*pRebootRequired*/, void *pParam) { *************** *** 306,310 **** BusyMask busyMask; ! if (EnumDevices(infFile, C0C_BUS_DEVICE_ID, NULL, AddDeviceToBusyMask, &busyMask) < 0) return -1; --- 390,397 ---- BusyMask busyMask; ! DevProperties devProperties; ! devProperties.pDevId = C0C_BUS_DEVICE_ID; ! ! if (EnumDevices(infFile, &devProperties, NULL, AddDeviceToBusyMask, &busyMask) < 0) return -1; *************** *** 396,404 **** { BOOL rebootRequired = FALSE; ! if (!DisableDevices(infFile, C0C_PORT_DEVICE_ID, &rebootRequired)) return 1; ! if (!RemoveDevices(infFile, C0C_BUS_DEVICE_ID, &rebootRequired)) return 1; --- 483,498 ---- { BOOL rebootRequired = FALSE; + DevProperties devProperties; ! devProperties = DevProperties(); ! devProperties.pDevId = C0C_PORT_DEVICE_ID; ! ! if (!DisableDevices(infFile, &devProperties, &rebootRequired)) return 1; ! devProperties = DevProperties(); ! devProperties.pDevId = C0C_BUS_DEVICE_ID; ! ! if (!RemoveDevices(infFile, &devProperties, &rebootRequired)) return 1; *************** *** 610,613 **** --- 704,710 ---- " install <prmsA> <prmsB> (by default <n> is the first not used number),\n" " set their parameters to <prmsA> and <prmsB>\n" + " remove <n> - remove a pair of linked ports with\n" + " identifiers " C0C_PREF_PORT_NAME_A "<n> and " + C0C_PREF_PORT_NAME_B "<n>\n" " change <portid> <prms> - set parameters <prms> for port with\n" " identifier <portid>\n" *************** *** 635,638 **** --- 732,738 ---- , pCmdPref); Trace( + " %sremove 0\n" + , pCmdPref); + Trace( " %sinstall PortName=COM2 PortName=COM4\n" , pCmdPref); *************** *** 699,702 **** --- 799,811 ---- } else + if (argc == 3 && !lstrcmpi(argv[1], "remove")) { + SetTitle(C0C_SETUP_TITLE " (REMOVE)"); + + int num; + + if (StrToInt(argv[2], &num) && num >= 0) + return Remove(infFile, num); + } + else if (argc == 2 && !lstrcmpi(argv[1], "preinstall")) { SetTitle(C0C_SETUP_TITLE " (PREINSTALL)"); Index: devutils.cpp =================================================================== RCS file: /cvsroot/com0com/com0com/setup/devutils.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** devutils.cpp 2 Nov 2006 16:20:44 -0000 1.3 --- devutils.cpp 10 Nov 2006 14:07:40 -0000 1.4 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.4 2006/11/10 14:07:40 vfrolov + * Implemented remove command + * * Revision 1.3 2006/11/02 16:20:44 vfrolov * Added usage the fixed port numbers *************** *** 41,58 **** struct EnumParams { EnumParams() { - pDevId = NULL; - pPhObjName = NULL; pParam1 = NULL; pParam2 = NULL; - count = 0; pRebootRequired = NULL; } ! const char *pDevId; ! const char *pPhObjName; void *pParam1; void *pParam2; - int count; BOOL *pRebootRequired; --- 44,56 ---- struct EnumParams { EnumParams() { pParam1 = NULL; pParam2 = NULL; count = 0; pRebootRequired = NULL; } ! DevProperties devProperties; void *pParam1; void *pParam2; int count; BOOL *pRebootRequired; *************** *** 64,76 **** DevParams(PEnumParams _pEnumParams) { pEnumParams = _pEnumParams; - - pDevId = NULL; - pPhObjName = NULL; } PEnumParams pEnumParams; ! ! const char *pDevId; ! const char *pPhObjName; }; --- 62,69 ---- DevParams(PEnumParams _pEnumParams) { pEnumParams = _pEnumParams; } PEnumParams pEnumParams; ! DevProperties devProperties; }; *************** *** 117,135 **** DevParams devParams(pEnumParams); ! char hwid[150]; if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_HARDWAREID, NULL, (PBYTE)hwid, sizeof(hwid), NULL)) ! devParams.pDevId = hwid; ! if (pEnumParams->pDevId && (!devParams.pDevId || lstrcmpi(devParams.pDevId, pEnumParams->pDevId))) continue; ! char name[150]; if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_PHYSICAL_DEVICE_OBJECT_NAME, NULL, (PBYTE)name, sizeof(name), NULL)) ! devParams.pPhObjName = name; ! if (pEnumParams->pPhObjName && (!devParams.pPhObjName || lstrcmpi(devParams.pPhObjName, pEnumParams->pPhObjName))) continue; res = pFunk(hDevInfo, &devInfoData, &devParams); --- 110,145 ---- DevParams devParams(pEnumParams); ! char hwid[40]; if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_HARDWAREID, NULL, (PBYTE)hwid, sizeof(hwid), NULL)) ! devParams.devProperties.pDevId = hwid; ! if (pEnumParams->devProperties.pDevId && (!devParams.devProperties.pDevId || ! lstrcmpi(devParams.devProperties.pDevId, pEnumParams->devProperties.pDevId))) ! { continue; + } ! char location[40]; ! ! if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_LOCATION_INFORMATION, NULL, (PBYTE)location, sizeof(location), NULL)) ! devParams.devProperties.pLocation = location; ! ! if (pEnumParams->devProperties.pLocation && (!devParams.devProperties.pLocation || ! lstrcmpi(devParams.devProperties.pLocation, pEnumParams->devProperties.pLocation))) ! { ! continue; ! } ! ! char name[40]; if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_PHYSICAL_DEVICE_OBJECT_NAME, NULL, (PBYTE)name, sizeof(name), NULL)) ! devParams.devProperties.pPhObjName = name; ! if (pEnumParams->devProperties.pPhObjName && (!devParams.devProperties.pPhObjName || ! lstrcmpi(devParams.devProperties.pPhObjName, pEnumParams->devProperties.pPhObjName))) ! { continue; + } res = pFunk(hDevInfo, &devInfoData, &devParams); *************** *** 197,201 **** static int EnumDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, PDevParams pDevParams) { ! //Trace("Enumerated %s %s\n", pDevParams->pDevId, pDevParams->pPhObjName); int res = IDCONTINUE; --- 207,216 ---- static int EnumDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, PDevParams pDevParams) { ! /* ! Trace("Enumerated %s %s %s\n", ! pDevParams->devProperties.pLocation, ! pDevParams->devProperties.pDevId, ! pDevParams->devProperties.pPhObjName); ! */ int res = IDCONTINUE; *************** *** 204,207 **** --- 219,223 ---- if (!PDEVCALLBACK(pDevParams->pEnumParams->pParam1)(hDevInfo, pDevInfoData, + &pDevParams->devProperties, pDevParams->pEnumParams->pRebootRequired, pDevParams->pEnumParams->pParam2)) *************** *** 218,222 **** int EnumDevices( InfFile &infFile, ! const char *pDevId, BOOL *pRebootRequired, PDEVCALLBACK pDevCallBack, --- 234,238 ---- int EnumDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired, PDEVCALLBACK pDevCallBack, *************** *** 225,229 **** EnumParams enumParams; ! enumParams.pDevId = pDevId; enumParams.pRebootRequired = pRebootRequired; enumParams.pParam1 = pDevCallBack; --- 241,247 ---- EnumParams enumParams; ! if (pDevProperties) ! enumParams.devProperties = *pDevProperties; ! enumParams.pRebootRequired = pRebootRequired; enumParams.pParam1 = pDevCallBack; *************** *** 236,248 **** } /////////////////////////////////////////////////////////////// ! static int DisableDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, PDevParams pDevParams) { if (!ChangeState(hDevInfo, pDevInfoData, DICS_DISABLE)) return IDCANCEL; ! Trace("Disabled %s %s\n", pDevParams->pDevId, pDevParams->pPhObjName); ! pDevParams->pEnumParams->count++; ! if (pDevParams->pEnumParams->pRebootRequired && !*pDevParams->pEnumParams->pRebootRequired) { BOOL rebootRequired = FALSE; --- 254,272 ---- } /////////////////////////////////////////////////////////////// ! int DisableDevice( ! HDEVINFO hDevInfo, ! PSP_DEVINFO_DATA pDevInfoData, ! PCDevProperties pDevProperties, ! BOOL *pRebootRequired) { if (!ChangeState(hDevInfo, pDevInfoData, DICS_DISABLE)) return IDCANCEL; ! Trace("Disabled %s %s %s\n", ! pDevProperties->pLocation, ! pDevProperties->pDevId, ! pDevProperties->pPhObjName); ! if (pRebootRequired && !*pRebootRequired) { BOOL rebootRequired = FALSE; *************** *** 252,259 **** if (rebootRequired) { int res = ShowMsg(MB_CANCELTRYCONTINUE, ! "Can't disable device %s %s.\n" "Close application that use this device and Try Again.\n" "Or Continue and then reboot system.\n", ! pDevParams->pDevId, pDevParams->pPhObjName); if (res != IDCONTINUE) { --- 276,285 ---- if (rebootRequired) { int res = ShowMsg(MB_CANCELTRYCONTINUE, ! "Can't disable device %s %s %s.\n" "Close application that use this device and Try Again.\n" "Or Continue and then reboot system.\n", ! pDevProperties->pLocation, ! pDevProperties->pDevId, ! pDevProperties->pPhObjName); if (res != IDCONTINUE) { *************** *** 261,271 **** return IDCANCEL; ! Trace("Enabled %s %s\n", pDevParams->pDevId, pDevParams->pPhObjName); ! pDevParams->pEnumParams->count--; return res; } ! *pDevParams->pEnumParams->pRebootRequired = TRUE; } } --- 287,299 ---- return IDCANCEL; ! Trace("Enabled %s %s %s\n", ! pDevProperties->pLocation, ! pDevProperties->pDevId, ! pDevProperties->pPhObjName); return res; } ! *pRebootRequired = TRUE; } } *************** *** 273,280 **** return IDCONTINUE; } BOOL DisableDevices( InfFile &infFile, ! const char *pDevId, BOOL *pRebootRequired) { --- 301,318 ---- return IDCONTINUE; } + /////////////////////////////////////////////////////////////// + static int DisableDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, PDevParams pDevParams) + { + int res = DisableDevice(hDevInfo, pDevInfoData, &pDevParams->devProperties, pDevParams->pEnumParams->pRebootRequired); + + if (res != IDCONTINUE) + pDevParams->pEnumParams->count++; + + return res; + } BOOL DisableDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired) { *************** *** 284,288 **** enumParams.pRebootRequired = pRebootRequired; ! enumParams.pDevId = pDevId; do { --- 322,327 ---- enumParams.pRebootRequired = pRebootRequired; ! if (pDevProperties) ! enumParams.devProperties = *pDevProperties; do { *************** *** 311,318 **** if (rebootRequired) { int res = ShowMsg(MB_CANCELTRYCONTINUE, ! "Can't reastart device %s %s.\n" "Close application that use this device and Try Again.\n" "Or Continue and then reboot system.\n", ! pDevParams->pDevId, pDevParams->pPhObjName); if (res != IDCONTINUE) { --- 350,359 ---- if (rebootRequired) { int res = ShowMsg(MB_CANCELTRYCONTINUE, ! "Can't reastart device %s %s %s.\n" "Close application that use this device and Try Again.\n" "Or Continue and then reboot system.\n", ! pDevParams->devProperties.pLocation, ! pDevParams->devProperties.pDevId, ! pDevParams->devProperties.pPhObjName); if (res != IDCONTINUE) { *************** *** 328,332 **** if (!pDevParams->pEnumParams->pRebootRequired || !*pDevParams->pEnumParams->pRebootRequired) { ! Trace("Restarted %s %s\n", pDevParams->pDevId, pDevParams->pPhObjName); pDevParams->pEnumParams->count++; } --- 369,377 ---- if (!pDevParams->pEnumParams->pRebootRequired || !*pDevParams->pEnumParams->pRebootRequired) { ! Trace("Restarted %s %s %s\n", ! pDevParams->devProperties.pLocation, ! pDevParams->devProperties.pDevId, ! pDevParams->devProperties.pPhObjName); ! pDevParams->pEnumParams->count++; } *************** *** 337,342 **** BOOL RestartDevices( InfFile &infFile, ! const char *pDevId, ! const char *pPhDevName, BOOL *pRebootRequired) { --- 382,386 ---- BOOL RestartDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired) { *************** *** 346,351 **** enumParams.pRebootRequired = pRebootRequired; ! enumParams.pDevId = pDevId; ! enumParams.pPhObjName = pPhDevName; do { --- 390,395 ---- enumParams.pRebootRequired = pRebootRequired; ! if (pDevProperties) ! enumParams.devProperties = *pDevProperties; do { *************** *** 359,375 **** } /////////////////////////////////////////////////////////////// ! static int RemoveDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, PDevParams pDevParams) { if (!SetupDiCallClassInstaller(DIF_REMOVE, hDevInfo, pDevInfoData)) { ! ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCallClassInstaller(DIF_REMOVE, %s, %s)", pDevParams->pDevId, pDevParams->pPhObjName); ! return IDCANCEL; } ! Trace("Removed %s %s\n", pDevParams->pDevId, pDevParams->pPhObjName); ! pDevParams->pEnumParams->count++; ! if (!UpdateRebootRequired(hDevInfo, pDevInfoData, pDevParams->pEnumParams->pRebootRequired)) return IDCANCEL; return IDCONTINUE; } --- 403,430 ---- } /////////////////////////////////////////////////////////////// ! BOOL RemoveDevice( ! HDEVINFO hDevInfo, ! PSP_DEVINFO_DATA pDevInfoData, ! PCDevProperties pDevProperties, ! BOOL *pRebootRequired) { if (!SetupDiCallClassInstaller(DIF_REMOVE, hDevInfo, pDevInfoData)) { ! ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCallClassInstaller(DIF_REMOVE, %s, %s)", ! pDevProperties->pDevId, pDevProperties->pPhObjName); ! return FALSE; } ! Trace("Removed %s %s %s\n", pDevProperties->pLocation, pDevProperties->pDevId, pDevProperties->pPhObjName); ! return UpdateRebootRequired(hDevInfo, pDevInfoData, pRebootRequired); ! } ! /////////////////////////////////////////////////////////////// ! static int RemoveDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDevInfoData, PDevParams pDevParams) ! { ! if (!RemoveDevice(hDevInfo, pDevInfoData, &pDevParams->devProperties, pDevParams->pEnumParams->pRebootRequired)) return IDCANCEL; + pDevParams->pEnumParams->count++; + return IDCONTINUE; } *************** *** 377,381 **** BOOL RemoveDevices( InfFile &infFile, ! const char *pDevId, BOOL *pRebootRequired) { --- 432,436 ---- BOOL RemoveDevices( InfFile &infFile, ! PCDevProperties pDevProperties, BOOL *pRebootRequired) { *************** *** 385,389 **** enumParams.pRebootRequired = pRebootRequired; ! enumParams.pDevId = pDevId; do { --- 440,445 ---- enumParams.pRebootRequired = pRebootRequired; ! if (pDevProperties) ! enumParams.devProperties = *pDevProperties; do { *************** *** 461,465 **** if (pDevCallBack) { ! res = pDevCallBack(hDevInfo, &devInfoData, NULL, pCallBackParam); if (!res) --- 517,525 ---- if (pDevCallBack) { ! DevProperties devProperties; ! ! devProperties.pDevId = pDevId; ! ! res = pDevCallBack(hDevInfo, &devInfoData, &devProperties, NULL, pCallBackParam); if (!res) |