/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT drive_process_irp(DRIVE_DEVICE* drive, IRP* irp) { UINT error; irp->IoStatus = STATUS_SUCCESS; switch (irp->MajorFunction) { case IRP_MJ_CREATE: error = drive_process_irp_create(drive, irp); break; case IRP_MJ_CLOSE: error = drive_process_irp_close(drive, irp); break; case IRP_MJ_READ: error = drive_process_irp_read(drive, irp); break; case IRP_MJ_WRITE: error = drive_process_irp_write(drive, irp); break; case IRP_MJ_QUERY_INFORMATION: error = drive_process_irp_query_information(drive, irp); break; case IRP_MJ_SET_INFORMATION: error = drive_process_irp_set_information(drive, irp); break; case IRP_MJ_QUERY_VOLUME_INFORMATION: error = drive_process_irp_query_volume_information(drive, irp); break; case IRP_MJ_LOCK_CONTROL: error = drive_process_irp_silent_ignore(drive, irp); break; case IRP_MJ_DIRECTORY_CONTROL: error = drive_process_irp_directory_control(drive, irp); break; case IRP_MJ_DEVICE_CONTROL: error = drive_process_irp_device_control(drive, irp); break; default: irp->IoStatus = STATUS_NOT_SUPPORTED; error = irp->Complete(irp); break; } return error; }
static void drive_process_irp(DRIVE_DEVICE* disk, IRP* irp) { irp->IoStatus = STATUS_SUCCESS; switch (irp->MajorFunction) { case IRP_MJ_CREATE: drive_process_irp_create(disk, irp); break; case IRP_MJ_CLOSE: drive_process_irp_close(disk, irp); break; case IRP_MJ_READ: drive_process_irp_read(disk, irp); break; case IRP_MJ_WRITE: drive_process_irp_write(disk, irp); break; case IRP_MJ_QUERY_INFORMATION: drive_process_irp_query_information(disk, irp); break; case IRP_MJ_SET_INFORMATION: drive_process_irp_set_information(disk, irp); break; case IRP_MJ_QUERY_VOLUME_INFORMATION: drive_process_irp_query_volume_information(disk, irp); break; case IRP_MJ_LOCK_CONTROL : DEBUG_WARN("MajorFunction IRP_MJ_LOCK_CONTROL silent ignored"); drive_process_irp_silent_ignore(disk, irp); break; case IRP_MJ_DIRECTORY_CONTROL: drive_process_irp_directory_control(disk, irp); break; case IRP_MJ_DEVICE_CONTROL: drive_process_irp_device_control(disk, irp); break; default: DEBUG_WARN("MajorFunction 0x%X not supported", irp->MajorFunction); irp->IoStatus = STATUS_NOT_SUPPORTED; irp->Complete(irp); break; } }