MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2GetBlock

Function Ext2GetBlock

Ext4Fsd/ext3/indirect.c:135–337  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

133}
134
135NTSTATUS
136Ext2GetBlock(
137 IN PEXT2_IRP_CONTEXT IrpContext,
138 IN PEXT2_VCB Vcb,
139 IN PEXT2_MCB Mcb,
140 IN ULONG Base,
141 IN ULONG Layer,
142 IN ULONG Start,
143 IN ULONG SizeArray,
144 IN PULONG BlockArray,
145 IN BOOLEAN bAlloc,
146 IN OUT PULONG Hint,
147 OUT PULONG Block,
148 OUT PULONG Number
149)
150{
151 NTSTATUS Status = STATUS_SUCCESS;
152 PBCB Bcb = NULL;
153 PULONG pData = NULL;
154 ULONG Slot = 0, i = 0;
155 ULONG Unit = 1;
156
157 LARGE_INTEGER Offset;
158
159 if (Layer == 0) {
160
161 *Number = 1;
162 if (BlockArray[0] == 0 && bAlloc) {
163
164 /* now allocate new block */
165 Status = Ext2ExpandLast(
166 IrpContext,
167 Vcb,
168 Mcb,
169 Base,
170 Layer,
171 NULL,
172 Hint,
173 &BlockArray[0],
174 Number
175 );
176
177 if (!NT_SUCCESS(Status)) {
178 goto errorout;
179 }
180 } else {
181 /* check the block is valid or not */
182 if (BlockArray[0] >= TOTAL_BLOCKS) {
183 DbgBreak();
184 Status = STATUS_DISK_CORRUPT_ERROR;
185 goto errorout;
186 }
187 }
188
189 *Block = BlockArray[0];
190 for (i=1; i < SizeArray; i++) {
191 if (BlockArray[i] == BlockArray[i-1] + 1) {
192 *Number = *Number + 1;

Callers 1

Ext2MapIndirectFunction · 0.85

Calls 5

Ext2ExpandLastFunction · 0.85
Ext2AddMcbMetaExtsFunction · 0.85
Ext2SleepFunction · 0.85
Ext2AddVcbExtentFunction · 0.85
Ext2SaveInodeFunction · 0.85

Tested by

no test coverage detected