/*++

Copyright (c) 1990  Microsoft Corporation

Module Name:

    ftpsvc.idl

Abstract:

    Contains the I_Ftp (ftpsvc Remote) RPC interface specification for the
    APIs associated with the FTP Daemon service.
    Also contains the RPC specific data structures for these API.

Author:

    Dan Hinsley (DanHi)  23-Mar-1993

Environment:

    User Mode - Win32 - MIDL

Revision History:

    MuraliK   20-Sept-1995  Updated structures used in RPC.

--*/

//
// Interface Attributes
//

[
    uuid(5C89F409-09CC-101A-89F3-02608C4D2361),
    version(1.1),
#ifdef __midl
        ms_union,
#endif // __midl
    pointer_default(unique)
]


//
// Interface Keyword
//

interface ftpsvc


//
// Interface Body
//

{

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

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


typedef [handle] LPWSTR FTP_IMPERSONATE_HANDLE;

typedef [handle] LPWSTR FTP_IDENTIFY_HANDLE;


//
// Ftp Daemon APIs
//

typedef struct _FTP_USER_ENUM_STRUCT {
    DWORD   EntriesRead;
    [size_is(EntriesRead)] LPFTP_USER_INFO Buffer;
} FTP_USER_ENUM_STRUCT, *LPFTP_USER_ENUM_STRUCT;

NET_API_STATUS  I_FtprEnumerateUsers(
    [in, string, unique]     FTP_IMPERSONATE_HANDLE pszServer,
    [out]                    LPFTP_USER_ENUM_STRUCT Buffer );

NET_API_STATUS  I_FtprDisconnectUser(
    [in,string,unique]       FTP_IMPERSONATE_HANDLE  pszServer,
    [in]                     DWORD idUser );

NET_API_STATUS  I_FtprQueryVolumeSecurity(
    [in, string, unique]     FTP_IMPERSONATE_HANDLE  pszServer,
    [out]                    LPDWORD lpdwReadAccess,
    [out]                    LPDWORD lpdwWriteAccess );

NET_API_STATUS  I_FtprSetVolumeSecurity(
    [in, string, unique]     FTP_IMPERSONATE_HANDLE pszServer,
    [in]                     DWORD  dwReadAccess,
    [in]                     DWORD  dwWriteAccess );

typedef [switch_type(unsigned long)] union _STATISTICS_INFO
{
    [case(0)]
        LPFTP_STATISTICS_0 FtpStats0;
    [default]
        ;
} STATISTICS_INFO, * LPSTATISTICS_INFO;

NET_API_STATUS I_FtprQueryStatistics(
    [in, string, unique]     FTP_IMPERSONATE_HANDLE pszServer,
    [in]                     DWORD                  Level,
    [out, switch_is(Level)]  LPSTATISTICS_INFO      StatsInfo );

NET_API_STATUS I_FtprClearStatistics(
    [in, string, unique]     FTP_IMPERSONATE_HANDLE pszServer );

NET_API_STATUS
NET_API_FUNCTION
FtprGetAdminInformation(
    [in, string, unique] FTP_IMPERSONATE_HANDLE pszServer,
    [out]                LPFTP_CONFIG_INFO *    ppConfig
    );

NET_API_STATUS
NET_API_FUNCTION
FtprSetAdminInformation(
    [in, string, unique] FTP_IMPERSONATE_HANDLE pszServer,
    [in]                 LPFTP_CONFIG_INFO      pConfig
    );

}
