亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fileinfo.c

?? FSD file system driver
?? C
?? 第 1 頁 / 共 3 頁
字號:

		Vcb = (PFFS_VCB)DeviceObject->DeviceExtension;

		ASSERT(Vcb != NULL);

		ASSERT((Vcb->Identifier.Type == FFSVCB) &&
				(Vcb->Identifier.Size == sizeof(FFS_VCB)));

		ASSERT(IsMounted(Vcb));

		FileObject = IrpContext->FileObject;

		Fcb = (PFFS_FCB)FileObject->FsContext;

		ASSERT(Fcb != NULL);

		//
		// This request is not allowed on volumes
		//
		if (Fcb->Identifier.Type == FFSVCB)
		{
			FFSBreakPoint();

			Status = STATUS_INVALID_PARAMETER;
			__leave;
		}

		ASSERT((Fcb->Identifier.Type == FFSFCB) &&
				(Fcb->Identifier.Size == sizeof(FFS_FCB)));

		if (IsFlagOn(Fcb->Flags, FCB_FILE_DELETED))
		{
			Status = STATUS_FILE_DELETED;
			__leave;
		}

		Ccb = (PFFS_CCB)FileObject->FsContext2;

		ASSERT(Ccb != NULL);

		ASSERT((Ccb->Identifier.Type == FFSCCB) &&
				(Ccb->Identifier.Size == sizeof(FFS_CCB)));

		Irp = IrpContext->Irp;

		IoStackLocation = IoGetCurrentIrpStackLocation(Irp);

		FileInformationClass =
			IoStackLocation->Parameters.SetFile.FileInformationClass;

		Length = IoStackLocation->Parameters.SetFile.Length;

		Buffer = Irp->AssociatedIrp.SystemBuffer;

		if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY))
		{
			if (FileInformationClass == FileDispositionInformation ||
					FileInformationClass == FileRenameInformation ||
					FileInformationClass == FileLinkInformation)
			{
				if (!ExAcquireResourceExclusiveLite(
							&Vcb->MainResource,
							IrpContext->IsSynchronous))
				{
					Status = STATUS_PENDING;
					__leave;
				}

				VcbResourceAcquired = TRUE;
			}
		}
		else if (!FlagOn(Fcb->Flags, FCB_PAGE_FILE))
		{
			if (!ExAcquireResourceExclusiveLite(
						&Fcb->MainResource,
						IrpContext->IsSynchronous))
			{
				Status = STATUS_PENDING;
				__leave;
			}

			FcbMainResourceAcquired = TRUE;
		}

		if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY))
		{
			if (FileInformationClass != FilePositionInformation)
			{
				Status = STATUS_MEDIA_WRITE_PROTECTED;
				__leave;
			}
		}

		if (FileInformationClass == FileDispositionInformation ||
				FileInformationClass == FileRenameInformation ||
				FileInformationClass == FileLinkInformation ||
				FileInformationClass == FileAllocationInformation ||
				FileInformationClass == FileEndOfFileInformation)
		{
			if (!ExAcquireResourceExclusiveLite(
						&Fcb->PagingIoResource,
						IrpContext->IsSynchronous))
			{
				Status = STATUS_PENDING;
				__leave;
			}

			FcbPagingIoResourceAcquired = TRUE;
		}

		/*        
		if (FileInformationClass != FileDispositionInformation 
			 && FlagOn(Fcb->Flags, FCB_DELETE_PENDING))
		{
			Status = STATUS_DELETE_PENDING;
			__leave;
		}
		*/

		switch (FileInformationClass)
		{
			case FileBasicInformation:
				{
					PFILE_BASIC_INFORMATION FBI = (PFILE_BASIC_INFORMATION)Buffer;

					if (FS_VERSION == 1)
					{
						PFFSv1_INODE dinode1 = Fcb->dinode1;

						if(FBI->CreationTime.QuadPart)
						{
							dinode1->di_ctime = (ULONG)(FFSInodeTime(FBI->CreationTime));
						}

						if(FBI->LastAccessTime.QuadPart)
						{
							dinode1->di_atime = (ULONG)(FFSInodeTime(FBI->LastAccessTime));
						}

						if(FBI->LastWriteTime.QuadPart)
						{
							dinode1->di_mtime = (ULONG)(FFSInodeTime(FBI->LastWriteTime));
						}

						if (IsFlagOn(FBI->FileAttributes, FILE_ATTRIBUTE_READONLY)) 
						{
							FFSSetReadOnly(Fcb->dinode1->di_mode);
							SetFlag(Fcb->FFSMcb->FileAttr, FILE_ATTRIBUTE_READONLY);
						}
						else
						{
							FFSSetWritable(Fcb->dinode1->di_mode);
							ClearFlag(Fcb->FFSMcb->FileAttr, FILE_ATTRIBUTE_READONLY);
						}

						if(FFSv1SaveInode(IrpContext, Vcb, Fcb->FFSMcb->Inode, dinode1))
						{
							Status = STATUS_SUCCESS;
						}

						if (FBI->FileAttributes & FILE_ATTRIBUTE_TEMPORARY) 
						{
							SetFlag(FileObject->Flags, FO_TEMPORARY_FILE);
						} 
						else 
						{
							ClearFlag(FileObject->Flags, FO_TEMPORARY_FILE);
						}
					}
					else
					{
						PFFSv2_INODE dinode2 = Fcb->dinode2;

						if(FBI->CreationTime.QuadPart)
						{
							dinode2->di_ctime = (ULONG)(FFSInodeTime(FBI->CreationTime));
						}

						if(FBI->LastAccessTime.QuadPart)
						{
							dinode2->di_atime = (ULONG)(FFSInodeTime(FBI->LastAccessTime));
						}

						if(FBI->LastWriteTime.QuadPart)
						{
							dinode2->di_mtime = (ULONG)(FFSInodeTime(FBI->LastWriteTime));
						}

						if (IsFlagOn(FBI->FileAttributes, FILE_ATTRIBUTE_READONLY)) 
						{
							FFSSetReadOnly(Fcb->dinode2->di_mode);
							SetFlag(Fcb->FFSMcb->FileAttr, FILE_ATTRIBUTE_READONLY);
						}
						else
						{
							FFSSetWritable(Fcb->dinode2->di_mode);
							ClearFlag(Fcb->FFSMcb->FileAttr, FILE_ATTRIBUTE_READONLY);
						}

						if(FFSv2SaveInode(IrpContext, Vcb, Fcb->FFSMcb->Inode, dinode2))
						{
							Status = STATUS_SUCCESS;
						}

						if (FBI->FileAttributes & FILE_ATTRIBUTE_TEMPORARY) 
						{
							SetFlag(FileObject->Flags, FO_TEMPORARY_FILE);
						} 
						else 
						{
							ClearFlag(FileObject->Flags, FO_TEMPORARY_FILE);
						}
					}

					NotifyFilter = FILE_NOTIFY_CHANGE_ATTRIBUTES |
						FILE_NOTIFY_CHANGE_CREATION |
						FILE_NOTIFY_CHANGE_LAST_ACCESS |
						FILE_NOTIFY_CHANGE_LAST_WRITE ;

					Status = STATUS_SUCCESS;
				}
				break;

			case FileAllocationInformation:
				{
					PFILE_ALLOCATION_INFORMATION FAI = (PFILE_ALLOCATION_INFORMATION)Buffer;

					if (FlagOn(Fcb->FFSMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY))
					{
						Status = STATUS_INVALID_DEVICE_REQUEST;
						__leave;
					}

					if (FAI->AllocationSize.QuadPart == 
							Fcb->Header.AllocationSize.QuadPart)
					{
						Status = STATUS_SUCCESS;
					}
					else if (FAI->AllocationSize.QuadPart >
							Fcb->Header.AllocationSize.QuadPart)
					{
						if(FFSExpandFile(IrpContext,
									Vcb, Fcb,
									&(FAI->AllocationSize)))
						{
							if (FFSv1SaveInode(IrpContext,
										Vcb,
										Fcb->FFSMcb->Inode,
										Fcb->dinode1))
							{
								Status = STATUS_SUCCESS;
							}
						}
						else
						{
							Status = STATUS_INSUFFICIENT_RESOURCES;
						}
					}
					else
					{
						if (MmCanFileBeTruncated(&(Fcb->SectionObject), &(FAI->AllocationSize))) 
						{
							LARGE_INTEGER EndOfFile;

							EndOfFile.QuadPart = FAI->AllocationSize.QuadPart +
								(LONGLONG)(Vcb->BlockSize - 1);

							if(FFSTruncateFile(IrpContext, Vcb, Fcb, &(EndOfFile)))
							{
								if (FAI->AllocationSize.QuadPart < 
										Fcb->Header.FileSize.QuadPart)
								{
									Fcb->Header.FileSize.QuadPart = 
										FAI->AllocationSize.QuadPart;
								}

								FFSv1SaveInode(IrpContext,
										Vcb,
										Fcb->FFSMcb->Inode,
										Fcb->dinode1);

								Status = STATUS_SUCCESS;
							}
						}
						else
						{
							Status = STATUS_USER_MAPPED_FILE;
							__leave;
						}
					}

					if (NT_SUCCESS(Status))
					{
						CcSetFileSizes(FileObject, 
								(PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize)));
						SetFlag(FileObject->Flags, FO_FILE_MODIFIED);

						NotifyFilter = FILE_NOTIFY_CHANGE_SIZE |
							FILE_NOTIFY_CHANGE_LAST_WRITE ;

					}

				}
				break;

			case FileEndOfFileInformation:
				{
					PFILE_END_OF_FILE_INFORMATION FEOFI = (PFILE_END_OF_FILE_INFORMATION) Buffer;

					BOOLEAN CacheInitialized = FALSE;

					if (IsDirectory(Fcb))
					{
						Status = STATUS_INVALID_DEVICE_REQUEST;
						__leave;
					}

					if (FEOFI->EndOfFile.HighPart != 0)
					{
						Status = STATUS_INVALID_PARAMETER;
						__leave;
					}


					if (IoStackLocation->Parameters.SetFile.AdvanceOnly)
					{
						Status = STATUS_SUCCESS;
						__leave;
					}

					if ((FileObject->SectionObjectPointer->DataSectionObject != NULL) &&
							(FileObject->SectionObjectPointer->SharedCacheMap == NULL) &&
							!FlagOn(Irp->Flags, IRP_PAGING_IO)) {

						ASSERT(!FlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE));

						CcInitializeCacheMap(
								FileObject,
								(PCC_FILE_SIZES)&(Fcb->Header.AllocationSize),
								FALSE,
								&(FFSGlobal->CacheManagerNoOpCallbacks),
								Fcb);

						CacheInitialized = TRUE;
					}

					if (FEOFI->EndOfFile.QuadPart == 
							Fcb->Header.AllocationSize.QuadPart)
					{
						Status = STATUS_SUCCESS;
					}
					else if (FEOFI->EndOfFile.QuadPart > 
							Fcb->Header.AllocationSize.QuadPart)
					{
						LARGE_INTEGER FileSize = Fcb->Header.FileSize;

						if(FFSExpandFile(IrpContext, Vcb, Fcb, &(FEOFI->EndOfFile)))
						{
							{
								Fcb->Header.FileSize.QuadPart = 
									FEOFI->EndOfFile.QuadPart;
								Fcb->dinode1->di_size = (ULONG)FEOFI->EndOfFile.QuadPart;
								Fcb->Header.ValidDataLength.QuadPart = 
									(LONGLONG)(0x7fffffffffffffff);
							}

							if (FFSv1SaveInode(IrpContext,
										Vcb,
										Fcb->FFSMcb->Inode,
										Fcb->dinode1))
							{
								Status = STATUS_SUCCESS;
							}
						}
						else
						{
							Status = STATUS_INSUFFICIENT_RESOURCES;
						}


						if (NT_SUCCESS(Status))
						{
							CcSetFileSizes(FileObject, 
									(PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize)));

							SetFlag(FileObject->Flags, FO_FILE_MODIFIED);

							FFSZeroHoles(IrpContext, 
									Vcb, FileObject, 
									FileSize.QuadPart,
									Fcb->Header.AllocationSize.QuadPart - 
									FileSize.QuadPart);

							NotifyFilter = FILE_NOTIFY_CHANGE_SIZE |
								FILE_NOTIFY_CHANGE_LAST_WRITE ;

						}
					}
					else
					{
						if (MmCanFileBeTruncated(&(Fcb->SectionObject), &(FEOFI->EndOfFile))) 
						{
							LARGE_INTEGER EndOfFile = FEOFI->EndOfFile;

							EndOfFile.QuadPart = EndOfFile.QuadPart + 
								(LONGLONG)(Vcb->BlockSize - 1);

							if(FFSTruncateFile(IrpContext, Vcb, Fcb, &(EndOfFile)))
							{
								Fcb->Header.FileSize.QuadPart = 
									FEOFI->EndOfFile.QuadPart;
								Fcb->dinode1->di_size = (ULONG)FEOFI->EndOfFile.QuadPart;

								FFSv1SaveInode(IrpContext,
										Vcb,
										Fcb->FFSMcb->Inode,
										Fcb->dinode1);

								Status = STATUS_SUCCESS;
							}
						}
						else
						{
							Status = STATUS_USER_MAPPED_FILE;
							__leave;
						}

						if (NT_SUCCESS(Status))
						{
							CcSetFileSizes(FileObject, 
									(PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize)));

							SetFlag(FileObject->Flags, FO_FILE_MODIFIED);

							NotifyFilter = FILE_NOTIFY_CHANGE_SIZE |
								FILE_NOTIFY_CHANGE_LAST_WRITE ;

						}
					}
				}

				break;

			case FileDispositionInformation:
				{
					PFILE_DISPOSITION_INFORMATION FDI = (PFILE_DISPOSITION_INFORMATION)Buffer;

					Status = FFSSetDispositionInfo(IrpContext, Vcb, Fcb, FDI->DeleteFile);
				}

				break;

			case FileRenameInformation:
				{
					Status = FFSSetRenameInfo(IrpContext, Vcb, Fcb);
				}

				break;

				//
				// This is the only set file information request supported on read
				// only file systems
				//
			case FilePositionInformation:
				{
					PFILE_POSITION_INFORMATION FilePositionInformation;

					if (Length < sizeof(FILE_POSITION_INFORMATION))
					{
						Status = STATUS_INVALID_PARAMETER;
						__leave;
					}

					FilePositionInformation = (PFILE_POSITION_INFORMATION) Buffer;

					if ((FlagOn(FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) &&
							(FilePositionInformation->CurrentByteOffset.LowPart &
							 DeviceObject->AlignmentRequirement))
					{
						Status = STATUS_INVALID_PARAMETER;
						__leave;
					}

					FileObject->CurrentByteOffset =
						FilePositionInformation->CurrentByteOffset;

					Status = STATUS_SUCCESS;
					__leave;
				}

				break;

			default:
				Status = STATUS_INVALID_INFO_CLASS;
		}
	}
	__finally
	{

		if (FcbPagingIoResourceAcquired)
		{
			ExReleaseResourceForThreadLite(
					&Fcb->PagingIoResource,
					ExGetCurrentResourceThread());
		}

		if (NT_SUCCESS(Status) && (NotifyFilter != 0))
		{
			FFSNotifyReportChange(
					IrpContext,
					Vcb,
					Fcb,
					NotifyFilter,
					FILE_ACTION_MODIFIED);

		}

		if (FcbMainResourceAcquired)
		{
			ExReleaseResourceForThreadLite(
					&Fcb->MainResource,
					ExGetCurrentResourceThread());
		}

		if (VcbResourceAcquired)
		{
			ExReleaseResourceForThreadLite(
					&Vcb->MainResource,
					ExGetCurrentResourceThread());
		}

		if (!IrpContext->ExceptionInProgress)
		{
			if (Status == STATUS_PENDING)
			{
				FFSQueueRequest(IrpContext);
			}
			else
			{
				FFSCompleteIrpContext(IrpContext,  Status);
			}
		}
	}

	return Status;
}


BOOLEAN
FFSExpandFile(
	PFFS_IRP_CONTEXT IrpContext, 
	PFFS_VCB         Vcb,
	PFFS_FCB         Fcb,
	PLARGE_INTEGER   AllocationSize)
{
	ULONG   dwRet = 0;
	BOOLEAN bRet = TRUE;

	if (AllocationSize->QuadPart <= Fcb->Header.AllocationSize.QuadPart)
	{
		return TRUE;
	}

	if (((LONGLONG)SUPER_BLOCK->fs_size - (LONGLONG)SUPER_BLOCK->fs_dsize) * Vcb->BlockSize <=
			(AllocationSize->QuadPart - Fcb->Header.AllocationSize.QuadPart))
	{
		FFSPrint((DBG_ERROR, "FFSExpandFile: There is no enough disk space available.\n"));
		return FALSE;
	}

	while (bRet && (AllocationSize->QuadPart > Fcb->Header.AllocationSize.QuadPart))
	{
		bRet = FFSExpandInode(IrpContext, Vcb, Fcb, &dwRet);
	}

	return bRet;
}


BOOLEAN
FFSTruncateFile(
	PFFS_IRP_CONTEXT IrpContext,
	PFFS_VCB         Vcb,
	PFFS_FCB         Fcb,
	PLARGE_INTEGER   AllocationSize)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩一区二区| 天天操天天综合网| www.亚洲国产| 亚洲夂夂婷婷色拍ww47| 久久精品国产精品青草| 日韩一区二区电影| 精品一二三四区| 亚洲欧美自拍偷拍| 欧美日韩在线综合| 日本成人中文字幕| 国产精品久久久久久久第一福利| 国产剧情一区二区| 亚洲精品久久嫩草网站秘色| 色婷婷激情综合| 亚洲成av人片在线观看无码| 在线电影院国产精品| 成人在线视频首页| 麻豆精品蜜桃视频网站| 国产女人18毛片水真多成人如厕 | 日韩亚洲欧美成人一区| 国产精品一区二区久激情瑜伽 | 欧美日韩一区小说| 99这里只有精品| 蜜桃久久精品一区二区| 亚洲黄一区二区三区| 久久久久久免费网| 69堂精品视频| 欧美人牲a欧美精品| 成人午夜精品在线| 不卡的电影网站| 丰满白嫩尤物一区二区| 午夜一区二区三区视频| 一区二区三区小说| 亚洲日本在线天堂| 中文字幕精品一区二区三区精品| 欧美日韩国产精选| 在线一区二区视频| 91成人国产精品| 欧美亚洲国产一区在线观看网站| 色美美综合视频| 国产91高潮流白浆在线麻豆| 国产成人综合视频| 国产一区二区三区在线看麻豆| 天天综合网天天综合色| 亚洲成人1区2区| 日韩国产欧美在线观看| 日韩中文字幕一区二区三区| 麻豆国产精品一区二区三区 | 亚洲免费大片在线观看| 亚洲伦理在线精品| 亚洲一级不卡视频| eeuss鲁片一区二区三区| 本田岬高潮一区二区三区| 91美女视频网站| 日韩三级精品电影久久久| 日韩三级免费观看| 亚洲欧美自拍偷拍| 日韩成人av影视| 色天使色偷偷av一区二区| 欧美丰满高潮xxxx喷水动漫| 久久新电视剧免费观看| 国产精品久久久久久久久搜平片| 亚洲二区在线观看| 国产精品一区二区你懂的| 欧美午夜电影在线播放| 久久精品男人的天堂| 亚洲国产视频一区二区| 国产精品香蕉一区二区三区| 在线国产电影不卡| 国产精品久久久久久久久果冻传媒| 天天综合日日夜夜精品| 在线免费亚洲电影| 国产精品三级av| 成人综合婷婷国产精品久久蜜臀| 欧美一区二区三区在线观看 | 国产免费观看久久| 国产在线不卡视频| 2024国产精品| 国产99精品在线观看| 欧美一区二区福利在线| 蜜臀av一区二区三区| 欧美一区二区在线免费观看| 亚洲精品伦理在线| 91美女在线观看| 日韩av中文在线观看| 欧美不卡一二三| 国产91清纯白嫩初高中在线观看| 欧美精品一区视频| 粉嫩aⅴ一区二区三区四区| 中文字幕精品一区二区三区精品| 成人精品小蝌蚪| 亚洲另类色综合网站| 欧美色视频在线观看| 男女视频一区二区| 久久色.com| 91麻豆国产精品久久| 五月天欧美精品| 中文字幕一区二区三区在线不卡| 日本高清免费不卡视频| 男人操女人的视频在线观看欧美| 久久久久久**毛片大全| 欧洲一区二区av| 国产精品1024久久| 午夜精品久久久久影视| 欧美国产激情一区二区三区蜜月| 色综合久久久久| 美女视频一区二区| 亚洲精品国产成人久久av盗摄| 日韩一本二本av| 欧美性大战久久久久久久| 色综合色综合色综合| 日韩一区二区在线观看视频| 丁香天五香天堂综合| 国产乱理伦片在线观看夜一区| 亚洲在线中文字幕| 洋洋av久久久久久久一区| 国产精品天美传媒| 国产日产亚洲精品系列| 久久综合色8888| 久久网站热最新地址| 精品国产乱码久久久久久牛牛 | 国产麻豆日韩欧美久久| 久久se精品一区精品二区| 免费在线观看成人| 久久精品久久99精品久久| 国模无码大尺度一区二区三区| 蜜臀av亚洲一区中文字幕| 91污在线观看| 欧美一区在线视频| 91在线观看视频| 91精品福利视频| 91亚洲精华国产精华精华液| av网站免费线看精品| 色嗨嗨av一区二区三区| 欧美精品电影在线播放| 欧美一区二区人人喊爽| 久久久高清一区二区三区| 国产精品国产a| 亚洲成人激情自拍| 国产综合久久久久影院| www.日韩av| 精品电影一区二区| 亚洲色欲色欲www在线观看| 免费精品视频在线| 91久久精品网| 久久久久久99精品| 麻豆成人综合网| 色狠狠综合天天综合综合| 成人av电影在线网| 亚洲精品在线网站| 亚洲黄色av一区| 成人午夜免费视频| 国产丝袜在线精品| 岛国av在线一区| 91麻豆精品国产无毒不卡在线观看 | 北条麻妃一区二区三区| 中文字幕精品三区| 色噜噜久久综合| 成人免费在线播放视频| 国产伦精品一区二区三区免费| 日韩一区二区高清| 日韩激情av在线| 欧美男人的天堂一二区| 国产一区二区剧情av在线| 日韩午夜三级在线| 免费在线观看精品| 久久久久国产精品麻豆 | 亚洲sss视频在线视频| 欧美日韩中文另类| 天天做天天摸天天爽国产一区| 精品免费日韩av| 91小视频在线免费看| 亚洲欧美乱综合| 欧美日韩一区不卡| 免费成人在线视频观看| 久久久久久亚洲综合影院红桃| 国产麻豆精品theporn| 欧美特级限制片免费在线观看| 亚洲国产一区二区在线播放| 日韩一区二区在线观看视频播放| 国产综合久久久久久久久久久久| 亚洲天堂精品视频| 国产视频一区二区在线观看| 色综合网站在线| 国产suv精品一区二区6| 亚洲国产精品视频| 久久久综合视频| 2023国产精品自拍| 久久奇米777| 91精品婷婷国产综合久久性色 | 国产一级精品在线| 亚洲日韩欧美一区二区在线| 欧美一区午夜视频在线观看| 亚洲国产美女搞黄色| 久久久蜜臀国产一区二区| 制服丝袜成人动漫| 久久精品国产网站| 亚洲第一在线综合网站| 亚洲激情在线激情| 亚洲超碰精品一区二区|