/*++

Copyright (c) 1990  Microsoft Corporation

Module Name:

    bowser.idl

Abstract:

    Contains the Netr (Net Remote) RPC interface specification for the APIs
    associated with the Browser service.  This consists of the NetServerEnum
    API

    Also contains the RPC specific data structures for these API.

Author:

    Rita Wong  (ritaw)  06-May-1991
    Larry Osterman (larryo) 23-Mar-1992

Environment:

    User Mode - Win32 - MIDL

Revision History:

--*/

//
// Interface Attributes
//

[
    uuid(6BFFD098-A112-3610-9833-012892020162),
    version(0.0),
#ifdef __midl
	ms_union,
#endif // __midl
    pointer_default(unique)
]


//
// Interface Keyword
//

interface browser


//
// Interface Body
//

{

import   "imports.idl";
#include <lmcons.h>

//
// BUGBUG - take this definition out when midl understands LPWSTR etc
//

#ifdef UNICODE
#define LPTSTR wchar_t*
#endif

//
// ---------------------------------------------------------------//
//


typedef [handle] LPTSTR BROWSER_IMPERSONATE_HANDLE;

typedef [handle] LPTSTR BROWSER_IDENTIFY_HANDLE;


//
// I_BrowserrServerEnum
//

typedef struct _SERVER_INFO_100_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] LPSERVER_INFO_100 Buffer;
} SERVER_INFO_100_CONTAINER, *PSERVER_INFO_100_CONTAINER,
*LPSERVER_INFO_100_CONTAINER;


typedef struct _SERVER_INFO_101_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] LPSERVER_INFO_101 Buffer;
} SERVER_INFO_101_CONTAINER, *PSERVER_INFO_101_CONTAINER,
*LPSERVER_INFO_101_CONTAINER;

typedef struct _BROWSER_STATISTICS_100_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] PBROWSER_STATISTICS_100 Buffer;
} BROWSER_STATISTICS_100_CONTAINER, *PBROWSER_STATISTICS_100_CONTAINER;

typedef struct _BROWSER_STATISTICS_101_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] PBROWSER_STATISTICS_101 Buffer;
} BROWSER_STATISTICS_101_CONTAINER, *PBROWSER_STATISTICS_101_CONTAINER;

typedef struct _BROWSER_EMULATED_DOMAIN_CONTAINER {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] PBROWSER_EMULATED_DOMAIN Buffer;
} BROWSER_EMULATED_DOMAIN_CONTAINER, *PBROWSER_EMULATED_DOMAIN_CONTAINER;

typedef struct _SERVER_ENUM_STRUCT {
    DWORD   Level;
    [switch_is(Level)] union _SERVER_ENUM_UNION {
        [case(100)]
            LPSERVER_INFO_100_CONTAINER Level100;
        [case(101)]
            LPSERVER_INFO_101_CONTAINER Level101;
        [default]
            ;
    } ServerInfo;
}SERVER_ENUM_STRUCT, *PSERVER_ENUM_STRUCT, *LPSERVER_ENUM_STRUCT;

typedef struct _BROWSER_STATISTICS_STRUCT {
    DWORD   Level;
    [switch_is(Level)] union _BROWSER_STATISTICS_UNION {
        [case(100)]
            PBROWSER_STATISTICS_100_CONTAINER Level100;
        [case(101)]
            PBROWSER_STATISTICS_101_CONTAINER Level101;
        [default]
            ;
    } Statistics;
}BROWSER_STATISTICS_STRUCT, *PBROWSER_STATISTICS_STRUCT, *LPBROWSER_STATISTICS_STRUCT;

NET_API_STATUS
I_BrowserrServerEnum(
    [in,string,unique] BROWSER_IDENTIFY_HANDLE ServerName,
    [in,string,unique] LPTSTR		      TransportName,
    [in,string,unique] LPTSTR		      ClientName,
    [in,out]           LPSERVER_ENUM_STRUCT   InfoStruct,
    [in]               DWORD                  PreferedMaximumLength,
    [out]              LPDWORD                TotalEntries,
    [in]               DWORD                  ServerType,
    [in,string,unique] LPTSTR                 Domain,
    [in,out,unique]    LPDWORD                ResumeHandle
    );

NET_API_STATUS
I_BrowserrDebugCall(
    [in,string,unique] BROWSER_IDENTIFY_HANDLE ServerName,
    [in]	DWORD	DebugFunction,
    [in]	DWORD	OptionalValue
    );

NET_API_STATUS
I_BrowserrQueryOtherDomains(
    [in,string,unique] BROWSER_IDENTIFY_HANDLE ServerName,
    [in,out]           LPSERVER_ENUM_STRUCT   InfoStruct,
    [out]              LPDWORD                TotalEntries
    );

NET_API_STATUS
I_BrowserrResetNetlogonState(
    [in,string,unique] BROWSER_IDENTIFY_HANDLE ServerName
    );

NET_API_STATUS
I_BrowserrDebugTrace(
    [in,string,unique] BROWSER_IDENTIFY_HANDLE ServerName,
    [in, string]	LPSTR	TraceString
    );

NET_API_STATUS
I_BrowserrQueryStatistics (
    [in, string, unique] BROWSER_IDENTIFY_HANDLE servername OPTIONAL,
    [out] LPBROWSER_STATISTICS *statistics
    );

NET_API_STATUS
I_BrowserrResetStatistics (
    [in, string, unique] BROWSER_IDENTIFY_HANDLE servername OPTIONAL
    );

NET_API_STATUS
NetrBrowserStatisticsClear (
    [in, string, unique] BROWSER_IDENTIFY_HANDLE servername OPTIONAL
    );

NET_API_STATUS
NetrBrowserStatisticsGet (
    [in, string, unique] BROWSER_IDENTIFY_HANDLE servername OPTIONAL,
    [in] DWORD Level,
    [in, out] LPBROWSER_STATISTICS_STRUCT StatisticsStruct
    );

NET_API_STATUS
I_BrowserrSetNetlogonState(
    [in, string, unique] BROWSER_IDENTIFY_HANDLE ServerName OPTIONAL,
    [in, string] LPTSTR DomainName,
    [in, string, unique] LPTSTR EmulatedComputerName OPTIONAL,
    [in] DWORD Role
    );

NET_API_STATUS
I_BrowserrQueryEmulatedDomains (
    [in, string, unique] BROWSER_IDENTIFY_HANDLE ServerName OPTIONAL,
    [in,out] PBROWSER_EMULATED_DOMAIN_CONTAINER EmulatedDomains
    );

NET_API_STATUS
I_BrowserrServerEnumEx(
    [in,string,unique] BROWSER_IDENTIFY_HANDLE ServerName,
    [in,string,unique] LPTSTR		      TransportName,
    [in,string,unique] LPTSTR		      ClientName,
    [in,out]           LPSERVER_ENUM_STRUCT   InfoStruct,
    [in]               DWORD                  PreferedMaximumLength,
    [out]              LPDWORD                TotalEntries,
    [in]               DWORD                  ServerType,
    [in,string,unique] LPTSTR                 Domain,
    [in,string,unique] LPTSTR                 FirstNameToReturn
    );

}
