Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1881回复:17

WDM驱动程序中是不是不能用mmsystem.h啊?

楼主#
更多 发布于:2005-04-28 12:27
为什么我只要把它包含进去就有错,如果是在用户程序中,用它的话还要用<windows.h>和<windowsx.h>才行,是不是在驱动中不能用这个头文件呀?
我想在我的驱动中播放WAV文件,是在驱动中,没有与它通信的用户程序,请问可以做到吗?能不能给点思路,有些迷茫,哪位指点一下,谢谢了。
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-28 16:46
为什么我只要把它包含进去就有错,如果是在用户程序中,用它的话还要用\"windows.h\"和\"windowsx.h\"才行,是不是在驱动中不能用这个头文件呀?
我想在我的驱动中播放WAV文件,是在驱动中,没有与它通信的用户程序,请问可以做到吗?能不能给点思路,有些迷茫,哪位指点一下,谢谢了。


哪位大虾说说话呀,有什么实现思路吗?菜鸟这厢有礼了
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-29 10:08
[quote]为什么我只要把它包含进去就有错,如果是在用户程序中,用它的话还要用\"windows.h\"和\"windowsx.h\"才行,是不是在驱动中不能用这个头文件呀?
我想在我的驱动中播放WAV文件,是在驱动中,没有与它通信的用户程序,请问可以做到吗?能不能给点思路,有些迷茫,哪位指点一下,谢谢了。


哪位大虾说说话呀,有什么实现思路吗?菜鸟这厢有礼了 [/quote]
发音还是用PC喇叭吧,虽然难听,但有怀旧的感觉,呵呵。。。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-29 14:07
[quote][quote]为什么我只要把它包含进去就有错,如果是在用户程序中,用它的话还要用\"windows.h\"和\"windowsx.h\"才行,是不是在驱动中不能用这个头文件呀?
我想在我的驱动中播放WAV文件,是在驱动中,没有与它通信的用户程序,请问可以做到吗?能不能给点思路,有些迷茫,哪位指点一下,谢谢了。


哪位大虾说说话呀,有什么实现思路吗?菜鸟这厢有礼了 [/quote]
发音还是用PC喇叭吧,虽然难听,但有怀旧的感觉,呵呵。。。 [/quote]
PC喇叭?以前没有用过,可以说得详细一点吗?或者给一个例子,太感谢你了,好几个问题都是你帮忙,以后要分尽管说,只要有,给!!
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-29 15:19
PC喇叭就是你开机听到的那个嘀的一声的东东
看最老的那本清华大学出的pc汇编语言,黄色书皮的,我那时定价仅6元,操作61端口,现在Windows中系统设备中它叫System speaker,过去DOS下有个1645病毒,它还会用PC 喇叭唱东方红和浏阳河呢!!!嘻嘻,以前我把它的传染部分去掉了,由于DOS病毒都是TSR,所以做程序时候当现在的Mp3听,用起来也很简单
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-29 16:04
PC喇叭就是你开机听到的那个嘀的一声的东东
看最老的那本清华大学出的pc汇编语言,黄色书皮的,我那时定价仅6元,操作61端口,现在Windows中系统设备中它叫System speaker,过去DOS下有个1645病毒,它还会用PC 喇叭唱东方红和浏阳河呢!!!嘻嘻,以前我把它的传染部分去掉了,由于DOS病毒都是TSR,所以做程序时候当现在的Mp3听,用起来也很简单

呵呵,谢谢了,我找一下看,那本书估计是找不到了,我去网上搜一下,如果你有源码什么的,可以给我发一下吗?
我的邮箱:zhangheng607@163.com
谢谢了
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-29 16:50
[quote]PC喇叭就是你开机听到的那个嘀的一声的东东
看最老的那本清华大学出的pc汇编语言,黄色书皮的,我那时定价仅6元,操作61端口,现在Windows中系统设备中它叫System speaker,过去DOS下有个1645病毒,它还会用PC 喇叭唱东方红和浏阳河呢!!!嘻嘻,以前我把它的传染部分去掉了,由于DOS病毒都是TSR,所以做程序时候当现在的Mp3听,用起来也很简单

呵呵,谢谢了,我找一下看,那本书估计是找不到了,我去网上搜一下,如果你有源码什么的,可以给我发一下吗?
我的邮箱:zhangheng607@163.com
谢谢了 [/quote]
这本书是当年垄断天下的汇编教材,很好找
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-29 16:53
我的那本早压箱底了,不好找,不过绝对在
不过现在web这么发达,到google中搜一下PC喇叭,一箩筐。。。嘻嘻。。。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-29 16:56
或者加上汇编这个关键字
用汇编PC喇叭搜 :D
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-30 02:05
或者加上汇编这个关键字
用汇编PC喇叭搜 :D

呵呵,我们的汇编书也是清华编的,也是黄色,不过已经不是6块了,而是46块,上面确实有关于PC喇叭的,我也试过一些用PC喇叭做的东西,感觉不是我想要的:)
我加了mmsystem.h,现在编译通过了,可是运行就死机,是不是不能用这个东东呀,还是我用得不对,我说一下吧,我定义了一个系统线程,这个应该没有问题,如果有问题应该在下面的SoundKeys()里面:
class NewThread : public KSystemThread
{
SAFE_DESTRUCTORS
public:
NewThread();
VOID Post(KIrp I);

KInterlockedList<IRP> myQueue;
KSemaphore myMailbox;
};

NewThread::NewThread():myMailbox((LONG)0, MAX_IRP)
{
}

VOID NewThread::Post(KIrp I)
{
myQueue.InsertTail(I);
myMailbox.Signal();
}

然后,如果收到F3,以后如果有按键,则根据它的扫描码找到它对应的WAV文件,然后发音。其它函数可以保证对,因为如果我把那一句注释掉就可以用了,sndPlaySound和mciSendCommand都试过了,都不行。
#define SOUND_DIR \"f:\\\\Sound\\\\_.wav\"
或者
#define SOUND_DIR \"\\\\DosDevices\\\\f:\\\\Sound\\\\_.wav\"哪个才对,都试过了,都不行,所以我想问题不在这儿吧
以下是线程
如果传过来的字符没有被识别,则发音文件用的是_.wav
void MyKBFilterDevice::SoundKeys()
{
char code;
char path[]=SOUND_DIR;
/*
MCI_OPEN_PARMS mciOpenParms;
MCI_PLAY_PARMS PlayParms;
mciOpenParms.dwCallback=0;
mciOpenParms.wDeviceID=0;
mciOpenParms.lpstrDeviceType=\"waveaudio\";
mciOpenParms.lpstrAlias=\" \";
PlayParms.dwCallback=0;
PlayParms.dwTo=0;
PlayParms.dwFrom=0;*/
while (TRUE)
{
SoundThread.myMailbox.Wait();
KIrp I=SoundThread.myQueue.RemoveHead();
code=(char)I->IoStatus.Information;
if(code!=\' \')path[9]=code;//path[21]=code;
else path[9]=\'_\';//path[21]=\'_\';
t<<\"所要发音的是字母:\"<<code<<\"所在位置是:\"<<path<<\"\\n\";
//sndPlaySound(TEXT(path), SND_FILENAME);//SND_ASYNC | SND_FILENAME);
/*
mciOpenParms.lpstrElementName=(LPCTSTR)path;
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms);//打开音频设备;
mciSendCommand(mciOpenParms.wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)(LPVOID)&PlayParms);//播放WAVE声音文件;
mciSendCommand(mciOpenParms.wDeviceID,MCI_CLOSE,NULL,NULL);//关闭音频设备;
*/
}
}
liuyan4794
驱动牛犊
驱动牛犊
  • 注册日期2005-04-14
  • 最后登录2010-08-19
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-30 09:11
在驱动程序中能用sndPlaySound和mciSendCommand这些函数么?
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-04-30 10:13
sndPlaySound和mciSendCommand在驱动中不能用啊!你调用它,其实连接的是指向User模式下的地址,即一般<2G,驱动都是在>2G空间的,调用它绝对要报销,奇怪,你的居然是死机,不出兰屏吗?
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-01 00:03
sndPlaySound和mciSendCommand在驱动中不能用啊!你调用它,其实连接的是指向User模式下的地址,即一般<2G,驱动都是在>2G空间的,调用它绝对要报销,奇怪,你的居然是死机,不出兰屏吗?

确实不是蓝屏,只是死机

那请问有什么别的方法吗?除了PC喇叭
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-01 16:56
[quote]sndPlaySound和mciSendCommand在驱动中不能用啊!你调用它,其实连接的是指向User模式下的地址,即一般<2G,驱动都是在>2G空间的,调用它绝对要报销,奇怪,你的居然是死机,不出兰屏吗?

确实不是蓝屏,只是死机

那请问有什么别的方法吗?除了PC喇叭 [/quote]
偶黔驴技穷了,看wowocock的ring0 call ring3吧,而且在User mode下的SEH处理上好像也用了某种方法,使核心可以调用用户提供的回调函数后再返回核心,具体正在研究中
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-05-02 09:23
偶黔驴技穷了,看wowocock的ring0 call ring3吧,而且在User mode下的SEH处理上好像也用了某种方法,使核心可以调用用户提供的回调函数后再返回核心,具体正在研究中


正在研究那篇文章……
可不可以通过与声卡驱动程序的通信来实现呀?
就相当于自己实现API一样,只不过是用驱动与驱动通信,声卡驱动有没有提供这方面的接口?我找过一段时间,只是无从下手,就没有见过声卡驱动的源码,只是个想法,也不知道可不可行
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-05-03 12:26
[quote]偶黔驴技穷了,看wowocock的ring0 call ring3吧,而且在User mode下的SEH处理上好像也用了某种方法,使核心可以调用用户提供的回调函数后再返回核心,具体正在研究中


正在研究那篇文章……
可不可以通过与声卡驱动程序的通信来实现呀?
就相当于自己实现API一样,只不过是用驱动与驱动通信,声卡驱动有没有提供这方面的接口?我找过一段时间,只是无从下手,就没有见过声卡驱动的源码,只是个想法,也不知道可不可行 [/quote]
声卡驱动DDK例子中就有,好像得涉及到Stream,这样估计可以,因为wav就是流数据,搞出来告诉偶一声
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Eddid
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2018-11-27
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-05-07 13:36
声卡驱动DDK例子中就有,好像得涉及到Stream,这样估计可以,因为wav就是流数据,搞出来告诉偶一声

大佬,偶还没有搞出来呀,偶基础太弱了,研究了几天,没有结果,但偶没想放弃,只是想找一些志同道合的人一起研究一下,我不知道如何与声卡驱动通讯,Irp吗?那需要哪些参数,我目前用的是:先通过IoGetDeviceObjectPointer(……)得到设备名柄,再通过发送Irp包与声卡驱动通讯,但是我不知道接口是什么,Irp的MajorFunction()是什么?IRP_MJ_INTERNAL_DEVICE_CONTROL还是IRP_MJ_WRITE?
希望哪位大侠指点一二,感激涕零,感谢感谢,真心感谢
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-05-08 17:27
[quote]声卡驱动DDK例子中就有,好像得涉及到Stream,这样估计可以,因为wav就是流数据,搞出来告诉偶一声

大佬,偶还没有搞出来呀,偶基础太弱了,研究了几天,没有结果,但偶没想放弃,只是想找一些志同道合的人一起研究一下,我不知道如何与声卡驱动通讯,Irp吗?那需要哪些参数,我目前用的是:先通过IoGetDeviceObjectPointer(……)得到设备名柄,再通过发送Irp包与声卡驱动通讯,但是我不知道接口是什么,Irp的MajorFunction()是什么?IRP_MJ_INTERNAL_DEVICE_CONTROL还是IRP_MJ_WRITE?
希望哪位大侠指点一二,感激涕零,感谢感谢,真心感谢 [/quote]
与驱动通讯,就是用IoGetDeviceObjectPointer,至于Irp的MajorFunction()是什么?IRP_MJ_INTERNAL_DEVICE_CONTROL还是IRP_MJ_WRITE?不知老大DDK中声卡驱动的源码研究得怎样,估计研究到家就可以了,偶偷懒,坐等,嘻嘻...
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部