/*++

Copyright (c) 1993  Microsoft Corporation

Module Name:

    nwwks.idl

Abstract:

    This is the IDL file that describes the RPC interface for the
    NetWare workstation internal APIs.

Author:

    Rita Wong (ritaw)     11-Feb-1993

Environment:

    User Mode -Win32

Revision History:
    Yi-Hsin Sung ( yihsins )  24-Apr-1993
        Added NwrOpenEnumPrintServers and NwrOpenEnumPrintQueues

    Glenn A. Curtis (glennc)  19-Oct-1995
        Added NwrGetUser, NwrGetResourceInformation, and NwrGetResourceParent

--*/

//
// Interface Attributes
//

[
    uuid(E67AB081-9844-3521-9D32-834F038001C0),
    version(1.0),
    pointer_default(unique)
]

//
// Interface Keyword
//

interface nwwks

//
// Interface Body
//

{

import "imports.idl";

//
// Handle types
//

typedef [handle] wchar_t * NWWKSTA_IMPERSONATE_HANDLE;

typedef [handle] wchar_t * NWWKSTA_IDENTIFY_HANDLE;

typedef [context_handle] PVOID NWWKSTA_CONTEXT_HANDLE;

typedef NWWKSTA_CONTEXT_HANDLE *LPNWWKSTA_CONTEXT_HANDLE;

typedef [context_handle] PVOID NWWKSTA_PRINTER_CONTEXT;

typedef NWWKSTA_PRINTER_CONTEXT *LPNWWKSTA_PRINTER_CONTEXT;

typedef struct _NW_JOB_INFO {
    DWORD    nPosition;
    [string, unique] wchar_t *pDocument;
    [string, unique] wchar_t *pUserName;
} NW_JOB_INFO, *PNW_JOB_INFO;

//
// Function prototype
//

DWORD
NwrCreateConnection(
    [in,string,unique] NWWKSTA_IMPERSONATE_HANDLE Reserved,
    [in,string,unique] wchar_t * LocalName,
    [in,string] wchar_t * RemoteName,
    [in] DWORD Type,
    [in,string,unique] wchar_t * Password,
    [in,string,unique] wchar_t * UserName
    );

typedef struct _NWSERVER {
    [string] wchar_t * ServerName;
} NWSERVER, *LPNWSERVER;

DWORD
NwrChangePassword(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] DWORD UserLuid,
    [in,string] wchar_t * UserName,
    [in,string,unique] wchar_t * OldPassword,
    [in,string,unique] wchar_t * NewPassword,
    [in,string] wchar_t * TreeName
    );

DWORD
NwrDeleteConnection(
    [in,string,unique] NWWKSTA_IMPERSONATE_HANDLE Reserved,
    [in,string] wchar_t * ConnectionName,
    [in] DWORD UseForce
    );

DWORD
NwrQueryServerResource(
    [in,string,unique] NWWKSTA_IMPERSONATE_HANDLE Reserved,
    [in,string] wchar_t * LocalName,
    [in, out,string, unique, size_is(RemoteNameLen * sizeof(wchar_t))] wchar_t * RemoteName,
    [in] DWORD RemoteNameLen,
    [out] LPDWORD CharsRequired
    );

DWORD
NwrOpenEnumConnections(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in]  DWORD  ConnectionType,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumContextInfo(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in]  DWORD  ConnectionType,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumServersAndNdsTrees(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumNdsSubTrees_Disk(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * ParentPathName,
    [in,out,unique] LPDWORD ClassTypeOfNDSLeaf,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumNdsSubTrees_Print(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * ParentPathName,
    [in,out,unique] LPDWORD ClassTypeOfNDSLeaf,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumNdsSubTrees_Any(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * ParentPathName,
    [in,out,unique] LPDWORD ClassTypeOfNDSLeaf,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumVolumes(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * ServerName,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumQueues(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * ServerName,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumVolumesQueues(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * ServerName,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrOpenEnumDirectories(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t * VolumeName,
    [in,string,unique] wchar_t * UserName,
    [in,string,unique] wchar_t * Password,
    [out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrEnum(
    [in] NWWKSTA_CONTEXT_HANDLE EnumHandle,
    [in] DWORD_PTR EntriesRequested,
    [out,size_is(BufferSize)] LPBYTE Buffer,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded,
    [out] LPDWORD EntriesRead
    );

DWORD
NwrEnumConnections(
    [in] NWWKSTA_CONTEXT_HANDLE EnumHandle,
    [in] DWORD EntriesRequested,
    [out,size_is(BufferSize)] LPBYTE Buffer,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded,
    [out] LPDWORD EntriesRead,
    [in] DWORD fImplicitConnections
    );

DWORD
NwrCloseEnum(
    [in,out] LPNWWKSTA_CONTEXT_HANDLE EnumHandle
    );

DWORD
NwrLogonUser(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] PLUID LogonId,
    [in,string] wchar_t * UserName,
    [in,string,unique] wchar_t * Password,
    [in,string,unique] wchar_t * ServerName,
    [in,string,unique] wchar_t * NdsServerName,    
    [in,out,string,unique,size_is(LogonCommandLength * sizeof(wchar_t))] wchar_t * LogonCommand,
    [in] DWORD LogonCommandLength,
    [in] DWORD PrintOption
    );

DWORD
NwrLogoffUser(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] PLUID LogonId
    );

DWORD
NwrSetInfo(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] DWORD PrintOption,
    [in,string,unique] wchar_t * ServerName
    );

DWORD
NwrValidateUser(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string,unique] wchar_t * ServerName
    );

DWORD
NwrOpenPrinter(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string] wchar_t *PrinterName,
    [in] DWORD fKnownPrinter,
    [out] LPNWWKSTA_PRINTER_CONTEXT PrinterHandle
    );

DWORD
NwrClosePrinter(
    [in,out] LPNWWKSTA_PRINTER_CONTEXT PrinterHandle
    );

DWORD
NwrGetPrinter(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in] DWORD Level,
    [in,out,unique,size_is(BufferSize)] LPBYTE PrinterInfo,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded
    );

DWORD
NwrSetPrinter(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in] DWORD Command
    );

DWORD
NwrEnumPrinters(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string,unique] wchar_t *ContainerName,
    [in,out,unique,size_is(BufferSize)] LPBYTE Buffer,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded,
    [out] LPDWORD EntriesRead
    );

DWORD
NwrStartDocPrinter(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in,string,unique] wchar_t *DocumentName,
    [in,string,unique] wchar_t *UserName,
    [in] DWORD PrintOption,    
    [in] DWORD fGateway
    );

DWORD
NwrWritePrinter(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in,size_is(BufferSize)] LPBYTE Buffer,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesWritten
    );

DWORD
NwrAbortPrinter(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle
    );

DWORD
NwrEndDocPrinter(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle
    );

DWORD
NwrEnumJobs(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in] DWORD FirstJobRequested,
    [in] DWORD EntriesRequested,
    [in] DWORD Level,
    [in,out,unique,size_is(BufferSize)] LPBYTE Buffer,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded,
    [out] LPDWORD EntriesRead
    );

DWORD
NwrGetJob(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in] DWORD JobId,
    [in] DWORD Level,
    [in,out,unique,size_is(BufferSize)] LPBYTE JobInfo,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded
    );

DWORD
NwrSetJob(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in] DWORD JobId,
    [in] DWORD Level,
    [in, unique] PNW_JOB_INFO pNwJobInfo,
    [in] DWORD Command
    );


DWORD
NwrAddJob(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [out] LPADDJOB_INFO_1W AddInfo1,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded
    );

DWORD
NwrScheduleJob(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in] DWORD JobId
    );

DWORD
NwrWaitForPrinterChange(
    [in] NWWKSTA_PRINTER_CONTEXT PrinterHandle,
    [in,out] LPDWORD Flags
    );

DWORD
NwrEnumGWDevices(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in, out] PDWORD Index,
    [in,out,unique,size_is(BufferSize)] LPBYTE Buffer,
    [in] DWORD BufferSize,
    [out] LPDWORD BytesNeeded,
    [out] LPDWORD EntriesRead
    );

DWORD
NwrAddGWDevice(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string,unique] wchar_t *DeviceName,
    [in,string,unique] wchar_t *RemoteName,
    [in,string,unique] wchar_t *AccountName,
    [in,string,unique] wchar_t *Password,
    [in]  DWORD Flags
    );

DWORD
NwrDeleteGWDevice(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in,string,unique] wchar_t *DeviceName,
    [in]  DWORD Flags
    );

DWORD
NwrQueryGatewayAccount(
    [in,string,unique] NWWKSTA_IMPERSONATE_HANDLE Reserved,
    [in, out,string, unique, size_is(AccountNameLen * sizeof(wchar_t))] wchar_t * AccountName,
    [in] DWORD AccountNameLen,
    [out] LPDWORD AccountCharsNeeded,
    [in, out,string, unique, size_is(PasswordLen * sizeof(wchar_t))] wchar_t * Password,
    [in] DWORD PasswordLen,
    [out] LPDWORD PasswordCharsNeeded
    );

DWORD
NwrSetGatewayAccount(
    [in,string,unique] NWWKSTA_IMPERSONATE_HANDLE Reserved,
    [in,string] wchar_t * AccountName,
    [in,string] wchar_t * Passwoed
    );

#ifndef QFE_BUILD 

DWORD
NwrGetService(
    [in, string, unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] WORD nServiceType,
    [in, string] wchar_t *lpServiceName,
    [in] DWORD dwProperties,
    [in, out, unique, size_is(dwBufferLength)] LPBYTE lpServiceInfo,
    [in] DWORD dwBufferLength,
    [out] LPDWORD lpdwBytesNeeded
    );

DWORD
NwrSetService(
    [in, string, unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] DWORD dwOperation,
    [in] LPSERVICE_INFOW lpServiceInfo,
    [in] WORD nServiceType
    );

DWORD
NwrGetUser(
    [in, string, unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in, string, unique] wchar_t * lpRemoteName,
    [out, size_is(dwUserNameBufferSize)] LPBYTE lpUserName,
    [in] DWORD dwUserNameBufferSize,
    [out] LPDWORD lpdwCharsRequired
    );

DWORD
NwrGetResourceInformation(
    [in, string, unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in, string, unique] wchar_t * lpRemoteName,
    [in] DWORD dwType,
    [out, size_is(dwBufferSize)] LPBYTE lpBuffer,
    [in] DWORD dwBufferSize,
    [out] LPDWORD lpdwBytesNeeded,
    [out] LPDWORD lpdwSystemOffset
    );

DWORD
NwrGetConnectionPerformance(
    [in, string, unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in, string, unique] wchar_t * lpRemoteName,
    [out, size_is(dwBufferSize)] LPBYTE lpNetConnectInfo,
    [in] DWORD dwBufferSize
    );

DWORD
NwrGetResourceParent(
    [in, string, unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in, string, unique] wchar_t * lpRemoteName,
    [in] DWORD dwType,
    [out, size_is(dwBufferSize)] LPBYTE lpBuffer,
    [in] DWORD dwBufferSize,
    [out] LPDWORD lpdwBytesNeeded
    );

DWORD
NwrSetLogonScript(
    [in,string,unique] NWWKSTA_IDENTIFY_HANDLE Reserved,
    [in] DWORD ScriptOptions
    );


#endif
}
