首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Microsoft虚拟音频设备驱动程序示例(MSVAD)只创建44个字节文件

Microsoft虚拟音频设备驱动程序示例(MSVAD)只创建44个字节文件
EN

Stack Overflow用户
提问于 2014-08-25 11:32:25
回答 1查看 1.9K关注 0票数 2

我目前正在研究MSVAD的简单驱动程序。不幸的是,它的工作方式不像我希望的那样。当一个新程序启动时,它会在C:\下面创建STREAM_NN.WAV

不幸的是,这个文件只有44个字节大小(只包含头)。我附加了调试器视图并获得了以下输出:

代码语言:javascript
运行
复制
MSVAD: [CMiniportWaveCyclic::NewStream]
MSVAD: [CMiniportWaveCyclicMSVAD::ValidateFormat]
MSVAD: [CMiniportWaveCyclic::NewStream]
MSVAD: [CMiniportWaveCyclicMSVAD::ValidateFormat]
MSVAD: CMiniportWaveCyclicMSVAD::ValidatePcm
MSVAD: [CSaveData::InitializeWorkItems]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::Init]
MSVAD: SaveData 845A754C
MSVAD: [CSaveData::SetDataFormat]
MSVAD: [CSaveData::Initialize]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::AllocateBuffer]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetFormat]
MSVAD: [CSaveData::SetDataFormat]
MSVAD: New Format: 44100
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetNotificationFreq]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetState]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetState]
MSVAD: KSSTATE_PAUSE
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetState]
MSVAD: KSSTATE_RUN
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=480]
MSVAD: [CSaveData::WriteData ulByteCount=1284]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=628]
MSVAD: [CSaveData::WriteData ulByteCount=1136]
//Truncated for convenience
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=776]
MSVAD: [CSaveData::WriteData ulByteCount=988]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CSaveData::WriteData ulByteCount=1764]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetState]
MSVAD: KSSTATE_PAUSE
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetState]
MSVAD: KSSTATE_STOP
MSVAD: [CSaveData::WaitAllWorkItems]
MSVAD: [CSaveData::SaveFrame]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::SetState]
MSVAD: [CMiniportWaveCyclicStream::~CMiniportWaveCyclicStream]
MSVAD: [CMiniportWaveCyclicStreamMS::~CMiniportWaveCyclicStreamMS]
MSVAD: [CMiniportWaveCyclicStreamMSVAD::FreeBuffer]
MSVAD: [CSaveData::~CSaveData]

在我看来,这看起来很直接,例如所有必要的函数都被调用了。我想知道这个例子中是否有已知的bug,还是我必须考虑的任何警告?

操作系统是Windows 7 32位的虚拟机,正常的音频播放就像一种魅力。简单的驱动程序被设置为默认的播放设备。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-06 14:52:43

问题是,由于在方法CSaveData::InitializeWorkItems (savedata.cpp)中添加了DDK 8,因此添加了以下行:

代码语言:javascript
运行
复制
if (m_pWorkItems)
{
    return ntStatus;
}

但是CSaveData::~CSaveData只释放“工作项”,而不是m_pWorkItems数组。这将导致将来使用释放的“工作项”。

要解决这个问题,您需要替换savedata.cpp,

代码语言:javascript
运行
复制
if (m_pWorkItems)
{
    return ntStatus;
}

m_pWorkItems = (PSAVEWORKER_PARAM)
    ExAllocatePoolWithTag
    (
        NonPagedPool,
        sizeof(SAVEWORKER_PARAM) * MAX_WORKER_ITEM_COUNT,
        MSVAD_POOLTAG
    );

根据这一守则:

代码语言:javascript
运行
复制
if (!m_pWorkItems)
{
    m_pWorkItems = (PSAVEWORKER_PARAM)
        ExAllocatePoolWithTag
        (
            NonPagedPool,
            sizeof(SAVEWORKER_PARAM) * MAX_WORKER_ITEM_COUNT,
            MSVAD_POOLTAG
        );
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25484981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档