///////////////////////////////////////////////////////////////////////////////
//
//    Copyright (C) 2012 OSR Open Systems Resources, Inc.
//
//    This file is part of the OSR UMFSDK User Mode Application
//    Libraries ("OSR Libraries").
//
//    The OSR Libraries are subject to the GNU Lesser General
//    Public License V2.1.  You should have received a copy of
//    this license with this software.   If not, see
//    <http://www.gnu.org/licenses/>.
//
//    THIS SOFTWARE IS PROVIDED "AS IS" AND COPYRIGHT HOLDERS
//    MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
//    INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
//    MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE.
//
//    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT,
//    INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
//    ANY USE OF THE SOFTWARE.
//
//    MODULE:
//
//        FUSE4Win_nonstd.h
//
//    ABSTRACT:
//
//        Non-standard FUSE APIs provided by the FUSE4Win
//        library
//
//    AUTHOR:
//
//        Open Systems Resources, Inc.
// 
///////////////////////////////////////////////////////////////////////////////
#ifndef __FUSE_NONSTD_H__
#define __FUSE_NONSTD_H__

///////////////////////////////////////////////////////////////////////////////
//
//  fuse_get_media_device
// 
//      Non-Standard FUSE API to get a media device handle
// 
//  INPUTS:
// 
//      None.
// 
//  OUTPUTS:
// 
//      None.
// 
//  RETURNS:
//
//      The current media device handle
//
//  NOTES:
// 
//
///////////////////////////////////////////////////////////////////////////////
void *
fuse_get_media_device(
    void
    );


///////////////////////////////////////////////////////////////////////////////
//
//  fuse_media_ioctl
// 
//      Non-Standard FUSE API to perform an IOCTL to the current
//      media device
// 
//  INPUTS:
// 
//      ioctl          - The operation
// 
//      in_buffer      - The input buffer
// 
//      in_buffer_len  - The output buffer
// 
//      out_buffer     - The output buffer
// 
//      out_buffer_len - The output buffer length 
// 
//  OUTPUTS:
// 
//      None.
// 
//  RETURNS:
//
//      TRUE on success, FALSE on error (call GetLastError() for
//      result)
//
//  NOTES:
// 
//      Strange for this to return a Win32 error, we know.
//      However, this is to make this routine an (almost) drop
//      in replacement for DeviceIoControl
//
///////////////////////////////////////////////////////////////////////////////
bool
fuse_media_ioctl(
    unsigned int ioctl,
    void *in_buffer,
    unsigned int in_buffer_len,
    void *out_buffer,
    unsigned int out_buffer_len
    );


#endif // __FUSE_NONSTD_H__
