Hallo..
Du übersiehst da was..
Wenn deine Application ein WM_DEVICECHANGE Event erhält, dann kann in lParm ein Record sein, welches verschiedenen Inhalt haben kann.
Um zu ermitteln, welches 'richtige' Record darin ist, sollst Du den Pointer mit DEV_BROADCAST_HDR casten und dann dbch_devicetype auslesen.
Anhand dessen Wert wird der Pointer dann mit dem richtigen Record gecastet.
DBT_DEVTYP_DEVICEINTERFACE 0x00000005
Class of devices. This structure is a DEV_BROADCAST_DEVICEINTERFACE structure.
DBT_DEVTYP_HANDLE 0x00000006
File system
handle. This structure is a DEV_BROADCAST_HANDLE structure.
DBT_DEVTYP_OEM 0x00000000
OEM- or IHV-defined device type. This structure is a DEV_BROADCAST_OEM structure.
DBT_DEVTYP_PORT 0x00000003
Port device (serial or parallel). This structure is a DEV_BROADCAST_PORT structure.
DBT_DEVTYP_VOLUME 0x00000002
Logical volume. This structure is a DEV_BROADCAST_VOLUME structure.
Somit musst Du in der von Dir generierten Message ein DEV_BROADCAST_VOLUME (
https://msdn.microsoft.com/de-de/library/aa363249) angeben mit
dbch_devicetype = DBT_DEVTYP_VOLUME
dbcv_unitmask = 4 // entspricht z.B. D:
dbcv_flags = DBTF_NET // 0x0002