#include "setupapi_private.h"
-WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
-
/* Unicode constants */
static const WCHAR BackSlash[] = {'\\',0};
static const WCHAR ClassGUID[] = {'C','l','a','s','s','G','U','I','D',0};
* Field[3] Minor version
* Field[4] Product type
* Field[5] Suite mask
- * Remark: lastests fields may be NULL if the information is not provided
+ * Remark: these fields may be NULL if the information is not provided
*/
Fields[0] = Section;
if (Fields[0] == NULL)
return FALSE;
}
DestroyClassInstallParams(&deviceInfo->ClassInstallParams);
+ if (deviceInfo->hmodDevicePropPageProvider)
+ FreeLibrary(deviceInfo->hmodDevicePropPageProvider);
return HeapFree(GetProcessHeap(), 0, deviceInfo);
}
RegCloseKey(list->HKLM);
CM_Disconnect_Machine(list->hMachine);
DestroyClassInstallParams(&list->ClassInstallParams);
+ if (list->hmodClassPropPageProvider)
+ FreeLibrary(list->hmodClassPropPageProvider);
return HeapFree(GetProcessHeap(), 0, list);
}
CONFIGRET cr;
DEVINST RootDevInst;
DEVINST DevInst;
+ WCHAR GenInstanceId[MAX_DEVICE_ID_LEN];
TRACE("%p %s %s %s %p %x %p\n", DeviceInfoSet, debugstr_w(DeviceName),
debugstr_guid(ClassGuid), debugstr_w(DeviceDescription),
return FALSE;
}
+ if (CreationFlags & DICD_GENERATE_ID)
+ {
+ /* Grab the actual instance ID that was created */
+ cr = CM_Get_Device_ID_Ex(DevInst,
+ GenInstanceId,
+ MAX_DEVICE_ID_LEN,
+ 0,
+ set->hMachine);
+ if (cr != CR_SUCCESS)
+ {
+ SetLastError(GetErrorCodeFromCrCode(cr));
+ return FALSE;
+ }
+
+ DeviceName = GenInstanceId;
+ TRACE("Using generated instance ID: %s\n", debugstr_w(DeviceName));
+ }
+
if (CreateDeviceInfo(set, DeviceName, ClassGuid, &deviceInfo))
{
InsertTailList(&set->ListHead, &deviceInfo->ListEntry);
ParentDevInst,
CM_CREATE_DEVINST_NORMAL | CM_CREATE_DEVINST_DO_NOT_INSTALL,
set->hMachine);
- if (cr != CR_SUCCESS)
+ if (cr != CR_SUCCESS &&
+ cr != CR_ALREADY_SUCH_DEVINST)
{
dwError = ERROR_NO_SUCH_DEVINST;
}