[ uuid(2F5F6520-CA46-1067-B319-00DD010662DA),
  version(1.0),
#ifdef __midl
        ms_union,
#endif // __midl
  pointer_default(unique)
]

interface tapsrv

{

typedef [context_handle] void * PCONTEXT_HANDLE_TYPE;

long
ClientAttach(
    [out]   PCONTEXT_HANDLE_TYPE *pphContext,
    [in]    long    lProcessID,
    [out]   long   *phAsyncEventsEvent,
    [in, string]    wchar_t *pszDomainUser,
    [in, string]    wchar_t *pszMachine
    );

void
ClientRequest(
    [in] PCONTEXT_HANDLE_TYPE phContext,
    [in, out, length_is(*plUsedSize), size_is(lNeededSize)] unsigned char* pBuffer,
    [in]        long    lNeededSize,
    [in, out]   long   *plUsedSize
    );

void
ClientDetach(
    [in, out]   PCONTEXT_HANDLE_TYPE *pphContext
    );

}