reactos操作系统实现(125)

前端之家收集整理的这篇文章主要介绍了reactos操作系统实现(125)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

VfatCreate函数创建或者打开一个文件。具体实现代码如下:

#001 NTSTATUS

#002 VfatCreate (PVFAT_IRP_CONTEXT IrpContext)

#003 /*

#004 * FUNCTION: Create or open a file

#005 */

#006 {

#007 NTSTATUS Status;

#008

#009 ASSERT(IrpContext);

#010

检查当前上下文里的设备是否与全局里保存的设备一致。

#011 if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject)

#012 {

如果文件系统已经打开,就直接返回。

#013 /* DeviceObject represents FileSystem instead of logical volume */

#014 DPRINT ("FsdCreate called with file system/n");

#015 IrpContext->Irp->IoStatus.Information = FILE_OPENED;

#016 IrpContext->Irp->IoStatus.Status = STATUS_SUCCESS;

#017 IoCompleteRequest (IrpContext->Irp,IO_DISK_INCREMENT);

#018 VfatFreeIrpContext(IrpContext);

#019 return(STATUS_SUCCESS);

#020 }

#021

如果标记为不能等,就直接放到队列里执行。

#022 if (!(IrpContext->Flags & IRPCONTEXT_CANWAIT))

#023 {

#024 return(VfatQueueRequest (IrpContext));

#025 }

#026

#027 IrpContext->Irp->IoStatus.Information = 0;

#028 ExAcquireResourceExclusiveLite (&IrpContext->DeviceExt->DirResource,TRUE);

创建或者打开一个文件

#029 Status = VfatCreateFile (IrpContext->DeviceObject,IrpContext->Irp);

#030 ExReleaseResourceLite (&IrpContext->DeviceExt->DirResource);

#031

已经完成IPR,设置标记为完成状态。

#032 IrpContext->Irp->IoStatus.Status = Status;

#033 IoCompleteRequest (IrpContext->Irp,

#034 (CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT));

#035 VfatFreeIrpContext(IrpContext);

#036 return(Status);

#037}

猜你在找的React相关文章