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

Function Ext2BuildRequest

Ext4Fsd/dispatch.c:291–354  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

289
290
291NTSTATUS
292Ext2BuildRequest (PDEVICE_OBJECT DeviceObject, PIRP Irp)
293{
294 BOOLEAN AtIrqlPassiveLevel = FALSE;
295 BOOLEAN IsTopLevelIrp = FALSE;
296 PEXT2_IRP_CONTEXT IrpContext = NULL;
297 NTSTATUS Status = STATUS_UNSUCCESSFUL;
298
299 __try {
300
301 __try {
302
303#if EXT2_DEBUG
304 Ext2DbgPrintCall(DeviceObject, Irp);
305#endif
306
307 AtIrqlPassiveLevel = (KeGetCurrentIrql() == PASSIVE_LEVEL);
308
309 if (AtIrqlPassiveLevel) {
310 FsRtlEnterFileSystem();
311 }
312
313 if (!IoGetTopLevelIrp()) {
314 IsTopLevelIrp = TRUE;
315 IoSetTopLevelIrp(Irp);
316 }
317
318 IrpContext = Ext2AllocateIrpContext(DeviceObject, Irp);
319
320 if (!IrpContext) {
321
322 Status = STATUS_INSUFFICIENT_RESOURCES;
323 Irp->IoStatus.Status = Status;
324
325 Ext2CompleteRequest(Irp, TRUE, IO_NO_INCREMENT);
326
327 } else {
328
329 if ((IrpContext->MajorFunction == IRP_MJ_CREATE) &&
330 !AtIrqlPassiveLevel) {
331
332 DbgBreak();
333 }
334
335 Status = Ext2DispatchRequest(IrpContext);
336 }
337 } __except (Ext2ExceptionFilter(IrpContext, GetExceptionInformation())) {
338
339 Status = Ext2ExceptionHandler(IrpContext);
340 }
341
342 } __finally {
343
344 if (IsTopLevelIrp) {
345 IoSetTopLevelIrp(NULL);
346 }
347
348 if (AtIrqlPassiveLevel) {

Callers

nothing calls this directly

Calls 5

Ext2DbgPrintCallFunction · 0.85
Ext2AllocateIrpContextFunction · 0.85
Ext2DispatchRequestFunction · 0.85
Ext2ExceptionFilterFunction · 0.85
Ext2ExceptionHandlerFunction · 0.85

Tested by

no test coverage detected