/************************************************************************* * * 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 ); }