typedef struct _PLUGPLAY_EVENT_BLOCK
{
    GUID EventGuid;
    PLUGPLAY_EVENT_CATEGORY EventCategory;
    unsigned long *Result;
    unsigned long Flags;
    unsigned long TotalSize;
    void *DeviceObject;
    union
    {
        struct
        {
            GUID ClassGuid;
            wchar_t SymbolicLinkName[1];
        } DeviceClass;
        struct
        {
            wchar_t DeviceIds[1];
        } TargetDevice;
        struct
        {
            wchar_t DeviceId[1];
        } InstallDevice;
        struct
        {
            void *NotificationStructure;
            wchar_t DeviceIds[1];
        } CustomNotification;
        struct
        {
            void *Notification;
        } ProfileNotification;
        struct
        {
            unsigned long NotificationCode;
            unsigned long NotificationData;
        } PowerNotification;
        struct
        {
            PNP_VETO_TYPE VetoType;
            wchar_t DeviceIdVetoNameBuffer[1];
        } VetoNotification;
        struct
        {
            GUID BlockedDriverGuid;
        } BlockedDriverNotification;
        struct
        {
            wchar_t ParentId[1];
        } InvalidIDNotification;
        struct
        {
            GUID PowerSettingGuid;
            unsigned long Flags;
            unsigned long SessionId;
            unsigned long DataLength;
            unsigned char Data[1];
        } PowerSettingNotification;
        struct
        {
            wchar_t DeviceId[1];
        } PropertyChangeNotification;
    } u;
} PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;