从上面的入口函数里可以看到,很多消息处理函数都是调用函数@H_301_1@VfatBuildRequest来处理的,具体实现代码如下:
@H_301_4@@H_301_1@#001 NTSTATUS NTAPI VfatBuildRequest ( @H_301_4@@H_301_1@#002 IN PDEVICE_OBJECT DeviceObject, @H_301_4@@H_301_1@#003 IN PIRP Irp) @H_301_4@@H_301_1@#004 { @H_301_4@@H_301_1@#005 NTSTATUS Status; @H_301_4@@H_301_1@#006 PVFAT_IRP_CONTEXT IrpContext; @H_301_4@@H_301_1@#007 @H_301_4@@H_301_1@#008 DPRINT ("VfatBuildRequest (DeviceObject %p,Irp %p)/n",DeviceObject,Irp); @H_301_4@@H_301_1@#009 @H_301_4@@H_301_1@#010 ASSERT(DeviceObject); @H_301_4@@H_301_1@#011 ASSERT(Irp); @H_301_4@@H_301_1@ @H_301_4@分配@H_301_1@IRP的上下文。@H_301_1@ @H_301_4@@H_301_1@#012 IrpContext = VfatAllocateIrpContext(DeviceObject,Irp); @H_301_4@@H_301_1@#013 if (IrpContext == NULL) @H_301_4@@H_301_1@#014 { @H_301_4@@H_301_1@ @H_301_4@如果分配不成功,就返回处理@H_301_1@IRP出错。@H_301_1@ @H_301_4@@H_301_1@#015 Status = STATUS_INSUFFICIENT_RESOURCES; @H_301_4@@H_301_1@#016 Irp->IoStatus.Status = Status; @H_301_4@@H_301_1@#017 IoCompleteRequest (Irp,IO_NO_INCREMENT); @H_301_4@@H_301_1@#018 } @H_301_4@@H_301_1@#019 else @H_301_4@@H_301_1@#020 { @H_301_4@@H_301_1@ @H_301_4@通过临界区来加锁对文件系统访问。@H_301_1@ @H_301_4@@H_301_1@#021 FsRtlEnterFileSystem(); @H_301_4@@H_301_1@ @H_301_4@调用函数@H_301_1@VfatDispatchRequest来分发到不同的函数处理不同的功能。@H_301_1@ @H_301_4@@H_301_1@#022 Status = VfatDispatchRequest (IrpContext); @H_301_4@@H_301_1@#023 FsRtlExitFileSystem(); @H_301_4@@H_301_1@#024 } @H_301_4@@H_301_1@#025 return Status; @H_301_4@@H_301_1@#026}