void guac_rdpdr_device_fs_iorequest_handler()

in src/protocols/rdp/channels/rdpdr/rdpdr-fs.c [33:109]


void guac_rdpdr_device_fs_iorequest_handler(guac_rdp_common_svc* svc,
        guac_rdpdr_device* device, guac_rdpdr_iorequest* iorequest,
        wStream* input_stream) {

    switch (iorequest->major_func) {

        /* File open */
        case IRP_MJ_CREATE:
            guac_rdpdr_fs_process_create(svc, device, iorequest, input_stream);
            break;

        /* File close */
        case IRP_MJ_CLOSE:
            guac_rdpdr_fs_process_close(svc, device, iorequest, input_stream);
            break;

        /* File read */
        case IRP_MJ_READ:
            guac_rdpdr_fs_process_read(svc, device, iorequest, input_stream);
            break;

        /* File write */
        case IRP_MJ_WRITE:
            guac_rdpdr_fs_process_write(svc, device, iorequest, input_stream);
            break;

        /* Device control request (Windows FSCTL_ control codes) */
        case IRP_MJ_DEVICE_CONTROL:
            guac_rdpdr_fs_process_device_control(svc, device, iorequest, input_stream);
            break;

        /* Query volume (drive) information */
        case IRP_MJ_QUERY_VOLUME_INFORMATION:
            guac_rdpdr_fs_process_volume_info(svc, device, iorequest, input_stream);
            break;

        /* Set volume (drive) information */
        case IRP_MJ_SET_VOLUME_INFORMATION:
            guac_rdpdr_fs_process_set_volume_info(svc, device, iorequest, input_stream);
            break;

        /* Query file information */
        case IRP_MJ_QUERY_INFORMATION:
            guac_rdpdr_fs_process_file_info(svc, device, iorequest, input_stream);
            break;

        /* Set file information */
        case IRP_MJ_SET_INFORMATION:
            guac_rdpdr_fs_process_set_file_info(svc, device, iorequest, input_stream);
            break;

        case IRP_MJ_DIRECTORY_CONTROL:

            /* Enumerate directory contents */
            if (iorequest->minor_func == IRP_MN_QUERY_DIRECTORY)
                guac_rdpdr_fs_process_query_directory(svc, device, iorequest,
                        input_stream);

            /* Request notification of changes to directory */
            else if (iorequest->minor_func == IRP_MN_NOTIFY_CHANGE_DIRECTORY)
                guac_rdpdr_fs_process_notify_change_directory(svc, device,
                        iorequest, input_stream);

            break;

        /* Lock/unlock portions of a file */
        case IRP_MJ_LOCK_CONTROL:
            guac_rdpdr_fs_process_lock_control(svc, device, iorequest, input_stream);
            break;

        default:
            guac_client_log(svc->client, GUAC_LOG_DEBUG,
                    "Unknown filesystem I/O request function: 0x%x/0x%x",
                    iorequest->major_func, iorequest->minor_func);
    }

}