/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
StrucSup.c
Abstract:
This module implements the Udfs in-memory data structure manipulation
routines
Author:
Dan Lovinger [DanLo] 19-Jun-1996
Revision History:
--*/
#include "UdfProcs.h"
//
// The Bug check file id for this module
//
#define BugCheckFileId (UDFS_BUG_CHECK_STRUCSUP)
//
// The local debug trace level
//
#define Dbg (UDFS_DEBUG_LEVEL_STRUCSUP)
//
// Local structures
//
typedef struct _FCB_TABLE_ELEMENT {
FILE_ID FileId;
PFCB Fcb;
} FCB_TABLE_ELEMENT, *PFCB_TABLE_ELEMENT;
//
// Local macros
//
//
// PFCB
// UdfAllocateFcbData (
// IN PIRP_CONTEXT IrpContext
// );
//
// VOID
// UdfDeallocateFcbData (
// IN PIRP_CONTEXT IrpContext,
// IN PFCB Fcb
// );
//
// PFCB
// UdfAllocateFcbIndex (
// IN PIRP_CONTEXT IrpContext
// );
//
// VOID
// UdfDeallocateFcbIndex (
// IN PIRP_CONTEXT IrpContext,
// IN PFCB Fcb
// );
//
// PFCB_NONPAGED
// UdfAllocateFcbNonpaged (
// IN PIRP_CONTEXT IrpContext
// );
//
// VOID
// UdfDeallocateFcbNonpaged (
// IN PIRP_CONTEXT IrpContext,
// IN PFCB_NONPAGED FcbNonpaged
// );
//
// PCCB
// UdfAllocateCcb (
// IN PIRP_CONTEXT IrpContext
// );
//
// VOID
// UdfDeallocateCcb (
// IN PIRP_CONTEXT IrpContext,
// IN PCCB Ccb
// );
//
#define UdfAllocateFcbData(IC) \
ExAllocateFromPagedLookasideList( &UdfFcbDataLookasideList );
#define UdfDeallocateFcbData(IC,F) \
ExFreeToPagedLookasideList( &UdfFcbDataLookasideList, F );
#define UdfAllocateFcbIndex(IC) \
ExAllocateFromPagedLookasideList( &UdfFcbIndexLookasideList );
#define UdfDeallocateFcbIndex(IC,F) \
ExFreeToPagedLookasideList( &UdfFcbIndexLookasideList, F );
#define UdfAllocateFcbNonpaged(IC) \
ExAllocateFromNPagedLookasideList( &UdfFcbNonPagedLookasideList );
#define UdfDeallocateFcbNonpaged(IC,FNP) \
ExFreeToNPagedLookasideList( &UdfFcbNonPagedLookasideList, FNP );
#define UdfAllocateCcb(IC) \
ExAllocateFromPagedLookasideList( &UdfCcbLookasideList );
#define UdfDeallocateCcb(IC,C) \
ExFreeToPagedLookasideList( &UdfCcbLookasideList, C );
//
// VOID
// UdfInsertFcbTable (
// IN PIRP_CONTEXT IrpContext,
// IN PFCB Fcb
// );
//
// VOID
// UdfDeleteFcbTable (
// IN PIRP_CONTEXT IrpContext,
// IN PFCB Fcb
// );
//
#define UdfInsertFcbTable(IC,F) { \
FCB_TABLE_ELEMENT _Key; \
_Key.Fcb = (F); \
_Key.FileId = (F)->FileId; \
RtlInsertElementGenericTable( &(F)->Vcb->FcbTable, \
&_Key, \
sizeof( FCB_TABLE_ELEMENT ), \
NULL ); \
}
#define UdfDeleteFcbTable(IC,F) { \
FCB_TABLE_ELEMENT _Key; \
_Key.FileId = (F)->FileId; \
RtlDeleteElementGenericTable( &(F)->Vcb->FcbTable, &_Key ); \
}
//
// Discovers the partition the current allocation descriptor's referred extent
// is on, either explicitly throuigh the descriptor or implicitly through the
// mapped view.
//
INLINE
USHORT
UdfGetPartitionOfCurrentAllocation (
IN PALLOC_ENUM_CONTEXT AllocContext
)
{
if (AllocContext->AllocType == ICBTAG_F_ALLOC_LONG) {
return ((PLONGAD) AllocContext->Alloc)->Start.Partition;
} else {
return AllocContext->IcbContext->Active.Partition;
}
}
//
// Builds the Mcb in an Fcb. Use this after knowing that an Mcb is required
// for mapping information.
//
INLINE
VOID
UdfInitializeFcbMcb (
IN PFCB Fcb
)
{
//
// In certain rare situations, we may get called more than once.
// Just reset the allocations.
//
if (FlagOn( Fcb->FcbState, FCB_STATE_MCB_INITIALIZED )) {
FsRtlResetLargeMcb( &Fcb->Mcb, TRUE );
} else {
FsRtlInitializeLargeMcb( &Fcb->Mcb, UdfPagedPool );
SetFlag( Fcb->FcbState, FCB_STATE_MCB_INITIALIZED );
}
}
//
// Teardown an Fcb's Mcb as required.
//
INLINE
VOID
UdfUninitializeFcbMcb (
IN PFCB Fcb
)
{
if (FlagOn( Fcb->FcbState, FCB_STATE_MCB_INITIALIZED )) {
FsRtlUninitializeLargeMcb( &Fcb->Mcb );
ClearFlag( Fcb->FcbState, FCB_STATE_MCB_INITIALIZED );
}
}
//
// Local support routines
//
PVOID
UdfAllocateTable (
IN PRTL_GENERIC_TABLE Table,
IN CLONG ByteSize
);
PFCB_NONPAGED
UdfCreateFcbNonPaged (
IN PIRP_CONTEXT IrpContext
);
VOID
UdfDeleteFcbNonpaged (
IN PIRP_CONTEXT IrpContext,
IN PFCB_NONPAGED FcbNonpaged
);
VOID
UdfDeallocateTable (
IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer
);
RTL_GENERIC_COMPARE_RESULTS
UdfFcbTableCompare (
IN PRTL_GENERIC_TABLE Table,
IN PVOID id1,
IN PVOID id2
);
VOID
UdfInitializeAllocationContext (
IN PIRP_CONTEXT IrpContext,
IN PALLOC_ENUM_CONTEXT AllocContext,
IN PICB_SEARCH_CONTEXT IcbContext
);
BOOLEAN
UdfGetNextAllocation (
IN PIRP_CONTEXT IrpContext,
IN PALLOC_ENUM_CONTEXT AllocContext
);
BOOLEAN
UdfGetNextAllocationPostProcessing (
IN PIRP_CONTEXT IrpContext,
IN PALLOC_ENUM_CONTEXT AllocContext
);
VOID
UdfLookupActiveIcbInExtent (
IN PIRP_CONTEXT IrpContext,
IN PICB_SEARCH_CONTEXT IcbContext,
IN ULONG Recurse
);
VOID
UdfInitializeEaContext (
IN PIRP_CONTEXT IrpContext,
IN PEA_SEARCH_CONTEXT EaContext,
IN PICB_SEARCH_CONTEXT IcbContext,
IN ULONG EAType,
IN UCHAR EASubType
);
BOOLEAN
UdfLookupEa (
IN PIRP_CONTEXT IrpContext,
IN PEA_SEARCH_CONTEXT EaContext
);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, UdfAllocateTable)
#pragma alloc_text(PAGE, UdfCleanupIcbContext)
#pragma alloc_text(PAGE, UdfCleanupIrpContext)
#pragma alloc_text(PAGE, UdfCreateCcb)
#pragma alloc_text(PAGE, UdfCreateFcb)
#pragma alloc_text(PAGE, UdfCreateFcbNonPaged)
#pragma alloc_text(PAGE, UdfCreateIrpContext)
#pragma alloc_text(PAGE, UdfDeallocateTable)
#pragma alloc_text(PAGE, UdfDeleteCcb)
#pragma alloc_text(PAGE, UdfDeleteFcb)
#pragma alloc_text(PAGE, UdfDeleteFcbNonpaged)
#pragma alloc_text(PAGE, UdfDeleteVcb)
#pragma alloc_text(PAGE, UdfFcbTableCompare)
#pragma alloc_text(PAGE, UdfFindInParseTable)
#pragma alloc_text(PAGE, UdfGetNextAllocation)
#pragma alloc_text(PAGE, UdfGetNextAllocationPostProcessing)
#pragma alloc_text(PAGE, UdfGetNextFcb)
#pragma alloc_text(PAGE, UdfInitializeAllocationContext)
#pragma alloc_text(PAGE, UdfInitializeAllocations)
#pragma alloc_text(PAGE, UdfInitializeEaContext)
#pragma alloc_text(PAGE, UdfInitializeFcbFromIcbContext)
#pragma alloc_text(PAGE, UdfInitializeIcbContext)
#pragma alloc_text(PAGE, UdfInitializeStackIrpContext)
#pragma alloc_text(PAGE, UdfInitializeVcb)
#pragma alloc_text(PAGE, UdfLookupActiveIcb)
#pragma alloc_text(PAGE, UdfLookupActiveIcbInExtent)
#pragma alloc_text(PAGE, UdfLookupEa)
#pragma alloc_text(PAGE, UdfLookupFcbTable)
#pragma alloc_text(PAGE, UdfTeardownStructures)
#pragma alloc_text(PAGE, UdfUpdateTimestampsFromIcbContext)
#pragma alloc_text(PAGE, UdfUpdateVcbPhase0)
#pragma alloc_text(PAGE, UdfUpdateVcbPhase1)
#pragma alloc_text(PAGE, UdfVerifyDescriptor)
#endif ALLOC_PRAGMA
BOOLEAN
UdfInitializeVcb (
IN PIRP_CONTEXT IrpContext,
IN OUT PVCB Vcb,
没有合适的资源?快使用搜索试试~ 我知道了~
udfs.rar_read u_udf_udfs
共41个文件
c:26个
h:6个
rc:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 10 浏览量
2022-09-20
14:31:30
上传
评论
收藏 264KB RAR 举报
温馨提示
windows 2000中的UDF文件系统的驱动程序.只有读的功能,不支持未关闭的盘片.只支持UDF2.0以下版本,不支持VAT格式的UDF.
资源推荐
资源详情
资源评论
收起资源包目录
udfs.rar (41个子文件)
udfs
prefxsup.c 18KB
resrcsup.c 6KB
udfprocs.h 55KB
devctrl.c 11KB
workque.c 9KB
udfdata.c 34KB
cleanup.c 8KB
namesup.c 39KB
deviosup.c 57KB
cachesup.c 15KB
udfstruc.h 46KB
verfysup.c 23KB
udf.h 18KB
udfs.dsw 303B
lockctrl.c 15KB
udfs.rc 247B
fileinfo.c 34KB
pnp.c 18KB
udfinit.c 10KB
dirsup.c 34KB
strucsup.c 115KB
filobsup.c 5KB
close.c 24KB
makefile 247B
create.c 64KB
dirctrl.c 55KB
udfs.ncb 217KB
udfdata.h 15KB
udfs.opt 54KB
fspdisp.c 8KB
infrastructure for system tests.eml 0B
udfs.dsp 6KB
iso13346.h 44KB
fsctrl.c 115KB
nodetype.h 7KB
read.c 15KB
vmcbsup.c 43KB
volinfo.c 10KB
sources 1KB
allocsup.c 49KB
www.pudn.com.txt 218B
共 41 条
- 1
资源评论
周楷雯
- 粉丝: 82
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功