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和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...