6 Appendix A: Full IDL

For ease of implementation the full IDL is provided below, where "ms-dtyp.idl" refers to the IDL found in [MS-DTYP] Appendix A. The syntax uses the IDL syntax extensions defined in [MS-RPCE] section 2.2.4 and 3.1.1.5.1. For example, as noted in [MS-RPCE] section 2.2.4.9, a pointer_default declaration is not required and pointer_default(unique) is assumed.

The MessageBuffer field in the RESP_ASYNC_NOTIFY structure contains either a RESOURCE_CHANGE or an IPADDR_INFO_LIST structure. See sections 2.2.2.3 and 2.2.2.2 for details.

  
 import "ms-dtyp.idl";
 typedef [context_handle] void * PCONTEXT_HANDLE;
 typedef [context_handle] PCONTEXT_HANDLE PCONTEXT_HANDLE_SHARED;
 typedef [ref] PCONTEXT_HANDLE * PPCONTEXT_HANDLE;
  
 typedef struct _RESP_ASYNC_NOTIFY {
     UINT MessageType;
     UINT Length;
     UINT NumberOfMessages;
     [size_is(Length)] [unique] PBYTE MessageBuffer;
 } RESP_ASYNC_NOTIFY, *PRESP_ASYNC_NOTIFY;
  
 typedef struct _WITNESS_INTERFACE_INFO {
     WCHAR InterfaceGroupName[260];
     ULONG Version;
     USHORT State;
     ULONG IPV4;
     USHORT IPV6[8];
     UINT Flags;
 } WITNESS_INTERFACE_INFO, *PWITNESS_INTERFACE_INFO;
  
 typedef struct _WITNESS_INTERFACE_LIST {
     UINT NumberOfInterfaces;
     [size_is(NumberOfInterfaces)] [unique] PWITNESS_INTERFACE_INFO InterfaceInfo;
 } WITNESS_INTERFACE_LIST, *PWITNESS_INTERFACE_LIST;
  
 [uuid(ccd8c074-d0e5-4a40-92b4-d074faa6ba28)]
 [version(1.1)]
 [pointer_default(unique)]
 interface Witness {
     DWORD WitnessrGetInterfaceList(
         [in] handle_t Handle,
         [out] PWITNESS_INTERFACE_LIST * InterfaceList);
     DWORD WitnessrRegister(
         [in] handle_t Handle,
         [out] PPCONTEXT_HANDLE ppContext,
         [in] ULONG Version,
         [in] [string] [unique] LPWSTR NetName,
         [in] [string] [unique] LPWSTR IpAddress,
         [in] [string] [unique] LPWSTR ClientComputerName);
     DWORD WitnessrUnRegister(
         [in] handle_t Handle,
         [in] PCONTEXT_HANDLE pContext);
     DWORD WitnessrAsyncNotify(
         [in] handle_t Handle,
         [in] PCONTEXT_HANDLE_SHARED pContext,
         [out] PRESP_ASYNC_NOTIFY * pResp);
     DWORD WitnessrRegisterEx(
         [in] handle_t Handle,
         [out] PPCONTEXT_HANDLE ppContext,
         [in] ULONG Version,
         [in] [string] [unique] LPWSTR NetName,
         [in] [string] [unique] LPWSTR ShareName,
         [in] [string] [unique] LPWSTR IpAddress,
         [in] [string] [unique] LPWSTR ClientComputerName,
         [in] ULONG Flags,
         [in] ULONG KeepAliveTimeout);
     DWORD WitnessrUnRegisterEx(
         [in] handle_t Handle,
         [in, out] PPCONTEXT_HANDLE ppContext);
 };