6 Appendix A: Full IDL

For ease of implementation, the full IDL is provided below.

    import "ms-dtyp.idl";
  
    [
        uuid (906B0CE0-C70B-1067-B317-00DD010662DA),
        version(1.0),
        pointer_default(unique)
    ]
  
    interface IXnRemote
    {
           #define MAX_COMPUTERNAME_LENGTH 15
           #define GUID_LENGTH 37
        
        typedef enum _TearDownType
        {
            TT_FORCE = 0x00000000,
            TT_PROBLEM = 0x00000002,
        } TEARDOWN_TYPE;
        
        typedef enum _SessionRank
        {
            SRANK_PRIMARY = 0x00000001,
            SRANK_SECONDARY = 0x00000002
        } SESSION_RANK;
        
        typedef enum _ResourceType
        {
            RT_CONNECTIONS = 0x00000000
        } RESOURCE_TYPE;
    
        typedef struct _BindVersionSet
        {
            DWORD   dwMinLevelOne;
            DWORD   dwMaxLevelOne;
            DWORD   dwMinLevelTwo;
            DWORD   dwMaxLevelTwo;
            DWORD   dwMinLevelThree;
            DWORD   dwMaxLevelThree;
        } BIND_VERSION_SET;
    
        typedef struct _BoundVersionSet
        {
            DWORD   dwLevelOneAccepted;
            DWORD   dwLevelTwoAccepted;
            DWORD   dwLevelThreeAccepted;
        } BOUND_VERSION_SET;
    
        typedef unsigned long COM_PROTOCOL;
    
    
        typedef struct _BindInfoBlob
        {
            DWORD       dwcbThisStruct;
            COM_PROTOCOL grbitComProtocols;
        } BIND_INFO_BLOB;
  
                  
        HRESULT Poke (
          [in] handle_t hBinding,
          [in] SESSION_RANK sRank,
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               unsigned char  pszCalleeUuid[],
          [in, string, range(1, MAX_COMPUTERNAME_LENGTH+1)] 
               unsigned char pszHostName[],
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               unsigned char pszUuidString[],
          [in, range(sizeof(BIND_INFO_BLOB),sizeof(BIND_INFO_BLOB))] 
               DWORD   dwcbSizeOfBlob,
          [in, size_is (dwcbSizeOfBlob)] unsigned char rguchBlob[]);
  
  
        HRESULT BuildContext (
          [in] handle_t hBinding,
          [in] SESSION_RANK sRank,
          [in] BIND_VERSION_SET BindVersionSet,
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               unsigned char  pszCalleeUuid[],
          [in, string, range(1, MAX_COMPUTERNAME_LENGTH+1)] 
               unsigned char pszHostName[],
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               unsigned char pszUuidString[],
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               unsigned char pszGuidIn[],
          [in, out, string, range(GUID_LENGTH, GUID_LENGTH)] 
               unsigned char pszGuidOut[],
          [in, out] BOUND_VERSION_SET *   pBoundVersionSet,
          [in, range(sizeof(BIND_INFO_BLOB), sizeof(BIND_INFO_BLOB))] 
               DWORD dwcbSizeOfBlob,
          [in, size_is (dwcbSizeOfBlob)] unsigned char rguchBlob[],
          [out] PPCONTEXT_HANDLE ppHandle);
    
        HRESULT NegotiateResources (
          [in] PCONTEXT_HANDLE phContext,
          [in] RESOURCE_TYPE resourceType,
          [in] DWORD  dwcRequested,
          [in,out] DWORD * pdwcAccepted);
      
        HRESULT SendReceive (
          [in] PCONTEXT_HANDLE phContext,
          [in, range(1, 4095)] DWORD  dwcMessages,
          [in, range(40, 0x14000)] DWORD  dwcbSizeOfBoxCar,
          [in, size_is (dwcbSizeOfBoxCar)] 
               unsigned char rguchBoxCar[]);
    
        HRESULT TearDownContext (
          [in, out] PPCONTEXT_HANDLE contextHandle,
          [in] SESSION_RANK sRank,
          [in] TEARDOWN_TYPE tearDownType);
    
        HRESULT BeginTearDown (
          [in] PCONTEXT_HANDLE contextHandle,
          [in] TEARDOWN_TYPE tearDownType);
    
  
        HRESULT PokeW (
          [in] handle_t hBinding,
          [in] SESSION_RANK sRank,
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               wchar_t pwszCalleeUuid[],
          [in, string, range(1, MAX_COMPUTERNAME_LENGTH+1)] 
               wchar_t pwszHostName[],
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               wchar_t pwszUuidString[],
          [in, range(sizeof(BIND_INFO_BLOB), sizeof(BIND_INFO_BLOB))] 
               DWORD dwcbSizeOfBlob,
          [in, size_is (dwcbSizeOfBlob)] unsigned char rguchBlob[]);
    
  
        HRESULT BuildContextW (
          [in] handle_t hBinding,
          [in] SESSION_RANK sRank,
          [in] BIND_VERSION_SET BindVersionSet,
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               wchar_t  pwszCalleeUuid[],
          [in, string, range(1, MAX_COMPUTERNAME_LENGTH+1)] 
               wchar_t pwszHostName[],
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               wchar_t pwszUuidString[],
          [in, string, range(GUID_LENGTH, GUID_LENGTH)] 
               wchar_t pwszGuidIn[],
          [in,out, string, range(GUID_LENGTH, GUID_LENGTH)] 
               wchar_t pwszGuidOut[],
          [in, out] BOUND_VERSION_SET *pBoundVersionSet,
          [in, range(sizeof(BIND_INFO_BLOB), sizeof(BIND_INFO_BLOB))] 
               DWORD dwcbSizeOfBlob,
          [in, size_is (dwcbSizeOfBlob)] unsigned char rguchBlob[],
          [out] PPCONTEXT_HANDLE ppHandle);
  
    }