/*++

Copyright (c) 1997  Microsoft Corporation

Module Name:

    stirpc.idl

Abstract:

    Contains the Stii Image Input R_StiApi API definitions
    Also contains the R_StiApi specific data structures for these API.

Author:

    Vlad Sadovsky (vlads)   10-Jan-1997

Environment:

    User Mode - Win32 - MIDL

Revision History:

    26-Jan-1997     VladS       created

--*/

//
// Interface Attributes
//

[
    uuid(8C7A6DE0-788D-11D0-9EDF-444553540000),
    version(2.0),
#ifdef __midl
    ms_union,
#endif // __midl
    pointer_default(unique)
]


//
// Interface Keyword
//

interface stirpc


//
// Interface Body
//

{

import   "imports.idl";

//
// ---------------------------------------------------------------//
//


typedef [handle]         LPCWSTR STI_STRING_HANDLE;
typedef [context_handle] HANDLE STI_DEVICE_HANDLE;

typedef struct  _NOTIFY_DATA_CONTAINER {
    DWORD cbNotifyData;
    [size_is(cbNotifyData), unique] LPBYTE pNotifyData;
} NOTIFY_DATA_CONTAINER, *PNOTIFY_DATA_CONTAINER, *LPNOTIFY_DATA_CONTAINER;

typedef struct  _LOCAL_SUBSCRIBE_CONTAINER {
    DWORD   dwSize;
    DWORD   dwFlags;
    DWORD   dwFilter;

    UINT_PTR   upLocalWindowHandle;
    UINT_PTR   upLocalEventHandle;

    UINT    uiNotificationMessage;
} LOCAL_SUBSCRIBE_CONTAINER, *PLOCAL_SUBSCRIBE_CONTAINER;


DWORD
R_StiApiGetVersion(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in]    DWORD dwReserved,
    [out]   DWORD *pdwVersion
    );

DWORD
R_StiApiEnableHwNotifications(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in, string, unique] STI_STRING_HANDLE pdeviceName,
    [in]     BOOL bNewState
    );

DWORD
R_StiApiGetHwNotificationState(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in, string, unique] STI_STRING_HANDLE pdeviceName,
    [out]     LPDWORD pState
    );

DWORD
R_StiApiLaunchApplication(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in, string, unique] STI_STRING_HANDLE pDeviceName,
    [in, string, unique] STI_STRING_HANDLE pAppName,
    [in]                 STINOTIFY*       pStiNotify
    );


DWORD
R_StiApiOpenDevice(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in, string, unique] STI_STRING_HANDLE pdeviceName,
    [in]     DWORD    dwMode,
    [in]     DWORD    dwAccessRequired,
    [in]     DWORD    dwProcessId,
    [out]    STI_DEVICE_HANDLE *pHandle
);

DWORD
R_StiApiSubscribe(
    [in]    STI_DEVICE_HANDLE   Handle,
    [in,ref,unique]     LOCAL_SUBSCRIBE_CONTAINER    *lpSubscribe
    );

DWORD
R_StiApiGetLastNotificationData(
    [in]    STI_DEVICE_HANDLE Handle,
    [out, size_is(nSize)] LPBYTE pData,
    [in]    DWORD nSize,
    [out]   LPDWORD pcbNeeded
    );

DWORD
R_StiApiUnSubscribe(
    [in]    STI_DEVICE_HANDLE Handle
    );

DWORD
R_StiApiCloseDevice(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in] STI_DEVICE_HANDLE hDevice
);

DWORD
R_StiApiLockDevice(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in, string, unique] STI_STRING_HANDLE pdeviceName,
    [in]    DWORD   dwWait,
    [in]    BOOL    bInServerProcess,
    [in]    DWORD   dwClientThreadId
    );

DWORD
R_StiApiUnlockDevice(
    [in, string, unique] STI_STRING_HANDLE pszServer,
    [in, string, unique] STI_STRING_HANDLE pdeviceName,
    [in]    BOOL    bInServerProcess,
    [in]    DWORD   dwClientThreadId
    );


};