6 Appendix A: Full IDL

For ease of implementation, the following full Interface Definition Language (IDL) is provided, where "ms-dtyp.idl" is the IDL, as specified in [MS-DTYP] section 5<26>.

 import "ms-dtyp.idl";
  
 typedef struct _RPC_VERSION {
     unsigned short MajorVersion;
     unsigned short MinorVersion;
 } RPC_VERSION;
  
 typedef struct _RPC_SYNTAX_IDENTIFIER {
     GUID        SyntaxGUID;
     RPC_VERSION SyntaxVersion;
 } RPC_SYNTAX_IDENTIFIER;
  
 typedef [string, unique] wchar_t *STRING_T;
  
 typedef [string] wchar_t *NSI_STRING_BINDING_T;
  
 typedef [context_handle] void *NSI_NS_HANDLE_T;
  
 typedef [unique] GUID *NSI_UUID_P_T;
  
 typedef struct _NSI_BINDING_T {
     NSI_STRING_BINDING_T string;
     unsigned long   entry_name_syntax;
     STRING_T        entry_name;
 } NSI_BINDING_T;
  
 typedef struct _NSI_BINDING_VECTOR_T {
     unsigned long count;
     [size_is(count)] NSI_BINDING_T binding[*];
 } NSI_BINDING_VECTOR_T;
  
 typedef [unique] NSI_BINDING_VECTOR_T *NSI_BINDING_VECTOR_P_T;
  
 typedef struct _NSI_UUID_VECTOR_T {
     unsigned long count;
     [size_is(count)] NSI_UUID_P_T uuid[*];
 } NSI_UUID_VECTOR_T;
  
 typedef [unique] NSI_UUID_VECTOR_T *NSI_UUID_VECTOR_P_T;
  
  
 [
     uuid (e33c0cc4-0482-101a-bc0c-02608c6ba218),
     version (1.0),
     pointer_default (unique)
 ]
 interface LocToLoc
 {
     void I_nsi_lookup_begin(
         [in]        handle_t              hrpcPrimaryLocatorHndl,
         [in]        unsigned long         entry_name_syntax,
         [in]        STRING_T               entry_name,
         [in,unique] RPC_SYNTAX_IDENTIFIER *interfaceid,
         [in,unique] RPC_SYNTAX_IDENTIFIER *xfersyntax,
         [in]        NSI_UUID_P_T          obj_uuid,
         [in]        unsigned long         binding_max_count,
         [in]        unsigned long         MaxCacheAge,
         [out]       NSI_NS_HANDLE_T       *import_context,
         [out]       unsigned short        *status
     );
  
     void I_nsi_lookup_done(
         [in]     handle_t        hrpcPrimaryLocatorHndl,
         [in,out] NSI_NS_HANDLE_T *import_context,
         [out]    unsigned short  *status
     );
  
     void I_nsi_lookup_next(
         [in]  handle_t               hrpcPrimaryLocatorHndl,
         [in]  NSI_NS_HANDLE_T        import_context,
         [out] NSI_BINDING_VECTOR_P_T *binding_vector,
         [out] unsigned short         *status
     );
  
     void I_nsi_entry_object_inq_next(
         [in]  handle_t            hrpcPrimaryLocatorHndl,
         [in]  NSI_NS_HANDLE_T     InqContext,
         [out] NSI_UUID_VECTOR_P_T *uuid_vec,
         [out] unsigned short      *status
     );
  
     void I_nsi_ping_locator(
         [in]  handle_t      hLocatortoPing,
         [out] error_status_t *status
     );
  
     void I_nsi_entry_object_inq_done(
         [in,out] NSI_NS_HANDLE_T *InqContext,
         [out]    unsigned short  *status
     );
  
     void I_nsi_entry_object_inq_begin(
         [in]  handle_t        hrpcPrimaryLocatorHndl,
         [in]  unsigned long   EntryNameSyntax,
         [in]  STRING_T         EntryName,
         [out] NSI_NS_HANDLE_T *InqContext,
         [out] unsigned short  *status
     );
 }