<!--StartFragment-->I am developing a virtual audio driver following MSVAD from DDK. The structure of the driver is that the driver receives audio data from a service (user mode) through deviceiocontrol by setting IOCTL_KS_PROPERTY, and the driver is tested in graphedit. The property is defined in filter not pin, also in CMiniportWaveCyclicMSVAD, I declared a pointer to CMiniportWaveCyclicStreamMSVAD, so that when calling NewStream, the pointer is assigned to the new stream. This will let the filter to access to pin. In the property handler routine, there is an error to access the dma buffer. Here is part of the code: CMiniportWaveCyclicMSVAD *that; that = (CMiniportWaveCyclicMSVAD *)PropertyRequest->MajorTarget; if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) { if (PropertyRequest->PropertyItem->Id != KSPROPERTY_XXX) { return ntStatus; } // validate buffer size. if (PropertyRequest->InstanceSize < 3200) { return ntStatus; } if( that->m_pNewStream == NULL ) { return ntStatus; } ASSERT(NULL!=that->m_pNewStream->m_pvDmaBuffer); ---------error RtlCopyMemory(that->m_pNewStream->m_pvDmaBuffer, PropertyRequest->Instance, 3200); ntStatus = STATUS_SUCCESS; } m_pNewStream is the pointer declared in CMiniportWaveCyclicMSVAD, and it is assigned to the new stream when created in ::NewStream. m_pvDmaBuffer is the pointer to the buffer assigned to the dma. I am puzzled that m_pNewStream != NULL, but m_pvDmaBuffer == NULL. Thanks for your help. Yong