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

Function Ext2DiskIoControl

Ext4Fsd/block.c:588–641  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

586
587
588NTSTATUS
589Ext2DiskIoControl (
590 IN PDEVICE_OBJECT DeviceObject,
591 IN ULONG IoctlCode,
592 IN PVOID InputBuffer,
593 IN ULONG InputBufferSize,
594 IN OUT PVOID OutputBuffer,
595 IN OUT PULONG OutputBufferSize)
596{
597 ULONG OutBufferSize = 0;
598 KEVENT Event;
599 PIRP Irp;
600 IO_STATUS_BLOCK IoStatus;
601 NTSTATUS Status;
602
603 ASSERT(DeviceObject != NULL);
604
605 if (OutputBufferSize)
606 {
607 OutBufferSize = *OutputBufferSize;
608 }
609
610 KeInitializeEvent(&Event, NotificationEvent, FALSE);
611
612 Irp = IoBuildDeviceIoControlRequest(
613 IoctlCode,
614 DeviceObject,
615 InputBuffer,
616 InputBufferSize,
617 OutputBuffer,
618 OutBufferSize,
619 FALSE,
620 &Event,
621 &IoStatus
622 );
623
624 if (Irp == NULL) {
625 DEBUG(DL_ERR, ( "Ext2DiskIoControl: failed to build Irp!\n"));
626 return STATUS_INSUFFICIENT_RESOURCES;
627 }
628
629 Status = IoCallDriver(DeviceObject, Irp);
630
631 if (Status == STATUS_PENDING) {
632 KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
633 Status = IoStatus.Status;
634 }
635
636 if (OutputBufferSize) {
637 *OutputBufferSize = (ULONG)(IoStatus.Information);
638 }
639
640 return Status;
641}
642
643
644NTSTATUS

Callers 4

Ext2MountVolumeFunction · 0.85
Ext2VerifyVcbFunction · 0.85
Ext2VerifyVolumeFunction · 0.85
Ext2InitializeVcbFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected