#ifndef _DEVEXT_H
#define _DEVEXT_H

//
// Class device extension.
//

#define REGPATHMAX 100

typedef enum {
    eBaseDevice = 1,
    eBatteryDevice,
    eAdaptorDevice
} EXTENSION_TYPE;



typedef struct _CBatteryDevExt {
    UNICODE_STRING      m_RegistryPath;         // will be converted to a unicode string
    WCHAR               m_RegistryBuffer[REGPATHMAX];
    PDEVICE_OBJECT      m_pHidPdo;

    PDEVICE_OBJECT      m_pBatteryFdo;          // Functional Device Object
    PDEVICE_OBJECT      m_pLowerDeviceObject;   // Detected at AddDevice time
    PFILE_OBJECT        m_pHidFileObject;
    CBattery *          m_pBattery;
    ULONG               m_ulTagCount;           // Tag for next battery
    BOOLEAN             m_bIsStarted;           // if non zero, the device is started
    BOOLEAN             m_bFirstStart;          // Need to differentiate between
                                                // first and second start IRP.
    BOOLEAN             m_bJustStarted;         // If set, will open handle on next
                                                // IRP_MN_QUERY_PNP_DEVICE_STATE
    ULONG               m_ulDefaultAlert1;      // Cache DefaultAlert1 accross stop device.
    PVOID               m_pSelector;            // Selector for battery
    EXTENSION_TYPE      m_eExtType;
    PDEVICE_OBJECT      m_pOpenedDeviceObject;
    PKTHREAD            m_OpeningThread;
    IO_REMOVE_LOCK      m_RemoveLock;
    IO_REMOVE_LOCK      m_StopLock;
    ULONG               m_iHibernateDelay;
    ULONG               m_iShutdownDelay;
} CBatteryDevExt;

#endif // devext.h