50 DEBUG(
DL_ERR, (
"Ex2ExpandBlock: failed to allocate memory for Data.\n"));
162 if (BlockArray[0] == 0 && bAlloc) {
189 *Block = BlockArray[0];
190 for (
i=1;
i < SizeArray;
i++) {
191 if (BlockArray[
i] == BlockArray[
i-1] + 1) {
197 *Hint = BlockArray[*
Number - 1];
199 }
else if (
Layer <= 3) {
202 if (BlockArray[0] == 0 || BlockArray[0] >=
TOTAL_BLOCKS) {
228 DEBUG(
DL_ERR, (
"Ext2GetBlock: Failed to PinLock block: %xh ...\n",
243 if (
pData[Slot] == 0) {
298 }
else if (
Layer == 2) {
381 DEBUG(
DL_BLK, (
"Ext2ExpandBlock: SizeArray=%xh Extra=%xh Start=%xh %xh\n",
385 if (BlockArray[
i] == 0) {
412 if (BlockArray[
i] == 0) {
413 BlockArray[
i] = Block++;
420 }
else if (
Layer == 0) {
428 while (*Extra &&
i < SizeArray) {
433 for (
j =
i;
j < SizeArray &&
j <
i + *Extra;
j++) {
440 if (BlockArray[
j] == 0) {
477 BlockArray[
i +
j] = Block++;
493 for (
i = 0; *Extra &&
i < SizeArray;
i++) {
502 if (BlockArray[
i] == 0) {
534 DEBUG(
DL_ERR, (
"Ext2ExpandInode: failed to PinLock offset :%I64xh...\n",
622 for (
i=0;
i < SizeArray;
i++) {
627 return (
i == SizeArray);
655 for (
i = 0;
i < SizeArray;
i++) {
661 while (Extra && SizeArray >
i + 1 &&
Number < *Extra) {
663 if (BlockArray[SizeArray -
i - 1] ==
664 BlockArray[SizeArray -
i - 2] + 1) {
666 BlockArray[SizeArray -
i - 1] = 0;
675 if (BlockArray[SizeArray -
i - 1]) {
681 Mcb->Inode.i_blocks = 0;
686 BlockArray[SizeArray -
i - 1] = 0;
710 BlockArray[SizeArray -
i - 1] = 0;
725 Skip = (SizeArray -
i - 1) *
Vcb->max_blocks_per_layer[
Layer];
727 if (BlockArray[SizeArray -
i - 1]) {
743 DEBUG(
DL_ERR, (
"Ext2TruncateBlock: PinLock failed on block %xh ...\n",
744 BlockArray[SizeArray -
i - 1]));
779 &BlockArray[SizeArray -
i - 1],
799 if (*Extra > Slot *
Vcb->max_blocks_per_layer[
Layer - 1] +
Start + 1) {
800 *Extra -= (Slot *
Vcb->max_blocks_per_layer[
Layer - 1] +
Start + 1);
805 if (*Extra > Slot + 1) {
806 *Extra -= (Slot + 1);
820 if (Extra && *Extra == 0) {
857 if (Index < Vcb->max_blocks_per_layer[
Layer]) {
859 ULONG dwRet = 0, dwBlk = 0, dwHint = 0, dwArray = 0;
862 dwBlk =
Mcb->Inode.i_block[Slot];
874 dwHint =
Mcb->Inode.i_block[Slot - 1];
896 Mcb->Inode.i_block[Slot] = dwBlk;
924 &
Mcb->Inode.i_block[Slot],
968 if (End >
Vcb->max_data_blocks) {
990 if (
Mcb->Inode.i_block[Slot] != 0) {
991 Hint =
Mcb->Inode.i_block[Slot];
992 }
else if (Slot > 1) {
993 Hint =
Mcb->Inode.i_block[Slot-1];
1009 &
Mcb->Inode.i_block[Slot],
1063 if (-1 == Lba || Vba == 0 ||
Length <= 0)
1074 if (-1 == Lba || Vba == 0 ||
Length <= 0)
1087 Mcb->Inode.i_blocks = 0;
1088 Mcb->Inode.i_size = 0;
1115 ULONG SizeArray = 0;
1119 End =
Base =
Vcb->max_data_blocks;
1130 Extra = End - Wanted;
1134 if (
Vcb->max_blocks_per_layer[
Layer - 1] == 0) {
1140 if (
Layer - 1 == 0) {
1142 BlockArray = (
PULONG)&
Mcb->Inode.i_block[0];
1144 BlockArray = &
Mcb->Inode.i_block[0];
VOID NTAPI CcSetDirtyPinnedData(IN PVOID BcbVoid, IN OPTIONAL PLARGE_INTEGER Lsn)
#define NT_SUCCESS(StatCode)
VOID Ext2FreePool(IN PVOID P, IN ULONG Tag)
#define ClearFlag(_F, _SF)
struct ext3_dir_entry_2 * PEXT2_DIR_ENTRY2
BOOLEAN Ext2AddMcbMetaExts(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Block, IN ULONG Length)
PVOID Ext2AllocatePool(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
NTSTATUS Ext2NewBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG GroupHint, IN ULONG BlockHint, OUT PULONG Block, IN OUT PULONG Number)
NTSTATUS Ext2FreeBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG Block, IN ULONG Number)
BOOLEAN Ext2SaveBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN ULONG dwBlk, IN PVOID Buf)
NTSTATUS Ext2InitializeZone(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb)
BOOLEAN Ext2SaveInode(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN struct inode *Inode)
#define DEC_MEM_COUNT(_i, _p, _s)
BOOLEAN Ext2RemoveBlockExtent(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Start, IN ULONG Number)
BOOLEAN Ext2RemoveMcbMetaExts(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Block, IN ULONG Length)
#define ClearLongFlag(_F, _SF)
#define IsMcbDirectory(Mcb)
BOOLEAN Ext2AddBlockExtent(IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Start, IN ULONG Block, IN ULONG Number)
VOID Ext2ClearAllExtents(PLARGE_MCB Zone)
#define IsZoneInited(Mcb)
#define INC_MEM_COUNT(_i, _p, _s)
BOOLEAN Ext2AddVcbExtent(IN PEXT2_VCB Vcb, IN LONGLONG Vbn, IN LONGLONG Length)
IN PVCB IN VBO IN ULONG OUT PBCB * Bcb
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
NTSTATUS Ext2ExpandIndirect(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb, ULONG Start, ULONG End, PLARGE_INTEGER Size)
NTSTATUS Ext2GetBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Layer, IN ULONG Start, IN ULONG SizeArray, IN PULONG BlockArray, IN BOOLEAN bAlloc, IN OUT PULONG Hint, OUT PULONG Block, OUT PULONG Number)
NTSTATUS Ext2TruncateIndirectFast(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb)
NTSTATUS Ext2TruncateBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Start, IN ULONG Layer, IN ULONG SizeArray, IN PULONG BlockArray, IN PULONG Extra)
NTSTATUS Ext2ExpandLast(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Layer, IN PULONG *Data, IN PULONG Hint, IN PULONG Block, IN OUT PULONG Number)
NTSTATUS Ext2ExpandBlock(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Base, IN ULONG Layer, IN ULONG Start, IN ULONG SizeArray, IN PULONG BlockArray, IN PULONG Hint, IN PULONG Extra)
NTSTATUS Ext2TruncateIndirect(PEXT2_IRP_CONTEXT IrpContext, PEXT2_VCB Vcb, PEXT2_MCB Mcb, PLARGE_INTEGER Size)
NTSTATUS Ext2MapIndirect(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN PEXT2_MCB Mcb, IN ULONG Index, IN BOOLEAN bAlloc, OUT PULONG pBlock, OUT PULONG Number)
BOOLEAN Ext2IsBlockEmpty(PULONG BlockArray, ULONG SizeArray)
ULONG NTAPI FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb)
BOOLEAN NTAPI FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, IN ULONG RunIndex, OUT PLONGLONG Vbn, OUT PLONGLONG Lbn, OUT PLONGLONG SectorCount)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
VOID NTAPI CcUnpinData(IN PVOID Bcb)
BOOLEAN NTAPI CcPinRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG Flags, OUT PVOID *Bcb, OUT PVOID *Buffer)
STDMETHOD() Skip(THIS_ ULONG celt) PURE
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_DISK_CORRUPT_ERROR
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size