/*++

Copyright (c) 1995  Microsoft Corporation

Module Name:

    faxrpc.idl

Abstract:

    Contains the remoted fax service apis.

Author:

    Wesley Witt   (wesw)   10-Jan-1996

Environment:

    User-mode - Win32 - MIDL

--*/

//
// Interface Attributes
//

[
    uuid(ea0a3165-4834-11d2-a6f8-00c04fa346cc),
    version(4.0),
    pointer_default(unique)
]

//
// Interface Keyword
//

interface fax

//
// Interface Body
//

{

import "imports.idl"; // import all the include files

//
// Context handles
//

typedef [context_handle] HANDLE RPC_FAX_PORT_HANDLE;
typedef [ref] RPC_FAX_PORT_HANDLE *PRPC_FAX_PORT_HANDLE;

typedef [context_handle] HANDLE RPC_FAX_JOB_HANDLE;
typedef [ref] RPC_FAX_JOB_HANDLE *PRPC_FAX_JOB_HANDLE;

typedef [context_handle] HANDLE RPC_FAX_SVC_HANDLE;
typedef [ref] RPC_FAX_SVC_HANDLE *PRPC_FAX_SVC_HANDLE;


//
// functions
//

error_status_t
FAX_ConnectionRefCount(
    [in] handle_t hBinding,
    [in, out] PRPC_FAX_SVC_HANDLE Handle,
    [in] DWORD Connect,
    [out] LPDWORD CanShare
    );

error_status_t
FAX_GetVersion(
   [in] handle_t hBinding,
   [out] LPDWORD Version
   );

error_status_t
FAX_GetInstallType(
   [in] handle_t hBinding,
   [out] LPDWORD InstallType,
   [out] LPDWORD InstalledPlatforms,
   [out] LPDWORD ProductType
   );

error_status_t
FAX_OpenPort(
   [in] handle_t hBinding,
   [in] DWORD DeviceId,
   [in] DWORD Flags,
   [out] PRPC_FAX_PORT_HANDLE FaxPortHandle
   );

error_status_t
FAX_ClosePort(
   [in,out] PRPC_FAX_PORT_HANDLE FaxPortHandle
   );

error_status_t
FAX_SendDocument(
   [in] handle_t hBinding,
   [in, string, unique] LPCTSTR FileName,
   [in] const FAX_JOB_PARAMW *JobParams,
   [out] LPDWORD FaxJobId
   );

error_status_t
FAX_GetQueueFileName(
   [in] handle_t hBinding,
   [in, out, unique, size_is(FileNameSize)] LPTSTR FileName,
   [in] DWORD FileNameSize
   );

error_status_t
FAX_EnumJobs(
   [in] handle_t hBinding,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *Buffer,
   [in,out] LPDWORD BufferSize,
   [out] LPDWORD JobsReturned
   );

error_status_t
FAX_GetJob(
   [in] handle_t hBinding,
   [in] DWORD JobId,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *Buffer,
   [in,out] LPDWORD BufferSize
   );

error_status_t
FAX_SetJob(
   [in] handle_t hBinding,
   [in] DWORD JobId,
   [in] DWORD Command,
   [in] const FAX_JOB_ENTRY *JobEntry
   );

error_status_t
FAX_GetPageData(
   [in] handle_t hBinding,
   [in] DWORD JobId,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *Buffer,
   [in,out] LPDWORD BufferSize,
   [in,out] LPDWORD ImageWidth,
   [in,out] LPDWORD ImageHeight
   );

error_status_t
FAX_GetDeviceStatus(
   [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE*StatusBuffer,
   [in,out] LPDWORD BufferSize
   );

error_status_t
FAX_Abort(
   [in] handle_t hBinding,
   [in] DWORD JobId
   );

error_status_t
FAX_EnumPorts(
   [in] handle_t hBinding,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *PortBuffer,
   [in,out] LPDWORD BufferSize,
   [out] LPDWORD PortsReturned
   );

error_status_t
FAX_GetPort(
   [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *PortBuffer,
   [in,out] LPDWORD BufferSize
   );

error_status_t
FAX_SetPort(
   [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
   [in] const FAX_PORT_INFO *PortInfo
   );

error_status_t
FAX_EnumRoutingMethods(
    [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
    [in, out, unique, size_is(,*RoutingInfoBufferSize)] LPBYTE *RoutingInfoBuffer,
    [in,out] LPDWORD RoutingInfoBufferSize,
    [out] LPDWORD PortsReturned
    );

error_status_t
FAX_EnableRoutingMethod(
    [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
    [in, string, unique] LPCTSTR RoutingGuid,
    [in] BOOL Enabled    
    );

error_status_t
FAX_GetRoutingInfo(
    [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
    [in, string, unique] LPCTSTR RoutingGuid,
    [in, out, unique, size_is(,*RoutingInfoBufferSize)] LPBYTE *RoutingInfoBuffer,
    [in,out] LPDWORD RoutingInfoBufferSize
    );

error_status_t
FAX_SetRoutingInfo(
   [in] RPC_FAX_PORT_HANDLE FaxPortHandle,
   [in, string, unique] LPCTSTR RoutingGuid,
   [in, unique, size_is(RoutingInfoBufferSize)] const BYTE *RoutingInfoBuffer,
   [in] DWORD RoutingInfoBufferSize
   );
   

error_status_t
FAX_EnumGlobalRoutingInfo(
    [in] handle_t hBinding,
    [in, out, unique, size_is(,*RoutingInfoBufferSize)] LPBYTE *RoutingInfoBuffer,
    [in,out] LPDWORD RoutingInfoBufferSize,
    [out] LPDWORD MethodsReturned
    );

error_status_t
FAX_SetGlobalRoutingInfo(
    [in] handle_t hBinding,
    [in] const FAX_GLOBAL_ROUTING_INFOW *RoutingInfo
    );

error_status_t
FAX_GetConfiguration(
   [in] handle_t hBinding,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *Buffer,
   [in,out] LPDWORD BufferSize
   );

error_status_t
FAX_SetConfiguration(
   [in] handle_t hBinding,
   [in] const FAX_CONFIGURATION *FaxConfig
   );

error_status_t
FAX_GetLoggingCategories(
    [in] handle_t hBinding,
    [in, out, unique, size_is(,*BufferSize)] LPBYTE *Buffer,
    [in,out] LPDWORD BufferSize,
    [in,out] LPDWORD NumberCategories
    );

error_status_t
FAX_SetLoggingCategories(
    [in] handle_t hBinding,
    [in, unique, size_is(BufferSize)] const LPBYTE Buffer,
    [in] DWORD BufferSize,
    [in] DWORD NumberCategories
    );

error_status_t
FAX_GetTapiLocations(
   [in] handle_t hBinding,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *Buffer,
   [in,out] LPDWORD BufferSize
   );

error_status_t
FAX_SetTapiLocations(
   [in] handle_t hBinding,
   [in, unique, size_is(BufferSize)] LPBYTE Buffer,
   [in] DWORD BufferSize
   );

error_status_t
FAX_GetMapiProfiles(
   [in] handle_t hBinding,
   [in, out, unique, size_is(,*BufferSize)] LPBYTE *MapiProfiles,
   [in,out] LPDWORD BufferSize
   );

error_status_t
FAX_StartClientServer(
   [in] handle_t hBinding,
   [in, string, unique] LPCTSTR MachineName,
   [in, string, unique] LPCTSTR ClientName,
   [in] ULONG64 Context
   );

error_status_t
FAX_RegisterEventWindow(
   [in] handle_t hBinding,
   [in] ULONG64 hWnd,
   [in] UINT MessageStart,
   [in, string, unique] LPCTSTR WindowStation,
   [in, string, unique] LPCTSTR Desktop,
   [out] LPDWORD Reserved
   );

error_status_t
FAX_GetSecurityDescriptor(
    [in] handle_t hBinding,
    [in] DWORD Id,
    [in, out, unique, size_is(,*BufferSize)] LPBYTE * FaxSecurityDescriptor,
    [in, out] LPDWORD BufferSize
    )
    ;
    
error_status_t
FAX_SetSecurityDescriptor(
    [in] handle_t hBinding,
    [in, unique, size_is(BufferSize)] const LPBYTE FaxSecurityDescriptor,
    [in] DWORD BufferSize
    );
    
error_status_t
FAX_GetSecurityDescriptorCount(
    [in] handle_t hBinding,
    [out] LPDWORD Count
    );
    
error_status_t
FAX_AccessCheck(
    [in] handle_t hBinding,
    [in] DWORD AccessMask,
    [out] LPDWORD fAccess
    );
        

}
