[wdmaudiodev] Re: for help in implementation virtual audio driver

  • From: "Jeff Pages" <jeff@xxxxxxxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 20 Jul 2006 17:22:12 +1000

If you're trying to send standard audio data into MSVAD, why are you trying to 
access it through a device interface rather than using one of the audio APIs 
such as waveOutOpen and waveOutWrite?

Jeff
  ----- Original Message ----- 
  From: Weiji Zheng 
  To: wdmaudiodev@xxxxxxxxxxxxx 
  Sent: Thursday, July 20, 2006 2:49 PM
  Subject: [wdmaudiodev] for help in implementation virtual audio driver


  Hi

  I am developing one project, that is, PCM data is transfered into MSVAD by 
usr mode, and MSVAD then put these PCM data into another application based on 
DirectSound, such as Skype, that means MSVAD will be open simultaneously both 
the applications.

  Actaully, I encounter the same question as following: 

  1. how can I get the handle of the MSVAD(Simple)? 
  2. I tried to use IoRegisterDeviceInterface() in AddDevice() of 
MSVAD(Simple), and then in my user mode application I use 
SetupDiGetDeviceInterfaceDetail() and CreateFile() to get the handle of the 
MSVAD device. It seems that I can get the handle of the MSVAD(Simple), but the 
Graph Edit con not find any device about MSVAD, Do you have any idea about 
this? 

  Maybe the implementation in IRP_MAJOR_CREATE is one key.

  //dispatch function
  extern "C"
  NTSTATUS
  PCP_Create
  (
      IN      PDEVICE_OBJECT  pDeviceObject,
      IN      PIRP            pIrp
  )
  {
   PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(pIrp);
   //PDEVICE_EXTENSION pDevExt = 
(PDEVICE_EXTENSION)pDeviceObject->DeviceExtension;
   NTSTATUS ntStatus = STATUS_SUCCESS;
      
   DPF(D_TERSE, ("[enter PCP_Create]"));
   
   
   DbgPrint("the Flags is 0x%x\n", pIrp->Flags);
   DbgPrint("the RequestorMode is 0x%x\n", pIrp->RequestorMode);
   if(pIrp->RequestorMode == 0x1) //my own application
   {// Complete successfully
    pIrp->IoStatus.Status = STATUS_SUCCESS;
    pIrp->IoStatus.Information = 0;
    IoCompleteRequest(pIrp, IO_NO_INCREMENT);
    return STATUS_SUCCESS;
   }
   else //Graph Edit
   {
     //
     // Pass the IRPs on to PortCls
     //
     ntStatus = PcDispatchIrp( pDeviceObject, pIrp );
    if(NT_SUCCESS(ntStatus))
     DbgPrint("success to open device\n");
    else
     DbgPrint("fail to open device\n");
    return ntStatus;
   }
   
   
  }

  But when I run own application(not Graph Edit), the system crash!

  so would you please give me some advice.

  thanks for any help.

  best regards

  --weiji zheng


------------------------------------------------------------------------------
  雅虎免费邮箱-3.5G容量,20M附件 

Other related posts: