
/*************************************************************************
*
* icaapi.idl
*
* DCE RPC IDL file for ICA API's (WinStations)
*
* Copyright Microsoft Corporation. 1998
*
*
*
*
*************************************************************************/

//
//
// NOTE: All WINSTATION API data structures are declared as variable sized
//       character buffers to RPC with the "size_is()" modifier. We do not
//       break out each structure in IDL since we do not need to handle
//       big and little endian conversion issues. IE: Clients will be
//       Windows NT, and servers will be WinFrame based on Windows NT.
//
//       If we need to support big endian clients for the client side of the
//       API's, then the proper IDL break out must be done for each structure,
//       with its discriminant, which is the information type ENUM.
//       (could use user marshall for tricky ones)
//

//
// An RPC context_handle maintains state on the server for an open
// connection from a given client. This allows the server to store
// state information about the client.
// IE: authentication information, etc.
//
// The RPC runtime implements a keep alive mechanism, and calls
// a server run down routine when the connection goes away.
//

typedef [context_handle] void *SERVER_HANDLE;


//
// The number uuid was generated by UUIDGEN, and
// is unique across time and space. This number should
// never change for this service.
//

[
    uuid(5ca4a760-ebb1-11cf-8611-00a0245420ed),
    version(1.0),
    pointer_default(unique)
]


//
// This is our service "program"
//

interface IcaApi
{

    //
    // Note: Because of header file include problems, the NT headers
    //       can not be brought in since the auto generate RPC header
    //       includes windows headers first. So we avoid any definitions
    //       in winsta.h and use generic, sized types. Our winsta.dll
    //       client stub handles the actual winstation typing.
    //

    import   "import.idl";

    //
    // Return the RPC context handle for the open server
    //

    BOOLEAN
    RpcWinStationOpenServer(
        [in]   handle_t      hBinding,
        [out]  DWORD         *pResult,
        [out]  SERVER_HANDLE *phServer
        );

    //
    // Close the context handle
    //

    BOOLEAN
    RpcWinStationCloseServer(
        [in]  SERVER_HANDLE hServer,
        [out]  DWORD        *pResult
        );

    //
    // Ping the server for testing. Could be used for
    // keep alive in WinFrame clusters.
    //

    BOOLEAN
    RpcIcaServerPing(
        [in]  SERVER_HANDLE hServer,
        [out]  DWORD        *pResult
        );

    //
    // WinStationEnumerate
    //
    // Note use of size_is() for variable length buffer handling
    //

    BOOLEAN
    RpcWinStationEnumerate(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,out]  PULONG         pEntries,
        [in,out,unique,size_is(*pByteCount)] PCHAR pLogonId,
        [in,out]  PULONG         pByteCount,
        [in,out]  PULONG         pIndex
        );

    //
    // The RPC function differs from the prototype in winsta.h
    // since it handles a changing size for WINSTATIONNAMEW
    //
    BOOLEAN
    RpcWinStationRename(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,size_is(NameOldSize)] PWCHAR pWinStationNameOld,
        [in]       DWORD         NameOldSize,
        [in,size_is(NameNewSize)] PWCHAR pWinStationNameNew,
        [in]       DWORD         NameNewSize
        );

    BOOLEAN
    RpcWinStationQueryInformation(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       DWORD         WinStationInformationClass,
        [in,out,unique,size_is(WinStationInformationLength)] PCHAR pWinStationInformation,
        [in]       DWORD         WinStationInformationLength,
        [out]      DWORD         *pReturnLength
        );

    BOOLEAN
    RpcWinStationSetInformation(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       DWORD         WinStationInformationClass,
        [in,out,unique,size_is(WinStationInformationLength)] PCHAR pWinStationInformation,
        [in]       DWORD         WinStationInformationLength
        );

    BOOLEAN
    RpcWinStationSendMessage(
        [in]       SERVER_HANDLE  hServer,
        [out]      DWORD          *pResult,
        [in]       DWORD          LogonId,
        [in,size_is(TitleLength)] PWCHAR pTitle,
        [in]       DWORD          TitleLength,
        [in,size_is(MessageLength)] PWCHAR pMessage,
        [in]       DWORD          MessageLength,
        [in]       DWORD          Style,
        [in]       DWORD          Timeout,
        [out]      DWORD          *pRespsonse,
        [in]       BOOLEAN        DoNotWait
        );

    BOOLEAN
    RpcLogonIdFromWinStationName(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,size_is(NameSize)] PWCHAR pWinStationName,
        [in]       DWORD         NameSize,
        [out]      DWORD         *pLogonId
        );

    BOOLEAN
    RpcWinStationNameFromLogonId(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LoginId,
        [in,out,size_is(NameSize)] PWCHAR pWinStationName,
        [in]       DWORD         NameSize
        );

    BOOLEAN
    RpcWinStationConnect(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ClientLogonId,
        [in]       DWORD         ConnectLogonId,
        [in]       DWORD         TargetLogonId,
        [in,size_is(PasswordSize)] PWCHAR pPassword,
        [in]       DWORD         PasswordSize,
        [in]       BOOLEAN       Wait
        );

    BOOLEAN
    RpcWinStationVirtualOpen(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       DWORD         Pid,
        [in,size_is(NameSize)] PCHAR pVirtualName,
        [in]       DWORD         NameSize,
        [out]      DWORD         *pHandle
        );

    BOOLEAN
    RpcWinStationBeepOpen(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       DWORD         Pid,
        [out]      DWORD         *pHandle
        );

    BOOLEAN
    RpcWinStationDisconnect(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       BOOLEAN       bWait
        );

    BOOLEAN
    RpcWinStationReset(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       BOOLEAN       bWait
        );

    BOOLEAN
    RpcWinStationShutdownSystem(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ClientLogonId,
        [in]       DWORD         ShutdownFlags
        );

    BOOLEAN
    RpcWinStationWaitSystemEvent(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         EventMask,
        [out]      DWORD         *pEventFlags
        );

    BOOLEAN
    RpcWinStationShadow(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in,unique,size_is(NameSize)] PWCHAR pTargetServerName,
        [in]       DWORD         NameSize,
        [in]       DWORD         TargetLogonId,
        [in]       BYTE          HotKeyVk,
        [in]       USHORT        HotkeyModifiers
        );

    BOOLEAN
    RpcWinStationShadowTargetSetup(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId
        );

    BOOLEAN
    RpcWinStationShadowTarget(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in,size_is(ConfigSize)] PBYTE pConfig,
        [in]       DWORD         ConfigSize,
        [in,size_is(AddressSize)] PBYTE pAddress,
        [in]       DWORD         AddressSize,
        [in,size_is(ModuleDataSize)] PBYTE pModuleData,
        [in]       DWORD         ModuleDataSize,
        [in,size_is(ThinwireDataSize)] PBYTE pThinwireData,
        [in]       DWORD         ThinwireDataSize,
        [in,size_is(ClientNameSize)] PBYTE pClientName,
        [in]       DWORD         ClientNameSize
        );

    BOOLEAN
    RpcWinStationGenerateLicense(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,size_is(StringSize)] PWCHAR pSerialNumberString,
        [in]       DWORD         StringSize,
        [out,size_is(LicenseSize)] PCHAR pLicense,
        [in]       DWORD         LicenseSize
        );

    BOOLEAN
    RpcWinStationInstallLicense(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,out,size_is(LicenseSize)] PCHAR pLicense,
        [in]       DWORD         LicenseSize
        );

    BOOLEAN
    RpcWinStationEnumerateLicenses(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,out]   DWORD         *pIndex,
        [in,out]   DWORD         *pEntries,
        [out,size_is(LicenseSize)] PCHAR pLicense,
        [in]       DWORD         LicenseSize,
        [in,out]   DWORD         *pByteCount
        );

    BOOLEAN
    RpcWinStationActivateLicense(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,out,size_is(LicenseSize)] PCHAR pLicense,
        [in]       DWORD         LicenseSize,
        [in,size_is(StringSize)] PWCHAR pActivationCode,
        [in]       DWORD         StringSize
        );

    BOOLEAN
    RpcWinStationRemoveLicense(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,size_is(LicenseSize)] PCHAR pLicense,
        [in]       DWORD         LicenseSize
        );

    BOOLEAN
    RpcWinStationQueryLicense(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [out,size_is(ByteCount)] PCHAR pLicenseCounts,
        [in]       DWORD         ByteCount
        );

    BOOLEAN
    RpcWinStationSetPoolCount(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,out,size_is(LicenseSize)] PCHAR pLicense,
        [in]       DWORD         LicenseSize
        );

    BOOLEAN
    RpcWinStationQueryUpdateRequired(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [out]      DWORD         *pUpdateFlag
        );

    BOOLEAN
    RpcWinStationCallback(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in,size_is(PhoneNumberSize)] PWCHAR pPhoneNumber,
        [in]       DWORD         PhoneNumberSize
        );

    BOOLEAN
    RpcWinStationBreakPoint(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       BOOLEAN       KernelFlag
        );

    BOOLEAN
    RpcWinStationReadRegistry(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult
        );

    BOOLEAN
    RpcWinStationWaitForConnect(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ClientLogonId,
        [in]       DWORD         ClientProcessId
        );

    BOOLEAN
    RpcWinStationNotifyLogon(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ClientLogonId,
        [in]       DWORD         ClientProcessId,
        [in]       BOOLEAN       fUserIsAdmin,
        [in]       DWORD         UserToken,
        [in,size_is(DomainSize)] PWCHAR pDomain,
        [in]       DWORD         DomainSize,
        [in,size_is(UserNameSize)] PWCHAR pUserName,
        [in]       DWORD         UserNameSize,
        [in,size_is(PasswordSize)] PWCHAR pPassword,
        [in]       DWORD         PasswordSize,
        [in]       UCHAR         Seed,
        [in,size_is(ConfigSize)] PCHAR pUserConfig,
        [in]       DWORD         ConfigSize
        );

    BOOLEAN
    RpcWinStationNotifyLogoff(
        [in]       SERVER_HANDLE hServer,
        [in]       DWORD         ClientLogonId,
        [in]       DWORD         ClientProcessId,
        [out]      DWORD         *pResult
        );

    BOOLEAN
    OldRpcWinStationEnumerateProcesses(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [out,size_is(ByteCount)] PBYTE pProcessBuffer,
        [in]       DWORD         ByteCount
        );

    BOOLEAN
    RpcWinStationAnnoyancePopup(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonIdld
        );

    BOOLEAN
    RpcWinStationEnumerateProcesses(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [out,size_is(ByteCount)] PBYTE pProcessBuffer,
        [in]       DWORD         ByteCount
        );

    BOOLEAN
    RpcWinStationTerminateProcess(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ProcessId,
        [in]       DWORD         ExitCode
        );

    BOOLEAN
    RpcServerNWLogonSetAdmin(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,size_is(ServerNameSize)] PWCHAR pServerName,
        [in]       DWORD         ServerNameSize,
        [in,out,unique,size_is(ByteCount)] PCHAR pNWLogon,
        [in]       DWORD         ByteCount
        );

    BOOLEAN
    RpcServerNWLogonQueryAdmin(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,size_is(ServerNameSize)] PWCHAR pServerName,
        [in]       DWORD         ServerNameSize,
        [in,out,unique,size_is(ByteCount)] PCHAR pNWLogon,
        [in]       DWORD         ByteCount
        );

    BOOLEAN
    RpcWinStationCheckForApplicationName(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in,out,size_is(UserNameSize)] PWCHAR pUserName,
        [in]       DWORD         UserNameSize,
        [in,out,size_is(DomainSize)] PWCHAR pDomain,
        [in]       DWORD         DomainSize,
        [in,out,size_is(*pPasswordSize)] PWCHAR pPassword,
        [in,out]   DWORD         *pPasswordSize,
        [in]       DWORD         MaxPasswordSize,
        [in,out]   PCHAR         pSeed,
        [out]      PBOOLEAN      pfPublished,
        [out]      PBOOLEAN      pfAnonymous
        );

    BOOLEAN
    RpcWinStationGetApplicationInfo(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [out]      PBOOLEAN      pfPublished,
        [out]      PBOOLEAN      pfAnonymous
        );
        
    BOOLEAN
    RpcWinStationNtsdDebug(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       LONG          ProcessId,
        [in]       ULONG         DbgProcessId,
        [in]       ULONG         DbgThreadId,
        [in]       DWORD_PTR     AttachCompletionRoutine
        );

    BOOLEAN
    RpcWinStationGetAllProcesses(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       ULONG         Level,    
        [in, out]  ULONG         *pNumberOfProcesses,
        [out, size_is(,*pNumberOfProcesses)]
        PTS_ALL_PROCESSES_INFO  *ppTsAllProcessesInfo
        );

    BOOLEAN
    RpcWinStationGetProcessSid(
        [in]       SERVER_HANDLE hServer,
        [in]       DWORD         dwUniqueProcessId,
        [in]       LARGE_INTEGER ProcessStartTime,
        [out]      LONG          *pResult,
        [in,out,unique,size_is(dwSidSize)]
        PBYTE         pProcessUserSid,
        [in]       DWORD         dwSidSize,
        [in,out]   DWORD         *pdwSizeNeeded
        );

    BOOLEAN
    RpcWinStationGetTermSrvCountersValue(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         dwEntries,
        [in,out, size_is(dwEntries)] PTS_COUNTER pCounter 
        );       
        
    BOOLEAN
    RpcWinStationReInitializeSecurity(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult
        );        
        
    LONG
    RpcWinStationBroadcastSystemMessage(
        [in ]           SERVER_HANDLE hServer,
        [in]            ULONG       sessionID,
        [in]            ULONG       timeOut,       
        [in]            DWORD       dwFlags,            
        [in,out,ptr]    DWORD       *lpdwRecipients,   
        [in]            ULONG       uiMessage,           
        [in]            UINT_PTR    wParam,            
        [in]            LONG_PTR    lParam,             
        [in,size_is(bufferSize)] PBYTE pBuffer,   
        [in]            ULONG       bufferSize, 
        [in]            BOOLEAN     fBufferHasValidData,
        [out]           LONG        *pResponse  
    );

    LONG 
    RpcWinStationSendWindowMessage(
        [in]           SERVER_HANDLE hServer,
        [in]           ULONG        sessionID,
        [in]           ULONG        timeOut,    
        [in]           ULONG        hWnd,      
        [in]           ULONG        Msg,       
        [in]           UINT_PTR     wParam,            
        [in]           LONG_PTR     lParam,             
        [in,size_is(bufferSize)] PBYTE pBuffer,  
        [in]           ULONG        bufferSize,  
        [in]           BOOLEAN      fBufferHasValidData,
        [out]          LONG         *pResponse  
    );

     BOOLEAN
     RpcWinStationNotifyNewSession(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ClientLogonId
        );

    BOOLEAN
    RpcServerGetInternetConnectorStatus(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [out]      PBOOLEAN      pfEnabled
        );

    BOOLEAN
    RpcServerSetInternetConnectorStatus(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       BOOLEAN       fEnabled
        );

    BOOLEAN
    RpcServerQueryInetConnectorInformation(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in,out,unique,size_is(WinStationInformationLength)] PCHAR pWinStationInformation,
        [in]       DWORD         WinStationInformationLength,
        [out]      DWORD         *pReturnLength
        );

    BOOLEAN
    RpcWinStationGetLanAdapterName(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         PdNameSize,
        [in,size_is(PdNameSize)] PWCHAR pPdName,
        [in]       ULONG         LanAdapter,    
        [out]      ULONG         *pLength,
        [out, size_is(,*pLength)] PWCHAR  *ppLanAdapter
    );
    
    BOOLEAN
    RpcWinStationUpdateUserConfig(
        [in]       SERVER_HANDLE hServer,
        [in]       DWORD         ClientLogonId,
        [in]       DWORD         ClientProcessId,
        [in]       DWORD         UserToken,
        [out]      DWORD         *pResult
        
    );

    BOOLEAN
    RpcWinStationQueryLogonCredentials(
        [in]       SERVER_HANDLE hServer,
        [in]       ULONG LogonId,
        [out,size_is(,*pcbCredentials)] PCHAR *ppCredentials,
        [in,out]    ULONG *pcbCredentials
        );

    BOOLEAN
    RpcWinStationRegisterConsoleNotification(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       ULONG         SessionId,
        [in]       ULONG         hWnd,
        [in]       DWORD         dwFlags
        );

    BOOLEAN
    RpcWinStationUnRegisterConsoleNotification(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       ULONG         SessionId,
        [in]       ULONG         hWnd
        );

    BOOLEAN
    RpcWinStationUpdateSettings(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         SettingsClass,
        [in]       DWORD         SettingsParameters
        );

    BOOLEAN
    RpcWinStationShadowStop(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         LogonId,
        [in]       BOOLEAN       bWait
        );

    BOOLEAN
    RpcWinStationCloseServerEx(
        [in, out]  SERVER_HANDLE *phServer,
        [out]  DWORD        *pResult
        );


    BOOLEAN
    RpcWinStationIsHelpAssistantSession(
        [in]    SERVER_HANDLE   hServer,
        [out]   DWORD*          pResult,
        [in]    ULONG           SessionId
        );

    BOOLEAN 
    RpcWinStationGetMachinePolicy(
       [in]           SERVER_HANDLE                hServer,
       [in,out,size_is(bufferSize)]  PBYTE         pPolicy,
       [in]           ULONG                        bufferSize
   );

    BOOLEAN
    RpcWinStationUpdateClientCachedCredentials(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       DWORD         ClientLogonId,
        [in]       ULONG_PTR     ClientProcessId,
        [in,size_is(DomainSize)] PWCHAR pDomain,
        [in]       DWORD         DomainSize,
        [in,size_is(UserNameSize)] PWCHAR pUserName,
        [in]       DWORD         UserNameSize
        );

    BOOLEAN
    RpcWinStationFUSCanRemoteUserDisconnect(
       [in]       SERVER_HANDLE hServer,
       [out]      DWORD         *pResult,
       [in]       DWORD         TargetLogonId,
       [in]       DWORD         ClientLogonId,
       [in]       ULONG_PTR     ClientProcessId,
       [in,size_is(DomainSize)] PWCHAR pDomain,
       [in]       DWORD         DomainSize,
       [in,size_is(UserNameSize)] PWCHAR pUserName,
       [in]       DWORD         UserNameSize
       );

    BOOLEAN
    RpcWinStationCheckLoopBack(
       [in]       SERVER_HANDLE hServer,
       [out]      DWORD         *pResult,
       [in]       DWORD         ClientLogonId,
       [in]       DWORD         TargetLogonId,
       [in,size_is(NameSize)]   PWCHAR pTargetServerName,
       [in]       DWORD         NameSize
       );

    BOOLEAN
    RpcConnectCallback(
        [in]       SERVER_HANDLE hServer, 
        [out]      DWORD         *pResult,
        [in]       DWORD         TimeOut,
        [in]       ULONG         AddressType,
        [in,size_is(AddressSize)] PBYTE pAddress,
        [in]       ULONG         AddressSize
        );

    BOOLEAN
    RpcWinStationNotifyDisconnectPipe(
       [in]       SERVER_HANDLE hServer,
       [out]      DWORD         *pResult,
       [in]       DWORD         ClientLogonId,
       [in]       ULONG_PTR     ClientProcessId
      );

    BOOLEAN
    RpcWinStationSessionInitialized(
       [in]       SERVER_HANDLE hServer,
       [out]      DWORD         *pResult,
       [in]       DWORD         ClientLogonId,
       [in]       ULONG_PTR     ClientProcessId
      );

    BOOLEAN
    RpcRemoteAssistancePrepareSystemRestore(
        [in]    SERVER_HANDLE   hServer,
        [out]   DWORD*          pResult
        );

    BOOLEAN
    RpcWinStationGetAllProcesses_NT6(
        [in]       SERVER_HANDLE hServer,
        [out]      DWORD         *pResult,
        [in]       ULONG         Level,    
        [in, out]  ULONG         *pNumberOfProcesses,
        [out, size_is(,*pNumberOfProcesses)]
        PTS_ALL_PROCESSES_INFO_NT6  *ppTsAllProcessesInfo
        );
    //
    // Do autoreconnection policy in an atomic operation.
    // Return status indicates if an autoreconnection took
    // place.
    //        
    BOOLEAN
    RpcWinStationAutoReconnect(
       [in]       SERVER_HANDLE hServer,
       [out]      DWORD         *pResult,
       [in]       DWORD         LogonId,
       [in]       DWORD         flags
       );
}
