LOCAL_DEVICE_INFO

typedef struct _LOCAL_DEVICE_INFO {
    ULONG           Key;
#define LDI_WAVE_IN_KEY     (*(ULONG *)"LDWi")
#define LDI_WAVE_OUT_KEY    (*(ULONG *)"LDWo")
#define LDI_MIDI_IN_KEY     (*(ULONG *)"LDMi")
#define LDI_MIDI_OUT_KEY    (*(ULONG *)"LDMo")
#define LDI_AUX_KEY         (*(ULONG *)"LDAx")
#define LDI_MIX_KEY         (*(ULONG *)"LDMx")
    PVOID           pGlobalInfo;
    UCHAR           DeviceType;
    UCHAR           DeviceNumber;
    UCHAR           DeviceIndex;
    UCHAR           CreationFlags;
#define SOUND_CREATION_NO_NAME_RANGE ((UCHAR)0x01)
#define SOUND_CREATION_NO_VOLUME     ((UCHAR)0x02)
    BOOLEAN         PreventVolumeSetting;
    UCHAR           VolumeControlId;
    PSOUND_LINE_NOTIFY   LineNotify;
#ifndef SOUNDLIB_NO_OLD_VOLUME
    WAVE_DD_VOLUME  Volume;
#endif
#ifdef VOLUME_NOTIFY
    LIST_ENTRY      VolumeQueue;
    struct _LOCAL_DEVICE_INFO * MixerDevice;
#endif
#ifdef MASTERVOLUME
    BOOLEAN         MasterVolume;
#endif
    BOOLEAN         VolumeChanged;
    PVOID           DeviceSpecificData;
    PVOID           HwContext;
    ULONG           State;
    PCSOUND_DEVICE_INIT   DeviceInit;
} LOCAL_DEVICE_INFO, *PLOCAL_DEVICE_INFO;
 

Within soundlib.lib, the LOCAL_DEVICE_INFO structure is used as the device extension for each device object created by IoCreateDevice. Device objects and device extensions are described in the Kernel-Mode Drivers Design Guide. The LOCAL_DEVICE_INFO structure is defined in devices.h. One LOCAL_DEVICE_INFO structure exists for each device created by SoundCreateDevice.

Members
Key
Internal only. Used for debugging. The value is copied from the Key member of SOUND_DEVICE_INIT.
pGlobalInfo
Pointer to a driver-defined structure containing device object-specific data. Specified by the pGDI parameter of SoundCreateDevice.
DeviceType
Copied from the DeviceType member of the SOUND_DEVICE_INIT structure.
DeviceNumber
Contains number to append to the end of the device name. Set to 0xFF within SoundCreateDevice if the SOUND_CREATION_NO_NAME_RANGE flag is specified.
DeviceIndex
For use by the driver. Contains the i parameter specified with SoundCreateDevice.
CreationFlags
Contains flags passed as CreationFlags parameter of SoundCreateDevice.
PreventVolumeSetting
Internal only. Used to prevent volume being shared for devices opened without shared write access. Set by SoundSetShareAccess.
VolumeControlId
Set by SoundSetVolumeControlId.
LineNotify
Address of a driver-supplied function called when a line status changes. The function type is PSOUND_LINE_NOTIFY. Set by SoundSetLineNotify.
Volume
Contains the device’s volume setting.
VolumeQueue
IRP queue for SOUND_IOCTL_GET_CHANGED_VOLUME requests not completed.
MixerDevice
If the device object represents a mixer device, this member points to an additional LOCAL_DEVICE_INFO structure for the mixer device. This member must be set by the driver’s mixer initialization code. It is not set by soundlib.lib.
MasterVolume
Set if this device is the master volume control device.
VolumeChanged
Internal only. If there is no mixer device, soundlib.lib sets this after a volume change, to indicate that volume settings need to be updated in the registry before system shutdown.
DeviceSpecificData
Contains the value passed as the DeviceSpecificData parameter of SoundCreateDevice.
HwContext
Contains the value passed as the pHw parameter of SoundCreateDevice.
State
Internal only Used by soundlib.lib to store the current device state.
DeviceInit
Contains the value passed as the DeviceInit parameter to SoundCreateDevice.
Comments

Drivers do not allocate LOCAL_DEVICE_INFO structures locally. When a driver calls SoundCreateDevice, a pointer to a DEVICE_OBJECT structure is returned. The structure’s DeviceExtension member is used as the device’s LOCAL_DEVICE_INFO structure.