6 Appendix A: Full IDL

For ease of implementation, the full IDL is provided where "ms-dtyp.idl" is the IDL, as specified in [MS-DTYP] Appendix A.

 import "ms-dtyp.idl";
  
 [
     uuid(82ad4280-036b-11cf-972c-00aa006887b0),
     version(2.0),
     ms_union,
     pointer_default(unique)
 ]
 interface inetinfo
 {
  
  
 typedef [handle] [string] LPWSTR INET_INFO_IMPERSONATE_HANDLE;
  
 typedef struct _INET_INFO_CAP_FLAGS {
     DWORD   Flag;
     DWORD   Mask;
 } INET_INFO_CAP_FLAGS,
  * LPINET_INFO_CAP_FLAGS;
  
 typedef struct _INET_INFO_CAPABILITIES_STRUCT {
     DWORD   CapVersion;
     DWORD   ProductType;
     DWORD   MajorVersion;
     DWORD   MinorVersion;
     DWORD   BuildNumber;
     DWORD   NumCapFlags;
  
     [size_is(NumCapFlags)]  LPINET_INFO_CAP_FLAGS   CapFlags;
  
 } INET_INFO_CAPABILITIES_STRUCT,
  * LPINET_INFO_CAPABILITIES_STRUCT;
  
 typedef struct _INET_LOG_CONFIGURATION {
     DWORD   inetLogType;
     DWORD   ilPeriod;
     WCHAR   rgchLogFileDirectory[260];
     DWORD   cbSizeForTruncation;
     WCHAR   rgchDataSource[260];
     WCHAR   rgchTableName[30];
     WCHAR   rgchUserName[257];
     WCHAR   rgchPassword[257];
 } INET_LOG_CONFIGURATION,
  * LPINET_LOG_CONFIGURATION;
  
 typedef struct _INET_INFO_IP_SEC_ENTRY {
     DWORD       dwMask;
     DWORD       dwNetwork;
  
 } INET_INFO_IP_SEC_ENTRY,
  *LPINET_INFO_IP_SEC_ENTRY;
  
 typedef struct _INET_INFO_IP_SEC_LIST {
     DWORD               cEntries;
     [size_is( cEntries)] INET_INFO_IP_SEC_ENTRY  aIPSecEntry[];
 } INET_INFO_IP_SEC_LIST,
  *LPINET_INFO_IP_SEC_LIST;
  
 typedef struct _INET_INFO_VIRTUAL_ROOT_ENTRY {
     [string] LPWSTR  pszRoot;
     [string] LPWSTR  pszAddress;
     [string] LPWSTR  pszDirectory;
     DWORD   dwMask;
     [string] LPWSTR  pszAccountName;
     WCHAR   AccountPassword[257];
     DWORD   dwError;
 } INET_INFO_VIRTUAL_ROOT_ENTRY,
  *LPINET_INFO_VIRTUAL_ROOT_ENTRY;
  
 typedef struct _INET_INFO_VIRTUAL_ROOT_LIST 
 {
     DWORD               cEntries;
     [size_is( cEntries)] 
         INET_INFO_VIRTUAL_ROOT_ENTRY  aVirtRootEntry[];
 } INET_INFO_VIRTUAL_ROOT_LIST,
  *LPINET_INFO_VIRTUAL_ROOT_LIST;
  
 typedef struct _INET_INFO_CONFIG_INFO {
     DWORD                           FieldControl;
     DWORD                           dwConnectionTimeout;
     DWORD                           dwMaxConnections;
     [string] LPWSTR                 lpszAdminName;
     [string] LPWSTR                 lpszAdminEmail;
     [string] LPWSTR                 lpszServerComment;
     LPINET_LOG_CONFIGURATION        lpLogConfig;
     WORD                            LangId;
     LCID                            LocalId;
     BYTE                            ProductId[64];
     BOOL                            fLogAnonymous;
     BOOL                            fLogNonAnonymous;
     [string] LPWSTR                 lpszAnonUserName;
     WCHAR                           szAnonPassword[257];
     DWORD                           dwAuthentication;
     short                           sPort;
     LPINET_INFO_IP_SEC_LIST         DenyIPList;
     LPINET_INFO_IP_SEC_LIST         GrantIPList;
     LPINET_INFO_VIRTUAL_ROOT_LIST   VirtualRoots;
 } INET_INFO_CONFIG_INFO,
  * LPINET_INFO_CONFIG_INFO;
  
 typedef struct _INET_INFO_SITE_ENTRY {
     [string] LPWSTR  pszComment;
     DWORD   dwInstance;
 } INET_INFO_SITE_ENTRY,
  *LPINET_INFO_SITE_ENTRY;
  
 typedef struct _INET_INFO_SITE_LIST {
     DWORD               cEntries;
     [size_is( cEntries)] INET_INFO_SITE_ENTRY  aSiteEntry[];
 } INET_INFO_SITE_LIST,
  *LPINET_INFO_SITE_LIST;
  
 typedef struct _INET_INFO_GLOBAL_CONFIG_INFO {
     DWORD         FieldControl;
     DWORD         BandwidthLevel;
     DWORD         cbMemoryCacheSize;
 } INET_INFO_GLOBAL_CONFIG_INFO,
  * LPINET_INFO_GLOBAL_CONFIG_INFO;
  
 typedef struct _INETA_CACHE_STATISTICS {
     DWORD FilesCached;
     DWORD TotalFilesCached;
     DWORD FileHits;
     DWORD FileMisses;
     DWORD FileFlushes;
     DWORDLONG CurrentFileCacheSize;
     DWORDLONG MaximumFileCacheSize;
     DWORD FlushedEntries;
     DWORD TotalFlushed;
     DWORD URICached;
     DWORD TotalURICached;
     DWORD URIHits;
     DWORD URIMisses;
     DWORD URIFlushes;
     DWORD TotalURIFlushed;
     DWORD BlobCached;
     DWORD TotalBlobCached;
     DWORD BlobHits;
     DWORD BlobMisses;
     DWORD BlobFlushes;
     DWORD TotalBlobFlushed;
 } INETA_CACHE_STATISTICS,
  *LPINETA_CACHE_STATISTICS;
  
 typedef struct _INETA_ATQ_STATISTICS {
     DWORD         TotalBlockedRequests;
     DWORD         TotalRejectedRequests;
     DWORD         TotalAllowedRequests;
     DWORD         CurrentBlockedRequests;
     DWORD         MeasuredBandwidth;
 } INETA_ATQ_STATISTICS,
  *LPINETA_ATQ_STATISTICS;
  
 typedef struct _INET_INFO_STATISTICS_0 {
     INETA_CACHE_STATISTICS  CacheCtrs;
     INETA_ATQ_STATISTICS    AtqCtrs;
     DWORD   nAuxCounters;
     DWORD   rgCounters[20];
 } INET_INFO_STATISTICS_0,
  * LPINET_INFO_STATISTICS_0;
  
 typedef [switch_type(unsigned long)] 
 union _INET_INFO_STATISTICS_INFO {
     [case(0)]
         LPINET_INFO_STATISTICS_0 InetStats0;
     [default]
         ;
 } INET_INFO_STATISTICS_INFO,
  *LPINET_INFO_STATISTICS_INFO;
  
 typedef struct _W3_STATISTICS_1 {
     LARGE_INTEGER TotalBytesSent;
     LARGE_INTEGER TotalBytesReceived;
     DWORD         TotalFilesSent;
     DWORD         TotalFilesReceived;
     DWORD         CurrentAnonymousUsers;
     DWORD         CurrentNonAnonymousUsers;
     DWORD         TotalAnonymousUsers;
     DWORD         TotalNonAnonymousUsers;
     DWORD         MaxAnonymousUsers;
     DWORD         MaxNonAnonymousUsers;
     DWORD         CurrentConnections;
     DWORD         MaxConnections;
     DWORD         ConnectionAttempts;
     DWORD         LogonAttempts;
     DWORD         TotalOptions;
     DWORD         TotalGets;
     DWORD         TotalPosts;
     DWORD         TotalHeads;
     DWORD         TotalPuts;
     DWORD         TotalDeletes;
     DWORD         TotalTraces;
     DWORD         TotalMove;
     DWORD         TotalCopy;
     DWORD         TotalMkcol;
     DWORD         TotalPropfind;
     DWORD         TotalProppatch;
     DWORD         TotalSearch;
     DWORD         TotalLock;
     DWORD         TotalUnlock;
     DWORD         TotalOthers;
     DWORD         TotalCGIRequests;
     DWORD         TotalBGIRequests;
     DWORD         TotalNotFoundErrors;
     DWORD         TotalLockedErrors;
     DWORD         CurrentCalAuth;
     DWORD         MaxCalAuth;
     DWORD         TotalFailedCalAuth;
     DWORD         CurrentCalSsl;
     DWORD         MaxCalSsl;
     DWORD         TotalFailedCalSsl;
     DWORD         CurrentCGIRequests;
     DWORD         CurrentBGIRequests;
     DWORD         MaxCGIRequests;
     DWORD         MaxBGIRequests;
     DWORD         CurrentBlockedRequests;
     DWORD         TotalBlockedRequests;
     DWORD         TotalAllowedRequests;
     DWORD         TotalRejectedRequests;
     DWORD         MeasuredBw;
     DWORD         ServiceUptime;
     DWORD         TimeOfLastClear;
     DWORD         nAuxCounters;
     DWORD         rgCounters[20];
 } W3_STATISTICS_1,
  * LPW3_STATISTICS_1;
  
 typedef [switch_type(unsigned long)] 
 union _W3_STATISTICS_UNION {
     [case(0)]
        LPW3_STATISTICS_1 StatInfo1;
     [default]
        ;
 } W3_STATISTICS_STRUCT,
  *LPW3_STATISTICS_STRUCT;
  
 typedef struct _FTP_STATISTICS_0 {
     LARGE_INTEGER TotalBytesSent;
     LARGE_INTEGER TotalBytesReceived;
     DWORD         TotalFilesSent;
     DWORD         TotalFilesReceived;
     DWORD         CurrentAnonymousUsers;
     DWORD         CurrentNonAnonymousUsers;
     DWORD         TotalAnonymousUsers;
     DWORD         TotalNonAnonymousUsers;
     DWORD         MaxAnonymousUsers;
     DWORD         MaxNonAnonymousUsers;
     DWORD         CurrentConnections;
     DWORD         MaxConnections;
     DWORD         ConnectionAttempts;
     DWORD         LogonAttempts;
     DWORD         ServiceUptime;
     DWORD         TotalAllowedRequests;
     DWORD         TotalRejectedRequests;
     DWORD         TotalBlockedRequests;
     DWORD         CurrentBlockedRequests;
     DWORD         MeasuredBandwidth;
     DWORD         TimeOfLastClear;
 } FTP_STATISTICS_0,
  * LPFTP_STATISTICS_0;
  
 typedef [switch_type(unsigned long)] 
 union _FTP_STATISTICS_UNION {
     [case(0)]
        LPFTP_STATISTICS_0 StatInfo0;
     [default]
        ;
 } FTP_STATISTICS_STRUCT,
  *LPFTP_STATISTICS_STRUCT;
  
 typedef struct _IIS_USER_INFO_1 {
     DWORD           idUser;
     [string] LPWSTR pszUser;
     BOOL            fAnonymous;
     DWORD           inetHost;
     DWORD           tConnect;
 } IIS_USER_INFO_1,
  * LPIIS_USER_INFO_1;
  
 typedef struct _IIS_USER_INFO_1_CONTAINER {
     DWORD EntriesRead;
     [size_is(EntriesRead)] LPIIS_USER_INFO_1 Buffer;
 } IIS_USER_INFO_1_CONTAINER,
  *LPIIS_USER_INFO_1_CONTAINER;
  
 typedef struct _IIS_USER_ENUM_STRUCT {
     DWORD Level;
     [switch_is(Level)] union _USER_ENUM_UNION 
     {
         [case(1)]
             LPIIS_USER_INFO_1_CONTAINER Level1;
         [default]
             ;
     } ConfigInfo;
 } IIS_USER_ENUM_STRUCT,
  *LPIIS_USER_ENUM_STRUCT;
  
 DWORD
 R_InetInfoGetVersion(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwReserved,
     [out] DWORD *pdwVersion
     );
  
 DWORD
 R_InetInfoGetAdminInformation( 
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer, 
     [in] DWORD dwServerMask, 
     [out] LPINET_INFO_CONFIG_INFO *ppConfig
     ); 
  
 DWORD 
 R_InetInfoGetSites( 
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer, 
     [in] DWORD dwServerMask, 
     [out] LPINET_INFO_SITE_LIST * ppSites
     ); 
  
 DWORD 
 R_InetInfoSetAdminInformation(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwServerMask,
     [in, ref] INET_INFO_CONFIG_INFO *pConfig
     );
  
 DWORD
 R_InetInfoGetGlobalAdminInformation(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE     pszServer,
     [in] DWORD dwServerMask,
     [out] LPINET_INFO_GLOBAL_CONFIG_INFO *ppConfig
     );
  
 DWORD
 R_InetInfoSetGlobalAdminInformation(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE   pszServer,
     [in] DWORD dwServerMask,
     [in, ref] INET_INFO_GLOBAL_CONFIG_INFO * pConfig
     );
  
 DWORD
 R_InetInfoQueryStatistics(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE  pszServer,
     [in] DWORD Level,
     [in] DWORD dwServerMask,
     [out, switch_is(Level)] LPINET_INFO_STATISTICS_INFO StatsInfo
     );
  
 DWORD
 R_InetInfoClearStatistics(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE  pszServer,
     [in] DWORD dwServerMask
     );
  
 DWORD
 R_InetInfoFlushMemoryCache(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE  pszServer,
     [in] DWORD dwServerMask
     );
  
 DWORD
 R_InetInfoGetServerCapabilities(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwReserved,
     [out] LPINET_INFO_CAPABILITIES_STRUCT *ppCap
     );
  
 DWORD
 R_W3QueryStatistics2(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwLevel,
     [in] DWORD dwInstance,
     [in] DWORD dwReserved,
     [out,switch_is(dwLevel)] LPW3_STATISTICS_STRUCT   InfoStruct
     );
  
 DWORD
 R_W3ClearStatistics2(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwInstance
     );
  
 DWORD
 R_FtpQueryStatistics2(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwLevel,
     [in] DWORD dwInstance,
     [in] DWORD dwReserved,
     [out,switch_is(dwLevel)] LPFTP_STATISTICS_STRUCT   InfoStruct
     );
  
 DWORD
 R_FtpClearStatistics2(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwInstance
     );
  
 DWORD
 R_IISEnumerateUsers(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwServiceId,
     [in] DWORD dwInstance,
     [in,out] LPIIS_USER_ENUM_STRUCT InfoStruct
     );
  
 DWORD
 R_IISDisconnectUser(
     [in, string, unique] INET_INFO_IMPERSONATE_HANDLE pszServer,
     [in] DWORD dwServiceId,
     [in] DWORD dwInstance,
     [in] DWORD dwIdUser
     );
  
 DWORD
 Opnum16NotUsedOnWire();
  
 DWORD
 Opnum17NotUsedOnWire();
 }