The _DEV_BROADCAST_USERDEFINED structure contains the user-defined message and optional data associated with the DBT_USERDEFINED device message.
struct _DEV_BROADCAST_USERDEFINED { 
    struct _DEV_BROADCAST_HDR dbud_dbh; 
    char  dbud_szName[1];           // ASCIIZ name  
//    BYTE  dbud_rgbUserDefined[];  // Optional user-defined contents  
}; 
 "WidgetWare\QueryScannerShutdown" or
"WidgetWare\Video Q39S\AdapterReady"
 Because this structure contains variable length fields, use this structure tag as a template for creating a pointer to a user-defined structure. Note that the structure must not contain pointers. For example:
#define NAME_LENGTH 32 
#define USER_LENGTH 50 
 
typedef struct tagWIDGET_WARE_DEV_BROADCAST_USERDEFINED
{
    struct _DEV_BROADCAST_HDR DBHeader; 
    char  szName[NAME_LENGTH]
    BYTE  UserDefined[USER_LENGTH]; 
} WIDGET_WARE_DEV_BROADCAST_USERDEFINED;
 
  Windows NT: Requires version 5.0 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Unsupported.
  Header: Declared in dbt.h.
System Messages Overview, System Message Structures, DBT_USERDEFINED, DEV_BROADCAST_HDR, WM_DEVICECHANGE