windows видит новый путь к устройству (а серийный номер - есть часть этого пути) и соответственно устанавливает для него драйвер.
Вот пример
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx\sssssssss\
где sssssssss - и есть ваш серийный номер (тоже относится и к пути по которому CreateFile() открывает устройство).
Выход прост:
Либо можно просто не менять серийный номер, прописав статическую строку (но тут есть одна проблема, а что, если у вас в комп воткнуто более одного такого устройства? Ведь подразумевается, что серийник будет уникальным для каждого экземпляра устройства).
И второй, самый правильный, это просто отключить серийник, обнулив индекс дескриптора серийного номера (iSerialNumber) в Device Descriptor,
тогда windows будет сам генерировать sssssssss (на основе инфы о порте куда вставлено устройство, типа: 5&1022DFB2&2&1),
и драйвер будет устанавливаться лишь один раз (ну а так-же если воткнете устройство в другой порт, но опять же один раз),
ну и все подключенные устройства будут иметь свой уникальный путь.
P.S.: Эта штука собственно называется "Instance ID": "USB\VID_xxxx&PID_xxxx\sssssssss"