text: /*++
  Copyright (c) 1990-2000    Microsoft Corporation All Rights Reserved
  
  Module Name:
  
      public.h
  
  Abstract:
  
      This module contains the common declarations shared by driver
      and user applications.
  
  Environment:
  
      user and kernel
  
  --*/
  
  //
  // Define an Interface Guid for bus enumerator class.
  // This GUID is used to register (IoRegisterDeviceInterface)
  // an instance of an interface so that enumerator application
  // can send an ioctl to the bus driver.
  //
  
  DEFINE_GUID (GUID_DEVINTERFACE_BUSENUM_TOASTER,
          0xD35F7840, 0x6A0C, 0x11d2, 0xB8, 0x41, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71);
  //  {D35F7840-6A0C-11d2-B841-00C04FAD5171}
  
  //
  // Define an Interface Guid for toaster device class.
  // This GUID is used to register (IoRegisterDeviceInterface)
  // an instance of an interface so that user application
  // can control the toaster device.
  //
  
  DEFINE_GUID (GUID_DEVINTERFACE_TOASTER,
          0x781EF630, 0x72B2, 0x11d2, 0xB8, 0x52, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71);
  //{781EF630-72B2-11d2-B852-00C04FAD5171}
  
  //
  // Define a Setup Class GUID for Toaster Class. This is same
  // as the TOASTSER CLASS guid in the INF files.
  //
  
  DEFINE_GUID (GUID_DEVCLASS_TOASTER,
          0xB85B7C50, 0x6A01, 0x11d2, 0xB8, 0x41, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71);
  //{B85B7C50-6A01-11d2-B841-00C04FAD5171}
  
  //
  // Define a WMI GUID to get busenum info.
  //
  
  DEFINE_GUID (TOASTER_BUS_WMI_STD_DATA_GUID,
          0x0006A660, 0x8F12, 0x11d2, 0xB8, 0x54, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71);
  //{0006A660-8F12-11d2-B854-00C04FAD5171}
  
  //
  // Define a WMI GUID to get toaster device info.
  //
  
  DEFINE_GUID (TOASTER_WMI_STD_DATA_GUID,
          0xBBA21300L, 0x6DD3, 0x11d2, 0xB8, 0x44, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71);
  
  //
  // Define a WMI GUID to represent device arrival notification WMIEvent class.
  //
  
  DEFINE_GUID (TOASTER_NOTIFY_DEVICE_ARRIVAL_EVENT,
          0x1cdaff1, 0xc901, 0x45b4, 0xb3, 0x59, 0xb5, 0x54, 0x27, 0x25, 0xe2, 0x9c);
  // {01CDAFF1-C901-45b4-B359-B5542725E29C}
  
  
  //
  // GUID definition are required to be outside of header inclusion pragma to avoid
  // error during precompiled headers.
  //
  
  #ifndef __PUBLIC_H
  #define __PUBLIC_H
  
  #define BUS_HARDWARE_IDS L"{B85B7C50-6A01-11d2-B841-00C04FAD5171}\\MsToaster\0"
  #define BUS_HARDWARE_IDS_LENGTH sizeof (BUS_HARDWARE_IDS)
  
  #define BUSENUM_COMPATIBLE_IDS L"{B85B7C50-6A01-11d2-B841-00C04FAD5171}\\MsCompatibleToaster\0"
  #define BUSENUM_COMPATIBLE_IDS_LENGTH sizeof(BUSENUM_COMPATIBLE_IDS)
  
  
  #define FILE_DEVICE_BUSENUM         FILE_DEVICE_BUS_EXTENDER
  
  #define BUSENUM_IOCTL(_index_) \
      CTL_CODE (FILE_DEVICE_BUSENUM, _index_, METHOD_BUFFERED, FILE_READ_DATA)
  
  #define IOCTL_BUSENUM_PLUGIN_HARDWARE               BUSENUM_IOCTL (0x0)
  #define IOCTL_BUSENUM_UNPLUG_HARDWARE               BUSENUM_IOCTL (0x1)
  #define IOCTL_BUSENUM_EJECT_HARDWARE                BUSENUM_IOCTL (0x2)
  #define IOCTL_TOASTER_DONT_DISPLAY_IN_UI_DEVICE     BUSENUM_IOCTL (0x3)
  
  //
  //  Data structure used in PlugIn and UnPlug ioctls
  //
  
  typedef struct _BUSENUM_PLUGIN_HARDWARE
  {
      //
      // sizeof (struct _BUSENUM_HARDWARE)
      //
      IN ULONG Size;
  
      //
      // Unique serial number of the device to be enumerated.
      // Enumeration will be failed if another device on the
      // bus has the same serail number.
      //
  
      IN ULONG SerialNo;
  
      //
      // An array of (zero terminated wide character strings). The array itself
      //  also null terminated (ie, MULTI_SZ)
      //
      #pragma warning(disable:4200)  // nonstandard extension used
  
      IN  WCHAR   HardwareIDs[];
  
      #pragma warning(default:4200)
  
  } BUSENUM_PLUGIN_HARDWARE, *PBUSENUM_PLUGIN_HARDWARE;
  
  typedef struct _BUSENUM_UNPLUG_HARDWARE
  {
      //
      // sizeof (struct _REMOVE_HARDWARE)
      //
  
      IN ULONG Size;
  
      //
      // Serial number of the device to be plugged out
      //
  
      ULONG   SerialNo;
  
      ULONG Reserved[2];
  
  } BUSENUM_UNPLUG_HARDWARE, *PBUSENUM_UNPLUG_HARDWARE;
  
  typedef struct _BUSENUM_EJECT_HARDWARE
  {
      //
      // sizeof (struct _EJECT_HARDWARE)
      //
  
      IN ULONG Size;
  
      //
      // Serial number of the device to be ejected
      //
  
      ULONG   SerialNo;
  
      ULONG Reserved[2];
  
  } BUSENUM_EJECT_HARDWARE, *PBUSENUM_EJECT_HARDWARE;
  
  #endif
  
  