KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
阅读:1673回复:11

如何在 Kernel 下 Beep ?

楼主#
更多 发布于:2002-12-02 04:18
在 ntddk.h 有下面函数

//
// System beep functions.
//
#if !defined(NO_LEGACY_DRIVERS)
NTHALAPI
BOOLEAN
HalMakeBeep(
    IN ULONG Frequency
    );
#endif // NO_LEGACY_DRIVERS

生成下面

void Beep(int Frequency)
{
 HalMakeBeep(Frequency);

 KeStallExecutionProcessor(100000);    // beep
lrx666
驱动太牛
驱动太牛
  • 注册日期2001-08-17
  • 最后登录2010-10-25
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望47点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-02 08:20
你在哪一级上调用的?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-02 08:38

KeStallExecutionProcessor
Drivers that call this routine should minimize the number of microseconds they specify (no more than 50). If a driver must wait for a longer interval, it should use another synchronization mechanism.
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2002-12-02 10:27
不是 KeStallExecutionProcessor(100000);
我在下面情况下是可正常工作的 !!

VOID KBeepUnload(IN PDRIVER_OBJECT DriverObject)
{

WCHAR DOSNameBuffer[] = L\"\\\\DosDevices\\\\KBeep\";
UNICODE_STRING uniDOSString;

//   HalMakeBeep(1000);
KeStallExecutionProcessor(100000); // Wait
// HalMakeBeep(0); // Silence please :o)

KdPrint( (\"KBeep : Unloading . . .\\n\") );
PopupDrvMsgBox(\"KBeep: Unloading ... . .  .\");

RtlInitUnicodeString(&uniDOSString, DOSNameBuffer);
IoDeleteSymbolicLink (&uniDOSString);
IoDeleteDevice(DriverObject->DeviceObject);
}

就是一句 HalMakeBeep(0); 都死机 !!!
两台机器都是Win2K,真不明白啊 !?!?




KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地下室#
发布于:2002-12-05 03:31
推一推吧,20大洋啊 !!
除 HalMakeBeep() 外有别的方法 Beep 吗 ??
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
5楼#
发布于:2002-12-07 16:50
问题在下面,程式编译没出错,但哕\行就死机,把源程和代码分列如下,HalMakeBeep
soft_wind_soft
驱动牛犊
驱动牛犊
  • 注册日期2002-12-07
  • 最后登录2002-12-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-07 17:42
好难,不懂!
kernel_kernel
驱动小牛
驱动小牛
  • 注册日期2002-12-08
  • 最后登录2009-02-06
  • 粉丝0
  • 关注0
  • 积分435分
  • 威望51点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-09 09:36
[quote]问题在下面,程式编译没出错,但哕\行就死机,把源程和代码分列如下,HalMakeBeep
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
8楼#
发布于:2002-12-09 12:16
最後好了 !! 可以 Beep !!
方法如下 :

void  Beep(int Frequency)
{
LARGE_INTEGER liDelay = RtlConvertLongToLargeInteger(-800000);
 
  HalMakeBeep(Frequency);
// KeStallExecutionProcessor(50);    // Wait <---- this not working !!!!
KeDelayExecutionThread(KernelMode,FALSE ,&liDelay );  
  HalMakeBeep(0);                       // Silence please :o)
}

改用 KeDelayExecutionThread 这函数就好了,但 KeStallExecutionProcessor 就是出邋 ?! 不知其所以焉 !!
我用这 Beep() 在我的第一个driver上,起
kernel_kernel
驱动小牛
驱动小牛
  • 注册日期2002-12-08
  • 最后登录2009-02-06
  • 粉丝0
  • 关注0
  • 积分435分
  • 威望51点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-09 13:06
[quote]最後好了 !! 可以 Beep !!
方法如下 :

void  Beep(int Frequency)
{
LARGE_INTEGER liDelay = RtlConvertLongToLargeInteger(-800000);
 
  HalMakeBeep(Frequency);
// KeStallExecutionProcessor(50);    // Wait <---- this not working !!!!
KeDelayExecutionThread(KernelMode,FALSE ,&liDelay );  
  HalMakeBeep(0);                       // Silence please :o)
}

改用 KeDelayExecutionThread 这函数就好了,但 KeStallExecutionProcessor 就是出邋 ?! 不知其所以焉 !!
我用这 Beep() 在我的第一个driver上,起
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
10楼#
发布于:2002-12-09 13:48
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
11楼#
发布于:2002-12-10 13:02
在 sources 里删除了 DRIVERTYPE=WDM 天下太平 !!!!

[编辑 -  12/11/02 by  KMK]
游客

返回顶部