阅读:1171回复:3
自己的creat向自己的write发irp的三种情况?
如果在自己的creat历程中向自己的write发送一个IRP,会怎样呢?
A。驱动处理完creat的全部代码,才处理write? B。驱动处理完creat引起的write,再返回处理creat的后续代码? C。驱动同时并行处理creat和write? |
|
沙发#
发布于:2007-04-26 08:09
1.如果create没有成功返回之前(FILE_OBJECT还未建立)发送write则异常;
2.如果create成功返回之后(FILE_OBJECT已经建立)发送write则又分两种情况: 同步和异步WRITE IRP; |
|
|
板凳#
发布于:2007-04-26 14:36
引用第1楼devia于2007-04-26 08:09发表的“”: 我创建异步irp,想实现同步功能,主要代码如下: 发送: Irp = IoBuildAsynchronousFsdRequest(); IrpSp = IoGetNextIrpStackLocation(Irp); IrpSp->FileObject = FileObject; Irp->Flags = 0x43;//三种不过虑标志 KeInitializeEvent(&Event, NotificationEvent, FALSE); IoSetCompletionRoutine(Irp,MyIrpComplete,&Event,TRUE,TRUE,TRUE); Status = IoCallDriver(DeviceObject, Irp); if(Status == STATUS_PENDING) KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); return IoStatus->Status; 完成: if (Irp->MdlAddress) { MmUnmapLockedPages(MmGetSystemAddressForMdl(Irp->MdlAddress),Irp->MdlAddress); MmUnlockPages(Irp->MdlAddress); IoFreeMdl(Irp->MdlAddress); } IoFreeIrp(Irp); if (Irp->PendingReturned) { KeSetEvent(Event, IO_NO_INCREMENT, FALSE); } return STATUS_MORE_PROCESSING_REQUIRED; 我的问题是:等待和设置同步事件是不是一定要判断Status == STATUS_PENDING 和 Irp->PendingReturned? |
|
地板#
发布于:2007-04-29 17:48
用户被禁言,该主题自动屏蔽! |
|