cockliujun
驱动牛犊
驱动牛犊
  • 注册日期2003-08-21
  • 最后登录2008-06-25
  • 粉丝0
  • 关注0
  • 积分860分
  • 威望16点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:1009回复:1

请哪位高手解释一下“事件”?

楼主#
更多 发布于:2003-10-08 11:37
比如下面是《Windows WDM 设备驱动程序开发指南》中的一个例程中的一个函数,PnpStartDevice函数中调用此函数:

NTSTATUS ForwardIrpAndWait( IN PDEVICE_OBJECT fdo, IN PIRP Irp)
{
DebugPrintMsg(\"ForwardIrpAndWait\");
PWDM2_DEVICE_EXTENSION dx=(PWDM2_DEVICE_EXTENSION)fdo->DeviceExtension;

KEVENT event;
KeInitializeEvent( &event, NotificationEvent, FALSE);

IoCopyCurrentIrpStackLocationToNext(Irp);
IoSetCompletionRoutine( Irp, (PIO_COMPLETION_ROUTINE)ForwardedIrpCompletionRoutine,
(PVOID)&event, TRUE, TRUE, TRUE);

NTSTATUS status = IoCallDriver( dx->NextStackDevice, Irp);
if( status==STATUS_PENDING)
{
DebugPrintMsg(\"ForwardIrpAndWait: waiting for completion\");
KeWaitForSingleObject( &event, Executive, KernelMode, FALSE, NULL);
status = Irp->IoStatus.Status;
}
#if DBG
if( status!=STATUS_SUCCESS)
DebugPrint(\"ForwardIrpAndWait: completed %x\",status);
#endif
return status;
}

NTSTATUS ForwardedIrpCompletionRoutine( IN PDEVICE_OBJECT fdo, IN PIRP Irp, IN PKEVENT ev)
{
KeSetEvent( ev, 0, FALSE);
return STATUS_MORE_PROCESSING_REQUIRED;
}

我有一些问题:
1。什么是事件?事件和函数有没有关系?如果有是什么关系?
2。什么是信号态?是不是信号态就是执行,非信号态就是挂起?
3。上例中程序中定义了event,初始化了event,又用KeSetEvent把它转入信号态,但我还是不明事件event到底是什么意思?它的作用是什么?应该如何理解这个event?
frankie.net
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2004-05-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-09 12:12
看看windows编程吧
work must come first@
游客

返回顶部