/*++

Copyright (c) 1993  Microsoft Corporation

Module Name:

    ncpsvc.idl

Abstract:

    This is the IDL file that describes the RPC interface for the
    NCP server internal APIs.

Author:

    Yi-Hsin Sung     11-Sept-1993

Environment:

    User Mode -Win32

--*/

//
// Interface Attributes
//

[
    uuid(E67AB081-9844-3521-9D32-834F038001C1),
    version(1.0),
#ifdef __midl
	ms_union,
#endif // __midl
    pointer_default(unique)
]

//
// Interface Keyword
//

interface ncpsvc

//
// Interface Body
//

{

import "imports.idl";

//
// Handle type
//

typedef [handle] wchar_t * NCPSVC_HANDLE;

//
// Data type
//
typedef struct _FPNWVOLUMEINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PFPNWVOLUMEINFO Buffer;
} FPNWVOLUMEINFO_CONTAINER, *PFPNWVOLUMEINFO_CONTAINER;
typedef struct _NWVOLUMEINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PNWVOLUMEINFO Buffer;
} NWVOLUMEINFO_CONTAINER, *PNWVOLUMEINFO_CONTAINER;

typedef struct _FPNWCONNECTIONINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PFPNWCONNECTIONINFO Buffer;
} FPNWCONNECTIONINFO_CONTAINER, *PFPNWCONNECTIONINFO_CONTAINER;
typedef struct _NWCONNECTIONINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PNWCONNECTIONINFO Buffer;
} NWCONNECTIONINFO_CONTAINER, *PNWCONNECTIONINFO_CONTAINER;

typedef struct _FPNWVOLUMECONNINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PFPNWVOLUMECONNINFO Buffer;
} FPNWVOLUMECONNINFO_CONTAINER, *PFPNWVOLUMECONNINFO_CONTAINER;
typedef struct _NWVOLUMECONNINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PNWVOLUMECONNINFO Buffer;
} NWVOLUMECONNINFO_CONTAINER, *PNWVOLUMECONNINFO_CONTAINER;

typedef struct _FPNWFILEINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PFPNWFILEINFO Buffer;
} FPNWFILEINFO_CONTAINER, *PFPNWFILEINFO_CONTAINER;
typedef struct _NWFILEINFO_CONTAINER {
    DWORD EntriesRead;
    [size_is(EntriesRead)] PNWFILEINFO Buffer;
} NWFILEINFO_CONTAINER, *PNWFILEINFO_CONTAINER;

//
// Internal 2 structure used for passing and/or returning
// self-relative security descriptors.
//

typedef struct _FPNWVolumeInfo_2_I
{
    [string] LPWSTR     lpVolumeName;
    DWORD               dwType;
    DWORD               dwMaxUses;
    DWORD               dwCurrentUses;
    [string] LPWSTR     lpPath;
    DWORD               dwFileSecurityDescriptorLength;
    [size_is(dwFileSecurityDescriptorLength)] PUCHAR FileSecurityDescriptor;
} FPNWVOLUMEINFO_2_I, *PFPNWVOLUMEINFO_2_I;

typedef [switch_type(unsigned long)] union _VOLUME_INFO {  // for Get & Set Info
    [case(1)]
        FPNWVOLUMEINFO VolumeInfo1;
    [case(2)]
        FPNWVOLUMEINFO_2_I VolumeInfo2;
    [default]
        ;
} VOLUME_INFO, *PVOLUME_INFO, *LPVOLUME_INFO;

//
// Function prototype
//

DWORD
NwrServerGetInfo(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in]                   DWORD          dwLevel,
    [out]                  PFPNWSERVERINFO *ppServerInfo
);

DWORD
NwrServerSetInfo(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in]                   DWORD 	  dwLevel,
    [in]                   PFPNWSERVERINFO  pServerInfo
);

DWORD
NwrVolumeAdd(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in]                   DWORD          dwLevel,
    [in, switch_is(dwLevel)] LPVOLUME_INFO  pVolumeInfo
);

DWORD
NwrVolumeDel(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in, string]           LPWSTR         pVolumeName
);

DWORD
NwrVolumeEnum(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in]                   DWORD          dwLevel,
    [out]                  PFPNWVOLUMEINFO_CONTAINER pVolumeInfoContainer,
    [in, out, unique]      PDWORD         resumeHandle
);

DWORD
NwrVolumeGetInfo(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in, string]           LPWSTR         pVolumeName,
    [in]		           DWORD	      dwLevel,
    [out, switch_is(dwLevel)] LPVOLUME_INFO *ppVolumeInfo
);

DWORD
NwrVolumeSetInfo(
    [in, string, unique]   NCPSVC_HANDLE  pServerName,
    [in, string]           LPWSTR	  pVolumeName,
    [in]		   DWORD 	  dwLevel,
    [in, switch_is(dwLevel)] LPVOLUME_INFO  pVolumeInfo
);

DWORD
NwrConnectionEnum(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in]                   DWORD              dwLevel,
    [out]                  PFPNWCONNECTIONINFO_CONTAINER pConnectionInfoContainer,
    [in, out, unique]      PDWORD             resumeHandle
);

DWORD
NwrConnectionDel(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in]                   DWORD              dwConnectionId
);

DWORD
NwrVolumeConnEnum(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in]                   DWORD              dwLevel,
    [in, string, unique]   LPWSTR             pVolumeName,
    [in]                   DWORD              dwConnectionId,
    [out]                  PFPNWVOLUMECONNINFO_CONTAINER pVolumeConnInfoContainer,
    [in, out, unique]      PDWORD             resumeHandle
);

DWORD
NwrFileEnum(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in]                   DWORD              dwLevel,
    [in, string, unique]   LPWSTR             pPathName,
    [out]                  PFPNWFILEINFO_CONTAINER pFileInfoContainer,
    [in, out, unique]      PDWORD             resumeHandle
);

DWORD
NwrFileClose(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in]                   DWORD              dwFileId
);

DWORD
NwrMessageBufferSend(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in]                   DWORD     	      dwConnectionId,
    [in]                   DWORD              fConsoleBroadcast,
    [in, size_is(cbBuffer)] LPBYTE            pbBuffer,
    [in]                   DWORD              cbBuffer
);

DWORD
NwrSetDefaultQueue(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in, string]           LPWSTR             pQueueName
);

DWORD
NwrAddPServer(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in, string]           LPWSTR            pPServerName
);

DWORD
NwrRemovePServer(
    [in, string, unique]   NCPSVC_HANDLE      pServerName,
    [in, string]           LPWSTR            pPServerName
);

}