加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(125)

发布时间:2020-12-15 04:59:47 所属栏目:百科 来源:网络整理
导读: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 检

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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读