Пример #1
0
NTSTATUS LklDispatchRequest(PIRPCONTEXT irp_context)
{
	ASSERT(irp_context);
	ASSERT((irp_context->id.type == IRP_CONTEXT) && (irp_context->id.size == sizeof(IRPCONTEXT)));

	switch (irp_context->major_function) {
	case IRP_MJ_CREATE:
		return CommonCreate(irp_context, irp_context->irp);

	case IRP_MJ_CLEANUP:
		return CommonCleanup(irp_context, irp_context->irp);

	case IRP_MJ_CLOSE:
		return CommonClose(irp_context, irp_context->irp);

	case IRP_MJ_DIRECTORY_CONTROL:
		return CommonDirectoryControl(irp_context, irp_context->irp);

	case IRP_MJ_LOCK_CONTROL:
	default:
		LklCompleteRequest(irp_context->irp, STATUS_INVALID_DEVICE_REQUEST);
		FreeIrpContext(irp_context);
	}
	return STATUS_NOT_IMPLEMENTED;
}
Пример #2
0
static private_sys_t* CommonOpen( vlc_object_t* p_obj, stream_t* source  )
{
    if( probe( source ) )
        return NULL;

    private_sys_t* p_sys = setup( p_obj, source );

    if( p_sys == NULL )
        return NULL;

    if( archive_init( p_sys, source ) )
    {
        CommonClose( p_sys );
        return NULL;
    }

    return p_sys;
}
Пример #3
0
static int ExtractorOpen( vlc_object_t* p_obj )
{
    stream_extractor_t* p_extractor = (void*)p_obj;
    private_sys_t* p_sys = CommonOpen( p_obj, p_extractor->source );

    if( p_sys == NULL )
        return VLC_EGENERIC;

    if( archive_seek_subentry( p_sys, p_extractor->identifier ) )
    {
        CommonClose( p_sys );
        return VLC_EGENERIC;
    }

    p_extractor->p_sys = p_sys;
    p_extractor->pf_read = Read;
    p_extractor->pf_control = Control;
    p_extractor->pf_seek = Seek;

    return VLC_SUCCESS;
}
Пример #4
0
static void ExtractorClose( vlc_object_t* p_obj )
{
    stream_extractor_t* p_extractor = (void*)p_obj;
    return CommonClose( p_extractor->p_sys );
}
Пример #5
0
static void DirectoryClose( vlc_object_t* p_obj )
{
    stream_directory_t* p_directory = (void*)p_obj;
    return CommonClose( p_directory->p_sys );
}