[wdmaudiodev] Re: AudioDG.exe crashing

  • From: Waldemar Haszlakiewicz <waldemar.haszlakiewicz@xxxxxxxx>
  • To: Waldemar Haszlakiewicz <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 2 Mar 2010 13:33:24 +0100

nobody?


WH> Hi guys

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

WH> 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).
WH> The driver copies buffers manually as the the card has a hardware bug and 
it needs a specific copy protocol for it to
WH> work... so everything is manually copied in DPC.

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

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

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

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


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

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

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

WH> 
---------------------------------------------------------------------------------------------------

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

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

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


WH> 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?
WH> So that I can fix it...


WH> Any help would be REALLY appreciated.
WH> Waldemar Haszlakiewicz




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

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

WH> ******************

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

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

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

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: