[wdmaudiodev] AudioDG.exe crashing

  • From: Waldemar Haszlakiewicz <waldemar.haszlakiewicz@xxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Sun, 28 Feb 2010 14:28:10 +0100

Hi guys

I have a strange problem that I don't know how to fix.

A little of the story telling first... I'm updating AVStream driver that worked 
perfectly under XP, but it fails under Win 7 32bit (vista not tested).
The driver copies buffers manually as the the card has a hardware bug and it 
needs a specific copy protocol for it to
work... so everything is manually copied in DPC.

Now the symptoms of the problem is that I don't receive any stream pointers for 
output buffers...
I get them for inputs, but the sound still doesn't come through.

After some debugging I've noticed in WindDbg that I get a strange warning:

---------------------------------------------------------------------------------------------------
Launch of AudioDG.EXE as a protected process failed with 
STATUS_INVALID_IMAGE_HASH

This usually means that there is a problem with PEAUTH, because an unexpected 
 DLL was added to the audiodg.exe process


 To find the offending binary, please do the following from an *elevated 
window*:
    1. \\showtime\public\pmp\tools\MSInternal\ConfigKeys\EnablePEAuthLogging.reg
    2. Reboot the machine
    3. \\showtime\public\pmp\tools\MSInternal\PEBinCheck\PEBinCheck.cmd
 The output file on the screen will contain the offending binary.

To get the build to boot, audiodg is being restarted outside of the protected 
 environment, audio will continue to function, but playback of protected 
 content will be disabled 

 For more information, please see:
    http://dmd/wmpg/mf/cp/PMP/Lists/Protected%20Environment%20FAQ/Flat.aspx

---------------------------------------------------------------------------------------------------

Normally I get this the first time I press start on any audio player.
Then DPC starts doing it's thing, but as there is no data nothing happens.
Now the thing is even more drastic that if you press stop or even close the 
application, the stop command wont be send to
the driver, so the only option to stop it is to restart the machine.

I've rechecked if the Audiodg.exe files are corrupted on the machine... 
compared to notebook running also running Win 7 32bit 
and the files are identical... same size and same date of creation.

I've also checked event logs and there was a strange event for WMP that it 
could not load DRM stuff, because debugger is 
running... is this related to AudioDG.exe?


Has somebody already come around something like this or is there something I 
can set (a flag or something) that would give me some more detail of what is 
happening?
So that I can fix it...


Any help would be REALLY appreciated.
Waldemar Haszlakiewicz




Below are framing and pin definitions....
KSALLOCATOR_FRAMING_EX  driver_c::m_AllocatorFraming_Wave_Stereo =
{
        1,
        0,
        {
                1,
                1,
                0
        },
        0,
        {
                {
                        STATICGUIDOF( KSMEMORY_TYPE_KERNEL_NONPAGED ),  
//MemoryType
                        STATIC_KS_TYPE_DONT_CARE,                               
                //BusType
                        KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE,                 
//MemoryFlags
                        0,                                                      
                                        //BusFlags
                        KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY,                 
//Flags
                        1,                                                      
                                        //Frames
                        FILE_QUAD_ALIGNMENT,                                    
                //FileAlignment
                        0,                                                      
                                        //MemoryTypeWeight
                        {                                                       
                                        //PhysicalRange
                                0,                      //min: 
2*glClass.bufferSize <- it's set at SetBufferSize
                                0,                      //max: 
2*glClass.bufferSize <- it's set at SetBufferSize
                                0                       //step: 0
                        },
                        {                                                       
                                        //FramingRange
                                {
                                //Defines optimal range of frame sizes.
                                //Notice:
                                //You will have to reset this every time the 
driver
                                //buffer will change.
                                        0,              //MinFrameSize: 
2*glClass.bufferSize <- it's set at SetBufferSize
                                        0,              //MaxFrameSize: 
2*glClass.bufferSize <- it's set at SetBufferSize
                                        0               //Stepping: 0
                                },
                                0,
                                0
                        }
                }
        }
};

And next pin description:
KSPIN_DESCRIPTOR_EX KsPinDescriptors_4xx_Wave_Stereo[] =
{
//WaveIn 1,2
        //Sink Pin
        {
                &PinDispatch_Wave,
                NULL,
                {
                        SIZEOF_ARRAY( PinInterfaces_Wave ),
                        (KSPIN_INTERFACE*) &PinInterfaces_Wave,
                        SIZEOF_ARRAY( PinMediums_Wave ),
                        (KSPIN_MEDIUM*) &PinMediums_Wave,
                        SIZEOF_ARRAY( PinAudioFormatRanges_4xx_WaveSink_Stereo 
),
                        PinAudioFormatRanges_4xx_WaveSink_Stereo,
                        KSPIN_DATAFLOW_OUT,
                        KSPIN_COMMUNICATION_BOTH,
                        &pinCategory,
                        &pinName_Wave_line_in,
                        0
                },
                KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING |
                  //Directly poll the queue at DPC time( transport data to 
hardware ).
                  KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING |
                  //Pin is responsible to check for available frames.
                  KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
                  KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY |
                  //Change status one step at a time.
                  KSPIN_FLAG_USE_STANDARD_TRANSPORT,
                1,      //InstancesPossible
                0,      //InstancesNecessary
                &driver_c::m_AllocatorFraming_Wave_Stereo,
                (PFNKSINTERSECTHANDLEREX)&driver_c::Pin_AudioIntersectHandler
        },
        //Bridge PIN
        {
                NULL,
                NULL,
                {
                        SIZEOF_ARRAY( PinInterfaces_Wave ),
                        (KSPIN_INTERFACE*) &PinInterfaces_Wave,
                        SIZEOF_ARRAY( PinMediums_Wave ),
                        (KSPIN_MEDIUM*) &PinMediums_Wave,
                        SIZEOF_ARRAY( PinAudioFormatRanges_WaveBridge ),
                        PinAudioFormatRanges_WaveBridge,
                        KSPIN_DATAFLOW_IN,
                        KSPIN_COMMUNICATION_NONE,
                        &pinCategory_bridge,
                        &pinName_bridge_line_in,
                        0
                },
                0,
                0,
                0,
                NULL,
                NULL
        },
//WaveOut 1,2
        //Sink PIN
        {
                &PinDispatch_Wave,
                &AutomationTable_Wave_Stereo,
                {
                        SIZEOF_ARRAY( PinInterfaces_Wave ),
                        (KSPIN_INTERFACE*) &PinInterfaces_Wave,
                        SIZEOF_ARRAY( PinMediums_Wave ),
                        (KSPIN_MEDIUM*) &PinMediums_Wave,
                        SIZEOF_ARRAY( PinAudioFormatRanges_4xx_WaveSink_Stereo 
),
                        PinAudioFormatRanges_4xx_WaveSink_Stereo,
                        KSPIN_DATAFLOW_IN,
                        KSPIN_COMMUNICATION_SINK,
                        &pinCategory,
                        &pinName_Wave_line_out,
                        0
                },
                //We need this if we want to call KsPinAttemptProcessing
                //synhronically( do KsPinProcessing come back to DPC )
                KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING |
                  //Directly poll the queue at DPC time( transport data to 
hardware ).
                  KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING |
                  //Pin is responsible to check for available frames.
                  KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
                  KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY |
                  //Change status one step at a time.
                  KSPIN_FLAG_USE_STANDARD_TRANSPORT |
                  KSPIN_FLAG_RENDERER,
                1,      //InstancesPossible
                0,      //InstancesNecessary
                &driver_c::m_AllocatorFraming_Wave_Stereo,
                (PFNKSINTERSECTHANDLEREX)&driver_c::Pin_AudioIntersectHandler
        },
        //Bridge PIN
        {
                NULL,
                NULL,
                {
                        SIZEOF_ARRAY( PinInterfaces_Wave ),
                        (KSPIN_INTERFACE*) &PinInterfaces_Wave,
                        SIZEOF_ARRAY( PinMediums_Wave ),
                        (KSPIN_MEDIUM*) &PinMediums_Wave,
                        SIZEOF_ARRAY( PinAudioFormatRanges_WaveBridge ),
                        PinAudioFormatRanges_WaveBridge,
                        KSPIN_DATAFLOW_OUT,
                        KSPIN_COMMUNICATION_NONE,
                        &pinCategory_bridge,
                        &pinName_bridge_line_out,
                        0
                },
                0,
                0,
                0,
                NULL,
                NULL
        }
};

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

Other related posts: