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.