US20070174429A1 - Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment - Google Patents
Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment Download PDFInfo
- Publication number
- US20070174429A1 US20070174429A1 US11/552,315 US55231506A US2007174429A1 US 20070174429 A1 US20070174429 A1 US 20070174429A1 US 55231506 A US55231506 A US 55231506A US 2007174429 A1 US2007174429 A1 US 2007174429A1
- Authority
- US
- United States
- Prior art keywords
- machine
- client system
- client
- computing environment
- virtual machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/14—Display of multiple viewports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/70—Information retrieval; Database structures therefor; File system structures therefor of video data
- G06F16/74—Browsing; Visualisation therefor
- G06F16/748—Hypervideo
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/629—Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/1415—Digital output to display device ; Cooperation and interconnection of the display device with other functional units with means for detecting differences between the image stored in the host and the images displayed on the displays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/1423—Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display
- G06F3/1438—Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display using more than one graphics controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/1454—Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
- G06F3/1462—Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay with means for detecting differences between the image stored in the host and the images displayed on the remote displays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5055—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering software capabilities, i.e. software resources associated or available to the machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/003—Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
- G09G5/006—Details of the interface to the display terminal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
- H04L63/102—Entity profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
- H04L63/105—Multiple levels of security
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/08—Protocols specially adapted for terminal emulation, e.g. Telnet
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
- H04L67/303—Terminal profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/563—Data redirection of data network streams
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/564—Enhancement of application control based on intercepted application data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/59—Providing operational support to end devices by off-loading in the network or by emulation, e.g. when they are unavailable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2149—Restricted operating environment
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2354/00—Aspects of interface with display user
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2370/00—Aspects of data communication
- G09G2370/16—Use of wireless transmission of display information
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2370/00—Aspects of data communication
- G09G2370/22—Detection of presence or absence of input display information or of connection or disconnection of a corresponding information source
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/06—Network architectures or network communication protocols for network security for supporting key management in a packet data network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/24—Negotiation of communication capabilities
Definitions
- the invention generally relates to providing access to computing environments. More particularly, the invention relates to methods and systems for establishing a connection between a client system and a virtual machine hosting a requested computing environment.
- Contemporary computer networks consist of a number of computer systems communicating with other computer systems via communication links.
- client machines and other systems are server machines.
- a server machine may host a variety of application programs that can be accessed and executed by client machines.
- client machines launches an application program
- the execution of that application program can occur at either the client machine or the server machine, depending upon the computing model followed by the computer network.
- the server machine executes a virtual machine, which executes the application program and provides output data to the client machine.
- client machines may be unaware of the application programs and resources available for use on the server machines. In fact, client machines may not even be aware of each available server machine on the network. Additionally, in environments in which a virtual machine provides access to a resource for the client machine, the virtual machine may be relocated from one server machine to another server. In other environments in which a virtual machine provides access to a resource for the client machine, the client machine may not know that a virtual machine provides access to the application program. To find available application programs on a particular server machine, a user of the client machine may need to find and gain access to that server machine and perform a directory listing of the files existing on that server machine. Even then, this listing might not indicate to the user those applications which the user is authorized to use.
- a method for identifying and providing access to virtualized resources available to a user of the client machine, including application programs, desktop environments, and other computing environments provided via virtual machines executing on server machines would be desirable.
- An array of inexpensive physical machines may be partitioned into multiple virtual machines, creating a virtual PC for each user.
- the physical machines may be servers such as rack-mount servers, blade servers, or stand-alone servers.
- the physical machines may also be workstations or workstation blades or personal computers.
- a policy-based dynamic deployment system provisions the virtual machines and associates the virtual machine with an execution machine (i.e., a physical machine) and a user.
- Centralized hosting provides the manageability of server-based computing while the dedicated environment provides the flexibility and compatibility with applications that a desktop PC enables.
- the system has a much lower total cost of ownership—because the system is implemented in software, rather than being dependent on hardware, the system has a much lower total cost of ownership.
- the hardware lifecycle may be extended by increasing the amount of hardware resources assigned to virtual machines as computational demands increase over time. Additionally, the use of virtualization eases the difficulty in dealing with multiple OS images.
- machines are configured to run multiple copies of one or more operating systems (e.g. different versions/releases of WINDOWS from Microsoft Corporation).
- Users transmit requests for access to computing resources to the deployment system, which may use a configuration policy to decide how (with what physical and/or virtual resources) and where (on which physical machine in the machine farm and on which virtual machine) to provide access to the requested computing resource.
- the virtual machine can be created on demand, and the requested software resource may be downloaded and installed in the virtual machine as required.
- the virtual machine may be pre-configured with a plurality of software and/or virtual hardware resources to provide a particular computing environment to the user.
- the user request is directed to the selected, configured virtual machine and a remote display connection is established between the virtual machine and a remote display client on the user's access device, which will be referred to generally as a “client machine.”
- client machine Devices such as CD-ROM drives, floppy drives, USB drives and other similar devices that are connected to the client machine are connected and remotely accessible to the virtual machine, thereby allowing the use of these devices in a manner similar to a standard desktop computer.
- a deployment system may manage a pool of virtual machines (a machine farm) to which new virtual machines can be added on demand.
- a plurality of software modules including a session management component and a virtual machine management component may provide management functionality.
- Executing virtual machines may be migrated from one physical machine to another, under control of the deployment system, to provide load balancing or to facilitate hardware maintenance.
- Inactive virtual machines may be suspended to free physical computing resources.
- Active virtual machines may be migrated from one physical machine to another to consolidate them onto a smaller number of physical machines to allow the unused physical machines to be shutdown to save power during off-peak periods or to free the physical resource to be re-assigned for a different purpose e.g. process web requests.
- Suspended virtual machines may be resumed prior to users requiring access. This can be done manually or automatically via policies or preferences or through a learning process by monitoring a user's behavior over time.
- Performance requirements of the requested resource may be considered when allocating computing resources to virtual machines.
- a financial analysis package may require twice as many CPU resources as a generic productivity application, such as those included in MICROSOFT OFFICE, manufactured by Microsoft Corporation of Redmond, Wash.
- a virtual machine providing the financial analysis package may execute on a physical machine determined to have sufficient spare computational capacity, or existing virtual machines may be relocated to other available physical machines to ensure sufficient available capacity on a particular physical machine.
- Each user is provided a separate virtual machine environment, which provides increased flexibility in that each user may run any version or configuration of an operating system independently of other users and also allows users to run potentially dangerous or destabilizing applications with little risk of affecting other users. This is particularly useful for developers/testers/information technology personnel who frequently need to re-install and modify the operating system and run potentially destabilizing applications.
- Virtual machines Since sharing computing resources and CPU scheduling occurs outside of the virtual machine environment, users can run computing-resource intensive resources with no risk of affecting other users. Virtual machines also provide increased security isolation between users. Because each user is running a separate copy of the OS, there is much less chance of security breaches and virus infections over the between-users boundaries than in the shared OS case.
- a solution is also provided for problems that arise from a situation where, in a hardware-based system of machines, the hardware is mixed, whether due to an initial purchasing decision or due to the acquisition of different types of physical machines over time. Even if initially all of the hardware was uniform, purchasing additional hardware to replace failing modules and increasing the capacity typically leads to non-uniform hardware throughout a machine farm. Even if all hardware is purchased from the same vendor, it is likely that the hardware purchased later will use different chipsets and components, and will require different drivers.
- Non-uniform hardware has traditionally translated into the need to maintain multiple versions of the operating system images (which means higher costs) and limits flexibility of moving users between machines—because the operating system image may be incompatible—which also translates into higher cost. Virtual machines allow efficient use of the same operating system image even in a hardware farm that includes heterogeneous machines. The use of the same operating system image helps to significantly reduce the management cost.
- Adding remote display capability e.g. presentation layer protocols, such as ICA, RDP, or X11
- virtualization techniques allows virtualization to be used for interactive computing.
- Hosting multiple virtual machines on an execution machine allows better utilization of the available physical computing resources (e.g.: space, power, processing power, processing capacity, RAM, bandwidth, etc.) thereby lowering costs.
- the use of virtualization also allows hardware to be updated and maintained independently of OS version and specific device drivers hosted in the operating systems or virtual machines. Additionally, virtual machines enhance system security by isolating computing environments from each other.
- a method for providing access to a computing environment includes the step of receiving a request from a client system for an enumeration of available computing environments. Collected data regarding available computing environments are accessed. Accessed data indicating to a client system each computing environment available to a user of the client system are transmitted to the client system. A request to access one of the computing environments is received from the client system. A connection is established between the client system and a virtual machine hosting the requested computing environment.
- the accessed data transmitted to the client system are displayable at the client system as icons in a graphical user interface window representing computing environments available to a user of the client system.
- the accessed data transmitted to the client system are displayable at the client system as icons in a graphical user interface window representing computing environments unavailable to a user of the client system.
- the connection between the client system and the virtual machine is established using a presentation layer protocol.
- user credentials are received from the client system.
- the accessed data are transmitted to the client system responsive to receiving the user credentials.
- the user of the client system is authenticated based on the received user credentials and access is provided to a selected one of the available computing environment images without requiring further input of user credentials by a user of the client system.
- information is gathered about the client system and a data set is generated from the gathered information.
- the accessed data are transmitted to the client system indicating, responsive to the generated data set, each computing environment available to the client system.
- the accessed data are transmitted to the client system indicating, responsive to an application of a policy to the generated data set, each computing environment available to the client system.
- a web server receives a request from a client system for an enumeration of available computing environments.
- a page template is retrieved from a persistent storage, the web server creates a page describing a display of computing environment images available to the client system, and the created page is transmitted to the client system.
- a server in a network including a client system and a plurality of servers storing computing environments, includes a broker module, a transmitter, a receiver, and a transceiver.
- the broker module accesses collected data regarding computing environments and determines, for each computing environment, whether that computing environment image is available to a client system.
- the transmitter sends accessed data to the client system indicating to the client system each computing environment determined to be available to the client system.
- the receiver receives a request to access one of the available computing environments.
- the transceiver provides a connection between the client system and a virtual machine providing the requested computing environment.
- the receiver receives user credentials from the client system.
- the server further comprises a database storing the collected data.
- the broker module determines for each computing environment whether that computing environment image is available to a client system based on the user credentials and the collected data.
- the server further comprises an output display creation engine creating output displays indicating each computing environment available to the client system.
- the output display creation engine creates a web page describing a display of the computing environments available to a client system, the web page created responsive to the collected information and a web page template.
- transceiver provides a connection between the client system and a virtual machine providing the requested computing environment by establishing a presentation layer protocol connection.
- FIG. 1 is a block diagram of one embodiment of an environment in which a client machine accesses a computing resource provided by a remote machine;
- FIGS. 1A and 1B are block diagrams depicting embodiments of typical computers useful in embodiments with remote machines or client machines;
- FIG. 2A is a block diagram of a system for providing access to a resource
- FIG. 2B is a block diagram of one embodiment of a system in which a client machine can initiate execution of an application program for determining the resource neighborhood of that client machine;
- FIG. 2C is a block diagram of an embodiment in which a client machine uses a web browser application to determine its resource neighborhood;
- FIGS. 3A , 3 B, and 3 C are block diagrams of embodiments of systems of communication among a client machine and multiple remote machines;
- FIG. 3D is a block diagram of one embodiment of a system in which a client machine can access a resource from a resource neighborhood web page displayed at that client machine;
- FIG. 3E is a block diagram of one embodiment of a system in which a remote machine acts as an intermediary for a machine farm;
- FIG. 4 is a block diagram of one embodiment of a resource neighborhood application in which a client machine is in communication with one of the remote machines;
- FIG. 5 is a block diagram of a computing embodiment in which a client machine is in communication with a remote machine having an installed resource neighborhood application program of the invention
- FIG. 6A is a screen shot of an embodiment of a display of a client machine after a resource neighborhood application program is executed
- FIG. 6B is a screen shot of another embodiment of a display screen of a client machine after the resource neighborhood application program is executed;
- FIG. 7A is a block diagram of an embodiment of a network providing policy-based access to application programs for a machine
- FIG. 7B is a block diagram depicting a more detailed embodiment of a policy engine
- FIG. 8 is a flowchart depicting one embodiment of a process for providing access to a resource
- FIG. 9 is a flow diagram depicting one embodiment of a process for electing a management node
- FIG. 10 is a flow diagram depicting one embodiment of a process to update information collected by the management node
- FIG. 11 is a block diagram depicting an embodiment of a machine farm including first and second network management processes
- FIG. 12 is a block diagram depicting one embodiment of a virtual machine management component
- FIG. 13 is a block diagram depicting one embodiment of a session management component
- FIG. 14 is a block diagram depicting one embodiment of a system in which a drive associated with the client machine 10 is made available to a computing environment;
- FIG. 15A is a block diagram depicting one embodiment of a client machine supporting multiple client machine display devices
- FIG. 15B is a block diagram depicting one embodiment of a system for supporting multiple client machine display devices
- FIG. 15C is a block diagram depicting one embodiment of a session login mechanism providing support for multiple client machine display devices
- FIG. 16A is a flow diagram depicting one embodiment of the steps to be taken to provide a desired display layout to a client machine having multiple display devices;
- FIG. 16B is a flow diagram depicting one embodiment of a process to modify a window message
- FIG. 16C is a flow diagram depicting one embodiment of the steps taken to associate a display layout with a client machine
- FIG. 16D is a flow diagram depicting one embodiment of the steps taken to change a desired display layout for a client machine
- FIG. 17 is a block diagram depicting one embodiment of a system in which a remote machine authenticates the user of a client machine
- FIG. 18 is a flow diagram depicting one embodiment of the steps taken to access a plurality of files comprising an application program
- FIG. 19 is a block diagram depicting one embodiment of a client machine 10 including an application streaming client, a streaming service and an isolation environment;
- FIG. 20 is a flow diagram depicting one embodiment of steps taken by a client machine to execute an application
- FIG. 21 is a block diagram depicts one embodiment of a plurality of application files
- FIG. 22A is a flow diagram depicting one embodiment of the steps taken to enable transparent distributed program execution on a remote machine through the selection of graphical indicia representative of a data file located on the client machine;
- FIG. 22B is a flow diagram depicting one embodiment of the steps taken by a remote machine to enable transparent distributed program execution on a remote machine through the selection of graphical indicia representative of a data file located on the client machine;
- FIG. 23 is a flow diagram depicting another embodiment of the steps taken to enable transparent distributed program execution on a client machine through the selection of graphical indicia representative of a data file located on a remote machine;
- FIG. 24 is a flow diagram depicting one embodiment of the steps taken to negotiate the protocol for a connection between a client machine and a remote machine;
- FIG. 25 is a block diagram depicting an embodiment of a remote machine and a client machine establishing a protocol stack for communication
- FIG. 26 is a block diagram depicting one embodiment of a client machine architecture
- FIG. 27 is a block diagram depicting one embodiment of communication between a client machine and a machine farm
- FIG. 28 is a block diagram depicting one embodiment of a client machine architecture
- FIG. 29 is a flow diagram depicting one embodiment of the steps taken to display application output in a web page
- FIG. 30 is a flow diagram depicting one embodiment of the steps taken link to a virtual machine identified by a hyperlink configuration file
- FIG. 31 is a block diagram depicting an embodiment of a system architecture in which a multiplexer is used to transmit data to more than one client machine;
- FIG. 32 is a block diagram depicting another embodiment of a system architecture in which a multiplexer is used to transmit data to more than one client machine;
- FIG. 33 is a block diagram depicting one embodiment of an architecture for displaying application output in a web page
- FIG. 34 is a block diagram depicting another embodiment of an architecture for displaying application output in a web page
- FIG. 35 is a block diagram depicting another embodiment of an architecture for displaying application output in a web page
- FIG. 36 is a block diagram depicting another embodiment of an architecture for displaying application output in a web page
- FIG. 37 is a block diagram depicting one embodiment of a client machine receiving window attribute data via a virtual channel
- FIG. 38 is a block diagram depicting a client machine connected to more than one remote machine
- FIG. 39 is a flow diagram depicting one embodiment of the steps taken to detect and transmit server-initiated display changes
- FIG. 40 is a flow diagram depicting one embodiment of the steps taken to detect and transmit client-initiated display changes
- FIG. 41 is a flow diagram depicting one embodiment for enabling transmission of seamless windows between a client machine and a remote machine
- FIG. 42 is a block diagram depicting one embodiment of an agent
- FIG. 43 is a block diagram depicting one embodiment of a system for enabling seamless windowing mode between a client machine and remote computing environments
- FIG. 44 is a flow diagram depicting one embodiment of the steps taken in a method of receiving window attribute data and graphical data associated with remote windows from virtualized operating systems and from native operating systems;
- FIG. 45 is a block diagram of a system for providing a client with a reliable connection to a host service according to an embodiment of the invention.
- FIG. 46 is a block diagram of a system for providing a client with a reliable connection to a host service according to another embodiment of the invention.
- FIG. 47 depicts communications occurring over a network according to an embodiment of the invention.
- FIG. 48 depicts communications occurring over a network according to another embodiment of the invention.
- FIG. 49 depicts a process for encapsulating a plurality of secondary protocols within a first protocol for communication over a network according to an embodiment of the invention
- FIG. 50 is a block diagram of an embodiment of a computer system to maintain authentication credentials in accordance with the invention.
- FIG. 51 is a flow diagram of the steps followed in an embodiment of the computer system of FIG. 5 to maintain authentication credentials during a first communication session in accordance with the invention
- FIG. 52 is a flow diagram of the steps followed in an embodiment of the computer system of FIG. 50 to maintain authentication credentials during a second communication session following the termination of the first communication session of FIG. 53A in accordance with the invention
- FIG. 53 is a block diagram of an embodiment of a computer system to maintain authentication credentials in accordance with another embodiment of the invention.
- FIG. 54 is a flow diagram of the steps followed in an embodiment of the computer system of FIG. 53 to maintain authentication credentials during a first communication session in accordance with the invention
- FIG. 55 is a flow diagram of the steps followed in an embodiment of the computer system of FIG. 53 to maintain authentication credentials during a second communication session following the termination of the first communication session of FIG. 53 in accordance with the invention
- FIG. 56 is a flow diagram of the steps followed in an embodiment of the computer system of FIG. 53 to maintain authentication credentials during a second communication session following the termination of a second communication channel of the first communication session of FIG. 53 in accordance with the invention
- FIG. 57 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to an embodiment of the invention
- FIG. 58 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to another embodiment of the invention.
- FIG. 59 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to another embodiment of the invention.
- FIG. 60 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to another embodiment of the invention.
- FIG. 61 is a block diagram of a system for providing a client with a reliable connection to a host service and further including components for reconnecting the client to a host service according to an embodiment of the invention
- FIG. 62 is a block diagram of an embodiment of a system for providing a client with a reliable connection to a host service and further including components for reconnecting the client to a host service;
- FIG. 63 is a block diagram of an embodiment of FIG. 61 further including components for initially connecting the client to a host service;
- FIG. 64 is a block diagram of the system of FIG. 62 further including components for initially connecting the client to a host service and to maintain authentication credential according to an embodiment of the invention
- FIG. 65 is a flow diagram of a method for network communications according to an embodiment of the invention.
- FIG. 66 is a flow diagram of a method for reconnecting the client to the host services
- FIGS. 67-69 are flow diagrams of a method for connecting a client to a plurality of host services according to an embodiment of the invention.
- FIG. 70 is a flow diagram of a method for providing a client with a reliable connection to host services and for reconnecting the client to the host services according to an embodiment of the invention
- FIGS. 71-72 are flow diagrams of a method for reconnecting a client to host services according to an embodiment of the invention.
- FIG. 73 is a conceptual block diagram of an embodiment of client software and server software
- FIG. 74 is a flow chart of an embodiment of a method for monitoring network performance
- FIG. 75 is a flow chart of an embodiment of a method of operation of the server software
- FIG. 76 is a flow chart of an embodiment of a method of generating sub-metrics by the client
- FIG. 77 is a flow chart of an embodiment of a method of generating sub-metrics by the client
- FIG. 78 is a flow chart of an embodiment of a method of generating sub-metrics by the server
- FIG. 79 is a schematic diagram depicting a networked client-server computing system
- FIG. 80 is a flow chart depicting a method for connecting a client machine to disconnected application sessions
- FIG. 81 is a flow chart depicting on embodiment a method for connecting the client machine to active application sessions
- FIG. 82 is a schematic diagram depicting one embodiment of a client machine in communication with several remote machines
- FIG. 83 is a flow diagram depicting one embodiment of steps taken in a method to connect a user of a client machine to a computing environment
- FIG. 84 is a flow diagram depicting an embodiment of steps taken in a method to connect a user of a client machine to a computing environment in response to selection of a graphical user interface element;
- FIG. 85 is a block diagram depicting one embodiment of a remote machine able to connect the client machine to an application session
- FIG. 86 is a block diagram of an embodiment of a system for connecting a client machine to an application session responsive to application of a policy
- FIG. 87 is a flow diagram depicting the steps taken in one method to connect a client machine to an application session responsive to application of a policy
- FIG. 88 is a block diagram depicting one embodiment of a system for providing, by a virtual machine, access to a computing environment
- FIG. 89A is a block diagram depicting one embodiment of a storage device and a computing device
- FIG. 89B is a flow diagram depicting one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a storage device;
- FIG. 90A is a block diagram depicting one embodiment of a mobile computing device
- FIG. 90B is a flow diagram depicting one embodiment of the steps taken in a method for providing a portable computing environment by a mobile computing device
- FIG. 91A is a block diagram of one embodiment of a mobile computing device and a computing device
- FIG. 91B is a flow diagram depicting depicts one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a mobile computing device;
- FIG. 92A is a block diagram depicting one embodiment of a mobile computing device and a computing device comprising a computing environment selector;
- FIG. 92B is a flow diagram depicting an embodiment of the steps taken in a method for establishing a computing environment on a computing device via a mobile computing device;
- FIG. 93A is a block diagram depicting one embodiment of a mobile computing device connecting to a docking station
- FIG. 93B is a block diagram depicting one embodiment of a docking station connecting a mobile computing device and a computing device;
- FIG. 93C is a block diagram depicting one embodiment of a mobile computing device and computing device having a docking mechanism
- FIG. 93D is a flow diagram depicting one embodiment of the steps taken in a method of providing to a mobile computing device one or more hardware resources;
- FIG. 94A is a block diagram depicting one embodiment of a mobile computing device having a plurality of processors
- FIG. 94B is a flow diagram depicting one embodiment of the steps taken in a method for switching, by a mobile computing device, between use of multiple processors;
- FIG. 95 is a block diagram depicting one embodiment of a system for providing to a first client agent, via a second client agent on a first remote machine, output data generated by a resource executing in a virtual machine provided by a second remote machine;
- FIG. 96 is a block diagram depicting an embodiment of a system for providing to a first client agent, via a second client agent on a first remote machine, output data generated by a resource executing in a virtual machine provided by a second remote machine;
- FIG. 97 is a block diagram depicting one embodiment of a system for identifying, by a coordinator machine, a worker machine providing, via a virtual machine, access to a computing environment.
- FIG. 1 a block diagram of one embodiment of an environment in which a client machine 10 , 10 ′ accesses a computing resource provided by a remote machine, 30 , 30 ′, 30 ′′, 30 ′′′ is shown.
- a remote machine 30 such as remote machine 30 , 30 ′, 30 ′′, or 30 ′′′ (hereafter referred to generally as remote machine 30 ) accepts connections from a user of a client machine 10 .
- remote machine 30 accepts connections from a user of a client machine 10 .
- the system may provide multiple ones of any or each of those components.
- the system may include multiple, logically-grouped remote machines 30 , one or more of which is available to provide a client machine 10 , 10 ′ access to computing resources.
- the logical group of remote machines may be referred to as a “server farm” or “machine farm,” indicated in FIG. 1A as machine farm 38 .
- the remote machines 30 may be geographically dispersed.
- the group of remote machines 30 logically grouped as a machine farm 38 may be interconnected using a wide-area network (WAN) connection, metropolitan-area network (MAN) connection, a local area network (LAN) a storage-area network (SAN), or a public network such as the Internet.
- a machine farm 38 may include remote machines 30 physically located in geographically diverse locations around the world, including different continents, regions of a continent, countries, regions of a country, states, regions of a state, cities, regions of a city, campuses, regions of a campus, or rooms. Data transmission speeds between remote machines 30 in the machine farm 38 can be increased if the remote machines 30 are connected using a local-area network (LAN) connection or some form of direct connection.
- a machine farm 38 may be administered as a single entity.
- a centralized service may provide management for machine farm 38 .
- one or more remote machines 30 elect a particular remote machine 30 to provide management functionality for the farm.
- the elected remote machine 30 may be referred to as a management server, management node, or management process.
- the management node 30 may gather and store information about a plurality of remote machines 30 , respond to requests for access to resources hosted by remote machines 30 , and enable the establishment of connections between client machines 10 and remote machines 30 .
- an administrator designates one or more remote machines 30 to provide management functionality for machine farm 38 .
- management of the machine farm 38 may be de-centralized.
- one or more remote machines 30 comprise components, subsystems and modules to support one or more management services for the machine farm 38 .
- one or more remote machines 30 provide functionality for management of dynamic data, including techniques for handling failover, data replication, and increasing the robustness of the machine farm 38 .
- one or more remote machines 30 include communications capabilities to enable the one or more remote machines 30 to interact with one another to share responsibility for management tasks.
- Each remote machine 30 may communicate with a persistent store and, in some embodiments, with a dynamic store.
- Persistent store may be physically implemented on a disk, disk farm, a redundant array of independent disks (RAID), writeable compact disc, or any other device that allows data to be read and written and that maintains written data if power is removed from the storage device.
- a single physical device may provide storage for a plurality of persistent stores, i.e., a single physical device may be used to provide the persistent store for more than one machine farm 38 .
- the persistent store maintains static data associated with each remote machine 30 in machine farm 38 and global data used by all remote machines 30 within the machine farm 38 .
- the persistent store may maintain the server data in a Lightweight Directory Access Protocol (LDAP) data model.
- LDAP Lightweight Directory Access Protocol
- the persistent store stores server data in an ODBC-compliant database.
- static data refers to data that do not change frequently, i.e., data that change only on an hourly, daily, or weekly basis, or data that never change.
- the data stored by the persistent store may be replicated for reliability purposes physically or logically.
- physical redundancy may be provided using a set of redundant, mirrored disks, each providing a copy of the data.
- the database itself may be replicated using standard database techniques to provide multiple copies of the database.
- both physical and logical replication may be used concurrently.
- the remote machines 30 store “static” data, i.e., data that persist across client sessions, in the persistent store. Writing to the persistent store can take relatively long periods of time. To minimize accesses to the persistent store, the remote machines 30 may develop a logical, common database (i.e., the dynamic store) that is accessible by all of the remote machines 30 in the machine farm 38 for accessing and storing some types of data.
- the dynamic store may be physically implemented in the local memory of a single or multiple remote machines 30 in the machine farm 38 .
- the local memory can be random access memory, disk, disk farm, a redundant array of independent disks (RAID), or any other memory device that allows data to be read and written.
- data stored in the dynamic store are data that are typically queried or changed frequently during runtime.
- Examples of such data are the current workload level for each of the remote machines 30 in the machine farm 38 , the status of the remote machines 30 in the machine farm 38 , client session data, the number of virtual machines supported by a remote machine 30 , the identity of the operating systems supported by a remote machine 30 , and licensing information.
- the dynamic store comprises one or more tables, each of which stores records of attribute-value pairs. Any number of tables may exist, but each table stores records of only one type. Tables are, in some embodiments identified by name. Thus, in this embodiment, two remote machines 30 that use the same name to open a table refer to the same logical table.
- the dynamic store (i.e., the collection of all record tables) can be embodied in various ways.
- the dynamic store is centralized; that is, all runtime data are stored in the memory of one remote machine 30 in the machine farm 38 .
- That server operates in a manner similar to the management node described above, that is, all other remote machines 30 in the machine farm 38 communicate with the server acting as the centralized data store when seeking access to that runtime data.
- each remote machine 30 in the machine farm 38 keeps a full copy of the dynamic store.
- each remote machine 30 communicates with every other remote machine 30 to keep its copy of the dynamic store up to date.
- each remote machine 30 maintains its own runtime data and communicates with every other remote machine 30 when seeking to obtain runtime data from them.
- a remote machine 30 attempting to find an application program requested by the client machine 10 may communicate directly with every other remote machine 30 in the machine farm 38 to find one or more servers hosting the requested application.
- a collector point is a server that collects run-time data.
- Each collector point stores runtime data collected from certain other remote machines 30 in the machine farm 38 .
- Each remote machine 30 in the machine farm 38 is capable of operating as, and consequently is capable of being designated as, a collector point.
- each collector point stores a copy of the entire dynamic store.
- each collector point stores a portion of the dynamic store, i.e., it maintains runtime data of a particular data type.
- the type of data stored by a remote machine 30 may be predetermined according to one or more criteria. For example, remote machines 30 may store different types of data based on their boot order. Alternatively, the type of data stored by a remote machine 30 may be configured by an administrator using administration tool 140 . In these embodiments, the dynamic store is distributed among two or more remote machines 30 in the machine farm 38 .
- Remote machines 30 not designated as collector points know the remote machines 30 in a machine farm 38 that are designated as collector points.
- a remote machine 30 not designated as a collector point communicates with a particular collector point when delivering and requesting runtime data. Consequently, collector points lighten network traffic because each remote machine 30 in the machine farm 38 communicates with a single collector point remote machine 30 , rather than with every other remote machine 30 , when seeking to access the runtime data.
- the machine farm 38 can be heterogeneous, that is, one or more of the remote machines 30 can operate according to one type of operating system platform (e.g., WINDOWS NT, manufactured by Microsoft Corp. of Redmond, Wash.), while one or more of the other remote machines 30 can operate according to another type of operating system platform (e.g., Unix or Linux). Additionally, a heterogeneous machine farm 38 may include one or more remote machines 30 operating according to a type of operating system, while one or more other remote machines 30 execute one or more types of hypervisors rather than operating systems. In these embodiments, hypervisors may be used to emulate virtual hardware, partition physical hardware, virtualize physical hardware, and execute virtual machines that provide access to computing environments.
- hypervisors may be used to emulate virtual hardware, partition physical hardware, virtualize physical hardware, and execute virtual machines that provide access to computing environments.
- Hypervisors may include those manufactured by VMWare, Inc., of Palo Alto, Calif.; the Xen hypervisor, an open source product whose development is overseen by XenSource, Inc., of Palo Alto; the VirtualServer or virtual PC hypervisors provided by Microsoft or others.
- a hypervisor executes on a machine executing an operating system.
- a machine executing an operating system and a hypervisor may be said to have a host operating system (the operating system executing on the machine), and a guest operating system (an operating system executing within a computing resource partition provided by the hypervisor).
- a hypervisor interacts directly with hardware on a machine, instead of executing on a host operating system.
- the hypervisor may be said to be executing on “bare metal,” referring to the hardware comprising the machine.
- Remote machines 30 may be servers, file servers, application servers, appliances, network appliances, gateways, application gateways, gateway servers, virtualization servers, deployment servers, or firewalls.
- the remote machine 30 may be an SSL VPN server.
- the remote machine 30 may be an application acceleration appliance.
- the remote machine 30 may provide functionality including firewall functionality, application firewall functionality, or load balancing functionality.
- the remote machine 30 comprises an appliance such as one of the line of appliances manufactured by the Citrix Application Networking Group, of San Jose, Calif., or Silver Peak Systems, Inc., of Mountain View, Calif., or of Riverbed Technology, Inc., of San Francisco, Calif., or of F5 Networks, Inc., of Seattle, Wash., or of Juniper Networks, Inc., of Sunnyvale, Calif.
- a remote machine 30 comprises a remote authentication dial-in user service, referred to as a RADIUS server.
- remote machines 30 may have the capacity to function as a master network information node monitoring resource usage of other machines in the farm 38 .
- a remote machine 30 may provide an Active Directory.
- Remote machines 30 may be referred to as execution machines, intermediate machines, broker machines, intermediate broker machines, or worker machines.
- remote machines 30 in the machine farm 38 may be stored in high-density racking systems, along with associated storage systems, and located in an enterprise data center.
- consolidating the machines in this way may improve system manageability, data security, the physical security of the system, and system performance by locating machines and high performance storage systems on localized high performance networks. Centralizing the machines and storage systems and coupling them with advanced system management tools allows more efficient use of machine resources.
- the client machines 10 may also be referred to as endpoints, client nodes, clients, or local machines.
- the client machines 10 have the capacity to function as both client machines seeking access to resources and as remote machines 30 providing access to remotely hosted resources for other client machines 10 .
- remote machines 30 may request access to remotely-hosted resources.
- the remote machines 30 may be referred to as client machines 10 .
- the client machine 10 communicates directly with one of the client machines 30 in a machine farm 38 .
- the client machine 10 executes an application to communicate with the remote machine 30 in a machine farm 38 .
- the client machine 10 communicates with one of the remote machines 30 via a gateway, such as an application gateway.
- the client machine 10 communicates with the remote machine 30 in the machine farm 38 over a communications link 150 . Over the communications link 150 , the client machine 10 can, for example, request access to or execution of various resources provided by remote machines 30 , such as applications, computing environments, virtual machines, or hypervisors hosted by or executing on the remote machines 30 , 30 ′, 30 ′′, and 30 ′′′ in the machine farm 38 .
- the client machine 10 , 10 ′ receives for display output of the results of execution of the resource or output of interaction between the client machine 10 and the applications or computing environments provided by the remote machines 30 .
- the client machine 10 can receive the output of applications executing in one or more virtual machines on a remote machine 30 , 30 ′, 30 ′′, and 30 ′′′ in the machine farm 38 .
- the communications link 150 may be synchronous or asynchronous and may be a LAN connection, MAN connection, or a WAN connection. Additionally, communications link 150 may be a wireless link, such as an infrared channel or satellite band.
- the communications link 150 may use a transport layer protocol such as TCP/IP or any application layer protocol, such as the Hypertext Transfer Protocol (HTTP), Extensible Markup Language (XML), Independent Computing Architecture Protocol (ICA) manufactured by Citrix Systems, Inc. of Ft. Lauderdale, Fla., or the Remote Desktop Protocol manufactured by the Microsoft Corporation of Redmond, Wash.
- HTTP Hypertext Transfer Protocol
- XML Extensible Markup Language
- ICA Independent Computing Architecture Protocol
- the communications link 150 uses a Wi-Fi protocol.
- the communications link 150 uses a mobile internet protocol.
- the communications link 150 may provide communications functionality through a variety of connections including standard telephone lines, LAN or WAN links (e.g., T1, T3, 56 kb, X.25, SNA, DECNET), broadband connections (ISDN, Frame Relay, ATM, Gigabit Ethernet, Ethernet-over-SONET), and wireless connections or any combination thereof. Connections can be established using a variety of communication protocols (e.g., TCP/IP, IPX, SPX, NetBIOS, Ethernet, ARCNET, SONET, SDH, Fiber Distributed Data Interface (FDDI), RS232, IEEE 802.11, IEEE 802.11a, IEEE 802.11b, IEEE 802.11g, CDMA, GSM, WiMax and direct asynchronous connections).
- standard telephone lines LAN or WAN links
- broadband connections ISDN, Frame Relay, ATM, Gigabit Ethernet, Ethernet-over-SONET
- Connections can be established using a variety of communication protocols (e
- the remote machine 30 and the client machine 10 communicate via any type and/or form of gateway or tunneling protocol such as Secure Socket Layer (SSL) or Transport Layer Security (TLS), or the Citrix Gateway Protocol manufactured by Citrix Systems, Inc. of Ft. Lauderdale, Fla.
- the computer system 100 may include a network interface comprising a built-in network adapter, network interface card, PCMCIA network card, card bus network adapter, wireless network adapter, USB network adapter, modem or any other device suitable for interfacing the computer system 100 to any type of network capable of communication and performing the operations described herein.
- the computer system 100 may support installation devices, such as a floppy disk drive for receiving floppy disks such as 3.5-inch, 5.25-inch disks or ZIP disks, a CD-ROM drive, a CD-R/RW drive, a DVD-ROM drive, network interface card, tape drives of various formats, USB device, hard-drive or any other device suitable for installing software, programs, data or files, such as any software, or portion thereof.
- installation devices such as a floppy disk drive for receiving floppy disks such as 3.5-inch, 5.25-inch disks or ZIP disks, a CD-ROM drive, a CD-R/RW drive, a DVD-ROM drive, network interface card, tape drives of various formats, USB device, hard-drive or any other device suitable for installing software, programs, data or files, such as any software, or portion thereof.
- the computer system 100 may also include a storage device of any type and form for storing an operating system and other related software, and for storing application software programs.
- the storage device includes one or more hard disk drives or redundant arrays of independent disks.
- the storage device comprises any type and form of portable storage medium or device, such as a compact flash card, a micro hard drive or pocket drive, embedded flash storage, or USB storage drive.
- Portable storage devices may be generally referred to by a variety of names, including but not limited to, finger drive, flash disk, flash drive, flash memory drive, jump drive, jump stick, keychain drive, keydrive, memory key, mobile drive, pen drive, thumb drive, thumb key, vault drive, USB drive, or USB stick.
- any of the installation devices or mediums could also provide a storage medium or device.
- the client machine 10 includes a client agent which may be, for example, implemented as a software program and/or as a hardware device, such as, for example, an ASIC or an FPGA.
- a client agent with a user interface is a Web Browser (e.g., INTERNET EXPLORER manufactured by Microsoft Corp. of Redmond, Wash. or SAFARI, manufactured by Apple Computer of Cupertino, Calif.).
- the client agent can use any type of protocol, such as a remote display protocol, and it can be, for example, an HTTP client agent, an FTP client agent, an Oscar client agent, a Telnet client agent, an Independent Computing Architecture (ICA) client agent manufactured by Citrix Systems, Inc.
- ICA Independent Computing Architecture
- the client agent is configured to connect to the remote machine 30 .
- the client machine 10 includes a plurality of client agents, each of which may communicate with a remote machine 30 , respectively.
- the remote machines 30 and the client machines 10 , are provided as computers or computer servers, of the sort manufactured by Apple Computer, Inc., of Cupertino, Calif., International Business Machines of White Plains, N.Y., Hewlett-Packard Corporation of Palo Alto, Calif. or the Dell Corporation of Round Rock, Tex.
- the remote machines 30 may be blade servers, servers, workstation blades or personal computers executing hypervisors emulating hardware required for virtual machines providing access to computing environments.
- a single physical machine may provide multiple computing environments.
- FIGS. 1A and 1B depict block diagrams of typical computer architectures useful in those embodiments as the remote machine 30 , or the client machine 10 .
- each computer 100 includes a central processing unit 102 , and a main memory unit 104 .
- Each computer 100 may also include other optional elements, such as one or more input/output devices 130 a - 130 n (generally referred to using reference numeral 130 ), and a cache memory 140 in communication with the central processing unit 102 .
- the central processing unit 102 is any logic circuitry that responds to and processes instructions fetched from the main memory unit 104 .
- the central processing unit is provided by a microprocessor unit, such as those manufactured by Intel Corporation of Mountain View, Calif.; those manufactured by Motorola Corporation of Schaumburg, Ill.; those manufactured by International Business Machines of White Plains, N.Y.; or those manufactured by Advanced Micro Devices of Sunnyvale, Calif.
- Main memory unit 104 may be one or more memory chips capable of storing data and allowing any storage location to be directly accessed by the microprocessor 102 , such as Static random access memory (SRAM), Burst SRAM or SynchBurst SRAM (BSRAM), Dynamic random access memory (DRAM), Fast Page Mode DRAM (FPM DRAM), Enhanced DRAM (EDRAM), Extended Data Output RAM (EDO RAM), Extended Data Output DRAM (EDO DRAM), Burst Extended Data Output DRAM (BEDO DRAM), Enhanced DRAM (EDRAM), synchronous DRAM (SDRAM), JEDEC SRAM, PC100 SDRAM, Double Data Rate SDRAM (DDR SDRAM), Enhanced SDRAM (ESDRAM), SyncLink DRAM (SLDRAM), Direct Rambus DRAM (DRDRAM), or Ferroelectric RAM (FRAM).
- SRAM Static random access memory
- BSRAM SynchBurst SRAM
- DRAM Dynamic random access memory
- FPM DRAM Fast Page Mode DRAM
- EDRAM Extended Data
- FIG. 1A the processor 102 communicates with main memory 104 via a system bus 120 (described in more detail below).
- FIG. 1B depicts an embodiment of a computer system 100 in which the processor communicates directly with main memory 104 via a memory port.
- the main memory 104 may be DRDRAM.
- FIG. 1A and FIG. 1B depict embodiments in which the main processor 102 communicates directly with cache memory 140 via a secondary bus, sometimes referred to as a “backside” bus.
- the main processor 102 communicates with cache memory 140 using the system bus 120 .
- Cache memory 140 typically has a faster response time than main memory 104 and is typically provided by SRAM, BSRAM, or EDRAM.
- the processor 102 communicates with various I/O devices 130 via a local system bus 120 .
- Various buses may be used to connect the central processing unit 102 to the I/O devices 130 , including a VESA VL bus, an ISA bus, an EISA bus, a MicroChannel Architecture (MCA) bus, a PCI bus, a PCI-X bus, a PCI-Express bus, or a NuBus.
- MCA MicroChannel Architecture
- PCI bus PCI bus
- PCI-X bus PCI-X bus
- PCI-Express PCI-Express bus
- NuBus NuBus.
- the processor 102 may use an Advanced Graphics Port (AGP) to communicate with the display.
- AGP Advanced Graphics Port
- FIG. 1B depicts an embodiment of a computer system 100 in which the main processor 102 communicates directly with I/O device 130 b via HyperTransport, Rapid I/O, or InfiniBand.
- FIG. 1B also depicts an embodiment in which local busses and direct communication are mixed: the processor 102 communicates with I/O device 130 a using a local interconnect bus while communicating with I/O device 130 b directly.
- I/O devices 130 may be present in the computer system 100 .
- Input devices include keyboards, mice, trackpads, trackballs, microphones, and drawing tablets.
- Output devices include video displays, speakers, inkjet printers, laser printers, and dye-sublimation printers.
- An I/O device may also provide mass storage for the computer system 100 such as a hard disk drive, a floppy disk drive for receiving floppy disks such as 3.5-inch, 5.25-inch disks or ZIP disks, a CD-ROM drive, a CD-R/RW drive, a DVD-ROM drive, DVD ⁇ RW drive, DVD+RW drive, tape drives of various formats, and USB storage devices such as the USB Flash Drive line of devices manufactured by Twintech Industry, Inc. of Los Alamitos, Calif., and the iPod Shuffle line of devices manufactured by Apple Computer, Inc., of Cupertino, Calif.
- the client machine 10 may comprise or be connected to multiple display devices, which each may be of the same or different type and/or form.
- any of the I/O devices 130 a - 130 n may comprise a display device or any type and/or form of suitable hardware, software, or combination of hardware and software to support, enable or provide for the connection and use of multiple display devices by the client machine 10 .
- the client machine 10 may include any type and/or form of video adapter, video card, driver, and/or library to interface, communicate, connect or otherwise use the display devices.
- a video adapter may comprise multiple connectors to interface to multiple display devices.
- the client machine 10 may include multiple video adapters, with each video adapter connected to one or more of the display devices. In some embodiments, any portion of the operating system of the client machine 10 may be configured for using multiple displays. In other embodiments, one or more of the display devices may be provided by one or more other computing devices, such as remote machine 30 connected to the client machine 10 , for example, via a network. These embodiments may include any type of software designed and constructed to use another computer's display device as a second display device for the client machine 10 .
- a client machine 10 may be configured to have multiple display devices.
- an I/O device 130 may be a bridge between the system bus 120 and an external communication bus, such as a USB bus, an Apple Desktop Bus, an RS-232 serial connection, a SCSI bus, a FireWire bus, a FireWire 800 bus, an Ethernet bus, an AppleTalk bus, a Gigabit Ethernet bus, an Asynchronous Transfer Mode bus, a HIPPI bus, a Super HIPPI bus, a SerialPlus bus, a SCI/LAMP bus, a FibreChannel bus, or a Serial Attached small computer system interface bus.
- an external communication bus such as a USB bus, an Apple Desktop Bus, an RS-232 serial connection, a SCSI bus, a FireWire bus, a FireWire 800 bus, an Ethernet bus, an AppleTalk bus, a Gigabit Ethernet bus, an Asynchronous Transfer Mode bus, a HIPPI bus, a Super HIPPI bus, a SerialPlus bus, a SCI/LAMP bus, a FibreChannel bus, or a
- General-purpose computers of the sort depicted in FIG. 1A and FIG. 1B typically operate under the control of operating systems which control scheduling of tasks and access to system resources.
- the computers operate under control of hypervisors, which represent virtualized views of physical hardware as one or more virtual machines.
- Operating systems may execute in these virtual machines to control the virtual machine in a manner analogous to the way a native operating system controls a physical machine.
- Typical operating systems include: the MICROSOFT WINDOWS family of operating systems, manufactured by Microsoft Corp.
- the client machines 10 and 20 may be any personal computer (e.g., a Macintosh computer or a computer based on processors manufactured by Intel Corporation of Mountain View, Calif.), Windows-based terminal, Network Computer, wireless device, information appliance, RISC Power PC, X-device, workstation, mini computer, main frame computer, personal digital assistant, television set-top box, living room media center, gaming console, mobile gaming device, NetPC's, thin client, or other computing device that has a windows-based desktop and sufficient persistent storage for executing a small, display presentation program.
- the display presentation program uses commands and data sent to it across communication channels to render a graphical display.
- Windows-oriented platforms supported by the client machines 10 and 20 can include, without limitation, WINDOWS 3.x, WINDOWS 95, WINDOWS 98, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS 2000, Windows 2003, WINDOWS CE, Windows XP, Windows Vista, MAC/OS, Java, Linux, and UNIX.
- the client machines 10 can include a visual display device (e.g., a computer monitor), a data entry device (e.g., a keyboard), persistent or volatile storage (e.g., computer memory) for storing downloaded application programs, a processor, and a mouse. Execution of a small, display presentation program allows the client machines 10 to participate in a distributed computer system model (i.e., a server-based computing model).
- the general-purpose computers of the sort depicted in FIG. 1A and FIG. 1B may have different processors, operating systems, and input devices consistent with the device and in accordance with embodiments further described herein.
- the computer system 100 can be any workstation, desktop computer, laptop or notebook computer, server, handheld computer, mobile telephone or other portable telecommunication device, media playing device, a gaming system, or any other type and/or form of computing, telecommunications or media device that is capable of communication and that has sufficient processor power and memory capacity to perform the operations described herein.
- the computer system 100 may comprise a device of the IPOD family of devices manufactured by Apple Computer of Cupertino, Calif., a PLAYSTATION 2, PLAYSTATION 3, or PERSONAL PLAYSTATION PORTABLE (PSP) device manufactured by the Sony Corporation of Tokyo, Japan, a NINTENDO DS, NINTENDO GAMEBOY, NINTENDO GAMEBOY ADVANCED or NINTENDO REVOLUTION device manufactured by Nintendo Co., Ltd., of Kyoto, Japan, or an XBOX or XBOX 360TM device manufactured by the Microsoft Corporation of Redmond, Wash.
- PSP PERSONAL PLAYSTATION PORTABLE
- a client machine 10 is a mobile device
- the device may be a JAVA-enabled cellular telephone, such as those manufactured by Motorola Corp. of Schaumburg, Ill., those manufactured by Kyocera of Kyoto, Japan, or those manufactured by Samsung Electronics Co., Ltd., of Seoul, Korea.
- the client machine 10 may be a personal digital assistant (PDA) operating under control of the PalmOS operating system, such as the devices manufactured by palmOne, Inc. of Milpitas, Calif.
- PDA personal digital assistant
- the client machine 10 may be a personal digital assistant (PDA) operating under control of the PocketPC operating system, such as the iPAQ devices manufactured by Hewlett-Packard Corporation of Palo Alto, Calif., the devices manufactured by ViewSonic of Walnut, Calif., or the devices manufactured by Toshiba America, Inc. of New York, N.Y.
- the client machine 10 is a combination PDA/telephone device such as the Treo devices manufactured by palmOne, Inc. of Milpitas, Calif.
- the client machine 10 is a cellular telephone that operates under control of the PocketPC operating system, such as those manufactured by Motorola Corp.
- a client machine 10 communicates with a remote machine 30 to determine an enumeration of resources available to the client machine 10 or to a user of the client machine 10 .
- Resources may include, without limitation, computing environments, applications, documents, and hardware resources.
- the remote machine 30 provides the client machine 10 with address information associated with a remote machine 30 ′ hosting a resource identified by the enumeration of resources.
- the client machine 10 communicates with the remote machine 30 ′ to access the identified resource.
- the client machine 10 executes a resource neighborhood application to communicate with the remote machines 30 and 30 ′.
- each of the remote machines 30 provides the functionality required to identify and provide address information associated with a remote machine 30 ′ hosting a requested resource.
- a block diagram depicts one embodiment of a system for providing access to a resource.
- a request to enumerate computing resources is transmitted from a client machine 10 (step 202 ).
- the request includes an identification of a user of the client machine 10 .
- An enumeration of a plurality of resources available to the user of the requesting machine is provided by the remote machine (step 204 ).
- the client machine 10 transmits a request for access to a particular resource included in the enumeration (step 206 ).
- the transmitted request is a request for an enumeration of computing environments available to the client machine 10 .
- the request is a request for an enumeration of computing environments supporting a particular application requested for execution by the client machine 10 .
- the request is a request for access to a computing environment supported by a particular plurality of hardware resources.
- information associated with the client machine 10 or with a user of the client machine 10 is received with the request.
- credentials associated with the user, or with a user of the client machine 10 are received.
- the remote machine 30 receives a request for an enumeration of available computing environments from the client machine 10 with the information associated with the client machine 10 , 10 ′ or the user of the client machine 10 .
- the remote machine 30 receives a transmission from a policy engine including the information.
- the remote machine 30 receives a transmission from a collection agent including the information.
- the remote machine 30 comprises a component receiving requests and associated information.
- a remote machine 30 functioning as a web server receives communications from the client machine 10 , 10 ′. In one of these embodiments, the web server forwards the communications to a remote machine 30 ′. In one of these embodiments, the web server forwards the communications to a service on the remote machine 30 ′. In another of these embodiments where communications from the client machine 10 , 10 ′ are routed to a remote machine 30 ′ by the web server, the remote machine 30 may be selected responsive to an Internet Protocol (IP) address of the client machine 10 .
- IP Internet Protocol
- the user provides credentials to the remote machine 30 via a graphical user interface presented to the client machine 10 , 10 ′ by the remote machine 30 .
- a remote machine 30 ′′′ having the functionality of a web server provides the graphical user interface to the client machine 10 .
- a collection agent transmitted to the client machine 10 , 10 ′ by the remote machine 30 gathers the credentials from the client machine 10 .
- collected data regarding available resources is accessed.
- collected data regarding computing environments is accessed.
- the accessed data includes an indication of a virtual machine providing access to one of the computing environments.
- the accessed data includes an indication of a location of the virtual machine.
- the accessed data concerning computing environments includes an indication of a plurality of hardware resources required to support the computing environments.
- the accessed data concerning computing environments includes an indication of a user or type of user authorized to access the computing environments.
- the accessed data is provided responsive to a request for identification of a computing environment providing access to an application program.
- the collected data is stored on a server, such as a remote machine 30 .
- the server is in communication with a database storing the collected data.
- the server collects the data from a plurality of machines 30 in a machine farm 38 .
- the data is received from at least one server responsive to a request for the information concerning the computing environments.
- the server collects the data from a hypervisor executing on a machine 30 ′ in the machine farm 38 .
- the server collects the data from a management component residing in a guest operating system provided by a virtual machine launched into a hypervisor executing on a machine 30 ′ in the machine farm 38 .
- the data is collected by an intermediate, brokering machine.
- the brokering machine maintains a database of a status of at least one computing environments and collects information from at least one machine providing access to at least one computing environments.
- the brokering machine collects information from a virtual machine service component residing in a virtual machine providing the computing environments.
- the brokering machine collects information from a virtual machine providing management functionality for a virtual machine providing a computing environment.
- the brokering machine collects information from a hypervisor on which an executing virtual machine provides a computing environment.
- the brokering machine comprises a machine 30 including a brokering module.
- data is gathered about the client system and a data set is generated from the gathered information.
- the accessed data is transmitted to the client system with an indication to the client system, made responsive to the generated data set, of each computing environment available to the client system.
- the accessed data is transmitted to the client system indicating to the client system, responsive to the application of a policy to the generated data set, each computing environment available to the client system.
- the indication includes at least one method of access available to the user seeking access to the computing environment.
- the indication includes at least one type of action associated with the computing environment which may be taken by, or on behalf of, the user of the client system.
- An enumeration of a plurality of resources available to the client machine 10 is provided (step 204 ).
- the enumeration is provided responsive to an application of a policy to received information associated with the user of the client machine 10 or the remote machine 30 .
- the enumeration is provided responsive to a request from the user for a particular type of computing environment.
- the enumeration is provided responsive to a request from the user for computing environments providing access to a type of application program.
- the enumeration is provided responsive to a request from the user for computing environments supported by a specified plurality of hardware resources.
- an indication is transmitted to the client machine 10 of a plurality of computing environments available to a user of the client machine 10 .
- the indication is generated responsive to accessing collected data associated with the plurality of computing environments.
- the accessed data is transmitted to the client machine 10 with an enumeration of computing environments available to the client machine 10 .
- a determination is made, for each stored computing environment, as to whether that computing environment is available to the client machine 10 .
- the collected information is transmitted to the client machine 10 , the transmitted information displayable at the client machine 10 as icons in a graphical user interface window representing computing environments available to the client system.
- the collected information is transmitted to the client machine 10 , the transmitted information displayable at the client machine 10 as icons in a graphical user interface window representing computing environments unavailable to the client machine 10 .
- an enumeration of available computing environments is presented to a user of the client machine 10 .
- an enumeration of applications is presented to a user of the client machine 10 .
- a physical machine provides access to an enumerated application.
- a virtual machine provides access to an enumerated application.
- a virtual machine provides access to a computing environment from which a user of the client machine 10 may access the application.
- an enumeration of standard operating environments (such as a guest operating system pre-configured with a plurality of application programs) is provided to the user of the client machine 10 .
- the enumeration of available resources includes an enumeration of a plurality of actions associated with a requested resource.
- the enumeration of the plurality of actions enables the user to request execution of a computing environment.
- the enumeration of the plurality of actions enables the user to request cloning of a computing environment.
- the enumeration of the plurality of actions enables the user to request shutdown of a computing environment.
- the enumeration of the plurality of actions enables the user to request that a computing environment be rebooted.
- the enumeration of the plurality of actions enables the user to request that a snapshot be taken of an existing state of a computing environment. In other embodiments, the enumeration of the plurality of actions enables the user to request that a previous snapshot of a computing environment be provided.
- a request is transmitted for access to a particular resource (step 206 ).
- a user of the client machine 10 requests a resource responsive to a received enumeration of available resources.
- the user requests a resource independent of a received enumeration.
- the user requests a resource by selecting a graphical representation of the resource presented on the client machine 10 by a client agent.
- the user requests a resource by selecting a graphical or textual representation of the resource presented to the user on a web server or other remote machine 30 ′′′.
- the user requests an action associated with a resource. In one of these embodiments, the user requests execution of the resource. In another of these embodiments, the user requests termination of the resource. In still another of these embodiments, the user requests transmission of the resource, including transmission across an application streaming session. In yet another of these embodiments, the user requests that a resource be shutdown. In other embodiments, a request to execute an application is received from the client machine 10 , the requested application requiring one of the computing environments. In still other embodiments, a request to access a file is received from the client machine 10 , the requested file requiring execution within one of the computing environments.
- a remote machine 30 launches the Resource Neighborhood (RN) application and presents results of the RN application to the client machine 10 .
- the remote machine 30 can launch the RN application 241 in response to a request 202 by the client machine 10 for an enumeration of available resources.
- the remote machine 30 provides an enumeration of available resources to the client machine 10 (step 204 ).
- the client machine 10 and remote machine 30 ′ establish a connection (arrows 245 and 246 ). By this connection, the remote machine 30 ′ can transfer the executable code of the particular application to the client machine 10 , when the client machine 10 and remote machine 30 ′ are operating according to the client-based computing model.
- the remote machine 30 ′ can execute the particular application and transfer the graphical user interface to the client machine 10 , when the client machine 10 and remote machine 30 ′ are operating according to the server-based computing model.
- the remote machine 30 ′ can execute the Resource Neighborhood application 241 and push the results back to the client machine 10 so that when the client machine 10 requests the Resource Neighborhood application, the Resource Neighborhood results are already available at the client machine 10 .
- FIG. 2B shows another embodiment of a system in which the client machine 10 initiates execution of the Resource Neighborhood application 241 and a remote machine 30 presents the results of the RN application 241 to the client machine 10 .
- the client machine 10 launches the Resource Neighborhood application (e.g., by clicking on a Resource Neighborhood icon representing the application 241 ).
- the client machine 10 directs a request 202 for the Resource Neighborhood application to the remote machine 30 .
- the remote machine 30 can execute the Resource Neighborhood application 241 , if the application is on the remote machine 30 , and return the results to the client machine 10 .
- the remote machine 30 can indicate (arrow 204 ) to the client machine 10 that the Resource Neighborhood application 241 is available on another remote machine, in this example remote machine 30 ′.
- the client machine 10 and remote machine 30 ′ establish a connection (arrows 206 and 210 ) by which the client machine 10 requests execution of the Resource Neighborhood application 241 .
- the remote machine 30 ′ can execute the application 241 and transfer the results (i.e., the graphical user interface any audio output etc.) to the client machine 10 .
- FIG. 2C shows another embodiment of a system in which a client machine 10 initiates execution of the Resource Neighborhood application 241 , in this example via the World Wide Web.
- a client machine 10 executes a web browser application 280 , such as NETSCAPE NAVIGATOR, manufactured by Netscape Communications, Inc. of Mountain View, Calif., INTERNET EXPLORER, manufactured by Microsoft Corporation of Redmond, Wash., or SAFARI, manufactured by Apple Computer of Cupertino, Calif.
- NETSCAPE NAVIGATOR manufactured by Netscape Communications, Inc. of Mountain View, Calif.
- INTERNET EXPLORER manufactured by Microsoft Corporation of Redmond, Wash.
- SAFARI manufactured by Apple Computer of Cupertino, Calif.
- the client machine 10 via the web browser 280 , transmits a request 282 to access a Uniform Resource Locator (URL) address corresponding to an HTML page residing on remote machine 10 .
- a Uniform Resource Locator URL
- the first HTML page returned 284 to the client machine 10 by the remote machine 30 is an authentication page that seeks to identify the client machine 10 or the user of the client machine 10 .
- the authentication page allows the client machine 10 to transmit user credentials, via the web browser 280 , to the remote machine 30 for authentication. Transmitted user credentials are verified either by the remote machine 30 or by another remote machine 30 in the farm 38 .
- This allows a security domain to be projected onto the remote machine 30 .
- the remote machine 30 runs the WINDOWS NT operating system, manufactured by Microsoft Corporation of Redmond, Wash.
- the authenticating machine runs the UNIX operating system
- the UNIX security domain may be said to have been projected onto the remote machine 30 .
- User credentials may be transmitted “in the clear,” or they may be encrypted.
- user credentials may be transmitted via a Secure Socket Layer (SSL) connection, which encrypts data using algorithms such as the RC4 algorithm, manufactured by RSA Security Inc. of Bedford, Mass.
- SSL Secure Socket Layer
- an access control decision is made based on received information about the user resources available to the user of the client system are identified responsive to the access control decision.
- a policy is applied to the received information about the user.
- the remote machine 30 may verify the user credentials received from the client machine 10 .
- the remote machine 30 may pass the user credentials to another remote machine for authentication.
- the authenticating server may be in a different domain from the remote machine 30 .
- Authenticated user credentials of the client machine 10 may be stored at the client machine 10 in a per-session cookie, in fields that are not displayed by the web browser 280 , or in any other manner common in maintenance of web pages.
- a machine farm 38 with which the remote machine 30 is associated may allow guest users, i.e., users that do not have assigned user credentials, to access resources hosted by the farm 38 .
- the authentication page may provide a mechanism for allowing a client machine 10 to identify that it is a guest user, such as a button or menu selection.
- the remote machine 30 may omit the authentication page entirely.
- the remote machine prepares and transmits to the client machine 10 an HTML page 288 that includes a Resource Neighborhood window 258 in which appears graphical icons 257 , 257 ′ representing resources to which the client machine 10 has access.
- a user of client machine 10 requests access to a resource represented by icon 257 by clicking that icon 257 .
- FIG. 3A shows one embodiment of a process of communication among the client machine 10 and multiple remote machines 30 , 30 ′.
- the client machine 10 has an active connection 372 with the remote machine 30 ′.
- the client machine 10 and remote machine 30 ′ can use the active connection 372 to exchange information regarding the status or execution of a first resource.
- User credentials may be stored at the client machine 10 . Such storage of the user credentials can be in cache memory or persistent storage.
- the Resource Neighborhood application (not shown on FIG. 3A ) runs on the client machine 10 .
- the client machine display has a Resource Neighborhood window 258 in which appears a graphical icon 257 representing a second resource.
- a user of the client machine 10 can access the second resource by double-clicking the icon 257 with the mouse.
- the request passes to the remote machine 30 via connection 359 .
- the remote machine 30 indicates to the client machine 10 via connection 359 that the sought-after resource is available on remote machine 30 ′.
- the client machine 10 signals the remote machine 30 ′ to establish a second connection 370 .
- the remote machine 30 ′ requests the user credentials from the client machine 10 to authenticate access to the second resource.
- the client machine 10 and remote machine 30 ′ Upon a successful authentication, the client machine 10 and remote machine 30 ′ establish the second connection 370 and exchange information regarding status of or execution of the second resource.
- the remote machine does not request user credentials to establish the second connection 370 .
- the remote machine 30 ′ may use the credentials supplied by the user of client machine 10 to establish the connection 372 to also establish the second connection 370 . Accordingly, the client machine 10 and the remote machine 30 ′ communicate with each other over multiple connections.
- FIG. 3B shows one embodiment of a system of communication among the client machine 10 , master remote machine 30 , and servers 32 , 34 , and 36 .
- the client machine 10 has an active connection 373 with the remote machine 32 .
- the client machine 10 and remote machine 32 can use the active connection 373 to exchange information regarding the status of or execution of a first resource.
- User credentials may be stored at the remote machine 32 in cache memory or in persistent storage.
- the Resource Neighborhood application runs on the remote machine 32 .
- the remote machine 32 includes software providing a server-based client engine 62 , enabling the remote machine 32 to operate in the capacity of the client machine 10 .
- the client machine 10 display has a Resource Neighborhood window 258 in which appear graphical icons 357 , 357 ′ representing a second resource and a third resource, respectively. A user of the client machine 10 can access the second resource by double-clicking the icon 357 .
- the request to launch the second resource passes to the remote machine 32 via active connection 373 , and the remote machine 32 forwards the request to the master remote machine 30 (arrow 365 ).
- the master remote machine 30 indicates (arrow 365 ) to the remote machine 32 that the sought-after resource is available on server 34 .
- the remote machine 32 contacts the server 34 to establish a connection 366 .
- the server 34 obtains the user credentials of the client machine 10 from the remote machine 32 .
- the remote machine 32 and server 34 establish the connection (arrow 366 ) by which the remote machine 32 requests access to the second resource and the server 34 returns the results to the remote machine 32 .
- the remote machine 32 forwards the results to the client machine 10 , where the results are displayed. Accordingly, the information exchanged between the client machine 10 and the server 34 “passes through” the remote machine 32 .
- the client machine 10 can launch the third resource by double-clicking the icon 357 ′.
- the request to launch the third resource passes to the remote machine 32 .
- the remote machine 32 forwards the request to the master remote machine 30 .
- the master remote machine 30 indicates that the server 36 can be used to access the third resource.
- the remote machine 32 and the server 36 establish a connection (arrow 374 ) by which the remote machine 32 requests access to the third resource, and the server 36 returns the results to the remote machine 32 .
- the server 36 can authenticate the user credentials of the user of the client machine 10 , which are obtained from the remote machine 32 .
- the remote machine 32 forwards the results to the client machine 10 where the results are displayed. Accordingly, the results of accessing the third resource pass between the client machine 10 and the server 36 through the remote machine 32 .
- FIG. 3C shows another embodiment of a system of communication among the client machine 10 , a master remote machine 30 , and servers 32 and 34 .
- the client machine 10 has an active connection 376 with server 32 .
- the client machine 10 and server 32 can use the active connection 376 to exchange information regarding the access to a first resource.
- the client machine 10 can store user credentials in cache memory or in persistent storage.
- the Resource Neighborhood application runs on the server 32 .
- the client machine 10 display has a Resource Neighborhood window 258 in which appears a graphical icon 257 representing a second resource.
- a user of the client machine 10 can access the second resource by double-clicking the icon 257 .
- the request to access the second resource passes to the server 32 .
- the server 32 responds (i.e., “calls back”) to the client machine 10 by returning resource-related information such as the name of the resource and capabilities needed by the client machine 10 to access the second application.
- the client machine 10 With the information provided by the server 32 , the client machine 10 then communicates with the master remote machine 30 via connection 377 to determine the server for accessing the second resource. In this example, that server is server 34 .
- the client machine 10 then establishes a connection 378 to the server 34 .
- Server 34 requests the user credentials from the client machine 10 to authenticate the user of the client machine 10 .
- the client machine 10 accesses the second resource on the server 34 , and the server 34 returns the results to the client machine 10 via the established connection 378 . Accordingly, the client machine 10 can have multiple active connections between the multiple servers.
- FIG. 3D shows one embodiment of a system of communication between the client machine 10 , a remote machine 30 that in this example acts as a web server, and a second remote machine 30 ′.
- the client machine 10 authenticates itself to the remote machine 30 as described above in connection with FIG. 2C .
- the remote machine 30 accesses an output display template 390 , such as an SGML, HTML or XML file, to use as a base for constructing the Resource Neighborhood window to transmit to the client machine 10 .
- the Resource Neighborhood window may display an enumeration of resources available to the client.
- the enumeration of resources may include an enumeration of available application programs or computing environments.
- the template may be stored in volatile or persistent memory associated with the server 30 or it may be stored in mass memory 392 , such as a disk drive or optical device, as shown in FIG. 3D .
- the template 390 is a standard SGML, HTML, or XML document containing Resource Neighborhood-specific tags that are replaced with dynamic information.
- the tags indicate to the server 30 where in the output display to insert information corresponding to available resources, such as icon images.
- the Resource Neighborhood-specific tags are embedded within comments inside a file, allowing the file to remain compatible with standard interpreters.
- the Resource Neighborhood-specific tags are extensions of the markup language used as the base for the template.
- HTML tags Examples of HTML tags that may be used in a template are set forth below in Table 1:
- ControlField field value This tag is used to set the value of data that either persists between Resource Neighborhood web pages, is set by the user, or is used to help in cross page navigation, such as user name, domain, password, template, and resource.
- DrawResourceNeighborhood This tag is used to draw a Resource Neighborhood display at this location in an output display.
- ResourceName This tag is replaced by the name of the published resource in the current context.
- WindowType This tag is replaced by the window type of the published resource in the current context.
- WindowHeight This tag is replaced by the window height of the published resource in the current context.
- WindowWidth This tag is replaced by the window width of the published resource in the current context.
- WindowScale This tag is replaced by the window scale of the published resource in the current context.
- WindowColors This tag is replaced by the color depth of the published resource in the current context.
- SoundType This tag is replaced by the sound setting of the published resource in the current context.
- VideoType This tag is replaced by the video setting of the published resource in the current context.
- EncryptionLevel This tag is replaced by the encryption level of the published resource in the current context.
- Icon This tag is replaced by the icon of the published resource in the current context.
- the template is constructed dynamically using, for example, COLD FUSION, manufactured by Allaire Corp. of Cambridge, Mass. or ACTIVE SERVER PAGES manufactured by Microsoft Corporation of Redmond, Wash.
- the template may be static.
- the Resource Neighborhood application parses the template, replacing Resource Neighborhood-specific tags as noted above. Tags that are not Resource Neighborhood-specific are left in the file to be parsed by the browser program 80 executing on the client 10 .
- a template parser object accepts an HTML template as input, interprets Resource Neighborhood-specific tags present in the template, and outputs the original template with all Resource Neighborhood tags replaced with appropriate text.
- the template parser object can be passed a cookie, a URL query string, or a control field from a web server interface to provide the information with which Resource Neighborhood-specific tags should be replaced.
- a web server receives a request from the client machine 10 for an enumeration of available computing environments.
- the web server executes an application to access data regarding the computing environments.
- a page template is retrieved from a database.
- a page is created, at the web server, describing a display of stored computing environment images available to the client machine 10 responsive to the collected information and the retrieved page template, and the created page is transmitted to the client machine 10 , indicating to the client machine 10 each computing environment available to the client machine 10 .
- computing environment images may comprise virtual machine images, resource images, screenshots of suspended virtual machines, and other images selected by a user or administrator for presentation to the user.
- an output display is created indicating each computing environment available to the client machine 10 and transmitting the created output display to the client machine 10 .
- an output display comprising a page constructed in a markup language, the output display indicating each computing environment available to the client system and transmitted to the client system.
- the Resource Neighborhood application allows scripts to access information via an application programming interface. Scripts may be written in, for example, VBScript or Jscript.
- the scripting language is used to dynamically generate an output display using information returned by the application in response to queries posed by the script. Once the output display is generated, it is transmitted to client machine 10 for display by the browser program 80 .
- a user of the client machine 10 can access a resource by clicking an icon 257 , 257 ′ displayed in the Resource Neighborhood web page.
- each icon 257 , 257 ′ is associated with an encoded URL that specifies: the location of the resource (i.e., on which remote machines it is hosted or, alternatively, the address of a master remote machine, a gateway, or other remote machine 30 ); a launch command associated with the resource; and a template identifying how the results of accessing the resource should be displayed (i.e., in a window “embedded” in the browser or in a separate window).
- the URL includes a file, or a reference to a file, that contains the information necessary for the client to create a connection to the remote machine hosting the resource.
- This file may be created by the Resource Neighborhood application dynamically.
- the client machine 10 establishes a connection (arrow 394 ) with the remote machine 30 ′ identified as hosting the requested resource and exchanges information regarding access to the desired resource.
- the connection 394 is made using the Independent Computing Architecture (ICA) protocol, manufactured by Citrix Systems, Inc. of Fort Lauderdale, Fla.
- ICA Independent Computing Architecture
- the connection is made using: the RDP protocol, manufactured by Microsoft Corp. of Redmond, Wash.; the X11 protocol; or the Virtual Network Computing (VNC) protocol, manufactured by AT&T Bell Labs.
- the client machine 10 may display the results of accessing the resource in a window separate from the web browser 280 , or it may “embed” application output within the web browser.
- FIG. 3E depicts an embodiment in which a remote machine 30 acts as an intermediary for a machine farm 38 and comprises a broker module 310 , a transmitter 312 , a receiver 314 , and a transceiver 316 .
- the broker module 310 accesses collected data regarding resources, including application programs, computing environments, and hardware resources. In some embodiments, the broker module 310 accesses collected data regarding resources and determines for each resource whether that resource image is available to a client machine 10 . In some embodiments, the server further comprises a database storing the collected data. In one of these embodiments, the broker module 310 determines for each resource whether that resource image is available to a client machine 10 based on the collected data. In other embodiments, the broker module 310 receives user credentials and determines for each resource whether that resource image is available to a client machine 10 based on the user credentials and the collected data.
- the server further comprises an output display creation engine creating output displays indicating each resource available to the client machine 10 .
- the output display creation engine creates a page describing a display of the resources available to a client system, the page created responsive to the collected information and a page template.
- the transmitter 312 transmits accessed data to the client machine 10 indicating to the client machine 10 each resource determined to be available to the client machine 10 .
- the transmitted data is displayable at the client system as icons in a graphical user interface window representing resources available to the client system.
- the transmitted data is displayable at the client system as icons in a graphical user interface window representing resources unavailable to the client system.
- the receiver 314 receives a request to access one of the available resources.
- the receiver receives user credentials from the client machine 10 .
- the receiver receives a request to access an application program available through one of the available resources, such as an available computing environment.
- a database storing the collected information and the service module determines for each resource stored by the plurality of servers whether that resource image is available to a client machine 10 based on the user credentials and the collected information. In yet other embodiments, a determination is made as to an availability of resources, such as virtual machines or application servers, providing access to the available resources.
- the transceiver 316 provides a connection between the client machine 10 and a virtual machine providing the requested resource. In some embodiments, the transceiver 316 provides a connection between the client machine 10 and a virtual machine providing the requested resource and the transceiver 316 establishes a presentation-layer protocol connection. In one of these embodiments, the transceiver 316 establishes an X11 or VNC connection. In another of these embodiments, the transceiver 316 establishes an ICA connection. In still another of these embodiments, the transceiver 316 establishes an RDP connection.
- An intermediary machine of the sort just described may be used as any one of the remote machine 30 described above in FIGS. 1-1B , 2 A- 2 B, and 3 A- 3 D.
- FIG. 4 illustrates one embodiment of program components for a client-based implementation of the Resource Neighborhood application.
- a client-based implementation of the Resource Neighborhood application 416 can be used in a network using either the server-based computing model in which the servers execute the Resource Neighborhood application or in a client-based computing model in which the client machine 10 executes the Resource Neighborhood application locally.
- the Resource Neighborhood application includes a Resource Neighborhood Service (RNSVC) component 444 , a resource database component 448 , a Resource Neighborhood Application Program Interface (RNAPI) component 452 , a Resource Neighborhood User Interface component 456 , and a local cache 460 .
- RNSVC Resource Neighborhood Service
- RNAPI Resource Neighborhood Application Program Interface
- the remote machine 30 includes the service component (RNSVC) 444 and the resource authorization cache 448 .
- the client machine 10 which is a representative example of a client machine 10 that can support a client-based implementation of the Resource Neighborhood application, includes the application program interface RNAPI 452 , the user interface user interface component 456 , and the local cache 460 components.
- the RNAPI 452 communicates with the user interface component 456 and the local cache 460 .
- the RNSVC 444 communicates with the resource authorization cache 448 and with the RNAPI 452 on the client machine 10 via communications link 462 .
- the communications link 462 can be established by, for example, using the ICA protocol, the RDP protocol, the X11 protocol, the VNC protocol, or any other suitable presentation-level protocol designed to run over industry standard transport protocols, such as TCP/IP, IPX/SPX, NetBEUI, using industry-standard network protocols, such as ISDN, frame relay, and asynchronous transfer mode (ATM) and which provides for virtual channels, which are session-oriented transmission connections that can be used by application-layer code to issue commands for exchanging data.
- the communications link 462 may also be established by protocols that support RPC or RPC-equivalents such as SOAP and HTTP.
- the communications link 462 may also be a communications link 150 as described above.
- the virtual channel commands are designed to be closely integrated with the functions of client machines.
- the ICA protocol can support the Resource Neighborhood virtual channel.
- the Resource Neighborhood virtual channel protocol can include four groups of commands:
- the resource authorization cache 448 may be a cache of the authorized user and group information for all the public (i.e., published) resources in a machine farm 38 or in a group of trusted domains. Each remote machine in a machine farm 38 can maintain its own resource-related information in persistent storage and build up the resource authorization cache 448 in volatile storage. In another embodiment, all collected resource-related information in the resource authorization cache 448 can be stored in persistent storage and made accessible to each other server in the machine farm 38 .
- the resource authorization cache 448 can be implemented in a proprietary format (e.g., as a linked list in memory) or using Novell's Directory Services (NDS) or any directory service adhering to the X.500 standard defined by the International Telecommunication Union (ITU) for distributed electronic directories.
- the resource authorization cache 448 may be implemented as a standard relational database.
- the resource authorization cache 448 includes a list of remote machines. Each remote machine in the list has an associated set of resources. Associated with each resource is resource-related information that can include the resource name, a list of remote machines, and client users that are authorized to use that resource.
- resource-related information can include the resource name, a list of remote machines, and client users that are authorized to use that resource.
- An overly-simplified example of the resource-related information maintained in the database is illustrated by the following Table 2.
- Users A and B are users of the client machines 10 , “n/a” indicates that a desired application program is hosted, but is not available to client machine users, and “-” indicates that the application program is not hosted.
- Table 2 shows: a list of servers 30 , 32 , 34 ; applications hosted by the servers (Spreadsheet, Customer Database, Word Processor, and Calculator); and those users who are authorized to use the applications.
- the server 30 hosts the Spreadsheet program, the Customer Database and the Word Processor.
- User A is authorized to use the Spreadsheet
- User B is authorized to use the Customer Database
- no users are authorized to use the Word Processor. It is to be understood that other techniques can be used to indicate who is authorized to use a particular application.
- the user information stored in the database can be used to indicate those users who are unauthorized to use a particular application rather than those who are authorized, or to indicate that multiple users may access a resource on a remote machine 30 , or to indicate that a predetermined group of users are authorized to access a particular resource.
- Table 2 depicts an embodiment in which the resources that are available are application programs, a similar technique may be used for computing environments and other resources.
- the remote machine 30 obtains the resource-related information from each other machine in the machine farm 38 regarding the resources on those remote machines, including control information that indicates which client users and remote machines are permitted to access each particular resource.
- the resource-related information maintained in the database may or may not persist across re-boots of the remote machine 30 .
- Each remote machine 30 having the Resource Neighborhood application installed thereon executes the RNSVC software 444 .
- the RNSVC software 444 operating on each remote machine 30 establishes a communication link (e.g. a named pipe) with at least one other and, in some embodiments, each other remote machine 30 .
- the remote machines 30 exchange resource-related information on the communications links.
- the RNSVC software 444 collects the resource-related information from the other remote machine 30 in the machine farm 38 through remote registry calls (e.g., the service component 444 transmits a datagram to other remote machine 30 in the farm 38 requesting the resource-related information corresponding to the resources hosted by those remote machine 30 ).
- the resource authorization cache is populated by system administrators of by programs and scripts communicating with remotes machines 30 .
- the RNSVC 444 software also maintains the relationships of groups and users to published resources in the resource authorization cache 448 and accesses the information when authenticating a client user.
- An administrator of the remote machine 30 can use a user interface to configure the RNSVC 444 .
- RNSVC software 444 includes implementing the services and functions requested by the RNAPI 452 and communicating with the RNAPI 452 on the client machine 10 using a Resource Neighborhood virtual channel driver (VCRN).
- VCRN operates according to the Resource Neighborhood virtual channel protocol described.
- the RNAPI 452 is a set of software functions or services that are used by the Resource Neighborhood application to perform various operations (e.g., open windows on a display screen, open files, and display message boxes).
- the RNAPI 452 provides a generic mechanism for accessing user interface elements (e.g., icons) produced by running the Resource Neighborhood application and objects in a legacy (i.e., predecessor or existing for some time) client user interface.
- the accessing mechanism can launch the resource on the remote machine 30 , if necessary (e.g., when the client machine 10 is unable to locally execute the application).
- the RNAPI 452 provides all published resource information to the user interface component 456 for display on the screen 12 ( FIG. 1 ) of the client machine 10 .
- the RNAPI 452 also manages machine farm 38 logons in a local database of logon credentials (e.g., passwords) for users of the client machine 10 to support the single authentication feature. Credentials may or may not be persistent across a reboot (power-off and on cycles) of the client machine 10 .
- the RNAPI 452 provides automatic and manual management for Resource Neighborhood objects stored in the local cache 460 .
- the local cache 460 can either be refreshed manually by the user of the client machine 10 , or at a user-definable refresh rate, or by the server at any time during a connection.
- the RNAPI 452 can build remote application file resource associations and manage the “Start” menu and desktop icons for resource object shortcuts.
- the user interface module 456 interfaces the RNAPI 452 and can be a functional superset of an existing client user interface (e.g., Remote Resource Manager).
- the user interface module 456 accesses the information stored in the local cache 460 through the RNAPI 452 and visually presents that information to the user on the display screen 12 ( FIG. 1 ) of the client machine 10 .
- the displayed information is a mixture of information generated by a user of the client machine 10 and information obtained by the Resource Neighborhood application.
- the user interface module 456 can also show the user all resources that the user is currently accessing and all active and disconnected sessions.
- the user interface module 456 can present a variety of graphical components, such as windows and pull-down menus, to be displayed on the display screen 12 ( FIG. 1 ).
- a display of a combination of such graphical user interface components is generally referred to as a “desktop.”
- a desktop produced by the user interface module 456 can include a Resource Neighborhood window displaying the neighborhood of resources available to the user of the client machine 10 . These resources may be a filtered combination of the published resources hosted by a machine farm 38 .
- the user interface module 456 can generate a Resource Neighborhood window for each machine farm 38 or merge the resources from different machine farms 38 under a single Resource Neighborhood window.
- the Resource Neighborhood window includes a folder for each machine farm 38 . Clicking on one of the folders produces a window containing a representation (e.g., an icon) of each hosted resource available to the user, e.g., see FIGS. 6A and 6B .
- the Resource Neighborhood window becomes the focal point for accessing published resources, and the user interface module 456 can be used to access resources and launch applications through the RNAPI 452 .
- the user of the client machine 10 can use the mouse 18 ( FIG. 1 ) to select one of the displayed icons and launch the associated resource.
- a feature of a client-based implementation is that the user can browse the objects displayed in the Resource Neighborhood window although the client machine is offline, that is, the connection 462 is inactive. Also, a user of the client machine 10 can drag application objects and folders out of the Resource Neighborhood window and into other graphical components (e.g., other windows, folders, etc.) of the desktop.
- FIG. 5 shows one embodiment of the program components for a server-based implementation of the Resource Neighborhood application.
- the components include a Service (RNSVC) component 544 ′, a Resource Database component 548 ′, an Application Program Interface (RNAPI) component 552 ′, a User Interface component 556 ′ and a local cache 560 ′.
- RNSVC Service
- RNAPI Application Program Interface
- Each software component 544 ′, 548 ′, 552 ′, 556 ′, and 560 ′ is installed on the application server 30 ′.
- the software components for the server-based implementation correspond to the software components for the client-based implementation of FIG. 4 .
- the functionality of each server-based software component is similar to the client-based counterpart, with differences or added capabilities described below.
- the RNSVC 544 ′ communicates with the resource database 548 ′ and with the RNAPI 552 ′ using local procedure calls.
- the RNAPI 552 ′ also communicates with the user interface module 556 ′ and the
- the client machine 10 logs on to the network 40 ( FIG. 1 ), the server 30 ′ develops and maintains a database containing the resource related information collected from the other machines in the machine farm 38 , and a communication link is established between the server 30 ′ and the client machine 20 .
- the application server 30 ′ may be in communication with the client machine 10 via an ICA connection 562 ′.
- the user of the client machine 10 connects to an initial desktop (at the server 30 ′) and launches the Resource Neighborhood application from within that desktop environment.
- the connection to the initial desktop can occur automatically, e.g., via a logon script of the client machine 20 , via an entry in a Startup group, or by another centrally managed server specific mechanism. All remote application management and launching is accomplished through this initial desktop.
- the server 30 ′ uses the user credentials to determine those resources that the user of the client machine 10 is authorized to use.
- a Resource Neighborhood graphical window is returned to the client machine 10 and displayed on the client screen 22 ( FIG. 1 ). This window can contain icons representing the available and, possibly, the unavailable resources that are in the Resource Neighborhood of the client machine 20 .
- the web-based Resource Neighborhood application includes a group of objects that manage various aspects of a resource.
- the Resource Neighborhood application includes three primary object classes that “plug in” to a web server: a gateway object class; a credentials object class; and a resources object class.
- the object classes are provided as JavaBeans. The three primary object classes facilitate: validation of user credentials into a server farm; generation of lists of published resources that a specified user may access; provisioning of detailed information about a specific published resource; and conversion of resource application information into a format compatible with the protocol over which connection will be made.
- the objects can be accessed in a number of different ways. For example, they may be compiled as COM objects and made available to the web server as ActiveX components.
- the JavaBeans can be used in their native form, such as when the server uses Java Server Pages technology.
- the JavaBeans can be instantiated and used directly in a Java Servlet.
- the remote machine 30 can instantiate the JavaBeans as COM objects directly.
- a credentials object class manages information necessary to authenticate a user into a target machine farm 38 .
- a credentials object passes stored user credentials to other Resource Neighborhood objects.
- the credentials object is an abstract class that cannot be instantiated and represents a user's credentials.
- class extensions may be provided to allow different authentication mechanisms to be used, including biometrics, smart cards, token-based authentication mechanisms such as challenge-response and time-based password generation, or others.
- a “clear text credentials” extension may be provided that stores a user's name, domain, and password in plain text.
- a gateway object class handles communications with a target machine farm 38 .
- the gateway object class is provided as an abstract Java class that cannot be instantiated.
- a particular gateway object may retrieve resource information by communicating with a machine farm 38 using a particular protocol, reading cached resource information, a combination of these two methods, or other various methods.
- the gateway object class may cache information to minimize communication with a target machine farm 38 .
- Extensions to the gateway object may be provided to communicate with the machine farm 38 over specific protocols, such as HTTP.
- an extension class is provided that allows the gateway object to communicate with the machine farm 38 via WINDOWS NT named pipes.
- the gateway object may provide an application programming interface hook that allows other Resource Neighborhood objects to query the object for application information.
- a resources object class contains information about published resources and returns information about resources hosted by the machine farm 38 in order to create the Resource Neighborhood web page.
- the resources object class creates objects representing resources by retrieving information relating to the resources, either from an object created by the gateway object or directly from the machines in the machine farm 38 .
- a resources object acts as a container for certain properties of the resource, some settable and some not settable, such as: the name of the resource (not settable); the width of the client window, in pixels, for this resource (settable); the height of the client window, in pixels, for this resource (settable); the number of colors to use when connecting to the resource (settable); the severity of audio bandwidth restriction (settable); the level of encryption to use when connecting to the resource (settable); the level of video to use when connecting to this resource (settable); whether the resource should be placed on a client's start menu (settable); whether the resource should be placed on the client's desktop (settable); the identity of the Resource Neighborhood folder to which the resource belongs (settable); the description of the resource (settable); the source of the graphics icon file for the resource (settable); the type of window that should be used when connecting to the resource (not settable); and whether to override default parameters for the object.
- FIG. 6A is a screenshot of one embodiment of Resource Neighborhood window 620 that can be displayed on the screen 12 , 22 ( FIG. 1 ) of a client machine 10 , 10 ′ after the Resource Neighborhood application has executed.
- the window 120 includes graphical icons 622 .
- Each icon 622 represents a resource that is hosted by one of the machines in a machine farm 38 .
- Each represented resource is available to the user of the client machine 10 .
- the user can select one of the resources using the mouse 18 , 28 or keyboard 14 , 24 .
- FIG. 6B is a screenshot of another embodiment of a Resource Neighborhood window 624 that can be displayed on the screen 12 , 22 ( FIG. 1 ) of a client machine 10 , 10 ′ after the Resource Neighborhood application has executed.
- the window 624 includes graphical icons 626 , 628 .
- Each icon 626 , 628 represents a resource that is hosted by one of the machines in a machine farm 38 .
- Each resource represented by one of the icons 626 is available to the user of the client machine 10 .
- the user can select one of the resources using the mouse 18 , 28 or keyboard 14 , 24 .
- the screenshots of FIGS. 6A and 6B are similar, except that icons 622 , 626 , 628 are displayed within a browser window.
- Each resource represented by one of the icons 628 is unavailable to the user of the client machine 10 , although such resources are present in the server farm.
- the unavailability of these resources can be noted on the display screen (e.g., “X”s can be drawn through the icons 628 ).
- An attempt to access such a resource can trigger a message indicating that the user is not authorized to access the resource.
- the attempt may invoke a method allowing the user of the client machine 10 to request access to the resource.
- the resource comprises a computing environment.
- a connection is established between the client machine 10 and a virtual machine hosting the requested computing environment.
- a presentation layer protocol is used in establishing the connection between the client system and the virtual machine.
- the X11 protocol is used in establishing the connection.
- the Remote Desktop Protocol RDP
- the Independent Computing Architecture (ICA) protocol is used in establishing the connection.
- a connection is established between the client machine 10 and a physical machine, such as a traditional workstation or server, hosting the requested computing environment. In other embodiments, a connection is established between the client machine 10 and a hardware partition hosting the requested computing environment.
- an enumeration of a plurality of resources available to the client machine 10 is provided (step 204 ) responsive to a determination by a policy engine regarding whether and how a client machine may access a resource.
- the policy engine may collect information about the client machine prior to making the determination.
- FIG. 7A one embodiment of a computer network is depicted which includes a client machine 10 , a machine farm 38 , a collection agent 704 , a policy engine 706 , a policy database 708 , and a resource server 30 ′.
- the policy engine 706 is a remote machine 30 .
- FIG. 7A Although only one client machine 10 , collection agent 704 , policy engine 706 , machine farm 38 , and resource server 30 ′ are depicted in the embodiment shown in FIG. 7A , it should be understood that the system may provide multiple ones of any or each of those components.
- the collection agent 704 communicates with the client machine 10 , retrieving information about the client machine 10 , and transmits the client machine information 712 to the policy engine 706 .
- the policy engine 706 makes an access control decision by applying a policy from the policy database 708 to the received information 712 .
- the client machine 710 transmits to the policy engine 706 a request 206 for resource enumeration.
- the policy engine 706 resides on a resource server 30 ′.
- the policy engine 706 resides on a remote machine 30 .
- a resource server 30 ′ receives the request 206 from the client machine 10 and transmits the request 206 to the policy engine 706 .
- the client machine 10 transmits a request 206 for resource enumeration to an intermediate remote machine 30 ′′′ (not shown), which transmits the request 206 to the policy engine 706 .
- the client machine 10 transmits the request 206 over a network connection such as those described above.
- the policy engine 706 initiates information gathering by the collection agent 704 .
- the collection agent 704 gathers information regarding the client machine 10 and transmits the information 712 to the policy engine 706 .
- the collection agent 704 gathers and transmits the information 712 over a network connection.
- the collection agent 704 comprises bytecode, such as an application written in the bytecode programming language JAVA.
- the collection agent 704 comprises at least one script.
- the collection agent 704 gathers information by running at least one script on the client machine 10 .
- the collection agent comprises an Active X control on the client machine 10 .
- An Active X control is a specialized Component Object Model (COM) object that implements a set of interfaces that enable it to look and act like a control.
- COM Component Object Model
- the policy engine 706 transmits the collection agent 704 to the client machine 10 .
- the policy engine 706 requires another execution of the collection agent 704 after the collection agent 704 has transmitted information 712 to the policy engine 706 .
- the policy engine 706 requires another execution of the collection agent 704 because the policy engine 706 may have insufficient information 712 to determine whether the client machine 10 satisfies a particular condition.
- the policy engine 706 requires a plurality of executions of the collection agent 704 in response to received information 712 .
- the policy engine 706 transmits instructions to the collection agent 704 determining the type of information the collection agent 704 gathers from the client machine 10 .
- a system administrator may configure the instructions transmitted to the collection agent 704 from the policy engine 706 . This provides greater control over the type of information collected. This also expands the types of access control decisions that the policy engine 706 can make, due to the greater control over the type of information collected.
- the collection agent 704 gathers information 712 including, without limitation, machine ID of the client machine 10 , operating system type, existence of a patch to an operating system, MAC addresses of installed network cards, a digital watermark on the client device, membership in an Active Directory, existence of a virus scanner, existence of a personal firewall, an HTTP header, browser type, device type, network connection information such as internet protocol address or range of addresses, machine ID of the remote machine 30 , date or time of access request including adjustments for varying time zones, and authorization credentials.
- information 712 including, without limitation, machine ID of the client machine 10 , operating system type, existence of a patch to an operating system, MAC addresses of installed network cards, a digital watermark on the client device, membership in an Active Directory, existence of a virus scanner, existence of a personal firewall, an HTTP header, browser type, device type, network connection information such as internet protocol address or range of addresses, machine ID of the remote machine 30 , date or time of access request including adjustments for varying time zones, and authorization credentials.
- the device type is a personal digital assistant. In other embodiments, the device type is a cellular telephone. In other embodiments, the device type is a laptop computer. In other embodiments, the device type is a desktop computer. In other embodiments, the device type is an Internet kiosk. In still other embodiments, the device type is a game console.
- the digital watermark includes data embedding.
- the watermark comprises a pattern of data inserted into a file to provide source information about the file.
- the watermark comprises hashed data files to provide tamper detection.
- the watermark provides copyright information about the file.
- the network connection information pertains to bandwidth capabilities. In other embodiments, the network connection information pertains to the Internet Protocol address of the client machine 10 . In still other embodiments, the network connection information consists of the Internet Protocol address of the client machine 10 . In one embodiment, the network connection information comprises a network zone identifying the logon agent to which the client machine 10 provided authentication credentials.
- the authorization credentials include a number of types of authentication information, including without limitation, user names, client names, client addresses, passwords, Personal Identification Numbers (PINs), voice samples, one-time passcodes, biometric data, digital certificates, tickets, etc. and combinations thereof.
- the policy engine 706 After receiving the gathered information 712 , the policy engine 706 makes an access control decision based on the received information 712 .
- a block diagram depicts one embodiment of a policy engine 706 , including a first component 720 , including a condition database 722 and a logon agent 724 , and a second component 730 , including a policy database 732 .
- the first component 720 applies a condition from the condition database 722 to information 712 received about client machine 10 and determines whether the received information 712 satisfies the condition.
- a condition may require that the client machine 10 execute a particular operating system to satisfy the condition. In other embodiments, a condition may require that the client machine 10 execute a particular operating system patch to satisfy the condition. In still other embodiments, a condition may require that the client machine 10 provide a MAC address for each installed network card to satisfy the condition. In some embodiments, a condition may require that the client machine 10 indicate membership in a particular Active Directory to satisfy the condition. In another embodiment, a condition may require that the client machine 10 execute a virus scanner to satisfy the condition. In other embodiments, a condition may require that the client machine 10 execute a personal firewall to satisfy the condition. In some embodiments, a condition may require that the client machine 10 comprise a particular device type to satisfy the condition. In other embodiments, a condition may require that the client machine 10 establish a particular type of network connection to satisfy the condition.
- the first component 720 stores an identifier for that condition in a data set 726 .
- the received information satisfies a condition if the information makes the condition true.
- a condition may require that a particular operating system be installed. If the client machine 10 has that operating system, the condition is true and satisfied.
- the received information satisfies a condition if the information makes the condition false.
- a condition may address whether spyware exists on the client machine 10 . If the client machine 10 does not contain spyware, the condition is false and satisfied.
- the logon agent 724 resides outside of the policy engine 706 . In other embodiments, the logon agent 724 resides on the policy engine 706 . In one embodiment, the first component 720 includes a logon agent 724 , which initiates the information gathering about client machine 10 . In some embodiments, the logon agent 724 further comprises a data store. In these embodiments, the data store includes the conditions for which the collection agent may gather information. This data store is distinct from the condition database 722 .
- the logon agent 724 initiates information gathering by executing the collection agent 704 . In other embodiments, the logon agent 724 initiates information gathering by transmitting the collection agent 704 to the client machine 10 for execution on the client machine 10 . In still other embodiments, the logon agent 724 initiates additional information gathering after receiving information 712 . In one embodiment, the logon agent 724 also receives the information 712 . In this embodiment, the logon agent 724 generates the data set 726 based upon the received information 712 . In some embodiments, the logon agent 724 generates the data set 726 by applying a condition from the database 722 to the information received from the collection agent 704 .
- the first component 720 includes a plurality of logon agents 724 .
- at least one of the plurality of logon agents 724 resides on each network domain from which a client machine 10 may transmit a resource request 710 .
- the client machine 10 transmits the resource request 710 to a particular logon agent 724 .
- the logon agent 724 transmits to the policy engine 706 the network domain from which the client machine 10 accessed the logon agent 724 .
- the network domain from which the client machine 10 accesses a logon agent 724 is referred to as the network zone of the client machine 10 .
- the condition database 722 stores the conditions that the first component 720 applies to received information.
- the policy database 732 stores the policies that the second component 730 applies to the received data set 726 .
- the condition database 722 and the policy database 732 store data in an ODBC-compliant database.
- the condition database 722 and the policy database 732 may be provided as an ORACLE database, manufactured by Oracle Corporation of Redwood Shores, Calif.
- the condition database 722 and the policy database 732 can be a Microsoft ACCESS database or a Microsoft SQL Server database, manufactured by Microsoft Corporation of Redmond, Wash.
- the first component 720 After the first component 720 applies the received information to each condition in the condition database 722 , the first component transmits the data set 726 to second component 730 . In one embodiment, the first component 720 transmits only the data set 726 to the second component 730 . Therefore, in this embodiment, the second component 730 does not receive information 712 , only identifiers for satisfied conditions. The second component 730 receives the data set 726 and makes an access control decision by applying a policy from the policy database 732 based upon the conditions identified within data set 726 .
- policy database 732 stores the policies applied to the received information 712 .
- the policies stored in the policy database 732 are specified at least in part by the system administrator.
- a user specifies at least some of the policies stored in the policy database 732 .
- the user-specified policy or policies are stored as preferences.
- the policy database 732 can be stored in volatile or non-volatile memory or, for example, distributed through multiple servers.
- an access control decision based upon information received about a client machine 10 is made.
- the policy engine 706 Upon receiving gathered information about the client machine 10 , the policy engine 706 generates a data set based upon the information.
- the data set contains identifiers for each condition satisfied by the received information 712 .
- the policy engine 706 applies a policy to each identified condition within the data set 726 . That application yields an enumeration of resources which the client machine 10 may access.
- the enumeration of resources includes an enumeration of levels of access to the resource.
- a plurality of allowable actions associated with the resource is enumerated.
- a plurality of methods of execution of the resource is enumerated.
- the policy engine 706 then presents that enumeration to the client machine 10 .
- the policy engine 706 creates a Hypertext Markup Language (HTML) document used to present the enumeration to the client machine.
- HTML Hypertext Markup Language
- the policy engine 706 transmits the enumeration to a different remote machine 30 .
- the remote machine 30 transmits the enumeration to the client machine 10 .
- the remote machine 30 applies additional policies to the enumeration.
- the remote machine is an appliance such as an application gateway or a firewall.
- the policy engine 706 transmits an assigned level of action applicable to a requested resource to a remote machine 30 functioning as a broker server. The broker server establishes, responsive to the assigned level of access, a connection between the client machine 10 and a computing environment providing the requested resource.
- a flow diagram depicts one embodiment of the steps taken to provide access to a resource.
- a request for access to a resource is received (step 802 ).
- a method for providing access to the resource is identified (step 804 ).
- An application execution server may be selected to provide access to the resource (step 806 ).
- a virtualized environment may be selected to provide access to a resource (step 808 ).
- An application streaming service may be selected to provide access to the resource (step 816 ). If the virtualized environment is selected to provide access to the resource, an execution machine is identified (step 810 ).
- a virtual machine is selected (step 812 ). The virtual machine is configured (step 814 ). Access to the resource is provided (step 818 ).
- a request for access to a resource is received (step 802 ).
- a remote machine 30 receives the request.
- the remote machine 30 is an intermediate broker server.
- the remote machine 30 is a gateway.
- the remote machine 30 is a policy engine.
- the remote machine 30 is an appliance.
- the remote machine 30 verifies that the user is authorized to access the resource. In still another embodiment, the remote machine 30 receives with the request information verifying authorization for access by the user.
- the remote machine 30 receives a request for an application program. In another embodiment, the remote machine 30 receives a request for access to a file. In yet other embodiments, the remote machine 30 receives a request for access to a computing environment. In one of these embodiments, the computing environment is a desktop environment from which the client machine 10 may execute application programs. In another of these embodiments, the computing environment provides access to one or more application programs. In some embodiments, the remote machine 30 receives a request for access to a computing environment supported by a plurality of hardware requirements. In some embodiments, a remote machine 30 functioning as deployment system receives a request for access to a resource, such as execution of an application program, from a client machine 10 .
- a method for providing access to the resource is identified (step 804 ).
- a remote machine 30 consults a database to identify the method for providing access.
- a remote machine 30 consults a policy or rules database to identify the method for providing access.
- a remote machine 30 receives from a policy engine an identification of a method to select.
- a policy may allow execution of the application program on the client machine 10 .
- a policy may enable the client machine 10 to receive a stream of files comprising the application program.
- the stream of files may be stored and executed in an isolation environment on the client.
- a policy may allow execution of the application program only on a remote machine, such as an application server, and require the remote machine to transmit application-output data to the client machine 10 .
- a policy may allow execution of the application program only in a computing environment hosted on a virtual machine. In either of these cases, a stream of files comprising the application programs may be sent to the remote machine.
- a policy may allow installation of the computing environment on the client machine 10 .
- a policy may enable the client machine 10 to access a copy of the computing environment executing in a virtual machine on a remote machine 30 .
- a policy may forbid the user of the client machine 10 to access the requested computing environment and offer an alternative computing environment.
- a policy may enable the client machine 10 to access a copy of the computing environment executing in a virtual machine, which in turn executes on a hypervisor providing access to the requested plurality of hardware resources.
- a policy may forbid the user of the client machine 10 to access the requested computing environment and offer a computing environment supported by an alternative plurality of hardware resources.
- the remote machine 30 may choose to provide access to an application execution server which provides access to a requested application program (step 806 ).
- the application execution server executes the application program and transmits application output data to the client machine 10 .
- the application execution server may transmit the application output data over a presentation layer protocol, such as X11, VNC, ICA, or RDP.
- the remote machine 30 may choose to provide access to an application streaming service capable of transmitting a requested application program to the client machine 10 (step 816 ) for execution.
- an application streaming service capable of transmitting a requested application program to the client machine 10 (step 816 ) for execution.
- Embodiments of application streaming services are described in greater detail below.
- the remote machine 30 may choose to respond to the client's request by allowing access to a computing environment provided by a virtual machine, the computing environment providing access to the requested resource (step 808 ).
- the computing environment may be provided by a virtual machine launched into a hypervisor executing on a remote machine 30 ′.
- the remote machine 30 determines to provision on the client machine 10 a virtual machine providing access to the computing environment.
- a remote machine 30 determines to provide access to the requested resource via a virtualized environment
- the remote machine 30 identifies an execution machine providing access to a computing environment requested by the client machine 10 (step 810 ).
- the remote machine 30 identifies an execution machine capable of hosting the computing environment.
- the remote machine 30 determines that the user requesting access to the computing environment lacks authorization to access the requested computing environment.
- the remote machine 30 may identify an alternative computing environment which the user is authorized to access.
- the remote machine 30 identifies an execution machine on which a hypervisor provides access to a requested plurality of hardware and in which the requested computing environment may execute.
- the remote machine 30 is an execution machine capable of hosting the computing environment.
- the computing environment is installed on the execution machine.
- a hypervisor on the execution machine emulates a plurality of hardware resources required by the requested computing environment and the computing environment is launched in the hypervisor.
- the remote machine 30 identifies a remote machine 30 ′ functioning as an execution machine capable of providing access to the computing environment supported by a requested plurality of hardware resources.
- the remote machine 30 ′ functions as an execution machine on which a hypervisor emulating the requested plurality of hardware resources executes and on which a computing environment supported by the hypervisor executes.
- an execution machine providing hardware resources, physical or virtual, capable of supporting a particular virtual machine is identified responsive to a load-balancing determination.
- the execution machine is selected responsive to load-balancing information maintained by a management server 30 .
- the management server 30 is a single machine.
- several remote machines 30 may be capable of acting as a management server, but only one of such nodes is designated the management server.
- a client request is directed to the management server 30 in the first instance.
- a remote machine 30 queries the management server 30 to determine the identity of a suitable execution machine.
- the master network information server node 30 maintains a table of addresses for the remote machines 30 ′, 30 ′′.
- the master network information server node 30 receives messages from the remote machines 30 ′, 30 ′′ indicating their level of activity, which may comprise CPU load or may comprise an identification of the number of a virtual machines currently hosted by a remote machine 30 ′, 30 ′′.
- the level of activity of the remote machines 30 ′, 30 ′′ is maintained in a table along with the address of each of the remote machines 30 ′, 30 ′′.
- a management server 30 in which a single management server 30 is used, it is desirable to dynamically select a master network information server node 30 from the available remote machines 30 on the network. In this way, if the active management server 30 fails, a new management server 30 may be selected as soon as the failure of the previous management server 30 is detected. In one embodiment a management server 30 is selected by an election process among the remote machines 30 .
- any machine may force an election at any time by broadcasting a request election datagram to the machine farm 38 .
- the election results are determined by a comparison of the set of election criteria which is transmitted within the request election datagram transmitted by the requesting node with the set of election criteria maintained on each receiving node. That is, the first election criterion from the datagram of the requesting node is compared by the receiving node to the first criterion of the receiving node. The highest ranking of the two criteria being compared wins the comparison and the node with that criterion wins the election. If the two criteria tie, then the next criteria are sequentially compared until the tie is broken.
- a remote machine 30 receiving the request election datagram has a higher election criterion than that received in the request election datagram, the remote machine 30 receiving the request election datagram issues its own request election datagram. If the receiving remote machine 30 has a lower election criteria than the criteria received in the request election datagram, the receiving remote machine 30 determines it is not the master network information server node and attempts to determine which remote machine 30 in the machine farm 38 is the management server 30 .
- the criteria which determine the outcome of the election include: whether or not the node is statically configured as a master network information server node; whether the remote machine 30 has the higher master network information server software version number; whether the remote machine 30 is an NT domain controller; whether the remote machine 30 is the longest running node; and whether the remote machine 30 has a lexically lower network name.
- the datagram structure for the election request includes an unsigned shortword for the server version number, an unsigned shortword in which the bits are flags which designate whether the node is statically configured as a master network information server node, or is executing on a NT domain controller and an unsigned longword containing the amount of time the server has been running.
- the management server 30 transmits a declare message to the other remote machines 30 declaring itself to be the management server 30 . If another remote machine 30 believes itself to be a management server 30 , the other remote machine 30 will request an election. In this way erroneous master network information server nodes 30 of the same protocol are detected and removed. In addition an election will also be requested: by any remote machine 30 when that remote machine 30 reboots; by any remote machine 30 to whom the master network information server node has failed to acknowledge an update message; or any client machine 10 to whom the master network information server node 30 has failed to respond to a request for information.
- any remote machine 30 (which may be referred to as a node) broadcasts a request election datagram requesting an election (Step 920 )
- the remote machine 30 receiving the request election datagram (Step 924 ) first compares its election criteria to the criteria in the request election datagram (Step 930 ) to determine if the receiving remote machine 30 has higher criteria (Step 934 ). If the remote machine 30 receiving the datagram has lower election criteria (Step 938 ) than the criteria contained in the request election datagram, the remote machine 30 receiving the request election datagram drops out of the election process and awaits the results of the election (Step 938 ).
- the remote machine 30 receiving the request election datagram broadcasts its own request election datagram containing the remote machine's own election criteria (Step 940 ). If in response to the transmission of the request election datagram by the second remote machine 30 , another remote machine 30 ′ responds with a request election datagram with even higher election criteria, then the second remote machine 30 drops out of the election and the remote machine 30 ′ with higher criteria broadcasts it's own request election datagram.
- Step 956 the remote machine 30 which has sent the n election requests is the new management server 30 .
- the new management server 30 After the election has occurred and the new management server 30 has been determined, all the remote machines 30 send all of their configured gateway addresses to the new network information server node 30 . In this way the new management server 30 becomes a gateway node.
- the remote machines 30 send update datagrams to the master network information server 30 providing information about each remote machine 30 transmitting the update datagram.
- the update datagram sent to the master network information server node 30 from a remote machine 30 includes: the remote machine 30 name; the network address; the cluster name; the network transport protocol; the total number of remote machines 30 configured with this transport; the number of ports available for connection with a client using this transport protocol; the total number of users permitted to be active at one time; number of available user slots; and server load level.
- the master network information server node 30 Upon receipt of the update datagram, the master network information server node 30 returns an acknowledgment to the remote machines 30 that transmitted the update datagram indicating that the update datagram was received. If the remote machine 30 transmitting the update datagram does not receive an acknowledgment from the master network information server node 30 , the transmitting remote machine 30 assumes that the master network information server node 30 has failed and transmits an election request.
- a remote machine 30 after the election of a management server 30 , waits a random period of time and then sends a datagram to the management server 30 with its latest load information (Step 1000 ). In one embodiment the delay is between four and six seconds. If the management server 30 receives (Step 1008 ) an update datagram from a remote machine 30 , then the master network information server node 30 replies to the transmitting remote machine 30 with an acknowledgment (Step 1010 ) and forwards the data to any remote machine 30 configured as a gateway node. If the master network information server 30 fails to receive data from a remote machine 30 (Step 1008 ), then the master network information server 30 discards the old data from the remote machine 30 after a predetermined amount of time (Step 1020 ).
- Step 1028 the remote machine 30 retransmits the update datagram.
- the remote machine 30 will attempt n retransmits (in one embodiment three) before it assumes that the master network information server 30 has failed and then transmits an election request (Step 1030 ). If the remote machine 30 receives an acknowledgment, then it periodically updates the master network information server node 30 , in one embodiment every 5 to 60 minutes (Step 1040 ).
- FIG. 11 is a block diagram depicting one embodiment of a machine farm 38 including a first and second network management processes.
- the first network management process 1110 executes in a native operating system 1105 (such as WINDOWS NT) and accesses a native memory element storing (i) a data table and (ii) at least one election criteria for allowing the first network management process 1110 to be dynamically selected as a management process, the data table having an entry for each of said at least two network management processes.
- a native operating system 1105 such as WINDOWS NT
- the second network management process 1120 executes in a virtualized operating system 1115 and accesses a virtualized memory element storing (i) a data table and (ii) at least one election criteria for allowing the second network management process 1 120 to be dynamically selected as the management process, the data table having an entry for each of said at least two network management processes.
- the client machine 10 communicates with the one of the first network management process 1110 and the second network management process 1120 selected as the management process and receives from the management process an address of a remote machine 30 with which to communicate.
- a plurality of client machines 10 is in communication with a master network information process.
- the first network management process 1110 executes in a native operating system 1105 .
- the second network management process 1120 executes in a virtualized operating system 1115 .
- the at least two network management processes are grouped into clusters.
- one of the at least two network processes is a gateway process.
- the gateway process is a master network management process.
- the master network management process is selected by a process comprising the steps of (a) broadcasting an election datagram to the at least two network management processes, the election datagram comprising election criteria; and (b) selecting a master network management process in response to the election criteria.
- the master network management process broadcasts a declare datagram to detect multiple master network management processes using the same transport protocol.
- the master network management process is selected by a process that occurs after an event selected from the group of events consisting of: a system reboot, a master network management process failing to respond to a datagram sent from a network management process, a master network management process failing to respond to a request from a client machine, detection of at least two master network management processes configured with the same transport, and a new network management process appearing on said network.
- the management process is elected as described above in connection with FIGS. 9 and 10 .
- the network includes a third network management process using a different network transport protocol from the first network management process.
- the third network management process comprises a master network management process for the different network transport protocol.
- each remote machine 30 may include a load management subsystem (LMS) providing a load management capability.
- LMS load management subsystem
- the LMS manages overall server and network load to minimize response time to client requests.
- an apparatus for selecting a server from a network plurality of servers to service a client request comprises a plurality of network management processes.
- each of said plurality of network management processes includes an event bus and a subsystem in communication with the event bus.
- a first one of the plurality of network management processes receives from a client machine a request for access to a computing resource and sends the client request to a second one of the plurality of network management processes.
- the second one of the plurality of network management processes executes in a virtualized operating system and comprises a dynamic store and a load management subsystem.
- the dynamic store loads information associated with at least some of the plurality of network management processes in a virtualized memory element.
- the dynamic store contains information relating to server processor load.
- the dynamic store contains information relating to server input/output transaction load.
- the load management subsystem (i) receives, via said event bus, a request to identify a server for servicing a client request, (ii) retrieves from said dynamic store the loading information, (iii) chooses, based on the retrieved loading information, one of the plurality of servers for servicing the client request, and (iv) transmits, via said event bus, a message including information identifying the chosen server.
- the load management subsystem stores run-time information in the dynamic store at predetermined intervals.
- the apparatus further includes a persistent store, the load management subsystem in communication with the persistent store via the event bus, the persistent store containing an identification of at least one rule to be used to manage server load.
- the LMS is rule-based, and an administration tool can be used to modify or create rules for managing server load.
- a rule is one or more criteria that influences how a LMS will direct requests.
- Rules may be individualized to a specific remote machine 30 .
- Rules can also be individualized to a specific application or computing environment on a per-server basis. That is, one or more rules may be associated with a copy of an application or a computing environment residing on a first remote machine 30 in the machine farm 38 and different rules may be associated with a copy of the same application or computing environment residing on a second remote machine 30 in a machine farm 38 .
- the output of rules individualized to a specific application may be combined with the output of general server rules to direct a client request.
- Operational meters may measure any aspect of server performance and the result is used by rules to help determine which remote machine 30 is most appropriate to service a client request. For example, operational meters may measure: processor load; context switches; memory usage; page faults; page swaps; transmission rate of input/output reads or writes; number of input/output operations performed or number of virtual machines hosted.
- operational meters are used by a LMS to measure server performance during the occurrence of certain events such as a request for a client connection.
- operational meters are used by a LMS to measure server performance at predetermined intervals, which may be configured by an administrator.
- a LMS on each remote machine 30 in the machine farm 38 evaluates various performance metrics for the remote machine 30 for each predetermined period of time and stores that information in the dynamic store. For example, every thirty seconds, an evaluation of server load may include a query to operational meters for server's CPU utilization and memory utilization. The results from the query will be used, in conjunction with other applicable load factors, to calculate a load number for this server load. The new load number is then sent to the dynamic store.
- Rules and operational meters are, in one embodiment, executable code modules that query specific system conditions, resources, and performance metrics for remote machines 30 in the machine farm 38 .
- Some of the rules accept user-configurable parameters that are entered by the administrator via the administration tool.
- Rules may be provided to the LMS using a dynamic link library (“DLL”), and the rules and rule parameters applicable to a specific server may be stored in the persistent store. That is, the administrator's selection of rules is stored, together with a weighting factor and applicable settings associated with those rules, in the persistent store.
- DLL dynamic link library
- some operational meters may measure load at a predetermined interval; the predetermined interval may be set by the administrator.
- conditional rules that may be used by the LMS to determine to which remote machine 30 to direct a request include: whether the number of client machines 10 that may connect to a remote machine 30 is limited; whether the number of client sessions that may be serviced by a remote machine 30 is limited; whether the number of virtual machines that may be hosted by a remote machine 30 is limited; the number of application or connection licenses available to a remote machine 30 ; whether the application requested by the client machine 10 is currently executing on the remote machine 30 ; whether a client is physically proximate to, or is connected by a high bandwidth link to, a server; and whether a client request is being made during a time period for which the remote machine 30 is available to service client requests.
- a set of rules may be grouped together by the group subsystem 300 to form a load evaluator associated with a particular server or a particular application.
- a server load evaluator is a load evaluator that applies to all applications published on the server.
- An application load evaluator is a load evaluator that encapsulates rules specific to certain applications.
- loads for published application programs are the sum of a server load evaluator and an application load evaluator.
- the load evaluator associated with a particular server may be stored in the persistent store 230 . When a LMS initializes, it queries persistent store 230 to determine whether a load evaluator is associated with the remote machine 30 on which the LMS resides.
- each rule encapsulated in a load evaluator may have a configurable weighting factor.
- Many rules have user-configurable parameters that control the way LMS loads are calculated. For example, in one embodiment, a CPU Utilization rule has two parameters: Report Full Load when processor utilization is greater than X-percent; report no load when processor utilization is less than X percent.
- the load reported by a load evaluator equals the sum of each rule's load times each rule's weight.
- a remote machine 30 that hosts four applications may have three load evaluators with which it is associated.
- the server itself and a first application may by associated with a first load evaluator
- the second and third applications may be associated with a second load evaluator
- the fourth application may be associated with a third load evaluator.
- the remote machine 30 When the remote machine 30 boots, it read the first, second, and third load evaluators from the persistent store 230 . Periodically (or perhaps after certain events) the remote machine 30 calculates the output for each of the load evaluators and sends those values to the dynamic store. When a connection request is received, those values are used to determine if the remote machine 30 should service a client request.
- the LMS can obtain information about the processor load on a particular remote machine 30 , the memory load on that remote machine 30 , and the network load of that remote machine 30 .
- the LMS combines these results to obtain an overall load number that indicates the total aggregate load on that remote machine 30 .
- the load evaluator may weight each piece of information differently.
- the rule may disqualify a remote machine 30 from servicing a client request.
- a rule may limit the number of client sessions a remote machine 30 may initiate.
- a remote machine 30 if a remote machine 30 is currently servicing the maximum number of client sessions allowed by the rule, it will not be chosen by the LMS to service a new client request, even if the outputs of its operational meters indicate that it is the most favorable remote machine 30 to which to route the client request.
- a virtual machine providing a requested computing environment is identified (step 812 ).
- declarative policies such as rules databases, policy databases or scripts are consulted to direct requests to a virtual machine.
- a remote machine 30 functioning as an application server hosting a plurality of virtual machines is identified.
- one of the plurality of virtual machines hosted by the application server may be selected and associated with the client machine 10 .
- an identifier for the selected virtual machine may be transmitted to the client machine 10 .
- a session management component identifies the virtual machine.
- an intermediate machine 30 receiving the request invokes a session management component.
- the intermediate machine launches the session management component in a terminal services session executing on the intermediate machine.
- the intermediate machine launches the session management component in a terminal services session executing on the identified execution machine.
- the session management component provides functionality for identifying a location of a virtual machine providing access to a computing environment.
- the session management component is provided as a program module published on a server, such as an application server.
- the session management component identifies, launches, and monitors virtual machines.
- the session management component communicates with a virtual machine management component to identify a virtual machine.
- the virtual machine management component provides functionality for locating virtual machines.
- the virtual machine management component provides functionality for allocating an available virtual machine to a user from a plurality of available virtual machines.
- the virtual machine management component provides functionality for reallocating shared virtual machines to the plurality of available virtual machines.
- the virtual machine management component provides functionality for tracking a state associated with a virtual machine for each virtual machine in a plurality of virtual machines.
- a block diagram depicts one embodiment of a virtual machine management component 1200 .
- the virtual machine management component 1200 provides functionality for accessing and updating a database including a virtual machine catalog.
- the virtual machine management component 1200 provides functionality for allowing an administrator or virtual machine provisioning system to add, remove, or modify entries in the database including a virtual machine catalog.
- the virtual machine management component 1200 includes a virtual machine providing administrative functionality.
- the virtual machine component 1200 includes a virtual machine providing management functionality.
- the virtual machine management component 1200 may receive a request from a provisioning system or from a session management component.
- a provisioning system contacts the virtual machine management component 1200 when a virtual machine is created or destroyed.
- the session management component contacts the virtual machine management component 1200 when the session management component is invoked to request a virtual machine to launch.
- the session management component contacts the virtual machine management component 1200 when the session management component identifies a change in a state of a launched virtual machine.
- the session management component may send messages, such as heartbeat messages, to the virtual machine management component 1200 while a virtual machine is active. If the virtual machine may be accessed by more than one user, the virtual machine management component 1200 may reassign the virtual machine to the plurality of available virtual machines after a user has terminated a session with the virtual machine.
- virtual machines of the same machine type may be categorized into a plurality of standard operating environments (SOE).
- SOE may be a group of virtual machine images of a particular configuration that implement the function of a particular Machine Type, e.g. a machine type “C++ Developer Workstation” may have one SOE containing images with WinXP Pro SP2 with Visual Studio 2003 installed and another SOE containing images with Win Vista with Visual Studio 2005 installed.
- the virtual machine management component 1200 may provide functionality for one or more of the following actions related to a standard operating environment (an SOE): creating an SOE, updating an SOE, deleting an SOE, finding an SOE, and retrieving an SOE.
- the virtual machine management component 1200 may provide functionality for one or more of the following actions related to virtual machines: create a virtual machine, update a virtual machine, delete a virtual machine, find a virtual machine, and assignment to or removal from a standard operating environment.
- a machine type may refer to a non-technical description of a computing environment provided by a virtual machine. Some examples of machine types are “C++ Developer Workstation” or “Secretarial Workstation.” Many virtual machines may be grouped in a single machine type.
- the virtual machine management component 1200 may provide functionality for one or more of the following actions related to machine types: creating machine types, updating a machine type, deleting a machine type, finding a machine type, and retrieving a machine type.
- the virtual machine management component 1200 may provide functionality for creating virtual machines.
- an administrator or provisioning service creates a new machine type in a database of virtual machines.
- the machine type is given a meaningful name such as “HR Manager Workstation.”
- the machine type name is the name for a class of standard operating environment (SOE) rather than a specific SOE, and multiple SOEs may be assigned to the machine type name.
- SOE standard operating environment
- the machine type may be used to publish the class of virtual machines.
- a standard operating environment is created for the machine type and assigned to the machine type in the database of virtual machines.
- the SOE is a virtual machine with a specific hardware and software configuration.
- a snapshot of the SOE virtual machine may be taken and used as a template for virtual machine clones.
- clones of the SOE virtual machine are assigned to users.
- an administrator clones an SOE for use by users by creating linked clones of the snapshot of the SOE virtual machine.
- the linked clone virtual machines may be created in consecutively numbered subfolders in the SOE folder.
- the linked clones of the SOE may be assigned to the SOE in the database of virtual machines.
- an administrator updates a machine type by creating a new SOE, and new linked clones of the SOE.
- the administrator updates an SOE pointer within a machine type record in the database of virtual machines to point to the new SOE, and marks the old SOE as being superseded.
- the administrator may create the new SOE by creating a new virtual machine and installing the software, or by creating a full clone of an existing SOE and updating it.
- the administrator could create a new virtual machine and install Microsoft Windows XP Professional, followed by Windows XP SP1, followed by Microsoft Office 2003, or the administrator could have taken a full clone of an existing SOE with Windows XP and Microsoft Office 2003 already installed, and installs Windows XP SP1 to achieve the same SOE.
- the new SOE may be created in a new SOE folder and a new SOE record is created in the database of virtual machines.
- Linked clones of the superseded SOE can be deleted when users have finished with them and the superseded SOE can be deleted when all linked clones have been deleted.
- a virtual machine may be designated as a shared virtual machine.
- a shared virtual machine is an instance of a virtual machine image that is designated for use by multiple users.
- the shared virtual machine is used by one user at a time and returned to a pool of available virtual machines when not in use.
- users may change the image but may not persist any changes to the image once it is shutdown. In this embodiment, all changes are discarded when the image is shutdown or a user terminates a session.
- a virtual machine may be designated as a private virtual machine.
- a private virtual machine is an instance of a virtual machine image that is designated for use by a specific user. Only that user may be allocated to the image, launch the image, or execute the image.
- private images will be configured to permit changes to be persisted when the image is shutdown.
- changes may be configured to be discarded upon image shutdown as per shared images, depending on the requirements of the user.
- a session management component is launched and identifies a virtual machine.
- the session management component transmits an identification of a user and a virtual machine type identified responsive to a request for access to a resource to the virtual machine management component 1200 .
- the session management component requests an identification of a specific virtual machine to launch.
- the session management component requests an identification of a location of the configuration and virtual disk files of the identified virtual machine.
- a virtual machine is identified responsive to the received identification of the user of the requesting machine. In other embodiments, a virtual machine is identified responsive to a request by the user for a type of virtual machine. In still other embodiments, a virtual machine is identified responsive to a request by the user for a type of computing environment.
- the virtual machine management component 1200 transmits to the session management component an identification of a specific virtual machine to launch. In one of these embodiments, the session management component then proceeds to launch the virtual machine. In another of these embodiments, the virtual machine management component launches the virtual machine.
- the virtual machine management component transmits to the session management component an identification of a plurality of virtual machines to launch.
- the session management component may present an enumeration of available virtual machines to a user.
- the session management component receives a selection of a virtual machine from the enumeration of available virtual machines and the session management component launches the selected virtual machine.
- the virtual machine management component transmits to the session management component an indication that no virtual machines are available for the user requesting the access.
- the virtual machine management component 1200 transmits to the session management component an indication that an existing, executing virtual machine has now been allocated to the user.
- the virtual machine management component transmits to the session management component an identification of an available virtual machine responsive to accessing a database storing information associated with a plurality of virtual machines, the information including, but not limited to, an identification of the plurality of virtual machines, an identification of a location of files associated with the plurality of virtual machines, an identification of an access control list associated with the plurality of virtual machines, and an indication of availability of the plurality of virtual machines.
- the virtual machine management component 1200 modifies an access control list associated with the virtual machine responsive to the identification of the user received from the session management component in the initial request.
- the virtual machine management component 1200 modifies the access control list to allow the virtual machine to be launched for the user.
- the virtual machine management component 1200 transmits additional information associated with the virtual machine to the session management component.
- the additional information may include network share details relating to a folder storing files associated with the virtual machine.
- the session management component uses the additional information to map the folder to a mount point, such as a drive letter, in the virtual machine.
- virtual machine images configuration and data files comprising the virtual machine—are stored on a storage area network.
- virtual machine images are stored in network attached storage.
- a file server in communication with the storage area network makes the virtual machine images accessible as if they were located on network attached storage.
- an identified virtual machine is configured (step 814 ).
- an execution machine identified by the intermediate machine executes a hypervisor emulating hardware resources required by the requested computing environment.
- a session management component launches a configured virtual machine in the hypervisor. Configuration occurs of the virtual machine for a particular client machine 10 .
- a connection is established between the client machine and the virtual machine.
- FIG. 13 a block diagram depicts one embodiment of a session management component 1300 in a system providing access to a computing environment by an intermediate machine to a requesting machine.
- the session management component 1300 includes an identification component 1302 , an execution component 1304 , and a management component 1306 .
- the identification component 1302 is in communication with a virtual machine management component and receives an identification of a virtual machine providing a requested computing environment. In some embodiments, the identification component 1302 is in communication with the virtual machine management component 1200 . In one embodiment, the identification component 1302 receives an identification of an execution machine 30 ′ into which to launch the virtual machine. In some embodiments, the identification component 1302 identifies an execution machine on which a required hypervisor executes and into which to launch the virtual machine. In other embodiments, the identification component 1302 receives an identification of the execution machine. In one of these embodiments, the identification component 1302 receives the identification from the intermediate machine 30 .
- the identification component 1302 further comprises a transceiver.
- the transceiver in the identification component 1302 receives an identification of a user of the requesting machine and transmits the identification of the user to the virtual machine management component.
- the transceiver receives an identification by a user of a type of computing environment requested and transmits the identification to the virtual machine management component 1200 .
- the transceiver receives an identification by a user of a type of virtual machine requested and transmits the identification of the type of virtual machine requested to the virtual machine management component 1200 .
- the identification component 1302 receives an identification of a virtual machine providing a requested computing environment, the virtual machine selected responsive to a received identification of a user of the requesting machine. In other embodiments, the identification component 1302 receives an identification of a virtual machine providing a requested computing environment, the virtual machine selected responsive to a received identification of a type of computing environment requested. In other embodiments, the identification component 1302 receives an identification of a virtual machine providing a requested computing environment, the virtual machine selected responsive to a received identification of a type of virtual machine requested.
- the execution component 1304 launches the virtual machine into a hypervisor.
- the hypervisor executes on an execution machine 30 ′.
- the execution component 1304 is in communication with the identification component.
- the execution component 1304 receives from the identification component 1302 an identification of an execution machine 30 ′ executing a hypervisor into which to launches the virtual machine.
- the execution component 1304 launches the virtual machine into a hypervisor emulating hardware resources required to support the computing environment.
- a virtual machine service component executes in the hypervisor.
- a virtual machine service component executes in a guest operating system provided by a virtual machine executing in the hypervisor.
- the virtual machine service component is in communication with the session management component 1300 and receives configuration information associated with the client machine 10 .
- the management component 1306 establishes a connection between the requesting machine and the virtual machine and manages the connection.
- the management component 1306 provides an internet protocol address associated with the virtual machine to the user of the requesting machine.
- the management component 1306 provides an internet protocol address associated with an execution machine to the user of the requesting machine.
- the management component 1306 provides a proxy for communication between the requesting machine and the virtual machine.
- the management component 1306 establishes a connection between the requesting machine and the virtual machine using a presentation layer protocol.
- identification component 1302 the execution components 1304 and the management component 1306 may be provided as a single functional unit or the functions provided by those components may be grouped into two or more components.
- the session management component 1300 establishes and manages a user's virtual machine session.
- the session management component 1300 provides functionality for, without limitation, locating a virtual machine, launching a hypervisor, launching a virtual machine in the hypervisor, connecting a user to the virtual machine, and managing the established connection.
- the session management component 1300 publishes a plurality of available virtual machines.
- the session management component 1300 provides, without limitation, enumeration into client drives, mapping of client drives to shared folders on the virtual machine, monitoring of the hypervisor, monitoring of an operating system provided by the virtual machine, and a virtual machine control panel to the user.
- the session management component 1300 provides a virtual machine control panel to the user.
- the virtual machine control panel may enable a user to switch to the virtual machine, power off the virtual machine, reset the virtual machine, or suspend the virtual machine.
- the session management component 1300 provides the virtual machine control panel only to users authorized to access the functionality of the virtual machine control panel.
- a virtual machine service component executes in the hypervisor.
- the virtual machine service component is in communication with the session management component 1300 and receives configuration information associated with the client machine 10 .
- the session management component 1300 creates a connection to the virtual machine service component, such as a TCP/IP connection, and communicates with the virtual machine service component over the created connection.
- the session management component 1300 transmits information associated with the client machine 10 , such as initialization parameters or client monitor geometry, to the virtual machine service component.
- the session management component 1300 identifies a folder containing an image of the identified virtual machine.
- the folder contains configuration and data files comprising the virtual machine.
- the session management component 1300 mounts the folder in the execution machine prior to launching the virtual machine.
- the session management component 1300 copies definition data files associated with the virtual machine onto the execution machine.
- the session management component 1300 may copy the definition data files back into the identified folder when a session is completed.
- the configuration and data files are streamed to the execution machine, as described below.
- the session management component 1300 enumerates in the virtual machine a plurality of drives associated with the client machine 10 .
- the session management component 1300 creates a folder associated with each drive in the plurality of drives.
- the session management component 1300 stores a folder associated with a drive in the plurality of drives in the mounted folder containing the identified virtual machine.
- an enumeration of the stored folder associated with the drive is provided to a user of the client machine 10 .
- a protocol stack located in the hypervisor or in the guest operating system enables drive mapping through other techniques, including techniques enabled by presentation layer protocols.
- FIG. 14 a block diagram depicts one embodiment of a system in which a drive associated with the client machine 10 is made available to a computing environment.
- the client machine 10 has a connection ( 1 ) to an execution machine and a connection ( 2 ) to a plurality of drives available to a user of the client machine 10 .
- the session management component 1300 creates a folder associated with each drive in the plurality of drives ( 3 ). In one embodiment, the session management component 1300 stores the created folder associated with a drive in the plurality of drives in a virtual machine folder 1002 , the mounted folder containing configuration and data files associated with the identified virtual machine. In another embodiment, the session management component 1300 generates a list of shared folders stored in the virtual machine folder 1002 .
- the session management component 1300 notifies the virtual machine service component of the change to the virtual machine folder 1002 ( 4 ). In some embodiments, the session management component 1300 responds to changes in the client device by rebuilding a shared folder list in the virtual machine folder 1002 . In one of these embodiments, the session management component 1300 receives an identification of a modification to the drive associated with the client machine 10 . In another of these embodiments, the session management component 1300 transmits a notification to the virtual machine service component identifying the change to the virtual machine 1002 .
- the virtual machine service component For each folder associated with a drive in the virtual machine folder 1002 , the virtual machine service component provides an indication of a mapped client drive to the virtual machine ( 5 ). In one embodiment, the virtual machine service component associates the mapped client drive with a drive letter on the virtual machine. In another embodiment, the virtual machine service component monitors for changes to the shared folder list in the virtual machine folder 1002 . In some embodiments, an enumeration of the stored folder associated with the drive is provided to a user of the client machine 10 .
- the session management component 1300 enumerates in the virtual machine a plurality of printers associated with the client machine 10 . In one of these embodiments, the session management component 1300 accesses a printer service to acquire an authorization level required to enumerate a printer in the plurality of printers.
- a printer associated with the client machine 10 is shared as a network printer and made accessible to the virtual machine as a network resource.
- the virtual machine generates printer output using the TCP/IP and LPR protocols, and this output is intercepted and transmitted to the printer associated with the client machine 10 .
- the virtual machine transmits printer output to a virtualized hardware resource provided by the hypervisor, such as a COM port on the virtual machine. The output is captured and transmitted to the printer associated with the client machine 10 .
- a hypervisor may provide access to a virtual printer or printer port.
- an execution machine identified by the intermediate machine executes a hypervisor emulating hardware resources required by the requested computing environment.
- the hypervisor executes on the intermediate machine.
- the hypervisor executes in a terminal services session executing on the intermediate machine.
- the hypervisor executes on the execution machine.
- the hypervisor executes in a terminal services session executing on the execution machine.
- the hypervisor may be executed on the client machine 10 .
- the hypervisor provisions a plurality of hardware resources on the execution machine for use by the requested computing environment.
- the hypervisor partitions a plurality of hardware resources on the execution machine and makes the partition available for use by the requested computing environment.
- the hypervisor emulates a plurality of hardware resources on the execution machine for use by the requested computing environment.
- the hypervisor may partition hardware resources, emulate hardware resources, or provision hardware resources, or all three.
- a hypervisor may emulate a device (such as a graphics card, network card, and disk), partition the (execution time) of the CPU, and virtualize registers, storage, and underlying devices which they use to fulfill operations on their emulated hardware (such as RAM, and network interface cards).
- the session management component 1300 executes the hypervisor. In one of these embodiments, the session management component 1300 executes the hypervisor in full-screen mode. In other embodiments, the session management component 1300 monitors execution of the hypervisor. In one of these embodiments, the session management component 1300 transmits a notification to the virtual machine management component 1200 that the virtual machine has terminated when the session management component 1300 receives an indication that a virtual machine executing in the hypervisor has terminated. In another of these embodiments, the session management component 1300 receives a notification when the user logs out of a session.
- the hypervisor provides a hardware abstraction layer between hardware on the execution machine and a computing environment provided by a virtual machine.
- the hypervisor may be said to be executing “on bare metal.”
- there is an operating system executing on the execution machine referred to as a host operating system, and the hypervisor executes from within the operating system.
- Computing environments provided by a virtual machine may be referred to as guest operating systems.
- the hypervisor executes in a terminal server session on a host operating system on the execution machine.
- the hypervisor may emulate hardware resources required by a computing environment provided by a virtual machine.
- the hypervisor may partition hardware and provide access to the partition.
- the hypervisor may also virtualize existing hardware, making it appear to at least one domain on the hardware as if that domain were the only domain accessing the hardware.
- output from the computing environment, or an application or resource executing within the computing environment is passed from the computing environment to a virtualized hardware resource provided by the hypervisor.
- the hypervisor transmits the output to a component such as the session management component 1300 .
- the session management component 1300 may transmit the received output to a client machine 10 from which a user accesses the computing environment.
- the hypervisor redirects the output from the virtualized hardware resource to an actual hardware resource, such as a network interface card.
- the hypervisor provides a hardware abstraction layer and creates an environment into which a virtual machine may be launched, the virtual machine comprised of configuration and data files creating a computing environment, which may comprise a guest operating system and application programs or other resource.
- the hypervisor provides functionality for transmitting data directed to a virtualized hardware resource and redirecting the data to a requesting machine via the session management component 1300 .
- the communication between the session management component 1300 and the hypervisor enable transmission of updates, such as audio updates, updates associated with a graphical user interface, or updates associated with serial COM port input/output, from the virtual machine to the requesting machine.
- the communication enables transmission of keyboard or mouse or audio updates from the requesting machine to the virtual machine.
- the hypervisor may map terminal server drives to the computing environment.
- a virtual machine is configured for access by a particular client machine 10 .
- the management component 1300 receives an identification of a virtual machine already executing in the hypervisor.
- the session management component 1300 launches the virtual machine in the hypervisor.
- the session management component 1300 receives an identification of a folder containing configuration and data files comprising the virtual machine.
- the session management component 1300 mounts the identified folder in the execution machine.
- a virtual machine service component executes in a guest operating system executing within the virtual machine.
- the virtual machine service component is a system service running in a network service account.
- the virtual machine service component is configured to initiate execution automatically upon the execution of the computing environment.
- the virtual machine service component communicates with the session management component 1300 .
- the virtual machine service component executes in the hypervisor.
- a virtual machine service component executes within the virtual machine.
- the session management component 1300 after launching the virtual machine in the hypervisor, the session management component 1300 establishes a connection, such as a TCP/IP connection, with the virtual machine service component.
- the virtual machine service component establishes the connection.
- the connection may be a single multiplexed connection between the components or multiple independent connections.
- the session management component 1300 uses the connection to transmit configuration information to the virtual machine service component.
- the configuration information may be associated with a presentation layer protocol session executing on the client machine 10 in which output from the virtual machine is presented.
- the configuration information may also include information associated with display settings and changes, client drive information and authentication data.
- the virtual machine service component receives information associated with a printer to which the requesting machine has access. In one of these embodiments, the virtual machine service component access a network printer service to create in the virtual machine a printer connected to the printer to which the requesting machine has access.
- the virtual machine service component transmits session status messages to the session management component 1300 .
- the virtual machine service component transmits heartbeat messages to the session management component 1300 .
- the virtual machine service component transmits keep-alive messages to the session management component 1300 , to prevent the session management component 1300 from shutting down the virtual machine.
- the virtual machine service component transmits a message to the session management component 1300 providing an indication that the user of the client machine 10 has logged off, shut down, or suspended a session with the computing environment.
- the virtual machine service component may receive the indication of the user's activity from an authentication module.
- a request for access to a resource is received (step 802 ), a method for providing access to the resource is identified (step 804 ), and a virtualized environment may be selected to provide access to a resource (step 808 ).
- a client machine 10 receives the request, identifies a method for providing access, and selects a virtualized environment to provide access to a resource.
- a mobile computing device connects to a client machine 10 referred to as a computing device, which identifies a method for providing access to a computing environment, selects a portable computing environment residing in storage on the mobile computing device and provides access to the portable computing environment.
- the storage device stores data associated with a computing environment, such as a portable computing environment, which in some embodiments includes virtualization software, a virtual machine image, and user data.
- a computing environment such as a portable computing environment, which in some embodiments includes virtualization software, a virtual machine image, and user data.
- a computing device connecting to the storage device, executing a virtual machine, and providing access to the computing environment responsive to data stored in the storage device.
- the storage device 8905 stores the portable computing environment 8920 of one or more users.
- the storage device 8905 may be any type and form of hard drive, including a micro hard drive.
- the storage device 8905 may be any type and form of portable storage device, such as a flash drive or USB drive, or any type and form of portable storage medium, such as a CD or DVD.
- the storage device 8905 comprises a flash card, a memory stick, multi-media card or a secure digital card.
- the storage device 8905 may store applications including word processing or office applications, ICA clients, RDP clients, software to establish any type and form of virtual private network (VPN) or SSL VPN connection, software to accelerate network communications or application delivery or any other type and form of application.
- applications including word processing or office applications, ICA clients, RDP clients, software to establish any type and form of virtual private network (VPN) or SSL VPN connection, software to accelerate network communications or application delivery or any other type and form of application.
- VPN virtual private network
- the storage device 8905 may store a virtual machine image.
- the storage device 8905 may comprise a transmitter for transmitting stored data to a computing device 8910 .
- the storage device 8905 may comprise a transceiver for accessing stored data, transmitting stored data and receiving data for storage.
- the storage device 8905 may comprise stored data comprising an application program for executing a virtual machine on a computing device.
- the storage device 8905 is embedded in a mobile computing device. In other embodiments, the storage device 8905 is connected to a mobile computing device. In still other embodiments, the storage device 8905 comprises a portable storage device removable from a computing device.
- the storage device 8905 stores data associated with a computing environment.
- the data may comprise a portable computing environment 8920 .
- the portable computing environment 8920 is considered portable in that the portable computing environment 8920 may be easily or conveniently carried and transported from one computing device 8910 to another computing device 8910 ′.
- the portable computing environment 8920 is considered portable in that the computing environment may be established or executed on any suitable computing device 8910 with little or no changes to the computing device 8910 , or in a further embodiment, with little or no maintenance or administration.
- the portable computing environment 8920 includes a plurality of files representing a desktop environment, or a portion thereof, of a computer system 100 , which a user desires to execute on the computing device 8910 .
- the portable computing environment 8920 may represent an environment under which a user operates a home or office desktop computer.
- the portable computing environment 8920 represents one or more applications to which a user has access.
- the portable computing environment 8920 may include a virtual machine image 8925 .
- the virtual machine image 8925 comprises a computing environment image, including any of the information, data, files, software, applications and/or operating system needed to execute a computing environment 8920 , including files needed to execute the computing environment 8920 via the virtualization software 8921 .
- the virtual machine image 8925 comprises configuration and data files required to execute a virtual machine providing access to a computing environment requested by a user.
- the virtual machine image 8925 comprises a virtual machine image as described above.
- the portable computing environment 8920 may also include user data 8930 , including, without limitation, any data, information, files, software or applications of a user.
- the user data 8930 is stored in, or as a part of, the virtual machine image 8925 .
- the user data 8930 may be created, edited or provided by any software, program, or application of the storage device 8905 or of the computing device 8910 .
- the portable computing environment 8920 may include virtualization software 8921 .
- the virtualization software 8921 may comprise any suitable means or mechanisms for a user to access, read and/or write any user data 8930 included in or provided by the virtualization software 8921 and/or virtual machine image 8925 .
- the virtualization software 8921 may track, manage and synchronize the access, reading and/or writing of user data 8930 during an established computing environment 8920 ′ with the user data 8930 provided on the storage device 8905 .
- the user data 8930 may only be accessed via the virtualization software 8921 or the established computing environment 8920 ′.
- any software, programs or applications of the storage device 8905 may access the user data 8930 when the storage device 8905 is not connected to the computing device 120 or when a computing environment 8920 ′ is not executing.
- the user data 8930 may comprise data and files created during a session of an established computing environment 8920 ′.
- the computing device 8910 may be any type and form of computer system as described in connection with FIG. 1A and FIG. 1B above.
- the computing device 8910 is a client machine 10 as described above.
- a connection between a computing device 8910 and a storage device 8905 provides a user of a client machine 10 with access to a requested resource.
- the computing device 8910 receives a request for access to a resource when a connection is made between the computing device 8910 and the storage device 8905 .
- a method for providing access to the resource is identified responsive to information received from the storage device 8905 .
- the computing device 8910 has a storage element 128 . In another embodiment, the computing device 8910 has a network interface 118 ′ connected to network 150 . In still another embodiment, the computing device 8910 has a transceiver for accessing data stored in a storage device 8905 or in a computing device 8910 ′.
- the computing device 8910 comprises an operational or performance characteristic not provided by the storage device 8905 .
- the computing device 8910 comprises elements, such as a processor or a memory, which the storage device 8905 does not include.
- the computing device 8910 provides an I/O device, display device, installation medium, or other peripherals, such as a keyboard or printer not available to the storage device 8905 .
- the computing device 8910 may provide a feature, a resource, or peripheral desired to be used by the user of the storage device 8905 .
- the user may want to access a file or an application provided on a remote machine 30 ′ available via a connection across the network 150 .
- the computing device 8910 provides access to a network, such as machine farm 38 , not available to the storage device 8905 , or to a user of the storage device 8905 .
- the computing device 8910 establishes a computing environment 8920 ′ based on the portable computing environment 8920 provided by the storage device 8905 .
- the computing device 8910 establishes a virtual machine 8925 ′ and a virtualization layer 8922 to execute the computing environment 8920 ′ based on the virtualization software 8921 or 8921 ′, virtual machine image 8925 and /or user data 230 .
- virtualization allows multiple virtual machines 8925 ′, with heterogeneous operating systems to run in isolation, side-by-side on the same physical machine 8910 .
- the virtualization software 8921 may include a virtual machine image.
- Virtual machines may include cross-platform X86 PC emulators, such as the products distributed by The Bochs Project at bochs.sourceforge.net, or VMware products manufactured and distributed by VMware, Inc. of Palo Alto, Calif., or products manufactured and distributed by Softricity, Inc., or the Virtuozzo products manufactured and distributed by SWSoft, Inc. of Herndon, Va., or the Microsoft® Virtual PC products manufactured and distributed by Microsoft Corporation of Redmond, Wash.
- the virtualization software 8921 includes any the AppStream products manufactured and distributed by AppStream Inc, of Palo Alto, Calif., or the AppExpress products manufactured and distributed by Stream Theory, Inc of Irvine, Calif.
- the computing device 8910 may use any other computing resources of computer system 100 b required by the computing environment 8920 ′.
- the hypervisor 8923 provides a virtualized hardware resource required by the computing environment 8920 ′.
- a hypervisor 8923 provides, via a virtualization layer 8922 , access to a hardware resource required for execution of a computing environment.
- the hypervisor 8923 provisions the hardware resource.
- the hypervisor 8923 virtualizes the hardware resource.
- the hypervisor 8923 partitions existing hardware resources and provides access to a partitioned hardware resource.
- a virtual machine 8925 ′ executing on a virtualization layer provides access to a computing environment 8920 ′.
- a session management component 1300 executes the virtual machine 8925 .
- virtualization software 8921 or 8921 ′ execute the virtual machine 8925 .
- the portable computing environment 8920 includes any type and form of software for virtualizing on a computing device a user-accessible resource, such as an operating system, desktop, application, and any hardware computing resources.
- virtual machine image 8925 is accessed to execute a virtual machine 8925 ′.
- the virtualization software 8921 or 8921 ′ accesses the virtual machine image.
- the virtualization software 8921 may include software for virtualizing a server, such as the Microsoft Virtual Server products manufactured and distributed by Microsoft Corporation of Redmond, Wash., or the Linux Vserver products distributed by the Linux Vserver Project located at linux-vserver.org.
- the virtualization software 8921 may also include an interpreter or just-in-time compiler, such as the JAVA Virtual Machine (JVM) originally manufactured by Sun Microsystems of Santa Clara, Calif., or the Common Language Runtime (CLR) interpreter manufactured by the Microsoft Corporation.
- JVM JAVA Virtual Machine
- CLR Common Language Runtime
- the computing device 8910 has the virtualization software 8921 ′ stored or installed in storage element 128 prior to a connection with the storage device 8905 .
- the virtualization software 8921 ′ does not need to be installed on the computing device 8910 , and can, instead, be executed from the storage device 8905 .
- the computing device 8910 installs and executes the virtualization software 8921 on a per connection basis.
- the computing device 8910 may remove the virtualization software 8921 from storage element 128 upon termination of the established computing environment 8920 ′.
- the computing device 8910 installs and executes the virtualization software 8921 on a first connection.
- the computing device 8910 upon other connections, if the computing device 8910 detects changes to the virtualization software 8921 , such as a newer version, the computing device 8910 updates the virtualization software 8921 , or installs a newer version of the virtualization software 8921 . In other embodiments, the computing device 8910 obtains the virtualization software 8921 from a storage element 128 ′′ or a remote machine 30 accessible via network 150 .
- the virtualization software 8921 is used to establish a virtualization layer 8922 on the computing device 8910 .
- the virtualization layer 8922 provides an abstraction layer that decouples or isolates an application or a hardware resource from the operating system.
- the virtualization layer 8922 comprises an application to host or run another operating system or application, such as virtual machine 8925 .
- the hypervisor 8923 comprises the virtualization software 8921 .
- the session management component 1300 comprises the virtualization software 8921 .
- the host computing device 8910 stores virtualization software 8921 ′ in storage element 128 .
- the computing device 8910 accesses a remotely located copy of virtualization software 8921 ′.
- the virtualization layer 8922 and/or virtual machine 8925 provide an execution environment on the computing device 8910 .
- each execution environment is a unique instance of the same execution environment, while, in another of these embodiments, each execution environment may be an instance of different execution environments. Each execution environment may be isolated from and/or not accessible by another execution environment.
- the virtualization layer 8922 and/or virtual machine 8925 provides an execution context, space or “sandbox” to isolate processes and tasks running on the same operating system.
- the virtualization layer 8922 communicates with a session management component 1300 .
- the session management component 1300 is software executing in a layer between a hypervisor 8923 or operating system of the computing device 8910 and one or more virtual machines 8925 that provide a virtual machine abstraction to guest operating systems.
- the session management component 1300 may reside outside of the computing device 8910 and be in communication with a hypervisor 8923 or operating system of the computing device 8910 .
- the session management component 1300 can load, run or operate the virtual machine image 8925 from the storage device 8905 to execute a virtual machine 8925 ′.
- the session management component 1300 and hypervisor 8923 are incorporated into the same application, software or other executable instructions to provide the virtualization layer 8922 .
- the session management component 1300 is in communication with a virtual machine service component executing within the computing environment 8920 .
- the computing device 8910 includes a loading mechanism 8940 , which may comprise software, hardware, or any combination of software and hardware.
- the loading mechanism 8940 comprises an autorun configuration file.
- the storage device 8905 may include the loading mechanism 8940 .
- the storage device 8905 includes the loading mechanism 8940 in an autorun file.
- a loading mechanism 8940 on the storage device 8905 establishes the computing environment 8920 ′ on the computing device 8910 based on the portable computing environment 8920 stored in the storage device 8905 .
- the loading mechanism 8940 ′ of the computing device 8910 establishes of the computing environment 8920 ′.
- the loading mechanism 8940 of the storage device 8905 works in conjunction with the loading mechanism 8940 ′ of the computing device 8910 to establish the computing environment 8920 ′.
- the loading mechanism 8940 comprises a driver, such as a device driver or a kernel or user-mode driver for connecting to and/or accessing the storage device 8905 , or the storage element 128 thereof.
- the loading mechanism 8940 comprises any type and form of executable instructions, such as a program, library, application, service, process, thread or task for accessing the storage element 128 or storage device 8905 .
- the loading mechanism 8940 accesses any type and form of data and information on the storage 128 to establish the user environment 8920 ′ in accordance with the operations discussed herein. For example, in some embodiments, the loading mechanism 8940 reads an autorun configuration file in storage element 128 or on storage device 8905 .
- the loading mechanism 8940 comprises a plug-n-play (PnP) mechanism by which the operating system of the host computing device 8910 recognizes the storage device 8905 upon connection, and loads the drivers to connect to the storage device 8905 .
- PnP plug-n-play
- the loading mechanism 8940 upon detection of a connection between the storage device 8905 and computing device 8910 initiates the loading, establishing and/or executing of the virtualization software 8921 and/or the user environment 8920 ′ on the computing device 8910 .
- the loading mechanism 8940 may comprise any rules, logic, operations and/or functions regarding the authentication and/or authorization of establishing a computing environment 8920 ′ on the computing device 8910 based on the portable computing environment 8920 .
- the loading mechanism 8940 may determine the existence of the virtualization software 8921 ′ on the computing device 8910 and/or the difference in versions between the virtualization software 8921 and virtualization software 8921 ′.
- the loading mechanism 8940 may store, load, and/or execute the virtualization software 8921 or 8921 ′ on the computing device 8910 .
- the loading mechanism 8940 may store, load, and/or execute the virtual machine image 8925 on the computing device 8910 as a virtual machine 8925 providing access to the computing environment 8920 ′.
- the loading mechanism 8940 may comprise or provide any type and form of user interface, such as graphical user interface or command line interface.
- the virtualization software 8921 , portable computing environment 8920 and/or loading mechanism 8940 are designed and constructed in accordance with the U3 application design specification, or USB smart drive, provided by U3 LLC of Redwood City, Calif.
- the loading mechanism 8940 may comprise a U3 launchpad program
- the virtualization software 8921 and/or portable user environment 120 may comprise a U3-based application.
- a flow diagram depicts one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a storage device.
- a method for providing access to a computing environment includes the step of storing, in a storage device, data associated with a computing environment (step 8950 ).
- a computing device connects to the storage device (step 8960 ).
- a virtual machine executing on the computing device provides access to the computing environment, based on the data stored in the storage device (step 8970 ).
- a storage device 8905 stores data associated with a portable computing environment 8920 (step 8950 ).
- the storage device 8905 stores user data associated with the computing environment.
- the storage device 8905 stores a virtual machine image 8925 .
- the storage device 8905 stores data associated with a computing environment, the computing environment comprising at least one application program.
- the storage device 8905 stores data associated with a computing environment, the computing environment comprising an operating system.
- the storage device 8905 stores data comprising an operating system. In another embodiment, the storage device 8905 stores data comprising an application program. In still another embodiment, the storage device 8905 stores an application program for executing a virtual machine on a computing device. In yet another embodiment, the storage device 8905 stores virtualization software for executing a virtual machine on a computing device.
- the storage device 8905 may include a connector for establishing a connection between the storage device 8905 and a computing device.
- the storage device 8905 resides in a computing device, such as a mobile computing device.
- the storage device 8905 is embedded in a mobile computing device.
- the storage device 8905 comprises a portable storage device removable from a computing device.
- a computing device connects to the storage device (step 8960 ).
- the storage device 8905 may connect to the computing device 8910 by any suitable means and/or mechanism.
- the storage device 8905 connects to a computing device 8910 via a mobile computing device.
- the storage device 8905 is embedded in a mobile computing device connectable to the computing device 8910 .
- a request may be received by the computing device 8910 for access to a resource.
- the request is for a desktop environment.
- the request is for an application or for a plurality of applications.
- the request is for a virtual machine.
- a determination may be made to provide access to the requested resource via a virtualized environment. In one of these embodiments, the determination is made as described above in connection with FIG. 8 . In another of these embodiments, the determination is made responsive to information received from the storage device 8905 , such as a rule requiring the determination.
- the computing device 8910 accesses the storage device 8905 to access the portable computing environment 8920 . In another embodiment, the computing device 8910 obtains the virtualization software 8921 from the storage device 8905 to establish a computing environment 8920 ′. In still another embodiment, the computing device 8910 does not obtain the virtualization software 8921 from the storage device 8905 as the computing device 8910 has access to the virtualization software 8921 in storage element 128 ′ or via network 150 . In yet another embodiment, the computing device 8910 obtains portions of the virtualization software 8921 from the storage device 8905 .
- the virtualization software 8921 on the storage device 8905 may be an updated version or have updated files to the virtualization software 8921 ′ on the computing device 8910 .
- the storage device 8905 transmits information to the computing device 8910 . In one of these embodiments, the storage device 8905 transmits the information with a request for access to a resource.
- a virtual machine executing on the computing device provides access to the computing environment, based on the data stored in the storage device (step 8970 ).
- the computing device 8910 retrieves data from the storage device 8905 .
- the computing device 8910 accesses the storage device 8905 to obtain a virtual machine image 8925 used to execute the virtual machine.
- the computing device 8910 accesses the storage device 8905 to obtain data or information identifying a location of the portable computing environment 8920 that may be accessible to the computing device 8910 .
- the storage device 8905 may comprise user data 8930 identifying a Uniform Resource Locator (URL) associated with a location on which a virtual machine image 8925 is stored, the URL accessible by the computing device 8910 via network 150 .
- the computing device 8910 accesses a storage element identified by the user data 8930 , for example, a storage element or remote machine 30 on the network 150 storing the virtual machine image 8925 .
- URL Uniform Resource Locator
- the computing device 8910 mounts the storage device 8905 as a storage, such as a disk, available to the computing device 8910 . In one of these embodiments, the computing device 8910 mounts the storage device 8905 as removable media. In other embodiments, the loading mechanism 8940 accesses the storage device 8905 .
- the computing device 8910 establishes an environment for executing or providing access to the computing environment 8920 ′.
- a virtual machine may be executed in the computing environment 8920 ′ to provide access to a requested resource.
- a virtual machine is the requested resource.
- a virtual machine 8925 ′ executes a virtual machine 8925 ′′.
- the computing device 8910 executes a virtual machine responsive to a virtual machine image 8925 stored in the storage device 8905 . In another embodiment, the computing device 8910 executes a virtual machine 8925 ′ responsive to the data stored in the storage device 8905 . In still another embodiment, the computing device 8910 executes the virtual machine responsive to a policy stored in the storage device.
- the computing device 8910 retrieves data stored in the storage device 8905 .
- the computing device 8910 uses an application program stored in the storage device 8905 to access the data.
- the computing device 8910 provides access to a computing environment by executing an operating system providing access to one or more applications identified by information stored in the storage device, the operating system and the one or more applications having access to user data stored in the storage device 8905 .
- the computing device 8910 installs and/or loads the virtualization software 8921 to establish the virtualization layer 8922 .
- the virtualization software 8921 is designed and constructed as a portable application that can execute, load or establish the virtualization layer 8922 on the computing device 8910 without requiring installation of the virtualization software 8921 .
- the virtualization software 8921 is automatically installed on the computing device 8910 via an installation script.
- the virtualization software 8921 is installed without requiring a reboot.
- the virtualization software 8921 is installed and the virtualization layer 8922 established transparently to a user.
- the virtualization layer 8922 is established using the virtualization software 8921 ′ stored on the computing device 8910 or accessed via network 150 .
- the computing device 8910 executes a hypervisor 8923 to establish the virtualization layer 8922 .
- a hypervisor 8923 on the computing device 8910 and in communication with a hypervisor 8923 ′ on a remote machine 30 ′ establishes the virtualization layer 8922 .
- a hypervisor 8923 in communication with a session management component 1300 establishes the virtualization layer 8922 .
- the session management component 1300 identifies, provisions, and/or executes a virtual machine in the virtualization layer 8922 as described above in connection with FIG. 8 .
- the loading mechanism 8940 establishes the virtualization layer 8922 .
- the computing device 8910 establishes a virtualization layer 8922 in which a virtual machine service component executes.
- the virtualization layer 8922 has been established prior to the storage device 8905 connecting to the computing device 8910 .
- the virtualization layer 8922 may have been established for another computing environment 8920 ′ or during a previous connection of the same or a different storage device 8905 .
- the computing device 8910 and/or loading mechanism 8940 establishes the virtualization layer 8922 and actuates, starts, or executes a session management component 1300 and/or hypervisor 8923 .
- the computing device 8910 and/or loading mechanism 8940 executes session management component 1300 and/or hypervisor 8923 upon loading or executing a virtual machine 8925 .
- the computing device 8910 provides access to the computing environment 8920 ′ based on the portable computing environment 8920 (step 8970 ).
- the computing device 8910 and/or loading mechanism 8940 accesses the virtual machine image 8925 from storage device 8905 and executes the virtual machine image 8925 as a virtual machine 8925 ′ in the established virtualized environment 8922 .
- the computing device 8910 and/or loading mechanism 8940 automatically loads, executes or otherwise establishes the computing environment 8920 with the virtualization layer 8922 upon detection of a connection over network 150 .
- the computing device 8910 and/or loading mechanism 8940 automatically loads, executes or otherwise establishes the computing environment 8920 and the virtualization layer 8922 upon detection of existence or identification of the portable computing environment 8920 in storage element 128 .
- a user may select the virtual machine image 8925 from the storage device 8905 for execution as a virtual machine 8925 ′ via any type and form of user interface.
- the virtualization software 8921 , virtualization layer 8922 , hypervisor 8923 , or loading mechanism 8940 may display a user interface for a user to identify a virtual machine image 8925 , and/or to execute a virtual machine 8925 ′ based on a virtual machine image 8925 .
- a client such as an ICA client, an RDP client, or an X11 client, executes on the computing device 8910 and provides the user interface to the user.
- a user may access, read, and/or write user data 8930 during the course of using the established computing environment 8920 ′.
- a user of the computing device 8910 may access, read and/or write the user data 8930 to the storage device 8905 .
- a user of the computing device 8910 may edit or modify user data 8930 or may create new data and information in user data 8930 .
- a user of the computing device 8910 may access, read, and/or write user data to the storage 128 ′ of the computing device 8910 .
- the computing device 8910 may synchronize user data 8930 on the computing device 8910 with user data 8930 on the storage device 8905 .
- the computing device 8910 uses the virtualization layer 8922 or the loading mechanism 8940 to synchronize the user data 8930 .
- the storage device 8905 may have a program or application for synchronizing data between the storage device 8905 and the computing device 8910 .
- the storage device 8905 may disconnect from the computing device 8910 at any point in time during the established computing environment 8920 ′. In other embodiments, the storage device 8905 may disconnect after the computing environment 8920 ′ is terminated on the computing device 8910 . In still other embodiments, the computing environment 8920 ′ is automatically terminated upon disconnection of the storage device 8905 to the computing device 8910 . In yet other embodiments, the computing environment 8920 ′ may remain established on the computing device 8910 after the storage device 8905 disconnects from the computing device 8910 . In one of these embodiments, once the computing environment 8920 ′ is established on the computing device 8910 , the storage device 8905 may be disconnected.
- the storage device 8905 can access, read, and/or write user data 8930 to any portion of the portable computing environment 8920 .
- the portable computing environment 8920 is not established or virtualized on computing device 8910
- the storage device 8905 can still access, read, and/or write to and from the user data 8930 .
- a user may use a first application in the established computing environment 8920 ′ to access a file of the user data 8930 .
- the user may use a second application on the storage device 8905 to access the same file of the user data 8930 .
- the virtualization software 8921 or virtual image 8925 allows access to the user data 8930 , even though virtualization software 8921 or virtual machine image 8925 is not executing or operating.
- FIGS. 89A and 89B are generally discussed with one portable computing environment 8920 stored in the storage device 8905
- the storage device 8905 may store a plurality of portable computing environments 8920 for establishing a corresponding plurality of computing environments 8920 ′ on the computing device 8910 .
- the computing device 8910 , loading mechanism 8940 , or the virtualized layer 8920 provides a user interface for the user to select a portable computing environment from storage to establish the computing environment 8920 .
- the storage device 8905 or the computing device 8910 may have a portable computing environment selection mechanism as is further discussed in connection with FIG. 92A and with FIG. 93A .
- the computing device 8910 , loading mechanism 8940 , or the virtualized layer 8922 uses one of the plurality of portable computing environments based on a characteristic of the computing device, such as operating system type, or based on user data identifying the portable computing environment to use for the computing device.
- the mobile computing device 9005 may be any type and form of computer system as described in connection with FIG. 1A and FIG. 1B above.
- the mobile computing device 9005 comprises a storage device, such as a storage device 8905 as described in connection with FIG. 89A and FIG. 89B .
- the mobile computing device 9005 is connected to a storage device 8905 .
- the mobile computing device 9005 comprises a portable storage device removable from a computing device.
- the mobile computing device 9005 has a network interface 118 used to connect to remote machines 30 or client machines 10 on the network 150 , such as the computing device 8910 .
- the storage device 8905 may store a portable computing environment 8920 , which in some embodiments includes virtualization software 8921 , a virtual image 8925 , and user data 8930 .
- the mobile computing device 9005 stores data associated with a computing environment, executes a virtual machine, and provides access to the computing environment responsive to data stored in the mobile computing device 9005 .
- the mobile computing device 9005 comprises a stored virtual machine image.
- the mobile computing device 9005 comprises an application program for executing a virtual machine on a computing device.
- the mobile computing device 9005 provides access to a computing environment by executing an operating system with access to one or more applications identified via data stored on the mobile computing device, the operating system and the one or more applications having access to the user data on the mobile computing device.
- the mobile computing device 9005 stores the portable computing environment 8920 of one or more users in storage provided by a storage device, such as a storage device 8905 as described above in connection with FIG. 89A and 89B .
- the mobile computing device 9005 decrypts stored data. In another embodiment, the mobile computing device 9005 prevents one of unauthenticated and unauthorized access by a user of the mobile computing device 9005 to a computing environment provided by the mobile computing device 9005 .
- a flow diagram depicts one embodiment of the steps taken in a method for providing a computing environment by a mobile computing device.
- a method includes the step of storing, in a mobile computing device 9005 , data associated with a computing environment (step 9020 ).
- a virtual machine executing on the mobile computing device provides access to the computing environment, based on the stored data (step 9025 ).
- the mobile computing device 9005 stores data associated with a computing environment (step 9020 ).
- the mobile computing device 9005 receives the data associated with the computing device from a storage device connected to the mobile computing device 9005 .
- the mobile computing device stores the data associated with the computing environment in a storage device 8905 embedded in the mobile computing device.
- the mobile computing device 9005 stores user data associated with the computing environment.
- the mobile computing device 9005 stores a virtual machine image.
- the mobile computing device 9005 stores data associated with a computing environment, the computing environment comprising at least one application program. In another embodiment, the mobile computing device 9005 stores data associated with a computing environment, the computing environment comprising an operating system. In still another embodiment, the mobile computing device 9005 stores data comprising an operating system. In yet another embodiment, the mobile computing device 9005 stores data comprising an application program. In some embodiments, the mobile computing device 9005 stores an application program for executing a virtual machine. In other embodiments, the mobile computing device 9005 stores virtualization software for executing a virtual machine.
- a request may be received by the mobile computing device 9005 for access to a resource.
- the request is for a desktop environment.
- the request is for an application or for a plurality of applications.
- the request is for a virtual machine.
- the request is for access to a computing environment.
- a determination may be made to provide access to the requested resource via a virtualized environment. In one of these embodiments, the determination is made as described above in connection with FIG. 8 . In another of these embodiments, the determination is made responsive to information received from the mobile computing device 9005 , such as a rule requiring the determination.
- a virtual machine executing on the mobile computing device provides access to the computing environment, based on the stored data (step 9025 ).
- an application program stored in the mobile computing device 9005 executes to access data associated with the computing environment.
- the mobile computing device 9005 executes virtualization software, at least a portion of which is stored on the mobile computing device 9005 .
- the mobile computing device 9005 provides access to a computing environment by executing an operating system with access to one or more applications stored on the mobile computing device, the operating system and the one or more applications having access to user data stored in the mobile computing device 9005 .
- the mobile computing device 9005 executes a virtual machine, responsive to data stored in the mobile computing device 9005 . In another embodiment, the mobile computing device executes a virtual machine responsive to a policy stored in the mobile computing device 9005 . In still another embodiment, the mobile computing device 9005 executes a virtual machine that provides access to a requested resource or computing environment, the virtual machine executed responsive to a virtual machine image stored in the mobile computing device 9005 . In yet another embodiment, the mobile computing device 9005 transfers execution of the virtual machine to a computing device 8910 .
- FIGS. 90A and 90B are generally discussed with one portable user environment 8920 stored in storage 8905 of the mobile computing device 9005
- the mobile computing device 9005 may store a plurality of portable computing environments 8920 for establishing a corresponding plurality of computing environments 8920 ′ on the mobile computing device 9005 .
- the mobile computing device stores data associated with a computing environment.
- the computing device connects to the mobile computing device, executes a virtual machine, and provides access to the computing environment responsive to data stored in the mobile computing device.
- the virtual machine executing on the computing device provides access to the computing environment.
- the mobile computing device 9005 may be any type and form of computer system as described in connection with FIG. 1A and FIG. 1B above.
- the mobile computing device 9005 comprises a storage device 8905 as described above in connection with FIG. 90A and FIG. 90B .
- the mobile computing device may be a mobile computing device 9005 as described above in connection with FIG. 90A and FIG. 90B .
- the mobile computing device 9005 provides access to a portable computing environment 8920 of one or more users in storage provided by a storage device, such as a storage device 8905 as described above in connection with FIG. 89A and 89B .
- the mobile computing device 9005 and the computing device 8910 may have the same processor or computer architecture, such as an X86 based processor architecture. In other embodiments, the mobile computing device 9005 may have a different processor or architecture than the computing device 8910 .
- the computing device 8910 may be a SPARC (Scalable Processor Architecture) and the mobile computing device 9005 may be an ARM based architecture.
- the mobile computing device 9005 and the computing device 8910 may both operate a processor, or a data address or bus using the same numbers of bits, such as a 32-bit or 64-bit processor or bus.
- the mobile computing device 9005 and the computing device 8910 may operate on processors and/or a data bus with different bit architectures. Furthermore, the mobile computing device 9005 and computing device 8910 may operate the same operating system, in one embodiment, and different operating systems, in another embodiment. For example, the mobile computing device 9005 may operate a PALM operating system while the computing device 8910 runs a WINDOWS operating system.
- a mobile computing device 9005 has multiple processors. One processor may have higher performance characteristics than the other processor, and each processor may share one or more storage and memory elements.
- a storage element such as a disk drive or portable storage device, may include a computing environment.
- the mobile computing device 9005 may also have a switching mechanism to switch between using a first processor having higher performance characteristics and a second processor having lower performance characteristics, based on operating conditions and applications executing on the device.
- the processor having lower performance characteristics may be used to execute applications with lower power requirements, such as typical PDA functionality of calendar access and email. When an application requires more power, the mobile computing device 9005 may automatically switch execution of such applications to the more powerful processor.
- the computing device 8910 connects to the mobile computing device, executes a virtual machine, and provides access to the computing environment responsive to data stored in the mobile computing device 9005 .
- the computing device 8910 may mount the storage device 8905 of the mobile computing device 9005 as a removable hard drive or storage element 128 ′ of the computing device 8910 .
- the mobile computing device 9005 may be a plug and play device (PnP) of the computing device 8910 , such that a PnP protocol manufactured by Microsoft Corporation of Redmond, Wash., is used between the mobile computing device 9005 and computing device 8910 , such as via I/O devices 130 a - 130 n or network interfaces 118 , 118 ′.
- PnP plug and play device
- the computing device 8910 comprises an operational or performance characteristic not provided by the mobile computing device 9005 .
- the computing device 8910 has a more powerful processor 102 ′ and/or larger memory 122 ′ than the processor 102 and memory 122 of the mobile computing device 9005 .
- the computing device 8910 provides an I/O device 130 b, display device, installation medium, or other peripherals, such as a keyboard or printer not available to the mobile computing device 9005 .
- the computing device 8910 may provide a feature, a resource, or peripheral desired to be used by the user of the mobile computing device 9005 .
- the user may want to access a file or an application provided on a remote machine 30 ′ available via a connection across the network 150 .
- the computing device 8910 provides access to machines on a network 150 , such as those in machine farm 38 , not available to the mobile computing device 9005 , or to a user of the mobile computing device.
- the computing device 8910 provides access to a computing environment 8920 ′ based on the portable computing environment 8920 provided in the mobile computing device 9005 .
- the computing device 8910 executes a virtual machine 8925 ′ and a virtualization layer 8922 to execute the computing environment 8920 ′ based on the virtualization software 8921 or 8921 ′, virtual machine image 8925 , or user data 230 .
- the computing device comprises a transceiver for accessing data stored in the mobile computing device 9005 .
- a loading mechanism on the mobile computing device 9005 actuates the establishment of the computing environment 8920 ′ on the computing device 8910 based on the portable computing environment 8920 stored in the mobile computing device 9005 .
- the loading mechanism 8940 of the computing device 8910 actuates the establishment of the computing environment 8920 ′.
- a loading mechanism on the mobile computing device 9005 works in conjunction with the loading mechanism 8940 of the computing device 8910 to establish the computing environment 8920 ′.
- a flow diagram depicts one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a mobile computing device.
- a method includes the step of storing, in a mobile computing device, data associated with a computing environment (step 9155 ).
- a computing device connects to the mobile computing device (step 9160 ).
- a virtual machine executing on the computing device provides access to a computing environment, based on the data stored in the mobile computing device (step 9165 ).
- a mobile computing device stores data associated with a computing environment (step 9155 ).
- the mobile computing device 9005 may store data associated with a computing environment as described above in connection with FIG. 90A and 90B .
- the mobile computing device 9005 may comprise a storage device embedded in the mobile computing device 9005 , such as the storage device 8905 described in connection with FIG. 89A through FIG. 90B .
- the computing device 8910 connects to the mobile computing device 9005 by any suitable means and/or mechanism (step 9160 ).
- the computing device 8910 connects to a storage device, such as a storage device 8905 as described above in connection with FIG. 89A and FIG. 89B , via the mobile computing device 9005 .
- a request may be received by the computing device 8910 for access to a resource.
- the request is for access to a desktop environment.
- the request is for an application or for a plurality of applications.
- the request is for a virtual machine.
- a determination may be made to provide access to the requested resource via a virtualized environment. In one of these embodiments, the determination is made as described above in connection with FIG. 8 . In another of these embodiments, the determination is made responsive to information received from the mobile computing device 9005 , such as a rule requiring the determination.
- the computing device 8910 accesses the mobile computing device 9005 to obtain the portable user environment 8920 . In another embodiment, the computing device 8910 obtains the virtualization software 8921 to establish the virtualized environment 8922 . In still another embodiment, the computing device 8910 does not obtain the virtualization software 8921 from the mobile computing device 9005 as the computing device 8910 has access to the virtualization software 8921 in storage element 128 ′ or via network 150 . In yet another embodiment, the computing device 8910 obtains portions of the virtualization software 8921 from the mobile computing device 9005 .
- the virtualization software 8921 on the mobile computing device 9005 may be an updated version or have updated files to the virtualization software 8921 ′ on the computing device 8910 .
- the mobile computing device 9005 transmits information to the computing device 8910 . In one of these embodiments, the mobile computing device 9005 transmits the information with a request for access to a resource.
- the computing device 8910 accesses the mobile computing device 9005 to obtain the virtual machine image 8925 .
- the computing device 8910 accesses the mobile computing device 9005 to obtain data or information identifying a location of the portable user environment 8920 in any storage that may be accessible to the computing device 8910 .
- the mobile computing device 9005 may comprise user data 8930 identifying a Uniform Resource Locator (URL) associated with a location on which a virtual machine image 8925 is stored, the URL accessible by the computing device 8910 via network 150 .
- the computing device 8910 accesses a storage element identified by the user data 8930 , for example, a storage element on network 150 storing the virtual machine image 8925 .
- URL Uniform Resource Locator
- the computing device 8910 mounts the mobile computing device 9005 as a storage element, such as a disk, available to the computing device 8910 .
- the computing device 8910 mounts the mobile computing device 9005 as removable media.
- the loading mechanism 8940 accesses the mobile computing device 8905 .
- the computing device 8910 provides access to a computing environment by executing an operating system with access to one or more applications identified via data stored on the mobile computing device, the operating system and the one or more applications having access to the user data on the storage device.
- the computing device prevents one of unauthenticated or unauthorized access by a user of the mobile computing device 9005 to a computing environment provided by the computing device 8910 .
- the computing device 8910 decrypts data stored on the mobile computing device 9005 .
- a virtual machine executing on the computing device 8910 provides access to a computing environment, based on data stored in the mobile computing device 9005 (step 9165 ).
- the computing device 8910 establishes a virtualized environment for providing access to the computing environment 8920 ′ by executing the virtual machine 8925 .
- a virtual machine may be executed in the user environment 8920 ′ to provide access to a requested resource.
- a virtual machine is the requested resource.
- the computing device 8910 executes a virtual machine responsive to a virtual machine image 8925 stored in the mobile computing device 9005 .
- the computing device 8910 executes a virtual machine responsive to data stored in the mobile computing device 9005 .
- an application program stored in the mobile computing device 9005 is executed to access data associated with a computing environment.
- the computing device 8910 executes virtualization software 8921 ′ by accessing at least a portion of the virtualization software 8921 stored in the mobile computing device 9005 .
- the computing device 8910 executes the virtualization software 8921 to establish the virtualization layer 8922 .
- the virtualization software 8921 is automatically installed on the host computing device 8910 via an installation script.
- the virtualization software 8921 is installed without requiring a reboot.
- the virtualization software 8921 is installed and the virtualization layer 8922 established transparently to a user.
- the computing device 8910 executes a hypervisor 8923 to establish the virtualization layer 8922 .
- a hypervisor 8923 on the computing device 8910 and in communication with a hypervisor 8923 ′ on a remote machine 30 ′ establishes the virtualization layer 8922 .
- a hypervisor 8923 in communication with a session management component 1300 establishes the virtualization layer 8922 .
- the session management component 1300 identifies, provisions, and/or executes a virtual machine in the virtualization layer 8922 as described above in connection with FIG. 8 .
- the loading mechanism 8940 establishes the virtualization layer 8922 .
- the computing device 8910 establishes a virtualization layer 8922 in which a virtual machine service component executes.
- the virtualization layer 8922 has been established prior to the mobile device 9005 connecting to the computing device 8910 .
- the virtualization layer 8922 may have been established for another user environment 8920 ′ or during a previous connection of the same or different mobile computing device 9005 .
- the computing device 8910 and/or loading mechanism 8940 establishes the virtualization layer 8922 and actuates, starts, or executes a session management component 1300 and/or hypervisor 8923 .
- the computing device 8910 and/or loading mechanism 8940 executes the session management component 1300 and/or hypervisor 8923 upon loading or executing a virtual machine 8925 .
- the computing device 8910 establishes, executes or otherwise provides the computing environment 8920 ′ based on the portable computing environment 8920 .
- the computing device 8910 and/or loading mechanism 8940 accesses the virtual image 8925 from the mobile computing device 9005 and loads or executes the virtual machine image 8925 as a virtual machine 8925 in the established virtualized environment 8922 .
- the computing device 8910 and/or loading mechanism 8940 automatically loads, executes or otherwise establishes the computing environment 8920 with the virtualization layer 8922 upon detection of a connection over network 150 .
- the computing device 8910 and/or loading mechanism 8940 automatically loads, executes or otherwise establishes the computing environment 8920 and the virtualization layer 8922 upon detection of existence or identification of the portable computing environment 8920 on the mobile computing device 9005 .
- a user may select the virtual machine image 8925 from the mobile computing device 9005 for execution as a virtual machine 8925 via any type and form of user interface.
- the virtualization software 8921 , virtualization layer 8922 , hypervisor 8923 , or loading mechanism 8940 may display a user interface for a user to identify a virtual image 8925 , and/or to execute a virtual machine 8925 based on a virtual image 8925 .
- a client such as an ICA client, an RDP client, or an X11 client, executes on the computing device 8910 and provides the user interface to the user.
- a user may access, read, and/or write user data 8930 during the course of using the established user environment 8920 ′.
- the user host computing device 8910 may access, read and/or write the user data 8930 to the mobile computing device 9005 .
- the user of the computing device 8910 may edit or modify user data 8930 or may create new data and information in user data 8930 .
- a user of the computing device 8910 may access, read, and/or write user data to the storage element 128 ′ of the computing device 8910 .
- the computing device 8910 may synchronize user data 8930 on the computing device 8910 with user data 8930 on the mobile computing device 8905 .
- the computing device 8910 uses the virtualization layer 8922 or the loading mechanism 8940 to synchronize the user data 8930 .
- the mobile computing device 9005 may have a program or application for synchronizing data, such as files and folders, between the mobile computing device 9005 and the computing device 8910 .
- the mobile computing device 9005 may disconnect from the computing device 8910 . In some embodiments, the mobile computing device 9005 may disconnect at any point in time during the use of the established computing environment 8920 ′. In other embodiments, the mobile computing device 9005 may disconnect after the computing environment 8920 ′ is terminated on the computing device 8910 . In still other embodiments, the user environment 8920 ′ is automatically terminated upon disconnection of the mobile computing device 9005 from the computing device 8910 . In one embodiment, the computing environment 8920 ′ may remain established on the computing device 8910 after the mobile computing device 9005 disconnects from the computing device 8910 . In some embodiments, once the computing environment 8920 ′ is established on the computing device 8910 , the mobile computing device 9005 may be disconnected.
- the mobile computing device 9005 can access, read, and/or write user data 8930 to any portion of the portable computing environment 8920 .
- the portable computing environment 8920 is not established or virtualized on computing device 8910
- the mobile computing device 9005 can still access, read, and/or write to and from the user data 8930 .
- the user may use a first application in the established computing environment 8920 ′ to access a file of the user data 8930 .
- the user may use a second application on the mobile computing device 9005 to access the same file of the user data 8930 .
- the virtualization software 8921 or virtual machine image 8925 allows access to the user data 8930 , even though virtualization software 8921 or virtual image 8925 is not executing or operating.
- the computing device 8910 , loading mechanism 8940 , or the virtualized layer 8920 provides a user interface for the user to select a portable computing environment from storage to establish the computing environment 8920 .
- the mobile computing device 9005 or the computing device 8910 may have a portable computing environment selection mechanism, as discussed in greater detail below.
- the computing device 8910 , loading mechanism 8940 , or the virtualized layer 8922 uses one of the plurality of portable computing environments based on a characteristic of the computing device 8910 , such as an operating system type, or based on user data identifying the portable computing environment to use for the computing device 8910 .
- the computing device 8910 further comprises a computing environment selector 9250 .
- FIG. 92A depicts a mobile computing device 9005 connected to a computing device 8910 via a network 150 .
- the mobile computing device 9005 further comprises a storage element 128 , an I/O device or interface 130 , and a loading mechanism 8940 .
- the mobile computing device 9005 stores one or more portable computing environments 8920 a - 8920 n in storage element 128 .
- the storage element 128 comprises a storage device, such as the storage device 8905 described above in connection with FIGS. 90A and 90B .
- the mobile computing device 9005 does not have a user input I/O device 130 and/or a user output I/O device 130 .
- the mobile computing device 9005 obtains or derives power from the connection to the computing device 8910 , such as for example, from a USB connection.
- the mobile computing device 9005 is a card of the following type: CompactFlash, Memory Stick, MultiMediaCard, Secure Digital, or SmartMedia.
- the storage element 128 stores a plurality of computing environments and a plurality of virtual machine images. In another embodiment, the storage element 128 stores one or more of a plurality of virtual machine images providing one of a different operating system or a different application than at least one virtual machine images accessible to the computing device. In still another of these embodiments, the storage element 128 stores one of the data associated with at least one computing environment and the at least one virtual machine image in an encrypted format.
- the mobile computing device 9005 stores data associated with at least one portable computing environment 8920 . In one of these embodiments, the mobile computing device 9005 stores data associated with a plurality of portable computing environments 8920 a - 8920 n. In another of these embodiments, each of the portable computing environments 8920 a - 8920 n comprises the same virtualization software 8921 a - 8921 n. In still another of these embodiments, the portable computing environments 8920 a - 8920 n comprise different virtualization software 8921 a - 8921 n.
- the portable computing environments 8920 a - 8920 n may comprise at least one virtualization software 8921 a that is the same as another virtualization software 8921 b. In other embodiments, the portable computing environments 8920 a - 8920 n may comprise at least one virtualization software 8921 a that is different from another virtualization software 8921 b. In yet another embodiment, there may be one copy of the virtualization software 8921 to be used for each of the virtual images 8925 a - 8925 n in storage 128 .
- one or more of the virtual machine images 8925 a - 8925 n provides access to the same operating system or are used on the same operating system. In another embodiment, one or more of the virtual machine images 8925 a - 8925 n comprises a different operating system or executes on a different operating system. In some embodiments, the virtual machine images 8925 a - 8925 n share the same user data 8930 . In other embodiments, the virtual machine images 8925 a - 8925 n may each have distinct sets of user data 8930 a - 8930 n. In one embodiment, one of the virtual machine images 8925 a - 8925 n may provide access to a first computing environment, for example, a work desktop environment.
- one of the virtual machine images 8925 a - 8925 n may provide access to a second computing environment, for example, a home desktop environment.
- a virtual machine image 8925 a - 8925 n may provide access to a computing environment comprising a set of one or more portable applications of the user.
- the mobile computing device 9005 may store any desired set of one or more user environments 8920 a - 8920 n.
- the mobile computing device 9005 includes a connector for connecting the mobile computing device 9005 to a computing device, such as the computing device 8910 .
- the connector is connectable to a computing device 8910 via one of the following: a wireless connection, a USB connection, a Firewire connection, a Bluetooth connection, a Wi-Fi connection, a network connection, and a docking connection.
- the mobile computing device 9005 includes a loading mechanism 8940 for automatically loading the at least one computing environment from the storage element onto a computing device upon connection of the mobile computing device to the computing device via the connector.
- the loading mechanism 8940 automatically installs the at least one computing environment on the computing device 8910 .
- the loading mechanism 8940 automatically executes the at least one computing environment on the computing device 8910 .
- the loading mechanism 8940 accesses at least one virtual machine image stored in the storage element 128 to execute a virtual machine, the virtual machine providing access to a computing environment.
- the mobile computing device 9005 includes a user interface provided for a user to select one virtual machine image to execute on the computing device 8910 from a plurality of virtual machine images. In other embodiments, the computing device 8910 provides the user interface.
- a selection mechanism such as a computing environment selector 9250 provides a user interface for a user to select one of the portable computing environments 8920 a - 8920 n to execute or establish on the computing device 8910 .
- the computing environment selector 9250 may comprise software, hardware, or any combination of software and hardware.
- the computing environment selector 9250 has a graphical user interface providing a list of the one or more portable computing environment 8920 a - 8920 n stored in the mobile computing device 9005 .
- the computing environment selector 9250 may comprise a command line interface.
- the computing environment selector 9250 comprises software, stored on or provided by either the mobile computing device 9005 or the computing device 8910 .
- the virtualized software 8921 , virtualized layer 8922 or portable computing environment 8920 comprises the computing environment selector 9250 .
- the computing environment selector 9250 is executed on the mobile computing device 9005 .
- the computing environment selector 9250 comprises a hardware and software mechanism on the mobile computing device 9005 for a user to select one of the portable computing environments 8920 a - 8920 n.
- the mobile computing device 9005 may provide via a screen or visual display unit a text based user interface with a thumb wheel to select a portable computing environment 8920 a - 8920 n.
- a flow diagram depicts another embodiment of the steps taken in a method for establishing a computing environment on a computing device via a mobile computing device.
- a user By connecting the mobile computing device 9005 carrying a portable computing environment 8920 a - 8920 n to a computing device 8910 , a user establishes a virtualized computing environment 8920 ′ on the computing device 8910 .
- the mobile computing device 9005 is connected to the computing device 8910
- the computing device 8910 detects the connection.
- the user selects a portable computing environment 8920 a - 8920 n from storage to be used on the computing device 8910 .
- a portable computing environment 8920 a - 8920 n in the storage element 128 is decrypted.
- the virtualization software 8921 is automatically loaded on the computing device 8910 .
- the computing device 8910 executes a virtual machine 8925 ′ in the virtualized environment 8922 based on the portable computing environment 8920 a - 8920 n, such as by accessing virtual image 8925 .
- the computing device 8910 controls access to the computing device 8910 via the virtualized computing environment 8920 ′.
- the mobile computing device 9005 is connected to the computing device 8910 by any suitable means and/or mechanisms.
- the computing device 8910 detects the connection.
- the operating system of the computing device 8910 detects connection of the mobile computing device 9005 .
- a device manager detects the connection of the mobile computing device 9005 .
- a plug-and-play manager detects the connection of the mobile computing device 9005 .
- a device driver for the computing device 8910 detects the connection.
- the loading mechanism 8940 ′ detects the connection of the mobile computing device 9005 .
- the computing device 8910 may automatically install, load, and execute a device driver, software, application, process, service, thread or task to perform any of the operations described herein, as described above in connection with FIGS. 89A and 89B , FIGS. 90A and 90B , and FIGS. 91A and 91B .
- computing device 8910 may perform any type and form of authentication and authorization of the user of the mobile computing device 9005 .
- the user selects a portable computing environment 8920 a - 8920 n from storage element 128 to establish as the computing environment 8920 ′ on the computing device 8910 .
- the user may identify or select, via the computing environment selector 9250 , the portable computing environment 8920 a - 8920 n to run on the computing device 8910 .
- the computing device 8910 displays a user interface providing a list of portable computing environments 8920 a - 8920 n from the mobile computing device 9005 for the user to select to establish on the computing device 8910 .
- the computing device 8910 executes an application program identified via the storage element 128 of the mobile computing device 9005 , such as via an autorun file.
- the mobile computing device 9005 has a visual display unit displaying a user interface for the user to select one of the portable computing environments 8920 a - 8920 n.
- one of the portable computing environments 8920 a - 8920 n is identified as a default computing environment 8920 to establish on the computing device 8910 .
- the portable computing environments 8920 a - 8920 n are identified in an order or preference or priority.
- the mobile computing device 9005 comprises one portable computing environment 8920 .
- the portable computing environment 8920 may not need to be selected by the user and is automatically used by the computing device 8910 .
- the user may select the one portable computing environment 8920 .
- the computing device 8910 may perform decryption on any portion of storage element 128 which may be encrypted.
- the storage element 128 comprises an encrypted file system.
- the virtualization software 8921 , virtual image 8925 and/or user data 8930 , or any portions thereof may be encrypted.
- the computing device 8910 decrypts the portion of storage 128 using a key via the loading mechanism 8940 ′, the virtualization layer 8920 , or another set of executable instructions.
- the key may a public key. In other embodiments, the key may be a private key.
- the decryption key may be identity-based, such as based on the identity of a user authenticated via the computing device 8910 .
- the user's authentication credentials such as user id and/or password, may be used to generate or obtain a key for decryption.
- the user's authentication credentials may be used to obtain a key stored in the database.
- the computing device 8910 generates a private key based on performing an algorithm on the user's authentication credentials and a public key, such as a public key provided by a trusted third party.
- the mobile computing device 9005 may store a key that is used by the computing device 8910 to authenticate the user and/or generate a decryption key.
- the computing device 8910 uses a ticket authority to obtain a ticket for decrypting the encrypted portions of storage 128 .
- a ticket authority Any type and form of authentication technologies may be used in performing the operations described herein, such as password based authentication or biometric authentication.
- a token is used to provide two-factor authentication, such as a token manufactured by RSA Security Inc. of Bedford, Mass.
- the computing device 8910 provides or establishes the virtualization layer 8922 on the host computing device 8910 as described above in connection with FIGS. 89A-89B , FIGS. 90A-90B , and FIGS. 91A-91B .
- the computing device 8910 automatically loads, executes or otherwise establishes a virtual machine 8925 a - 8925 n to provide access to a portable computing environment 8920 a - 8920 n on the virtualized layer 8922 .
- the computing device 8910 and/or loading mechanism 8940 accesses the virtual machine image 8925 a - 8925 n from the storage element 128 and loads or executes the virtual machine image 8925 a - 8925 n as a virtual machine 8925 ′ in the established virtualized environment 8922 .
- the computing device 8910 loads, executes or establishes a virtual machine as described above in connection with FIGS. 89A-89B , FIGS. 90A-90B , and FIGS. 91A-91B .
- the computing environment 8920 ′ or virtual machine 8925 is established in a secured manner.
- the established computing environment 8920 ′ protects access to user data 8930 or portions of the computing environment 8920 from the environment of the computing device 8910 external to the computing environment 8920 ′.
- the virtualization software 8921 and/or virtualization layer 8922 ensures that contents of the virtual machine 8925 ′ remain secure while running on the computing device 8910 .
- the virtualization software 8921 and/or virtualization layer 8922 ensures that no input or no output is made available to the environment of the computing device 8910 in a persistent fashion.
- the virtualization software 8921 and/or virtualization layer 8922 may disable clipboard access between the host environment and the virtual machine 8925 ′.
- the virtualization software 8921 and/or virtualization layer 8922 disables access to a file system, or portion thereof, of the computing device 8910 .
- the virtualization software 8921 and/or virtualization layer 8922 prevents paging by the virtual machine 8925 ′ to the page file of the computing device 8910 .
- the virtual machine 8925 ′ uses the storage element 128 on the mobile computing device 9005 for file and data operations.
- the virtualization layer 8922 acts as firewall between the virtual machine 8925 ′ and the host environment.
- the virtualization software 8921 and/or virtualization layer 8922 may provide a configuration mechanism, such as a user interface, to select which actions may be performed and/or data shared between the computing device 8910 and the virtual machine 8925 ′.
- a plurality of computing environments 8920 ′, 8920 ′′ may be established on the computing device 8910 .
- a first computing environment 8920 ′ may be established on the computing device 8910 using a first portable computing environment 8920 a from the mobile computing device 9005
- a second computing environment 8920 ′′ may be established on the computing device 8910 using a second portable computing environment 8920 b from the mobile computing device 9005 .
- FIGS. 93A-93D block diagrams depict embodiments of systems and methods for a mobile computing device to one or more hardware resources.
- the hardware resource may provide access to resources, such as a processor or memory with greater power, size, capacity or performance as compared to corresponding resources of the mobile computing device.
- FIG. 93A depicts an embodiment of a mobile computing device 9005 connecting to a docking station or device having a processor, memory and other computing resources for use by the mobile computing device.
- FIG. 93B depicts an embodiment of a mobile computing device connecting to a second hardware resource, via a docking mechanism, to use a processor, memory and/or resources of the second hardware resource.
- FIG. 93C depicts an embodiment of a docking station providing connectivity to a second hardware resource, such as a computing device, to use a processor, memory and/or resources of the second hardware resource.
- FIG. 93D depicts one embodiment of the steps taken in a method of providing to a mobile computing device one or more hardware resources, as described in the environments illustrated in FIGS. 93A-93C .
- a portable computing environment may be established on the hardware resource in accordance with any of the systems and method described in conjunction with FIGS. 89A-89B , 90 A- 90 B, 91 A- 91 C, 92 A- 92 B.
- the computing environment of the mobile computing device is accessed using the processor, memory, and/or resources of the hardware resource.
- the depicted system includes a mobile computing device 9005 connected to a hardware resource 9302 .
- the mobile computing device 9005 has a central processing unit 102 .
- the hardware resource 9302 has a central processing unit 102 ′.
- the hardware resource 9302 includes a docking station 9310 providing access to the hardware resource 9302 .
- the docking station 9310 includes a processor 102 ′ and memory 122 ′.
- the mobile computing device provides the functionality of a mobile computing device 9005 as described above in connection with FIGS. 90A , 90 B, 91 A, 91 B, 92 A, and 92 B.
- the mobile computing device 9005 comprises a connection mechanism 9305 for connecting the mobile computing device 9005 to the hardware resource 9302 .
- the mobile computing device 9005 uses the central processing unit 102 to effect an initial quanta of work and uses the central processing unit 102 ′ of the hardware resource 9302 to effect subsequent quanta of work when connected to the hardware resource 9302 .
- the mobile computing device 9005 uses the connection mechanism 9305 to switch to using the processing or computing capabilities of the hardware resource 9302 upon or after connecting to the hardware resource 9302 .
- the mobile computing device 9005 may execute a computing environment 8920 on the hardware resource 9302 after connecting to the docking station 9310 .
- the mobile computing device 9005 connects to the hardware resource 9302 via connection across network 150 .
- the mobile computing device 8905 is docked to the hardware resource 9302 via a I/O device mechanism 130 a - 130 n designed and constructed to connect to, and/or interface or communicate with the type and form of mobile computing device 9005 .
- the mobile computing device 9005 is docked to the hardware resource 9302 via a docking connector.
- one of the devices 9005 or 9310 may have a docking connector, and one of the device 9005 or 9310 may have a corresponding interface or connection mechanism designed to receive the connector.
- connection mechanism 9305 may comprise software, hardware, or any combination of software and hardware enabling the mobile computing device 9005 to access the hardware resource 9302 .
- the connection mechanism 9305 comprises any type and form of integrated circuit, such as a Field Programmable Gate Array (FPGA), Programmable Logic Device (PLD), or Application Specific Integrated Circuit (ASIC) capable of performing any of the operations described herein.
- FPGA Field Programmable Gate Array
- PLD Programmable Logic Device
- ASIC Application Specific Integrated Circuit
- connection mechanism 9305 comprises one of the following: a wireless connection, a USB connection, a Firewire connection, a Bluetooth connection, a Wi-Fi connection, a network connection, and a docking connection.
- connection mechanism 9305 is enables the system or mother board of the mobile computing device 9005 to use a processor 102 ′ and/or memory 122 ′ of the hardware resource 9302 .
- the connection mechanism 9305 communicates with any system or data bus of the mobile computing device 9005 to transmit and receive signals directing the mobile computing device 9005 to use a resource of the hardware resource 9302 , such as the processor 102 ′ and memory 122 ′ of the docking station 9310 .
- the connection mechanism 9305 may communicate with a system or data bus of the hardware resource 9302 to enable the use of resources of the hardware resource 9302 by the mobile computing device 9005 .
- connection mechanism 9305 may have the mobile computing device 9005 reboot, restart or reset when connected or docked to the hardware resource 9302 . In another embodiment, the connection mechanism 9305 may allow real-time switching to use a computing resource of the hardware resource 9302 without a reboot or restart. In some embodiments, the connection mechanism 9305 transfers data from memory 122 on the mobile computing device 9005 to memory 122 ′ of hardware resource 9302 . In other embodiments, the connection mechanism 9305 transfers execution of a process from a processor 102 on the mobile computing device 9005 to processor 102 ′ of the hardware resource 9302 . In still other embodiments, the mobile computing device 9005 transfers central processing control and management to the hardware resource 9302 .
- connection mechanism 9305 provides for the use of the processor 102 and/or memory 122 on the mobile computing device 9005 in conjunction with the processor 102 ′ and/or memory 122 ′ of the hardware resource 9302 .
- the mobile computing device 9005 may operate as a multi-processor device.
- the mobile computing device 9005 and/or connection mechanism 9305 maintains the state of the processor 102 and/or memory 122 on the mobile computing device 9005 . As such, in some of these embodiments, upon disconnection from the hardware resource 9302 , the mobile computing environment 9005 continues from a state prior to connection to the hardware resource 9302 . In others of these embodiments, the connection mechanism 9305 transfers data, information, and execution or control from a processor 102 ′ and/or memory 122 ′ to the processor 102 and/or memory 122 of the mobile computing device 9005 .
- connection mechanism 9305 comprises any type and form of user interface to receive user input regarding connection to the hardware resource 9302 , use of hardware resources, and transfer of data and control between hardware resources.
- the connection mechanism 9305 may display a graphical user interface upon docking to the hardware resource 9302 for the user to setup, configure, control and/or manage the use of the hardware resource 9302 .
- the hardware resource 9302 uses the storage element 128 of the mobile computing device 9005 to provide access to a computing environment.
- the hardware resource 9302 executes an operating system stored in storage element 128 of the connected mobile computing device 9005 .
- the hardware resource 9302 mounts the storage element 128 of the connected mobile computing device 9005 for access by the hardware resource 9302 .
- the user uses the operating system or computing environment of the hardware resource 9302 but executes applications and accesses data on the storage element 128 of the mobile computing device 9005 .
- the mobile computing device 9005 may store portable applications to execute in the hardware resource 9302 .
- the hardware resource 9302 executes a virtual machine to provide access to a computing environment stored in the mobile computing device 9005 .
- the hardware resource 9302 executes a virtual machine, the virtual machine providing access to a virtualized computing environment.
- a file from a storage location provided by the mobile computing device 9005 is accessed by a user via the hardware resource 9302 when the mobile computing device 9005 is connected to the hardware resource 9302 , and the file is accessed by the user, via the mobile computing device 9005 , when the mobile computing device 9005 is not connected to the hardware resource 9302 .
- the hardware resource 9302 comprises a docking station 9310 , the docking station 9310 comprising a computer system 100 .
- the docking station 9110 may be any type and form of computer system 100 , as described above in connection with FIGS. 1A-1B .
- the docking station 9110 may comprise components including, but not limited to, a processor 102 ′, memory 122 , storage 128 , a network interface 118 ′, and/or one or more I/O devices 130 a - 130 n ′.
- the docking station 9110 is connected to a display device 124 , a keyboard 126 , and/or a pointing device 127 .
- the docking station 9310 may also be connected to or provide access to other hardware resources and computing peripherals. In some embodiments, the docking station 9310 provides access to resources of another computer system 100 via a network 150 .
- the hardware resource 9302 has a processor 102 ′ having a higher processor speed than the processor 102 of the mobile computing device 9005 .
- the hardware resource 9302 has a processor 102 ′ comprising a processor architecture different than a processor architecture of the processor 102 of the mobile computing device 9005 .
- the mobile computing device 9005 uses the processor 102 to effect an initial quanta of work and, upon connection to the hardware resource 9302 via the connection mechanism 9305 , uses the processor 102 ′ to effect a subsequent quanta of work.
- the mobile computing device 9005 determines that a memory 122 ′ of the hardware resource 9302 has a memory size larger than a memory size of a memory 122 of the mobile computing device 9005 and uses the memory 122 ′ of the hardware resource 9302 to effect subsequent quanta of work.
- the mobile computing device 9005 uses a first operating system executing on the first central processing unit when not connected to the hardware resource and a second operating system executing on the second central processing unit when connected to the hardware resource.
- the second operating system is different than the first operating system.
- the mobile computing device 9005 connects to a docking station 9310 across a network 150 , and in turn, docking station 9310 connects to a computing device 8910 .
- the hardware resource 9302 includes a docking station 9310 connected to or in communication with a computing device 8910 .
- the docking station 9310 provides access to resources of a second computing device 8910 via the connection across network 150 ′.
- the mobile computing device 9005 uses resources of the computing device 8910 via connections across networks 150 and 150 ′.
- the mobile computing device 9005 connects to the computing device 8910 via docking mechanism 9310 .
- the hardware resource 9302 includes a computing device 8910 having a docketing mechanism 9310 , such as an I/O device or mechanism 130 , to dock the mobile computing device 9005 .
- the mobile computing device 9005 uses the resources of the computing device 8910 , such as a processor and/or memory.
- the hardware resource 9302 provides access the mobile computing device 9005 with access to a peripheral computing device.
- the hardware resource 9302 may provide resources and capabilities offering improved power, performance, or other operating or performance characteristics desired by the user of the mobile computing device 8905 or suitable for one or more applications of the mobile computing device, as described in more detail above in connection with FIGS. 89A-89B , 90 A- 90 B, 91 A- 91 B, and 92 A- 92 B.
- a flow diagram depicts one embodiment of the steps taken in a method for providing to a mobile computing device one or more hardware resources.
- the mobile computing device uses a first central processing unit of the mobile computing device 9005 to effect an initial quanta of work (step 9355 ).
- the mobile computing device 9005 connects to a hardware resource 9302 including a second central processing unit (step 9360 ).
- the mobile computing device uses a second central processing unit of the hardware resource 9302 to effect subsequent quanta of work (step 9365 ).
- a mobile computing device uses a first central processing unit to effect an initial quanta of work (step 9355 ).
- the mobile computing device is a computer 100 as described above in connection with FIG. 1A and 1B .
- the mobile computing device is a mobile computing device 9005 as described above in connection with FIGS. 90A-92B .
- the mobile computing device 9005 connects to a hardware resource 9302 including a central processing unit (step 9360 ). In one embodiment, the mobile computing device 9005 connects to the hardware resource 9302 by any suitable means and/or mechanisms. In some embodiments, the mobile computing device 8905 connects or docks to a docking station 9310 providing one or more resources. In one of these embodiments, the mobile computing device 9005 connects to a docking station 9310 having a processor 102 ′ and/or memory 122 ′. In another of these embodiments, the mobile computing device 9005 connects to a docking station 9310 providing a connection to a second computing device 8910 , the second computing device 8910 including a processor 102 ′. In still another of these embodiments, the mobile computing device 9005 connects or docks to a docking mechanism 9310 of a host computing device 8910 .
- the mobile computing device 8905 and the docking station 9110 may connect via any type and form of connection, wired, wireless or otherwise, including, but not limited to, via a wireless connection, a Wi-Fi connection, a USB connection, a Firewire connection, a Bluetooth connection, a network connection, and a docking connection.
- the mobile computing device 8905 and docking station 9110 may communicate via any type and form of protocol, such as a device, bus, communication, application, data, or network protocol.
- the mobile computing device 9005 uses a central processing unit of the hardware resource 9302 (step 9370 ). In one embodiment, the mobile computing device 9005 initiates use of a processor 102 ′ and/or memory 122 ′ of the hardware resource 9302 via a connection mechanism 9305 . In another embodiment, the mobile computing device 9005 transfers execution control and management to the central processing unit of the hardware resource 9302 . In still another embodiment, the mobile computing device 9005 transfers data and information to the processor and/or memory of the hardware resource 9302 . In some embodiments, the mobile computing device 9005 uses the processor and/or memory of the hardware resource 9302 as a second processor and/or memory for the mobile computing device 9005 .
- the mobile computing device 9005 connects to a hardware resource 9302 comprising one of the following: a first docking station having the second central processing unit; a second computing device having the second central processing unit; and a second docking station providing access to a third computing device having the second central processing unit.
- an application program on the mobile computing device 9005 executes in the processor 102 ′ and uses memory 122 ′ of the computing environment 9102 and displays on a visual display unit of the mobile computing device 9005 .
- an application program executing on the processor and using the memory of the hardware resource 9302 receives user input from an input device of the mobile computing device 9005 .
- an application program executing on the processor and using the memory of the hardware resource 9302 displays on a display device 124 of the hardware resource 9302 while receiving input from an input mechanism of the mobile computing device 9005 .
- an application program executing on the processor and using the memory of the hardware resource 9302 displays on a visual display unit of the mobile computing environment 9005 while receiving input from an input device of the hardware resource 9302 , such as keyboard 126 and pointing device 127 .
- the computing environment of mobile computing device 9005 executes on the processor and memory of the mobile computing device 9005 but also uses a resource of the hardware resource 9302 , such as a network connection, printer, display device, input device, or any I/O device 120 .
- the mobile computing device 9005 determines that the second central processing unit has a processor speed greater than a processor speed of the first central processing unit and uses the second central processing unit of the hardware resource to effect subsequent quanta of work. In another embodiment, the mobile computing device 9005 determines that the second central processing unit has a processor architecture different than a processor architecture of the first central processing unit and uses the second central processing unit of the hardware resource to effect subsequent quanta of work. In still another embodiment, the mobile computing device 9005 identifies a memory of the mobile computing device 9005 and identifies a second memory of the hardware resource 9302 . In yet another embodiment, the mobile computing device 9005 determines that the second memory of the hardware resource has a memory size larger than a memory size of the first memory of the mobile computing device and uses the second memory of the hardware resource to effect subsequent quanta of work.
- the hardware resource 9302 uses one or more resources of the mobile computing device 9005 .
- the hardware resource 9302 accesses a storage element or storage device of the mobile computing device 9005 , such as the storage element 128 .
- the hardware resource 9302 mounts the storage element 128 .
- the hardware resource 9302 boots or reboots or otherwise establishes an environment based on a computing environment stored on the mounted storage element 128 .
- the hardware resource 9302 uses the processor 102 and/or memory 122 of the mobile computing device 9005 in addition to the processor and/or memory of the hardware resource 9302 .
- the hardware resource 9302 uses a display device and/or input device of the mobile computing device 9005 . In other embodiments, the hardware resource 9302 executes a computing environment 8920 ′ based on a portable computing environment 8920 in the storage element 128 of the mobile computing device 9005 . In some embodiments, the portable computing environment 8920 may execute in the hardware resource 9302 but display on and receive input from the mobile computing device 9005 .
- the hardware resource 9302 provides the mobile computing device 9005 with access to a peripheral computing device of the hardware resource.
- the mobile computing device 9005 uses a first operating system executing on the first central processing unit on the mobile computing device 9005 when not connected to the hardware resource 9302 and a second operating system executing on the second central processing unit of the hardware resource 9302 when connected to the hardware resource 9302 .
- the first operating system is different than the second operating system.
- a virtual machine executing on the hardware resource 9302 provides the mobile device 9005 with access to a first operating system.
- the hardware resource 9302 executes a virtual machine to provide access to a computing environment stored in the mobile computing device 9005 .
- the mobile computing device 9005 provides access to a computing environment on the hardware resource 9302 .
- a user accesses, via the hardware resource 9302 , a file stored in the mobile computing device 9005 when the mobile computing device 9005 is connected to the hardware resource 9302 and accessing, by the user, via the mobile computing device 9005 , the file stored in the mobile computing device 9005 when the mobile computing device 9005 is not connected to the hardware resource 9302 .
- the mobile computing device 9005 uses a processor of the hardware resource 9302 to provide access to a computing environment stored on the mobile computing device 9005 .
- the mobile computing device 9005 uses a processor of the hardware resource 9302 to provide access to an operating system stored on the mobile computing device 9005 .
- the mobile computing device 9005 uses a processor of the hardware resource 9302 to provide access to an application program stored on the mobile computing device 9005 .
- the mobile computing device 9005 uses a processor of the hardware resource 9302 to execute a virtual machine on the hardware resource, responsive to a virtual machine image stored on the mobile computing device.
- the mobile computing device uses a processor of the hardware resource 9302 to provide access to a computing environment stored on the hardware resource.
- mobile computing device 9005 comprises a first processor 102 and a second processor 102 ′.
- the processors 102 , 102 ′ may access a memory 122 and/or storage element 128 on the mobile computing device 9005 .
- the mobile computing device 9005 includes a switching mechanism 9405 for switching between using the first processor 102 and the second processor 102 ′.
- the mobile computing device 9005 may have a lower-powered processor 102 for minimal functionality or standby operations, and have a higher-powered processor 102 for normal operations or for applications suitable or requiring more powerful processor capability.
- the mobile computing device 9005 may use the lower-powered processor 102 to lengthen battery-life and conserve power. The user may at any time want to access an application having higher processor requirements or suitability. When accessing these applications, the mobile computing device 9005 may use the higher-powered processor 102 ′.
- the processor 102 and processor 102 ′ may be the same type and speed of processor. In other embodiments, the processor 102 and processor 102 ′ may be a different type and speed of processor. In some embodiments, processor 102 comprises a processing speed and/or capability greater than processor 102 ′. In other embodiments, processor 102 ′ comprises a processing speed and/or capability greater than the processor 102 . In some embodiments, the processor 102 and 102 ′ are single core processors. In other embodiments, the processor 102 and 102 ′ are multiple core processors. In one embodiment, the processor 102 is a single core processor and processor 102 ′ is a multiple core processor, such as dual or quad core processor. In yet another embodiment, the processors 102 and 102 ′ comprise the same processor architecture and/or are manufactured by the same processor manufacturer. In other embodiments, the processors 102 and 102 ′ comprise different processor architectures and/or are manufactured by different processor manufacturers.
- a first processor 102 comprises operational characteristics designed and constructed for lower power consumption, longer battery life, performance and/or applications of a mobile or portable computing device. In one of these embodiments, a first processor 102 may be referred to as a low-powered CPU. In other embodiments, a second processor 102 ′ comprises operational characteristics designed and constructed for the power, performance and/or application requirements of a desktop computing environment, server computing environment, or otherwise a non-mobile computing environment. In one of these embodiments, the second processor 102 ′ may be referred to as a high-powered CPU. In other embodiments, the processor 102 provides a first level of processing or processor capability, and the second processor 102 ′ provides a second level of processing or processor capability.
- the second level of capability is greater or higher than the first level. In another of these embodiments, the second level of capability is preferred over the first level. In still other embodiments, the mobile computing device uses the first processor for one or more applications suitable for the first level of power consumption and processing capability, and the mobile computing device uses the second processor for one or more applications suitable for the second level of power consumption and processing capability.
- the switching mechanism 9405 enables the mobile computing device 9005 to switch between using a first processor 102 and a second processor 102 ′, or any plurality of processors.
- the switching mechanism 9405 comprises any type and form of integrated circuit, such as a Field Programmable Gate Array (FPGA), Programmable Logic Device (PLD), or Application Specific Integrated Circuit (ASIC) capable of performing any of the operations described herein.
- FPGA Field Programmable Gate Array
- PLD Programmable Logic Device
- ASIC Application Specific Integrated Circuit
- the switching mechanism 9405 enables the system or mother board of the mobile computing device 9005 to use a first processor 102 .
- the switching mechanism 9405 enables the system or mother board of the mobile computing device 8905 to use a second processor 102 ′.
- the switching mechanism 9405 communicates with any system or data bus of the mobile computing device 9005 to transmit and/or receive signals directing the mobile computing device 9005 to use a second processor 102 ′ instead of a first processor 102 , and likewise to use the first processor 102 instead of the second processor 102 ′.
- the switching mechanism 9405 may interface and/or communicate with a system or data bus of the mobile computing device 9005 to transmit and/or receive signals to use both the first processor 102 and second processor 102 ′ instead of just the first processor 102 or the second processor 102 ′.
- the switching mechanism 9405 transfers data and execution from processor 102 to processor 102 ′ of the mobile computing device 9005 .
- the switching mechanism 9405 transfers central processing control and management from a first processor 102 to a second processor 102 ′, or from the second processor 102 ′ to the first processor 102 .
- the switching mechanism 9405 may have the mobile computing device 9005 reboot, restart or reset when switching between using a processor 102 , 102 ′.
- the switching mechanism 9405 may perform real-time switching from processor to processor.
- the switching mechanism 9405 identifies a condition, event or trigger upon which to switch between using one processor and another processor. In other embodiments, switching mechanism switches to one of the first processor or the second processor based on a user selection. In one of these embodiments, the switching mechanism 9405 comprises a user interface, such as a graphical user interface or a command line user interface, for a user to identify, specify or configure the conditions, events or triggers for performing switching between processors. For example, the switching mechanism 9405 may switch, automatically, manually or otherwise, between a first processor 102 and a second processor 102 ′ based on any operational characteristics of the mobile computing device 9005 or the processors 102 , 102 ′.
- the switch mechanism 9105 switches between use of a processor based on a level of load of the first processor or second processor. In yet other embodiments, the switch mechanism 9405 switches between use of a processor based on a level of activity, such as task, processes, applications, of the first processor 102 or second processor 102 ′. In some embodiments, the switch mechanism 9405 switches between using a first processor and a second processor based on a level of consumption of power and/or battery life. In still another embodiment, the switch mechanism 9405 switches between use of a processor based on a type of application actuated or executed on the mobile computing device 9005 .
- the switching mechanism 9405 comprises a user interface for the user to switch between processors 102 , 102 ′. For example, using a hot key, set of key strokes, or selecting an icon in a task bar, a user may instruct, command or direct the mobile computing device 9005 and/or switching mechanism 9405 to switch between processors, use one processor instead of another, or use the plurality of processors 102 , 102 ′ at the same time.
- a flow diagram depicts one embodiment of a method for switching, by a mobile computing device, between use of multiple processors.
- the mobile computing device uses a first processor designed and constructed to provide a first level of power consumption and processing capability (step 9455 ).
- the switching mechanism determines to switch the mobile computing device to using a second processor based on an operating characteristic of the mobile computing device, the second processor designed and constructed to provide a second level of power consumption and processing capability (step 9460 ).
- the mobile computing device 9005 uses the second processor responsive to the determination by the switching mechanism.
- the mobile computing device 9005 uses the first processor (step 9455 ).
- the switching mechanism 9405 identifies the first processor 120 as the default processor for use by the mobile computing device 9005 .
- the mobile computing device 9005 uses the first processor 120 upon starting, restarting or booting of the operating system on the mobile computing device 9005 .
- a user selects the first processor 120 as the default processor.
- the use may have identified the first processor 120 to the switching mechanism 9405 .
- the switching mechanism 9405 determines to switch the mobile computing device 9005 to using the second processor 120 ′, based on an operating characteristic of the mobile computing device, the second processor designed and constructed to provide a second level of power consumption and processing capability (step 9460 ). In some embodiments, the switching mechanism 9405 determines to switch based on operating conditions or characteristics of the mobile computing device 9005 , such as the operating system, resource usage, memory usage, power consumption, load, and numbers of processes, applications, services or tasks.
- the second level of power consumption and processing capability of the second processor comprises a level greater than the first level of power consumption and processing capability of the first processor.
- the mobile computing device uses the first processor for one or more applications suitable for the first level of power consumption and processing capability, and uses the second processor for one or more applications suitable for the second level of power consumption and processing capability.
- the switching mechanism 9405 switches to one of the first processor or the second processor automatically based on the initiation of execution of an application.
- the switching mechanism 9405 switches to one of the first processor or the second processor automatically based on one or more of the following operating characteristics: a level of load of one of the first processor or the second processor, a level of activity of one of the first processor or the second processor, and a level of power consumption of one of the first processor or the second processor. In one of these embodiments, the switching mechanism 9405 determines the load, activity or power consumption of the first processor 102 is near, equal or greater than the processing capability of the first processor 102 . In another of these embodiments, the switching mechanism 9405 determines the processor requirements of an application executed by the user or requested by the user for execution is near, equal or greater than the processing capability of the first processor 102 .
- the switching mechanism 9405 determines the mobile computing device 9005 would perform at a more suitable performance or operational level, or in a manner desired by the user if the mobile computing device 9005 was using the second level of processing capability of the second processor 120 ′.
- a user selects to switch to using the second processor 120 ′.
- a user via a user interface, directs or instructs the switching mechanism 9405 to switch the mobile computing device 9005 to use the second processor 120 ′.
- the mobile computing device 9005 uses the second processor 120 (step 9465 ). In one embodiment, the mobile computing device 9005 uses the second processor 120 ′ instead of the first processor 120 . In another embodiment, the mobile computing device 9005 uses the second processor 120 ′ in addition to the first processor 120 . In some embodiments, the mobile computing device 9005 and/or switching mechanism 9405 transfers information, data, control and/or management to the second processor 120 ′ to continue operation of the operating system, applications, process, services or tasks executing on the first processor 102 . In other embodiments, new applications or processes initiated by the user are executed on the second processor 120 ′.
- the switching mechanism 9405 switches to having the mobile computing device 9005 use the first processor 120 for a first level of processing capability.
- the switching mechanism 9405 determines to switch based on the operating conditions or characteristics of the device 9005 , such as the operating system, resource usage, memory usage, power consumption, load, and numbers of processes, applications, services or tasks. For example, in one embodiment, the switching mechanism 9405 determines the load, activity or power consumption of the second processor 102 ′ is greater than the processing capability needed for operating the mobile computing device 9005 in its current state. In another embodiment, the switching mechanism 9405 determines the processor requirements of an application executed by the user or requested by the user for execution is near, or equal to the processing capability of the first processor 102 .
- the switching mechanism 9405 determines the processor requirements of an application executed by the user or requested by the user for execution is less than the second level of processing capability of processor 120 ′. In other embodiments, the switching mechanism 9405 determines the mobile computing device 9005 would perform at a suitable performance or operational level, or in a manner desired by the user if the mobile computing device 9005 was using the first level of processing capability of the first processor 120 . For example, the mobile computing device 9005 would perform in a suitable manner for the user using the first processor 102 but would also save on battery life or reduce power consumption. In yet another embodiment, a user selects to switch to using the first processor 120 .
- the user via a user interface directs or instructs the switching mechanism 9405 to switch the mobile computing device 9005 to use the first processor 120 .
- the method 9450 may be performed again to switch the mobile computing device 9005 to using the first processor at step 9455 .
- the session management component 1300 uses a connection to transmit information associated with a monitor on the client machine 10 to the virtual machine service component.
- multi-monitor geometry support is provided.
- the session management component 1300 accesses multi-monitor information and enables the virtual machine service component to create a version of the multi-monitor information in the virtual machine.
- techniques are provided for virtualizing a display environment of a client by modifying and controlling the behavior and appearance of an application's window based on a desired display layout for the client.
- the techniques may be used for simulating or providing a multiple display setup for a single display environment.
- One embodiment provides a window processing mechanism to intercept a selected message to a window of an application and modify the message to the window to display the window on the client based on the desired display layout.
- the message to the window provides for the behavior or appearance of a window used or displayed by the application.
- the window processing mechanism provides a hooking mechanism to an application's window procedure and replaces the original window procedure with a window procedure designed to intercept a selected window message and modify values of arguments or parameters of the intercepted window message based on the desired display layout of the client.
- selected window messages are processed to provide or translate the behavior or appearance of the window to the desired display layout.
- a remote machine 30 or a virtual machine executing in a hypervisor on the remote machine 30 , may be setup or configured for a single display environment while the client machine 10 may be setup or configured for one or more display devices.
- a session on a machine such as a session on a WINDOWS server operating system may only be able to be configured or setup for a single display.
- the server may obtain a preferred or desired display layout for the client, and store the display layout in association with the client, such as associating the display layout with a remote session for the client.
- the window message processing mechanism may be used by the server to intercept and modify selected messages to windows of the application running on the server on behalf of the client.
- the window messages are modified to provide a behavior or appearance of the window based on the display layout associated with the client.
- the display output communicated by the server to the client includes display output to be displayed on the client according to the client's display layout rather than the display layout, e.g., single display layout, of the session on the server.
- Using the techniques and mechanisms described herein allows a user to access a remotely available application in a server-based computing environment regardless of the monitor layout of the client. Instead of the server associating a single display with the remote session, the server will provide display output based on the client's display layout. Furthermore, remotely-provided application may maximize to the proper display from the perspective of the client. Also, menu items and other windows of an application may be displayed appropriately within an application, for example, without appearing disjoint from the application. Additionally, the issue of a window being rendered off-screen after changes to the display layout is handled by automatically moving the window to a viewable upon detection of an off-screen window.
- these techniques and mechanisms may also be practiced in a local computing environment to virtualize, simulate, or otherwise provide a multiple monitor environment for a client having a single display device.
- a desired display layout may be configured or provided to specify multiple displays.
- the window processing mechanism may be used to intercept and modify window messages for an application on the client to control the behavior or appearance of the window based on the desired display layout instead of the actual monitor layout. As such, a user may gain the functionality, benefits, and advantages of a multiple monitor environment without having multiple display devices.
- a client machine 10 may be connected to or otherwise use a display device 124 , in one embodiment, or multiple display devices 124 a- 124 n, in another embodiment.
- the client machine 10 includes a display layout 1520 comprising a desired display configuration for the client machine 10 , such as for display device 124 .
- the client machine 10 includes a storage element 1525 for storing the display layout of the client machine 10 .
- the client machine 10 also includes a window processing mechanism 1550 .
- the display layout 1520 comprises any type and/or form of information or data to identify, specify, or describe a desired display layout configuration for the client.
- the display layout 1520 may comprise a file or set of files in any format.
- the display layout 1520 may comprise any information or data stored in any type and/or form of storage or memory element provided by the client machine 10 .
- the display layout 1520 may be provided or stored in any suitable type and/or form of database.
- the display layout 1520 may be provided via any object, data structure, or application programming interface (API).
- API application programming interface
- the display layout 1520 may comprise any graphical, textual, or combination of graphical and textual elements.
- the display layout 1520 may be created, edited, configured, or otherwise provided by any suitable means and/or mechanisms, such as a graphical and/or text-based tool, program or application.
- a graphical tool with a user interface may be used to design, create, edit and configure the display layout 1520 .
- the display layout 1520 may include attributes, properties, characteristics, values, settings, profiles, and other display configuration information 1522 a - 1522 n to define each display for the client.
- the display layout 1520 may include display configuration 1522 a - 1522 n for each of the desired displays, physical, virtual, or otherwise.
- the display layout 1520 includes a description of the layout, location, position, organization, or arrangement for each display device 124 a - 124 n.
- the display layout 1520 includes a visual or graphical arrangement identifying the location and/or size of each monitor with respect to each other.
- each display 1522 a - 1522 n is identified by an identifier, such as a name or number.
- the display configuration 1522 a - 1522 n may include a monitor type, a screen refresh rate, adapter type, adapter information, screen resolution, a color quality, a color scheme, a font size, a background, a style for buttons and menus, and a screen saver.
- the display configuration 1522 a - 1522 n may include information or data to identify or specify a resolution 1524 a - 1524 n and/or a work area 1526 a - 1526 n for each display, such as the display corresponding to a display device 124 a - 124 n.
- the resolution 1524 a - 1524 n identifies the number of pixels, or individual points of color, contained on a display monitor, expressed in terms of the number of pixels on the horizontal axis and the number of pixels on the vertical axis.
- the sharpness of the image displayed on the display device 124 a - 124 n may depend on the resolution and the size of the display device 124 a - 124 n.
- the work area 1526 a - 1526 n identifies the usable dimensions of the screen area of the display device 124 a - 124 n in pixels.
- the work area 1526 a - 1526 n does not include the dimensions of the screen area not useable by the user, such as the portion of the screen area having a menu, tool, or task bar, such as the task bar on a desktop provided via a WINDOWS operating system.
- the display layout 1520 is configured to correspond to the number of display devices 124 a - 124 n, and their available features and characteristics, accessible by the client. In other embodiments, the display layout 1520 does not match or correspond to the number of display devices 124 a - 124 n connected to the client.
- the client machine 10 may have a single display device 124 a but the display layout 1520 may be configured for multiple display devices 124 a - 124 n. In one aspect, the display layout 1520 may be configured for a display device 124 a that is virtual, or a virtual display device.
- a virtual display device is rendered off the screen area of the physical display device 124 a and may be placed on and off the visible screen area by any suitable mechanism and/or means, such as for example, tabbing between desktops, or panning and scrolling beyond the work area of the physical display device 124 a.
- a virtual display device may comprise a resolution 1524 a - 1524 n, a work area 1526 a - 1526 n, and any other data or information in a display configuration 1522 a - 1522 n as if it was a physical display device 1524 a - 1524 n connected or to be connected to a client machine 10 .
- the work area 1526 a - 1526 n of the virtual display device is relative to and/or adjacent horizontally or vertically to the screen area of the physical display device 124 a - 124 n.
- the resolution 1524 a - 1524 n of the virtual display device is the same resolution 1524 a - 1524 n of the physical display device 124 a, or one of the resolutions 1524 a - 1524 n supported by the physical display device 124 a.
- a display 1522 a corresponding to a physical display device 124 a is not required to be configured as the top left monitor.
- the display layout 1520 may comprise any arrangement of positive and/or negative coordinate systems, and any displays 1522 a - 1522 n, or display devices 124 a - 124 n, virtual or otherwise, may be configured to be located with any positive and/or negative coordinates, or in any portion of the positive and/or negative coordinate system.
- the storage element 1525 illustrated in the client machine 10 of FIG. 15A may comprise any type and/or form of storage or memory, such as random-access memory, a disk drive, a disk array, a rewriteable optical drive, shared memory, a database, a file, an object, a data structure, or any other type and/or form of storage or memory element that allows the storing of and access to information or data, such as the display layout 1520 .
- storage element 1525 provides the display layout 1520 as a globally mapped data file, which may be accessible by any of the applications 1530 of the client machine 10 .
- the storage element 1525 stores the display layout 1520 , or a portion of the display layout 1520 .
- the display layout 1520 may be converted, translated, transformed or otherwise altered to be stored in the storage element 1525 .
- the storage element 1525 is illustrated on the client machine 10 , another client machine 10 accessible to the client machine 10 , such as a server, may have a storage element for storing the display layout 1520 .
- the client machine 10 executes or otherwise provides one or more applications 1530 .
- the application 1530 can be any type and/or form of software, program, or executable instructions such as any type and/or form of web browser, web-based client, client-server application, a thin-client computing client, an ActiveX control, or a Java applet, or any other type and/or form of executable instructions capable of executing on client machine 10 .
- the application 1530 provides one or more windows 1535 a - 1535 n, also sometimes collectively referenced herein as 1535 .
- the window 1535 a - 1535 n is a graphic, sometimes rectangular in shape, having either some kind of user interface or graphical or textual representation of the output of, and in some cases, allowing input for the application 1530 .
- the window 1535 a - 1535 n comprises an area on the screen that displays information, including user documents as well as communications such as alert boxes and dialog boxes. Additionally, the user may open or close a window, move it around on the display, and sometimes change its size, scroll through it, and edit its contents.
- the user interface for the application 1530 is the window 1535 a - 1535 n.
- the application 1530 provides a top level window 1535 a - 1535 n for the presentation and/or navigation structure or framework for the application 1530 , and provides additional windows 1535 a - 1535 n in response to input or other events.
- the application 1530 may have a menu system and screen area for a user interface represented by a top level window 1535 a, and based on user input, displays a secondary or smaller window 1535 to provide output to the user and/or receive input from the user regarding the application 1530 .
- the application 1530 , and/or any windows 1535 a - 1535 n of the application may receive a message 1540 , such as a window message, as input.
- the message 1540 may be any type and/or form of communication via any type and/or form of medium.
- the message 1540 comprises a communication to a window 1535 a - 1535 n to control or direct the behavior, appearance, attributes, or properties of the window 1535 a - 1535 n.
- the application 1530 is event-driven, and waits for the operating system, or system, to pass input to them. The system passes all input for an application to the various windows 1535 a - 1535 n in the application 1530 .
- Each window 1535 a - 1535 n has a function, called a window procedure, which the operating system calls in response to receiving input for the window.
- a window procedure is a function that receives and processes all messages sent to the window.
- a window class may have a window procedure, and every window created with that class uses that same window procedure to respond to messages.
- the window procedure processes the input and returns control to the system.
- the system passes input to a window procedure in the form of a message 1540 , which may be generated by the operating system or other applications 1530 .
- a message 1540 may be generated for an input event, for example, when the user types, moves the mouse, or clicks a control such as a scroll bar.
- a message 1540 may also be generated in response to changes in the operating system or computing device brought about by an application 1530 .
- An application 1530 can generate messages to direct windows 1535 a - 1535 n of the application 1530 to perform tasks or to communicate with windows 1535 a - 1535 n in other applications.
- a message 1540 is sent to a window procedure with parameters.
- the message 1540 comprises a set of four parameters: a window handle, a message identifier, and two values referred to as message parameters.
- the window handle identifies the window for which the message is intended, and is used to determine which window procedure should receive the message.
- a message identifier identifies a purpose or function of the message 1540 .
- a window procedure uses the message identifier to determine how to process the message. For example, a message identifier WM_PAINT of a message 1540 may indicate to a window procedure that the window's 1535 client area has changed and must be repainted.
- the parameters of a message 1540 may specify data or the location of data used by a window procedure when processing a message 1540 .
- the meaning and value of the parameters may depend on the message 1540 .
- a message parameter can include an integer, a string, packed bit flags, a pointer to a structure containing additional data, or any type and/or form of data or information.
- a message 1540 is generally described in the context of a WINDOWS-based environment, a message 1540 may be any type and/or form of communication in any type of operating system or environment, as one ordinarily skilled in the art would recognize and appreciate, to control or direct the appearance, behavior and attributes of a window 1540 being displayed or otherwise being used, processed, or provided by the application 1530 .
- the message 1540 may be in a form and have content suitable to the environment or operating system for which the operations described herein may be practiced.
- the window processing mechanism 1550 also referred to as a window message processing mechanism, provides the means and mechanism for changing, controlling or directing an appearance, behavior or attribute of the window 1535 a - 1535 n of an application 1530 based on the desired display layout 1520 of the client 1505 .
- the window processing mechanism 1550 may comprise an application programming interface (API), application, module, software component, library, service, process, task or any other form and/or type of executable instructions designed to and capable of executing or providing the functionality described herein.
- the window processing mechanism 1550 may comprise software, hardware, or any combination of software and hardware.
- an application 1530 may be designed or constructed to include the functionality of the window processing mechanism 1550 , while in some other embodiments, the window processing mechanism 1550 is designed and constructed to be used by existing applications 1530 , for example, without changing the application 1530 .
- the window processing mechanism 1550 comprises a mechanism for subclassing window procedures of a window 1535 of the application 1530 , and providing a window procedure that gets called or used in place of the original window procedure of the window 1535 .
- a hooking mechanism is used by the window processing mechanism 1550 to provide the replacement window procedure.
- a hooking mechanism comprises using an application programming interface (API) to replace the executable instructions or code of a function, procedure, or API with a desired set of executable instructions or code.
- the window processing mechanism 1550 may introduce a hooking mechanism for any API related to creating, establishing, or providing a window 1535 , for example, the CreateWindowA, CreateWindowW, CreateWindowExA, and CreateWindowExW APIs of the WINDOWS operating system environment.
- the window procedure is replaced via the Windows application programming interface (API) calls of GetWindowLong and SetWindowLong.
- the replaced window procedure is stored in a list of any suitable type and/or form along with a window handle or reference to the replaced window procedure.
- the window procedure used by the window processing mechanism 1550 may call the replaced window procedure.
- the window processing mechanism 1550 may pass through a message 1540 to the original window procedure for processing.
- the window procedure of the window processing mechanism 1550 may be constructed and designed to intercept all or a portion of the messages 1540 communicated to or received by the window 1535 . In some embodiments, the window procedure intercepts all messages 1540 and any messages 1540 not to be modified are communicated to the original or replaced window procedure. In one embodiment of a Microsoft® Windows based environment, the window procedure of the window processing mechanism 1550 intercepts messages 1540 with a message identifier comprising one of the following: 1) WM_DISPLAYCHANGE, 2) WM_WINDOWPOSCHANGED, 3) WM_WINDOWPOSCHANGING, and 4) WM_GETMAXMININFO.
- a WM_DISPLAYCHANGE message 1540 communicates to a window 1535 a change in a resolution 1524 of a display 124 .
- a WM_WINDOWPOSCHANGED message 1540 communicates to a window 1535 a change in a size, position, or a place in the Z order for the window 1540 .
- a WM_WINDOWPOSCHANGING message 1540 is communicate to a window 1535 when a change in a size, position, or a place in the Z order for the window 1540 is about to occur.
- a WM_GETMAXMININFO message 1540 is communicated to a window 1535 when a size or position, or a window 1540 is about to change.
- the window processing mechanism 1550 intercepts a message 1540 and modifies a return value or parameter of the message 1540 to correspond to or be based on the display layout 1520 .
- the window processing mechanism 1550 intercepts messages 1540 for a top-level window 1535 , and in other embodiments, the window processing mechanism 1550 intercepts messages for windows 1535 that are not a top-level window.
- the window processing mechanism 1550 intercepts messages 1540 for a certain set of windows 1540 .
- the window processing mechanism 1550 may be configured to intercept windows 1550 defined in a list, database, storage 1525 , or any other type and/or form of configuration medium.
- the message 1540 intercepted by the window processing mechanism 1550 may have return values, arguments, and/or parameters designed or targeted for the actual display layout of the client machine 10 or remote machine 30 , but the window processing mechanism 1550 changes the return values, arguments and/or parameters to be designed or targeted for the display configuration 1522 a - 1522 n provided by the desired display layout 1520 .
- the window processing mechanism 1550 may read, access, acquire or otherwise obtain the display layout 1520 from the storage element 1525 by any suitable means and/or mechanism.
- the window processing mechanism 1550 may comprise any type of logic, functionality, business rules, or operations to obtain the values, arguments, and parameters of the message 1540 and analyze, compare or otherwise process the values, arguments, and parameters of the message 1540 in view of the display layout 1520 , and determine any changes or modifications to the values, arguments or parameters or the message 1540 to display the window 1535 on a display identified by the display layout 1520 .
- the window processing mechanism 1550 modifies the message 1540 according to the determined changes and communicates the message 1540 to the window 1535 .
- the window processing mechanism 1550 determines the message 1540 does not need to be modified and thus communicates the message 1540 in the same form as intercepted by the window processing mechanism 1550 .
- the window processing mechanism 1550 replaces the message 1540 with a second message.
- FIG. 15B another embodiment of a networked computer environment is shown in which the client machine 10 communicates with a remote machine 30 via one or more communication networks 150 .
- the client machine 10 may be connected to or otherwise use one or more display devices 124 a - 124 n.
- the client machine 10 includes a display layout 1520 comprising a desired display configuration for the client machine 10 , such as for display devices 124 a - 124 n.
- the client machine 10 may also include a client agent 1508 .
- the remote machine 30 includes an application 1530 providing one or more windows 1535 a - 1535 n, and a storage element 1525 for storing the display layout 1520 of the client machine 10 .
- the remote machine 30 also includes a server agent 1528 , a session login mechanism 1545 , and a window processing mechanism 1550 .
- the environment 1500 may provide a server-based or thin-client computing environment for practicing the operations described herein.
- the application 1530 may be an application executed on the remote machine 30 on behalf of the client machine 10 .
- the display output from execution of the application 1530 may be communicated to the client machine 10 for display on the client, for example, via the client agent 1508 .
- the display output may be communicated between the remote machine 30 and client machine 10 via a remote display protocol.
- the display output may be based on a window 1540 of the application 1530 running on the remote machine 30 but to be displayed on the client machine 10 .
- the window processing mechanism 1550 on the remote machine 30 intercepts and modifies messages 1540 of the application 1530 running on the remote machine 30 , communicates the message 1540 to the window 1535 .
- the display output communicated to the client machine 10 reflects the modified message 1540 processed by the window 1535 .
- a client agent 1508 is included within the client machine 10 .
- the client agent 1508 can be, for example, implemented as a software program and/or as a hardware device, such as, for example, an ASIC or an FPGA.
- An example of a client agent 1508 with a user interface is a Web Browser (e.g. Internet Explorer and/or NetscapeTM Navigator browser).
- the client agent 1508 can use any type of protocol, such as a remote display protocol, and it can be, for example, an HTTP client agent, an FTP client agent, an Oscar client agent, a Telnet client agent, an Independent Computing Architecture (ICA) client agent from Citrix Systems, Inc.
- ICA Independent Computing Architecture
- the client agent 1508 is configured to connect to the remote machine 30 .
- the client 1508 includes a plurality of client agents 1508 , each of which may communicate with a remote machine 30 , respectively.
- the remote machine 30 may comprise a server agent 1528 which may be capable of and configured to work in conjunction with the client agent 1508 .
- the server agent 1528 may be a server side component that accepts connections and requests from the client agent 1508 .
- the server agent 1528 may be capable of and configured to accept or establish remote access connections or sessions for the client machine 10 .
- the client agent 1508 and server agent 1528 may communicate using a protocol, such as http, ICA or RDP, over the network 1504 .
- the client agent 1508 and/or server agent 1528 are used to establish, re-establish, maintain, or otherwise provide a server-based computing or thin-client computing based connection or session.
- the client agent 1508 and the server agent 1528 establish the start and end points of communications for a connection between the client machine 10 and the destination remote machine 30 .
- the remote machine 30 includes a storage element 1525 for storing the display layout.
- storage element 1525 provides the display layout 1520 as a globally mapped data file, which may be accessible by any of the applications 1530 of the remote machine 30 .
- the display layout 1520 is stored in the same form as provided to or received by the remote machine 30 .
- the storage element 1525 is illustrated on the remote machine 30 in FIG. 15B , the client machine 10 may also include a storage element 1525 ′, and in some embodiments, the client machine 10 stores the display layout 1520 in the client's storage element 1525 ′, and/or to the remote machine's storage element 1525 .
- the remote machine 30 may also include a session login mechanism 1545 , which may include any type and/or form of service, process, task or program, application, or executable instructions on the remote machine 30 to handle and process login or session requests.
- the session login mechanism 1545 may be provided via the operating system of the remote machine 30 .
- the session login mechanism 1545 includes the windows logon process, winlogon, a component of the Microsoft® Windows families of operating systems.
- the session login mechanism 1545 may provide interactive logon support, and may include a Graphical Identification and Authentication dynamically linked library (DLL) referred to as the GINA, and any number of network providers.
- DLL Graphical Identification and Authentication dynamically linked library
- the session login mechanism 1545 may include any interfaces, such as an application programming interface (API) or dynamically linked libraries, i.e., a dll,, to allow any resource, application, network or network provide gather obtain any identification and authentication information during a logon process.
- API application programming interface
- dll dynamically linked libraries
- the session login mechanism 1545 may perform an authentication process and password-updating operations for the operating system and/or for one or more resources, programs, applications, networks, or network providers.
- the session login mechanism 1545 provides authentication services for the operating system, and in additional embodiments, also provides authentication services for access to applications 1530 to be executed on the remote machine 30 on behalf of the client machine 10 , such as in a server-based or thin-client computing model.
- the session login mechanism 1545 may monitor any mouse and/or keyboard activity related to logging on or secure access of the remote machine 30 , or any resource, application, network, or network provider.
- the session login mechanism 1545 may establish any initial services, processes, or tasks for a user or session on the remote machine 30 .
- the remote machine 30 may execute or otherwise provide one or more applications 1530 .
- the application 1530 can be any type and/or form of software, program, or executable instructions such as any type and/or form of web browser, web-based client, client-server application, a thin-client computing client, an ActiveX control, or a Java applet, or any other type and/or form of executable instructions capable of executing on client machine 10 or communicating via a network 1504 .
- the application 1530 can use any type of protocol and it can be, for example, an HTTP client, an FTP client, an Oscar client, or a Telnet client. In some embodiments, the application 1530 uses a remote display or presentation level protocol.
- the application 1530 comprises any type of software related to Voice-Over-Internet Protocol (VOIP) communications, such as a soft IP telephone.
- the application 1530 comprises any application related to real-time data communications, such as applications for streaming video and/or audio.
- the application 1530 provides one or more windows 1535 a - 1535 n, also sometimes collectively referenced herein as 1535 .
- the remote machine 30 or a machine farm 38 may be running one or more applications 1530 , such as an application 1530 providing a thin-client computing or remote display presentation application.
- the remote machine 30 or machine farm executes as an application 1530 , any portion of the Citrix Access SuiteTM by Citrix Systems, Inc., such as the MetaFrame or Citrix Presentation ServerTM, and/or any of the Microsoft® Windows Terminal Services manufactured by the Microsoft Corporation.
- the application 1530 is an ICA client, developed by Citrix Systems, Inc. of Fort Lauderdale, Fla.
- the application 1530 includes a Remote Desktop (RDP) client, developed by Microsoft Corporation of Redmond, Wash.
- RDP Remote Desktop
- the remote machine 30 may run an application 1530 , which for example, may be an application server providing email services such as Microsoft Exchange manufactured by the Microsoft Corporation of Redmond, Wash., a web or Internet server, or a desktop sharing server, or a collaboration server.
- any of the applications 1530 may comprise any type of hosted service or products, such as GoToMeetingTM provided by Citrix Online Division, Inc. of Santa Barbara, Calif., WebEXTM provided by WebEx, Inc. of Santa Clara, Calif., or Microsoft Office LiveMeeting provided by Microsoft Corporation of Redmond, Wash.
- the window processing mechanism 1550 may reside in any portion of the remote machine 30 , the client machine 10 , and/or external to the application 1530 , for example, as illustrated in FIG. 15C .
- the window processing mechanism 1550 comprises a service, process, or task that runs in a system context or with the system privileges of the operating system.
- the windows processing mechanism 1550 may monitor messages 1540 communicated to windows 1535 a - 1535 n of an application 1530 , and intercept and modify the message 1540 to the windows 1535 a - 1535 n.
- the windows processing mechanism 1550 may comprise any type and/or form of executable instructions capable of performing the operations described herein.
- the session login mechanism 1545 may be used to provide for, or use, any of the functionality of the window processing mechanism 1550 .
- the session login mechanism 1545 may read, access, acquire or otherwise obtain the display layout 1520 from the storage element 1525 .
- the session login mechanism 1545 accesses, loads, or uses the functionality of the window processing mechanism 1550 via a dynamically loaded library, such as a library provided via a network provider to the winlogon process of a WINDOWS operating system.
- the session login mechanism interfaces with or communicates to the window processing mechanism 1550 to provide the techniques described herein.
- the session login mechanism 1545 may use the techniques described herein during reconnection, re-establishment, and/or re-authentication of a login or user session, such as a remote session in a server-based computing environment 1500 .
- FIG. 3A depicts a method 300 for practicing an embodiment using the window processing mechanism 1550 .
- FIG. 3B depicts examples of window messages and processing used in conjunction with the method 300 .
- FIG. 3C depicts a method 350 for practicing an embodiment when reconnecting, re-establishing or re-authenticating via the session login mechanism 1545 .
- FIG. 3D depicts illustrative method 360 for changing the client's display layout 1520 , for example, during execution of an application 1530 .
- FIG. 16A in brief overview, one embodiment of a method for providing a desired display layout 1520 of the client machine 10 is shown.
- the display layout 1520 is stored in the storage element 1525 , and the display layout 1520 is associated with the client 1505 .
- the window processing mechanism 1550 accesses the display layout 1520 from the storage element 225 to obtain the desired display layout information for the client machine 10 .
- the window processing mechanism 1550 intercepts messages 1540 to a window 1535 displayed on a client machine 10 by an application 1530 .
- the window processing mechanism 1550 modifies the message 1540 to provide the window 1535 on the client machine 10 based on the desired display layout 1520 for the client machine 10 .
- the window 1535 is displayed on the client machine 10 based on the modified message 1540 . As such, the appearance and behavior of the window 235 is translated to and based on the display layout 1520 .
- the desired display layout 120 for the client is provided.
- the display layout 120 is communicated from the client machine 10 to the remote machine 30 .
- the client machine 10 establishes a connection or communication session with the remote machine 30 .
- the remote machine 30 requests the display layout 1520 from the client machine 10 , and the client 1505 communicates the display layout 1520 in response to the request.
- the display layout 1520 is communicated via the session login mechanism 1545 during a logon or authentication process, and in some embodiments, upon a re-logon or re-authentication process.
- the display layout 1520 is stored in a database and queried by the client machine 10 or remote machine 30 to obtain the display layout 1520 .
- the display layout 1520 is downloaded, by either the client machine 10 or the remote machine 30 from a web server, a web-site, an application server, another remote machine 30 ′ or via the Internet.
- a user may configure the display layout 1520 with a program, application, or tool, and store the display layout 1520 on a client machine 10 , remote machine 30 , or another client machine 10 .
- the display layout 1520 is stored in the storage element 1525 , and associated with the client machine 10 .
- the remote machine 30 receives the display layout 1520 from the client machine 10 and stores the display layout 1520 in the storage element 1525 .
- the remote machine 30 stores the display layout 1520 as a globally mapped data file on the remote machine 30 accessible by one or more applications 1530 .
- the remote machine 30 stores the display layout 1520 to another client machine 10 accessible to the remote machine 30 , such as via the network 1504 .
- the client machine 10 stores the display layout 1520 to a storage element 1525 on the remote machine 30 , to a storage element 1525 on the client machine 10 , or to a storage element 1525 accessible via the network 1504 or via the Internet.
- the display layout 1520 may be stored to the storage element 1525 in any form suitable to the storage element 1525 , and may be converted, transformed, altered, translated or otherwise processed for storage in the storage element 1525 .
- the display layout 1520 may comprise data, such as a file, on the client machine 10 transmitted via network packets to the remote machine 30 , and then translated into a globally mapped data file on the remote machine 30 .
- the display layout 1520 is stored into any type and/or form of database 1525 , such as a relational database.
- the display layout 1520 is stored in storage 1525 comprising memory.
- the display layout 1520 may comprise or be represented by any type of object, data structure, or portion of memory on the client machine 10 and/or remote machine 30 .
- the display layout 1520 may be associated with the client machine 10 by any suitable means and/or mechanisms.
- the name, or any portion thereof, of the globally mapped data file may identify the client machine 10 .
- any portion of content of the globally mapped data file may identify the client machine 10 .
- the client machine 10 or remote machine 30 may use any type of object, data structure, process, or other elements in memory to associate the display layout 1520 with the client machine 10 .
- the client machine 10 or remote machine 30 may use portions of the storage element 1525 or other types of storage, such as another file, to associate the display layout 1520 with the client.
- the window processing mechanism 1550 accesses the display layout 1520 from the storage element 1525 to obtain the desired display layout information for the client machine 10 .
- the executable instructions of the window procedure used by the window processing mechanism 1550 comprises instructions to load, read, or otherwise acquire the display layout 1520 .
- the window processing mechanism 1550 may perform any type and/or forms of file input/output, i.e., file I/O, operations to read a globally mapped data file having the display layout 1520 .
- the instructions of the hooking application programming interface (API) for the window processing mechanism 1550 provides instructions for obtaining the display layout 1520 .
- API application programming interface
- the application 1530 reads or accesses the display layout 1520 , for example, upon execution or start up.
- the application 1530 may be executed during a session, such as a user or remote session.
- the globally mapped data file 1525 may only be accessible by an application 1530 associated with or available via the remote session.
- access to the globally mapped data file may have access locked by a mutex or semaphore, which is global for the remote session.
- a mutex or semaphore which is global for the remote session.
- any type and/or form of locking mechanism can be used to control access the storage element 1525 , such as a globally mapped data file.
- the window processing mechanism 1550 intercepts messages 1540 to a window 1535 displayed on a client machine 10 by an application 1530 .
- a hooking mechanism is introduced into the remote machine 30 or the application 1530 on the remote machine 30 , which hooks one or more window creation application programming interfaces (APIs), such as for example, a create window type of API in a WINDOWS based environment.
- the window processing mechanism 1550 intercepts all messages 1540 to windows 1535 of the application 1530 .
- the window processing mechanism 1550 intercepts messages 1540 of a certain message identifier or name.
- the message 240 may have arguments, parameters or values that are used by the window processing mechanism 1550 to determine that the message 1540 should be intercepted.
- the window processing mechanism 1550 intercepts messages 1540 to some of the windows 1535 of the application 1530 , and in further embodiments, only for a portion of the types of messages 240 communicated to these windows 1535 .
- the window processing mechanism 1550 is configurable, for example, by a user, to select the messages 1540 , by name, type, or otherwise, to be intercepted.
- the window processing mechanism 1550 intercepts messages 1540 communicated to or intended for a top-level window 1535 of the application 1530 .
- the window processing mechanism 1550 may intercept any level of window 1535 , or only certain levels of windows 1535 in a hierarchy of windows 1535 . For example, the window processing mechanism 1550 may ignore any popup dialog windows of a second level window displayed on top of or in front of a top-level window 1535 .
- the window processing mechanism 1550 may intercept a message 1540 but pass the message 1540 through or communicate the message 1540 to the original or replaced window procedure. In some embodiments, the window processing mechanism 1550 ignores certain messages 1540 . In another embodiment, the window procedure of the window processing mechanism 1550 also includes the functionality and operations of the replaced window procedure. As such, the window processing mechanism 1550 may intercept a message 1540 and have either the replaced window procedure or the window procedure hooked into the application 1540 process the message 1540 .
- the window processing mechanism 1550 modifies the message 1540 to provide the window 1535 on the client machine 10 based on the desired display layout 1520 for the client machine 10 .
- the window processing mechanism 1550 examines, inspects, analyzes, or otherwise processes any values, arguments, or parameters of the message 1540 in comparison to the display layout 1520 for the client machine 10 displaying the application 1530 . Based on the comparison, the window processing mechanism 1550 may modify, adjust, edit, change, alter, replace, translate or otherwise set or provide values, arguments, and/or parameters for the message 1540 that will provide the desired behavior, appearance and attributes of the window 235 as displayed or to be displayed by the application 1530 on the client machine 10 in accordance with the display layout 1520 .
- the values and/or parameters of the message 1540 may indicate a size, position, location, resolution or other attributes of the window 1535 . These characteristics may be based on a display environment different than as specified in the display layout 1520 . As such, in some embodiments, the window processing mechanism 1550 may modify the size, position, location, resolution or other attributes of the message 1540 for a display 1522 a - 1522 n specified in the display layout 1520 .
- the window processing mechanism 1550 may intercept and modify a message 1540 identified as one of the following: 1) WM_GETMAXMININFO, 2) WM_WINDOWPOSCHANGING, 3) WM_WINDOWPOSCHANGED, and 4) WM_DISPLAYCHANGE.
- the window processing mechanism 1550 analyzes the position of the application 1530 , i.e., a top-level window 1535 , relative to the one or more displays 1522 a - 1522 n of the display layout 1520 , and determines which of the displays 1522 a - 1522 n the application 1530 should be maximized to.
- the window processing mechanism 1550 modifies the message 1540 to provide values corresponding and translated to the resolution based on the desired display layout 1520 .
- a remote machine 30 may provide window resolution for a single monitor session, and the window processing mechanism 1550 translates the resolution to the multiple display environment provided via the display layout 1520 .
- this technique enables the application 1530 to maximize to a desired location in accordance with the display layout 1520 , instead of the single monitor session.
- the window processing mechanism 1550 determines if the window 1535 is in the maximized state, and if so, the message 1540 is modified to set the window flag to a no move style of window, or otherwise to fix the location or position of the window 1535 , or not allow the position of the window 1535 to change. As such, in the maximized state a user may not be able to move the window 1535 .
- This technique enables the application 1530 , or a window 1535 of the application 1530 to be maximized to a set or fixed location on a display 1522 a - 1522 n specified by the display layout 1520 .
- the window processing mechanism 1550 determines the window 1535 is not in the maximized state, and modifies the message 1540 to remove the no move style, e.g., the window's position is no longer fixed, or to otherwise allow the position of the window 1535 to be moved.
- the window processing mechanism 1550 compares the position or location of the window 1535 to the display layout 1520 and if the window 1535 is to be rendered outside the screen or work area of display 1522 a - 1522 n, then the position or location of the window 1535 is changed to be rendered in at least a portion of the screen or work area of the display 1522 a - 1522 n. This technique enables the user not to lose the application 1530 or window 1535 of the application 1530 to an off-screen location.
- the window processing mechanism 1550 suspends passing of messages 1540 until a new or second display layout 1520 is obtained or provided for the client 1505 .
- the window processing mechanism 1550 suspends the processing of all messages 1540 .
- the window processing mechanism 1550 suspends messages 1540 that are intercepted and communicated to the replaced or original window procedure.
- the window processing mechanism 1550 suspends messages for the replaced or original window procedure while continuing to process other messages 1540 . This technique enables a client machine 10 to dynamically change the display layout 1520 at any time, for example, during the execution of an application 1530 .
- the window processing mechanism 1550 may perform any logic, function, operations or rules based on the message 1540 and/or the display layout 1520 , and even for the same type of message 1540 , may perform a different operation or function for each instance of the message 1540 depending on changes to the display layout 1520 or any events, conditions or status of the environment 1500 , 1501 or 1502 .
- the window 1535 is displayed on the client machine 10 based on the message 1540 processed via the window processing mechanism 1550 .
- the window processing mechanism 1550 modifies the message 1540 based on the display layout 1520
- the window 1535 is displayed on the client machine 10 according to the display layout 1520 .
- the window processing mechanism 250 does not modify the message 1540 , and therefore, the window 1540 is displayed on the client machine 10 according to the unmodified message 1540 .
- the technique as illustrated above enables, for example, in one embodiment of a server-based computing environment 1500 , an application 1530 running on remote machine 30 to provide display output to the client machine 10 that controls and directs the behavior, appearance, and attributes of windows in the display output in any manner desired and specified by the display layout 1520 , which may not correspond to the physical display layout of the client machine 10 .
- window manager or management system such as any type and/or form of X-windows managers, including any custom or open-source based window manager running on any type of operating system.
- the session login mechanism 1545 as illustrated on the remote machine 30 of FIGS. 15A and 15B may include the window processing mechanism 1550 , or any portion thereof.
- the session login mechanism 1545 accesses or obtains the display layout 1520 from the storage element 1525 .
- the session login mechanism Upon re-establishing and/or re-authenticating the session, the session login mechanism, at step 1656 , compares a location of a window 1535 to the client's display layout 1520 , and at step 1658 , modifies the window 235 to display on the client machine 10 based on the client's display layout 1520 .
- the session login mechanism 1545 obtains information on the display layout 1520 by any suitable means and/or mechanisms.
- the window processing mechanism 1550 included in or used by the session login mechanism 1545 may have executable instructions, such as file I/O operations, to access a globally mapped data file 1525 .
- the session login mechanism 1545 may load dynamically linked libraries that load, read or otherwise access the storage element 225 having the display layout information.
- the session login mechanism 1545 may obtain the display layout 1520 from the client 1520 .
- the session login mechanism 1545 requests the display layout 1520 from the client machine 10 along with any identification or authentication credentials.
- any type of disconnection or disruption to a session between the client machine 10 and remote machine 30 may occur, and any type of reconnection or re-establishment of the session may be facilitated via the session login mechanism 1545 .
- a user may cause a disconnection or disruption, temporary or otherwise, to a session between the client machine 10 and the remote machine 30 due to physical changes in the client's display environment or because the user moves to another client machine 10 .
- the user moves from a first client machine 10 a, such as a work computer, to a second client machine 10 b, such as a home computer.
- the remote machine 30 may maintain the same user session between computing devices 100 a - 110 b but the display layout 1520 may have changed.
- the user and/or the client machine 10 may traverse network segments or network access points that cause changes in the network address or host name, e.g., internet protocol (IP) address, of the client machine 10 or causes the client machine 10 to disconnect.
- IP internet protocol
- the client machine 10 may reconnect, manually or automatically, to the network 1504 , such as via the client agent 1508 .
- the session login mechanism 1545 may facilitate or be used to facilitate the reconnection.
- the session login mechanism 1545 compares the location or position of a window 1535 of an application 1530 in relation to the desired display layout 1520 .
- the session login mechanism 1545 intercepts a message 1540 to a window 1535 , and examines, inspects or analyzes any portion of the message 1540 , such as a value or parameter.
- the session login mechanism 1545 queries, acquires or obtains the current location or position of one or more windows 1535 of the application 1530 via an application programming interface (API).
- API application programming interface
- the session login mechanism 1545 requests from the application 1530 , the location or position of any of the application's windows.
- the session login mechanism 1545 compares the location, position, size, and any other attributes of the window 1535 to any information in the display layout 1520 .
- the session login mechanism 1545 may modify the window 1535 based on the desired display layout 1520 . From the comparison of the information about the window 1535 to the information of the display layout 1520 , the session login mechanism 1545 , in some embodiments, modifies the window 1535 to display on the client machine 10 via a display 1522 a - 1522 n identified in the display layout 1520 in a desired manner. In one embodiment, via the functionality of the window processing mechanism 1550 embodied in or interfaced with the session login mechanism 1545 , a message 1540 to a window 1535 may be intercepted and modified in accordance with the operations described herein.
- the session login mechanism 1545 may modify one or more windows 1535 of the application 1530 via any application programming interface (API) to modify such windows 1535 .
- API application programming interface
- the techniques depicted by method 350 enable client sessions to be disconnected and reconnected and have the display of windows be adjusted accordingly to any new or changed display environments of the client machine 10 , new or changed display layouts 1520 of the client machine 10 , or changes from one client machine 10 a to another client machine 10 b.
- a client's display layout 1520 is changed.
- the window processing mechanism 350 suspends window message processing when the client's display layout 1520 is changed.
- an updated or a second display layout 1520 ′ is obtained by the window processing mechanism 1550 , and at step 1668 , the window processing mechanism 1550 resumes intercepting and modifying messages 1540 to windows 1535 based on the second display layout 1520 ′.
- the display layout 1520 may be changed at any time and for any reason.
- the display environment for the client machine 10 may change and the display layout 1520 may be updated to reflect the changed display environment.
- another display device 124 may be connected to the client machine 10 .
- a user of the client machine 10 may be making adjustments, updating or otherwise changing the display layout 1520 to suit the user's desire for a behavior and appearance of applications 1530 and the display of windows 1535 of the application 1530 on the client machine 10 .
- a first session may be on a first client machine 10 with a first display layout 1520 , and the user switches to a second session or maintains the first session on a second client machine 10 ′ with a second or updated display layout 1520 ′.
- the method suspends intercepting and modifying messages 1540 for windows 1535 of an application 1530 upon notification of a change to the display layout 1520 .
- the window processing mechanism 1550 intercepts a message 1540 , such as the WM_DISPLAYCHANGE message, indicating a change in any attribute or characteristic, for example, the resolution, of the display environment.
- the client machine 10 communicates a notice to the remote machine 30 , the window processing mechanism 1550 or the session login mechanism 1545 indicating a change has occurred or is about to occur to the display layout 1520 .
- the application 1530 may comprise a user interface mechanism for a user to indicate a change to the display environment, or to have the application 1530 suspend processing of window messages according to the display layout 1520 .
- the window processing mechanism 1550 may suspend the processing of messages 240 for all applications 230 , a portion of applications 230 , or for a portion of windows 235 of one, some, or all of the application 230 . In one embodiment, the window processing mechanism 1550 queues any messages 240 received until the window processing mechanism 1550 obtains another display layout 1520 . In another embodiment, the window processing mechanism 1550 only suspends processing of window messages to be modified according to the display layout 1520 , and continues passing the messages 240 not to be modified to the original or replaced window procedure.
- an updated or a second display layout 1520 ′ is obtained to use for window message processing.
- the updated or second display layout 1520 ′ may be provided by any suitable means and/or mechanisms.
- the updated or second display layout 1520 ′ is stored with the first display layout 1520 in the storage element 225 .
- the updated or second display layout 1520 ′ is stored as an updated version of the first display layout 1520 , and in further embodiments, the second display layout 1520 ′ may replace the first display layout 1520 in the storage element 225 .
- the client machine 10 communicates the updated or second display layout 1520 ′ to the remote machine 30 or stores the second display layout 1520 ′ to the storage element 225 on the remote machine 30 .
- the client machine 10 via a reconnection or re-establishment to the remote machine 30 may provide an updated display layout 1520 .
- the client machine 10 communicates an unchanged display layout 1520 or a display layout 1520 to the remote machine 30 that the remote machine 30 already has stored in the storage element 225 .
- the remote machine 30 or client machine 10 may obtain the second display layout 1520 ′ from another client machine 10 on the network 204 , such as downloading the second display layout 1520 ′ form a remote machine 30 .
- the window processing mechanism 350 may obtain the display layout 1520 from the storage element 225 by a variety of means and/or mechanisms.
- the window processing mechanism 1550 resumes intercepting and modifying messages 240 to windows 235 based on the second display layout 1520 .
- the window processing mechanism 1550 analyzes and modifies the queued messages 240 based on the second display layout 1520 ′. Otherwise, the window processing mechanism 1550 uses the second display layout 1520 ′ to modify any messages 240 intercepted after obtaining the second display layout 1520 ′.
- a client display environment and a client's display layout can be dynamically changed during the course of executing one or more applications, and the display of windows for the application appear and behave according to the changes to the display layout.
- another display device may be added to the client, and an application may be minimized during a change in the display layout.
- the display layout is updated, the user can maximize the application and have the application appear in the appropriate display even though the display environment changed when the application was minimized.
- systems and methods are provided to control and direct the appearance, behavior and attributes of windows of an application in a flexible manner for virtualizing, simulating or providing a multiple display environment without restricting or limiting the client side display configuration.
- the display layout of the client may not be limited to configure the physical monitor of the client as the primary display, i.e. as the top left most monitor in the display layout configuration.
- the systems and methods described may be practiced in a server-based or thin-client based computing environment, with clients having multiple display devices, or with clients having a single display device. Additionally, the configuration of a display layout that is not restricted or limited to the physical display environment of the client is provided.
- the display environment of the client may extend to include additional virtual displays, so if the client has two display devices, three or more displays may be virtualized or simulated for the client.
- a single display configuration for a single display device may be implemented while still changing the appearance and behavior of windows based on a desired or customized display layout.
- a client or user may gain the functionality, benefits, and advantages of a multiple display environment without having multiple display devices, or having all the display devices desired.
- multi-monitor support provides maximizing of windows to fill a single monitor rather than the full screen and centering of dialogs on a monitor rather than on a screen.
- the session management component, the virtual machine service component, and a multi-monitor hook component executing in a computing environment provided by a virtual machine together provide multi-monitor support in a virtual machine environment.
- a multi-monitor hook component and a component acquiring client geometry data provide multi-monitor support in a virtual machine environment.
- the session management component 1300 reads the monitor configuration for the client machine 10 from a multi-monitor hook file mapping.
- the presentation server generates the multi-monitor hook file mapping upon establishment of the connection by the user.
- the session management component 1300 sends a message to the virtual machine service component containing the monitor layout for the user. In some embodiments, the message is sent when the session management component 1300 detects a user reconnection, so that the monitor layout remains synchronized with the client machine 10 .
- the virtual machine service component receives the monitor layout messages provided by the session management component 900 .
- the virtual machine service component creates a file mapping in the computing environment and updates the file to include monitor layout data.
- the virtual machine service component also creates a checksum for the data that is used by the multi-monitor hook component to ensure that it has correctly read the layout data.
- a checksum is used rather than a locking scheme to synchronize access to the layout data.
- the checksum does not cause any blocking between the processes reading the data.
- the layout data is updated infrequently and may be small in size, so the checksum calculation may complete quickly.
- the reader processes save the checksum, read the data and recalculate the checksum. If the calculated checksum does not match the saved checksum it indicates that the data was updated while it was being read and the process is repeated.
- the virtual machine service component uses a stored default display setting for the client machine 10 , the stored default selected to ensure that the computing environment has valid display settings upon initialization of the session.
- a multi-monitor hook component executes in a computing environment provided by a virtual machine.
- the multi-monitor hook component receives an event for each window created just before the window is created, including a window handle for the window being created.
- the multi-monitor hook component may identify a window type of the window and determine to hook window messages for the window.
- windows having window types indicating that the window can be maximized or that the window is a dialog will be hooked. Hooked windows may be added to an array that contains the window handle and an original window procedure.
- the multi-monitor hook component receives an event indicating that a window is about to be destroyed.
- the multi-monitor hook component removes the entry in the hook array associated with the window.
- the multi-monitor hook component receives an identification of a window after the window is created and before the window is displayed. In one of these embodiments, the multi-monitor hook component checks the position of the dialog and if it spans multiple monitors, the multi-monitor hook component repositions the window to the centre of the monitor that contains most of the dialog, or the first monitor containing the dialog if the dialogs area is equally split between two monitors. In other embodiments, the multi-monitor hook component receives an event when a window is about to be maximized. The multi-monitor hook component ensures that when the window is maximized from the minimized state it will be positioned on the correct monitor.
- the multi-monitor hook component receives an event when a window is being maximized.
- the multi-monitor hook component checks the state of the window and, if the window is minimized, the multi-monitor hook component retrieves an identification of a monitor in which the window is minimized from the window hook array. If the window is not minimized, the multi-monitor hook component identifies the monitor that contains most of the window. If no monitor is found, or if the monitor does not exist (as after a reconnection) monitor 0 is used.
- the multi-monitor hook component then removes the origin and size of the monitor from its saved monitor information and updates the MINMAXINFO structure pointed to by the message. This causes the window to maximize to the specified monitor only.
- the virtual machine service component receives authentication information associated with a user of the client machine 10 . In one of these embodiments, the virtual machine service component receives the authentication information from a protocol stack component receiving the credentials from the client machine 10 . In another of these embodiments, the virtual machine service component receives authentication information from the session management component 1300 . In still another of these embodiments, the virtual machine service component uses the received authentication information to authenticate the user of the client machine 10 to the computing environment provided by the virtual machine.
- the virtual machine service component when the communications channel is established and the initial session related information is passed to the virtual machine service component, the virtual machine service component automatically logs the user into the computing environment. In one embodiment, the virtual machine service component receives credentials from the session management component 1300 . In another embodiment, the virtual machine service component receives credentials previously provided by the user. In some embodiments, the user provides credentials to the client machine 10 prior to requesting access to a resource. In one of these embodiments, the user provides credentials to a client agent, such as an ICA client. The virtual machine service component automatically reconfigures the display settings of the guest operating system to match those of the ICA client. The virtual machine produces graphics and sound output to the virtual devices that redirect that output to a client agent, such as an ICA client, on the requesting machine. The virtual machine receives audio input, mouse and keyboard device data redirected from the ICA client. When the virtual machine is shutdown or suspended the session management component 1300 cleans up and shuts down the ICA session.
- the remote machines 30 , 30 ′, and 30 ′′ can belong to the same authentication domain.
- a domain may comprise a group of machines, such as application servers, execution machines, or client nodes under control of one security database.
- a domain can include one or more machine farms linked together to act as a single system to provide centralized administration. Conversely, a machine farm can include one or more domains. For servers of two different domains to belong to the same machine farm, a trust relationship may need to exist between the domains.
- a trust relationship is an association between the different domains that allows a user to access the resources associated with each domain with just one log-on authentication.
- the remote machine 30 ′′′ is in a different domain than the farm 38 .
- the remote machine 30 ′′′ is in the same domain as machines 30 , 30 ′, and 30 ′′.
- machines 30 , 30 ′, and 30 ′′ can belong to one server farm, while the remote machine 30 ′′′ belongs to another machine farm, or all of the machines 30 , 30 ′, 30 ′′ and 30 ′′′ can belong to the same machine farm.
- the new machine When a new machine is connected to the network 150 , the new machine either joins an existing machine farm or starts a new machine farm.
- the machines 10 may be in a domain, or may be unconnected with any domain.
- the client machine 10 is in the domain 38 .
- the client machine 10 is in another domain that does not include any of the machines 30 , 30 ′, 30 ′′ and 30 ′′′.
- the client machine 10 is not in any domain.
- the client machine 10 is in the domain 38 and a user of the machine provides user credentials to log onto the client machine 10 .
- User credentials typically include the name of the user of the machine, the password of the user, and the name of the domain in which the user is recognized.
- the user credentials can be obtained from smart cards, time-based tokens, social security numbers, user passwords, personal identification (PIN) numbers, digital certificates based on symmetric key or elliptic curve cryptography, biometric characteristics of the user, or any other means by which the identification of the user of the client node can be obtained and submitted for authentication.
- the client machine 10 From the user-provided credentials, the client machine 10 generates user authentication data. The client machine 10 transmits this user authentication data to the remote machine 30 . In this embodiment, the user credentials are not transmitted over a network, only the resulting user authentication data is transmitted by the client machine 10 .
- the remote machine 30 may determine which resources hosted by the machine farm containing remote machine 30 are available for use by the user of the client machine 10 . In one embodiment, the remote machine 30 consults user authentication data to make this determination. In another embodiment, the remote machine 30 consults information associated with a resource requested by the user to make the determination. The remote machine 30 transmits information representing the available resources to the client machine 10 .
- the user authentication performed by the remote machine 30 can suffice to authorize the use of each hosted resource presented to the client machine 10 , although such resources may reside at another machine. Accordingly, in this embodiment, when the client machine 10 accesses or launches (i.e., initiates execution of) one of the hosted resources, additional input of user credentials by the user will be unnecessary to authenticate access to that resource. Thus, a single entry of the user credentials can serve to determine the available resources and to authorize the access or launching of such resources without an additional, manual log-on authentication process by the user.
- FIG. 17 depicts in more detail a system for remotely authenticating a client of a client machine 10 to a remote machine 30 .
- the client machine 10 includes an authentication module 1710 in communication with a thin-client program 1720 .
- the authentication module 1710 receives user authentication credentials provided for the purposes of authenticating a user to the client machine 100 , the remote machine 30 , or both.
- Received authentication credentials can include username-password combinations, graphical password data, data derived from time-based tokens such as the SecurID line of tokens manufactured by RSA Security Inc. of Bedford, Mass., challenge-response data, information from smart cards, and biometric information such as fingerprints, voiceprints, or facial features.
- the authentication module 1710 may use the provided authentication credentials to authenticate the user to the machine 100 .
- the authentication module 1710 may be provided by the MSGINA dynamically-linked library.
- the authentication module 1710 may be provided by the Unix Pluggable Authentication Manager, using the pam_krb module.
- the authentication module 1710 may be provided by the UNIX kinit command program.
- the machine 100 also includes a security service 1712 .
- the authentication module 1710 and the security service 1712 are provided as the same dynamically-linked library.
- the security service 1712 provides security services to modules and applications on the machine 100 , including the authentication module 1710 and the thin-client application 1720 , such as authentication to the machine 100 and authentication to remote machines or network services.
- the security service 1712 may obtain a Kerberos ticket in response to receipt of the user authentication credentials and use this ticket to obtain additional Kerberos tickets to authenticate the user to remote machines or network services, at the request of modules or applications on the machine 100 .
- the security service 1712 may then generate user authentication data using these Kerberos tickets if needed for remote authentication.
- the security service 1712 may generate the user authentication data using an external authentication service, such as a Key Distribution Center in a Kerberos environment or Active Directory in a Windows-based environment.
- the security service 1712 provides the generated user authentication data, e.g., Kerberos ticket and associated Kerberos authenticator, to the thin-client application 1720 .
- the thin-client application 1720 transmits the user authentication data to a remote machine 30 for remote authentication of the user.
- user-provided authentication credentials are not transmitted over the network 150 to a remote machine 30 .
- the user authentication data generated by the security service 1712 is independent of the method used by the user to authenticate to the machine 100 .
- a Kerberos ticket for the user of machine 100 is obtained whether the user uses a username-password combination or a biometric to authenticate to the machine 100 .
- the thin-client application 1720 communicates with the remote machine 30 via a thin-client protocol having one or more virtual channels 1735 .
- the thin-client application 1720 loads a virtual channel driver and uses it to send and receive messages on the authentication virtual channel.
- the virtual channel driver exposes functions for opening the virtual channel and sending data over it.
- the thin-client application 1720 passes a data structure to the remote machine 30 for the virtual channel 1735 when the thin-client protocol connection is established, indicating to the server-side thin-client application 1750 that the authentication virtual channel is available.
- the virtual channel data structure for the authentication virtual channel contains the virtual channel information and a representation of the size of the largest data packet the machine 100 can accept from or send to the remote machine 30 over the virtual channel 1735 .
- the data packet size is constrained by the maximum thin-client size and any specific memory restrictions imposed by the client machine 10 .
- the data structure for the authentication virtual channel is defined as:
- the server-side thin-client application 1750 indicates to the thin-client application 1720 its intention to perform authentication using the authentication virtual channel 1735 by opening the virtual channel and sending a bind request message onto the channel.
- the virtual channel driver in the thin-client application 1720 reads a message requesting a binding from the virtual channel, sends a message onto the virtual channel responding to the bind request; and reads a “commit” message from the channel.
- the message requesting a binding includes data specifying the protocol version that is supported.
- the protocol version can be negotiated between the thin-client application 1720 and the server-side thin-client application 1750 using the bind request and bind response messages.
- the bind request, bind response, and bind commit initialization messages allow the server-side thin-client application 1750 and the thin-client application 1720 to conduct a 3-way handshake initiated by the server-side thin-client application 1750 , and negotiate capabilities.
- a 2-way handshake may be initiated by the server-side thin-client application 1750 when the current set of virtual channel capabilities can be negotiated using a 2-way handshake only, but a 3-way handshake is supported to allow more flexibility that might be required by new capabilities or future enhancements to current capabilities.
- the thin-client application 1720 can exhibit a specific preference or could instead acknowledge a whole set of options pertaining to a specific capability thus letting the server-side thin-client application 1750 decide on a specific option.
- the thin-client application 1720 could not exhibit a specific preference because it might not be supported by the host.
- the virtual channel driver of both the thin-client application 1720 and the server-side thin-client application 1750 does the following in a loop until a “stop” message or an “error” message is received: retrieve authentication data from the security service 1712 , 1712 ′, providing as input any authentication data sent by the other party via the virtual channel; and send the retrieved authentication data (if any) onto the virtual channel in a data message. If the retrieval of data from the security service 1712 , 1712 ′ returned a “STOP” message, then signal stop and close the authentication virtual channel. In some embodiments the virtual channel driver may reset itself on a “stop” signal. If the retrieval of data from the security service 1712 , 1712 ′ returned a “CONTINUE” message, then continue. If the retrieval of authentication data from the security service 1712 , 1712 ′ returned an “ERROR”, then signal that an error has occurred and close the authentication virtual channel.
- the virtual channel driver of the thin-client application 1720 and the server-side thin-client application 1750 are free to exchange data messages until the security service 1712 , 1712 ′ stops producing data buffers to be sent.
- the number of messages exchanged may be limited by the virtual channel driver, the server-side thin-client application 1750 , or the virtual channel 1735 .
- the virtual channel driver of the thin-client application 1720 and the server-side thin-client application 1750 exchange messages sequentially, that is, two messages are not sent in one direction without a reply to the first being sent in the other. In either embodiment, message exchange can stop after a message has been sent in either direction.
- the data messages are sent over the virtual channel Least Significant Double Word (LSDW), Least Significant Word (LSW), Least Significant Byte (LSB) first.
- LSDW Least Significant Double Word
- LSW Least Significant Word
- LSB Least Significant Byte
- the data messages are aligned at a byte boundary and fully packed in memory. In these embodiments, data fields will be aligned in memory as written to or read from the virtual channel.
- Some messages transmitted on the authentication virtual channel span multiple virtual channel packets. To support this, every message must be preceded by a message specifying the length of the next transmitted command.
- An example of a message that may be used to specify the length of the next command is:
- typedef struct_PKT_CMDLEN ⁇ UINT32 Length; UINT8 Command; UINT8 FlagsBitMask; ⁇ PKT_CMDLEN, *PPKT_CMDLEN;
- PKT_CMDLEN also contains a command number to indicate what type of message is to follow:
- the server-side thin-client application 1750 passes the authentication data it receives over the authentication virtual channel to its security service 1712 ′. If the server-side security service 1712 ′ is able to verify the data, it generates an access token representing a logon session for the user, allowing the user to authenticate to the remote machine 30 without resubmitting authentication credentials.
- An access token is a data object that includes, among other things, a locally unique identifier (LUID) for the logon session. If the server-side security service 1712 ′ is not able to verify the data, the user is prompted to resubmit authentication credentials.
- LID locally unique identifier
- the only virtual channel over which the user may communicate with the remote machine 30 is the authentication virtual channel.
- new virtual channels are initiated for communication.
- only one virtual channel exists and it may only be used for authentication-related communications until the user is authenticated, and it may be used for other communications after the user is authenticated.
- the access token generated by the server-side security service 1712 ′ is an impersonation token that has only network logon rights. That is, the generated access token is not suitable to use for starting applications to run interactively, as is required in the WINDOWS server-based computing environment. To allow applications to run interactively, a primary access token is needed that has interactive logon rights. In one embodiment, the generated access token is modified to provide the appropriate rights. In another embodiment, a new token is generated for the user.
- the server-side security service 1712 ′ verifies the authentication data it receives over the authentication virtual channel from the server-side thin-client application 1750 , the server-side thin-client application 1750 will grant the user access to the resources. In these embodiments, the server-side security service 1712 ′ does not generate an access token.
- the remote machine 30 after the remote machine 30 has authenticated the user, the remote machine 30 presents an enumeration of resources available to the user.
- the remote machine 30 may create a page describing a display of resources, hosted by a plurality of machines, available to the machine 100 .
- the remote machine 30 may then transmit the created page to the machine 100 for display and receive from the machine 100 , a request to access one of the hosted resources.
- the selected one of the available resources hosted by one of the plurality of machines is then executed without requiring further receipt of user authentication data from the machine 100 .
- the remote machine 30 initiates, in response to successful authentication by the user, a connection from the remote machine 30 to a second remote machine 30 ′ which is hosting a resource available to the user.
- the available resource is executed over the connection.
- the connection is a virtual channel.
- the first remote machine 30 is hosting the selected one of the available resources. In some of these embodiments, the remote machine 30 makes the resource available to the user over the existing connection. In others of these embodiments, the remote machine 30 makes the resource available to the user over a new connection. In some of those embodiments, the new connection comprises a virtual channel.
- a plurality of components are provided for authenticating a user of the client machine 10 to a virtual machine on a remote machine 30 .
- functionality is provided for a Kerberos-based Single Sign-On process between the client machine 10 and a guest operating system provided by the virtual machine.
- a user seeking to access a resource provided by a virtual machine provides authentication credentials multiple times to different entities.
- the user is authenticated by a client agent on the client machine 10 , by a remote machine 30 , and by a computing environment provided by a virtual machine in the remote machine 30 .
- single sign-on support would enable authentication of the user to different entities with only one transmission of authentication credentials from the user.
- Authentication of the user to the client machine and the remote machine 30 may be accomplished as described above in connection with FIG. 17 .
- an authentication component a GINA (Graphical Identification and Authentication) component, an authentication module in the session management component and an authentication module for the virtual machine service component are provided.
- a bidirectional virtual channel enables communication between a service management component on the remote machine 30 and a virtual machine service component executing in the guest operating system.
- the remote machine 30 includes client-side single sign-on functionality and the virtual machine includes server-side single sign-on functionality.
- the service management component implements an authentication module and communicates with an authentication module in the virtual machine service component to authenticate the user.
- the session management component creates a Kerberos SSPI channel between itself and the virtual machine service component.
- the session management component acquires the credentials of the user and initializes a security context using this data.
- the initialization data returned is sent to the virtual machine service component which accepts the data and starts an exchange of SSPI messages between the two components until the security context is established in the virtual machine service component.
- This context is then used to log the user on to the virtual machine using a single sign-on GINA component.
- the session management component authenticates the user to a host operating system on the remote machine 30 . In one of these embodiments, the host operating system then authenticates the user to the virtual machine. In other embodiments, the session management component authenticates the user to a hypervisor. In one of these embodiments, the hypervisor then authenticates the user to the virtual machine. In still other embodiments, the session management component authenticates the user to a virtual machine providing management functionality for the virtual machine to which the user seeks access.
- a remote machine 30 may determine to provide access to a resource streaming service capable of transmitting a requested resource to the client machine (step 816 ).
- the remote machine 30 determines to implement a resource streaming service to transmit to the client machine 10 or to a remote machine 30 ′ a requested resource.
- the remote machine 30 determines to use a resource streaming service to stream the resource to a computing environment provided by a virtual machine.
- the resource is a computing environment and the remote machine 30 determines to use a resource streaming technique to stream the computing environment to a virtual machine.
- the plurality of resource files resides on the remote machine 30 ′.
- the plurality of resource files resides on a separate file server or remote machine 30 ′′.
- the plurality of resource files may be transmitted to a client machine 10 .
- a file in the plurality of resource files may be executed prior to transmission of a second file in the plurality of resource files to the client machine 10 .
- the remote machine 30 retrieves information about the enumerated resource from a remote machine 30 ′. In one of these embodiments, the remote machine 30 receives an identification of a remote machine 30 ′′ hosting a plurality of resource files. In another of these embodiments, the remote machine 30 receives identification of a location of a plurality of resource files, the identification conforming to a Universal Naming Convention (UNC). In still another of these embodiments, the identification includes a network location and a socket for a resource streaming protocol.
- UNC Universal Naming Convention
- the remote machine 30 retrieves a file containing information about the enumerated resource.
- the file may include an identification of a location of a remote machine 30 ′ hosting the enumerated resource.
- the file may include an identification of a plurality of versions of the enumerated resource.
- the file may include an enumeration of a plurality of resource files comprising the enumerated resource.
- the file may include an identification of a compressed file comprising a plurality of resources files comprising the enumerated resource.
- the file may include an identification of pre-requisites to be satisfied by a machine executing the enumerated resource.
- the file may include an enumeration of data files associated with the enumerated resource.
- the file may include an enumeration of scripts to be executed on a machine executing the enumerated resource.
- the file may include an enumeration of registry data associated with the enumerated resource.
- the file may include an enumeration of rules for use in an embodiment where the enumerated resource executes within an isolation environment.
- the file may be referred to as a “manifest” file. The information that the file may contain is described in further detail below.
- the stream of data packets may include resource files comprising the enumerated resource.
- resource files include data files associated with an resource.
- resource files include executable files required for execution of the resource.
- the resource files include metadata including information about the files, such as location, compatibility requirements, configuration data, registry data, identification of execution scripts rules for use in isolation environments, or authorization requirements.
- the streamed resource executes prior to the transmission of each resource file in a plurality of resource files comprising the streamed resource. In one of these embodiments, execution of the streamed resource begins upon receipt by a client machine 10 of one resource file in the plurality of resources. In another of these embodiments, execution of the streamed resource begins upon receipt by a client machine 10 of an executable resource file in the plurality of resource files. In still another of these embodiments, the client machine 10 executes a first received resource file in a plurality of resource files and the first received resource file requests access to a second resource file in the plurality of resource files.
- the streamed resource executes on the client machine 10 without permanently residing on the client machine 10 .
- the streamed resource may execute on the client machine 10 and be removed from the client machine 10 upon termination of the streamed resource.
- the streamed resource executes on the client machine 10 after a pre-deployed copy of each resource file is stored on the client machine 10 .
- the streamed resource executes on the client machine 10 after a copy of each resource file is stored in an isolation environment on the client machine 10 .
- the streamed resource executes on the client machine 10 after a copy of each resource file is stored in a cache on the client machine 10 .
- the remote machine 30 streams the enumerated resource to the remote machine 30 , executes the enumerated resource on the remote machine 30 , and provides to the client machine 10 resource-output data generated by the execution of the enumerated resource.
- a resource is streamed to a virtual machine and resource output data is transmitted to a client machine 10 using a presentation layer protocol such as X11, VNC, ICA or RDP.
- the remote machine 30 receives a plurality of resource files comprising the enumerated resource.
- the remote machine 30 provides the resource-output data via a presentation level protocol, such as an ICA presentation level protocol or a Remote Desktop Windows presentation level protocol or an X-Windows presentation level protocol.
- the remote machine 30 also provides access information associated with the enumerated resource, the access information generated responsive to the selected method.
- the access information provides an indication to the client machine 10 of the selected method for execution of the enumerated resource.
- the access information includes an identification of a location of the enumerated resource, the identification conforming to a Universal Naming Convention (UNC).
- the access information includes an identification of a session management server.
- the access information includes a launch ticket comprising authentication information.
- the client machine 10 may use the launch ticket to authenticate the access information received from the remote machine 30 .
- the client machine 10 may use the launch ticket to authenticate itself to a second remote machine 30 hosting the enumerated resource.
- the remote machine 30 includes the launch ticket in the access information responsive to a request from the client machine 10 for the launch ticket.
- a client machine 10 performs a pre-launch analysis (step 1810 ).
- the client machine 10 performs the pre-launch analysis prior to retrieving and executing a plurality of resource files comprising a resource.
- the client machine 10 performs the pre-launch analysis responsive to a received indication that the pre-launch analysis is a requirement for authorization to access the plurality of resource files comprising a resource.
- the client machine 10 receives, from a remote machine 30 , access information associated with the plurality of resource files.
- the access information includes an identification of a location of a remote machine 30 ′ hosting the plurality of resource files.
- the client machine 10 receives an identification of a plurality of resources comprising one or more versions of the resource.
- the client machine 10 receives an identification of a plurality of resource files comprising one or more resources.
- the client machine 10 receives an enumeration of resources available to the client machine 10 for retrieval and execution. In one of these embodiments, the enumeration results from an evaluation of the client machine 10 .
- the client machine 10 retrieves at least one characteristic responsive to the retrieved identification of the plurality of resource files comprising a resource.
- the access information includes a launch ticket capable of authorizing the client machine 10 to access the plurality of resource files.
- the launch ticket is provided to the client machine 10 responsive to an evaluation of the client machine 10 .
- the launch ticket is provided to the client machine 10 subsequent to a pre-launch analysis of the client machine 10 by the client machine 10 .
- the client machine 10 retrieves at least one characteristic required for execution of the plurality of resource files.
- the access information includes the at least one characteristic.
- the access information indicates a location of a file for retrieval by the client machine 10 , the file enumerating the at least one characteristic.
- the file enumerating the at least one characteristic further comprises an enumeration of the plurality of resource files and an identification of a remote machine 30 hosting the plurality of resource files.
- the client machine 10 determines the existence of the at least one characteristic on the client machine 10 . In one embodiment, the client machine 10 makes this determination as part of the pre-launch analysis. In another embodiment, the client machine 10 determines whether the client machine 10 has the at least one characteristic.
- determining the existence of the at least one characteristic on the client machine 10 includes determining whether a device driver is installed on the client machine 10 . In another embodiment, determining the existence of the at least one characteristic on the client machine 10 includes determining whether an operating system is installed on the client machine 10 . In still another embodiment, determining the existence of the at least one characteristic on the client machine 10 includes determining whether a particular operating system is installed on the client machine 10 . In yet another embodiment, determining the existence of the at least one characteristic on the client machine 10 includes determining whether a particular revision level of an operating system is installed on the client machine 10 .
- determining the existence of at least on characteristic may include determining whether the remote machine 30 executes a hypervisor or, alternatively, whether the remote machine executes a hypervisor which itself executes in the native operating system.
- determining the existence of the at least one characteristic on the client machine 10 includes determining whether the client machine 10 has acquired authorization to execute an enumerated resource. In one of these embodiments, a determination is made by the client machine 10 as to whether the client machine 10 has received a license to execute the enumerated resource. In another of these embodiments, a determination is made by the client machine 10 as to whether the client machine 10 has received a license to receive across a resource streaming session a plurality of resource files comprising the enumerated resource. In other embodiments, determining the existence of the at least one characteristic on the client machine 10 includes determining whether the client machine 10 has sufficient bandwidth available to retrieve and execute an enumerated resource.
- determining the existence of the at least one characteristic on the client machine 10 includes execution of a script on the client machine 10 . In other embodiments, determining the existence of the at least one characteristic on the client machine 10 includes installation of software on the client machine 10 . In still other embodiments, determining the existence of the at least one characteristic on the client machine 10 includes modification of a registry on the client machine 10 . In yet other embodiments, determining the existence of the at least one characteristic on the client machine 10 includes transmission of a collection agent 704 to the client machine 10 for execution on the client machine 10 to gather credentials associated with the client machine 10 .
- the client machine 10 requests, from a remote machine 30 , authorization for execution of the plurality of resource files, the request including a launch ticket (step 1812 ).
- the client machine 10 makes the request responsive to a determination that at least one characteristic exists on the client machine 10 .
- the client machine 10 determines that a plurality of characteristics exist on the client machine 10 , the plurality of characteristics associated with an enumerated resource and received responsive to a request to execute the enumerated resource.
- whether the client machine 10 receives an indication that authorization for execution of the enumerated resource files depends upon existence of the at least one characteristic on the client machine 10 .
- the client machine 10 received an enumeration of resources, requested execution of an enumerated resource, and received access information including the at least one characteristic and a launch ticket authorizing the execution of the enumerated resource upon the determination of the existence of the at least one characteristic on the client machine 10 .
- the client machine 10 receives from the remote machine 30 a license authorizing execution of the plurality of resource files.
- the license authorizes execution for a specified time period.
- the license requires transmission of a heart beat message to maintain authorization for execution of the plurality of resource files.
- a license pool may be provided that authorizes the virtual machine, its guest operating system and all the licensed software installed within that guest operating system.
- a single license is provided that authorizes those entities.
- the client machine 10 receives from the remote machine 30 the license and an identifier associated with a remote machine 30 monitoring execution of the plurality of resource files.
- the remote machine 30 is a session management server 1962 , as described below in connection with FIG. 19 .
- the session management server 1962 includes a session management subsystem 1910 that monitors the session associated with the client machine 10 .
- a separate remote machine 30 ′′′′ is the session management server 1962 .
- the client machine 10 receives and executes the plurality of resource files (step 1814 ).
- the client machine 10 receives the plurality of resource files across a resource streaming session.
- the client machine 10 stores the plurality of resource files in an isolation environment on the client machine 10 .
- the client machine 10 executes one of the plurality of resource files prior to receiving a second of the plurality of resource files.
- a remote machine 30 transmits the plurality of resource files to a plurality of client machines 10 , each client machine 10 in the plurality having established a separate resource streaming session with the remote machine 30 .
- the client machine 10 stores the plurality of resource files in a cache and delays execution of the resource files. In one of these embodiments, the client machine 10 receives authorization to execute the resource files during a pre-defined period of time. In another of these embodiments, the client machine 10 receives authorization to execute the resource files during the pre-defined period of time when the client machine 10 lacks access to a network. In other embodiments, the client machine 10 stores the plurality of resource files in a cache. In one of these embodiments, a resource streaming client 1952 (described in further detail below in connection with FIG. 19 ) establishes an internal resource streaming session to retrieve the plurality of resource files from the cache. In another of these embodiments, the client machine 10 receives authorization to execute the resource files during a pre-defined period of time when the client machine 10 lacks access to a network.
- the client machine 10 transmits at least one heartbeat message to a remote machine (step 1816 ). In some embodiments, the client machine 10 transmits the at least one heartbeat message to retain authorization to execute the plurality of resource files comprising the enumerated resource. In other embodiments, the client machine 10 transmits the at least one heartbeat message to retain authorization retrieve a resource file in the plurality of resource files. In still other embodiments, the client machine 10 receives a license authorizing execution of the plurality of resource files during a pre-determined period of time.
- the client machine 10 transmits the heartbeat message to a second remote machine 30 ′′′′.
- the second remote machine 30 ′′′′ may comprise a session management server 1962 monitoring the retrieval and execution of the plurality of resource files.
- the second remote machine 30 ′′′′ may renew a license authorizing execution of the plurality of resource files, responsive to the transmitted heartbeat message.
- the second remote machine 30 ′′′′ may transmit to the client machine 10 a command, responsive to the transmitted heartbeat message.
- the client machine 10 may include a resource streaming client 1952 , a streaming service 1954 and an isolation environment 1956 .
- the resource streaming client 1952 may be an executable program. In some embodiments, the resource streaming client 1952 may be able to launch another executable program. In other embodiments, the resource streaming client 1952 may initiate the streaming service 1954 . In one of these embodiments, the resource streaming client 1952 may provide the streaming service 1954 with a parameter associated with executing a resource. In another of these embodiments, the resource streaming client 1952 may initiate the streaming service 1954 using a remote procedure call.
- the client machine 10 requests execution of a resource and receives access information from a remote machine 30 regarding execution.
- the resource streaming client 1952 receives the access information.
- the resource streaming client 1952 provides the access information to the streaming service 1954 .
- the access information includes an identification of a location of a file associated with a plurality of resource files comprising the resource.
- the streaming service 1954 retrieves a file associated with a plurality of resource files. In some embodiments, the retrieved file includes an identification of a location of the plurality of resource files. In one of these embodiments, the streaming service 1954 retrieves the plurality of resource files. In another of these embodiments, the streaming service 1954 executes the retrieved plurality of resource files on the client machine 10 . In other embodiments, the streaming service 1954 transmits heartbeat messages to a remote machine 30 to maintain authorization to retrieve and execute a plurality of resource files.
- the retrieved file includes an identification of a location of more than one plurality of resource files, each plurality of resource files comprising a different resource.
- the streaming service 1954 retrieves the plurality of resource files comprising the resource compatible with the client machine 10 .
- the streaming service 1954 receives authorization to retrieve a particular plurality of resource files, responsive to an evaluation of the client machine 10 .
- the plurality of resource files are compressed and stored on a file server within an archive file such as a CAB, ZIP, SIT, TAR, JAR or other archive file.
- a plurality of resource files stored in an archive file comprises a resource.
- multiple pluralities of resource files stored in an archive file each comprise different versions of a resource.
- multiple pluralities of resource files stored in an archive file each comprise different resources.
- an archive file includes metadata associated with each file in the plurality of resource files.
- the streaming service 1954 generates a directory structure responsive to the included metadata.
- the metadata may be used to satisfy requests by resources for directory enumeration.
- the streaming service 1954 decompresses an archive file to acquire the plurality of resource files.
- the streaming service 1954 determines whether a local copy of a file within the plurality of resource files exists in a cache on the client machine 10 prior to retrieving the file from the plurality of resource files.
- the file system filter driver 1964 determines whether the local copy exists in the cache.
- the streaming service 1954 modifies a registry entry prior to retrieving a file within the plurality of resource files.
- the streaming service 1954 stores a plurality of resource files in a cache on the client machine 10 .
- the streaming service 1954 may provide functionality for caching a plurality of resource files upon receiving a request to cache the plurality of resource files.
- the streaming service 1954 may provide functionality for securing a cache on the client machine 10 .
- the streaming service 1954 may use an algorithm to adjust a size and a location of the cache.
- the streaming service 1954 creates an isolation environment 1956 on the client machine 10 .
- the streaming service 1954 uses an isolation environment application programming interface to create the isolation environment 1956 .
- the streaming service 1954 stores the plurality of resource files in the isolation environment 1956 .
- the streaming service 1954 executes a file in the plurality of resource files within the isolation environment.
- the streaming service 1954 executes the resource in the isolation environment.
- the streaming service 1954 accesses an isolation environment 1956 provided by a virtual machine.
- the execution of the resource may occur within an isolation environment 1956 .
- a plurality of resource files comprising the resource is stored on the client machine 10 prior to execution of the resource.
- a subset of the plurality of resource files is stored on the client machine 10 prior to execution of the resource.
- the plurality of resource files does not reside in the isolation environment 1956 .
- a subset of the plurality of resources files do not reside on the client machine 10 .
- a resource file in the plurality of resource files may be executed within an isolation environment 1956 .
- isolation environments are used to provide additional functionality to the resource streaming client 1952 .
- a resource is executed within an isolation environment.
- a retrieved plurality of resource files resides within the isolation environment.
- changes to a registry on the client machine 10 are made within the isolation environment.
- the resource streaming client 1952 includes an isolation environment 1956 .
- the resource streaming client 1952 includes a file system filter driver 1964 intercepting resource requests for files.
- the file system filter driver 1964 intercepts a resource request to open an existing file and determines that the file does not reside in the isolation environment 1956 .
- the file system filter driver 1964 redirects the request to the streaming service 1954 responsive to a determination that the file does not reside in the isolation environment 1956 .
- the streaming service 1954 may extract the file from the plurality of resource files and store the file in the isolation environment 1956 .
- the file system filter driver 1964 may then respond to the request for the file with the stored copy of the file.
- the file system filter driver 1964 may redirect the request for the file to a file server 1940 , responsive to an indication that the streaming service 1954 has not retrieved the file or the plurality of resource files and a determination the file does not reside in the isolation environment 1956 .
- the file system filter driver 1964 uses a strict isolation rule to prevent conflicting or inconsistent data from appearing in the isolation environment 1956 .
- the file system filter driver 1964 intercepting a request for a resource in a user isolation environment may redirect the request to a resource isolation environment.
- the file system filter driver 1964 does not redirect the request to a system scope.
- the streaming service 1954 uses IOCTL commands to communicate with the filter driver.
- communications to the file server 1940 are received with the Microsoft SMB streaming protocol.
- a flow diagram depicts one embodiment of steps taken by a client machine 10 to execute a resource.
- a client machine 10 receives and executes the plurality of resource files.
- the client machine 10 receives a file including access information for accessing a plurality of resource files and for executing a first client capable of receiving a resource stream (step 2002 ).
- the client machine 10 retrieves an identification of the plurality of resource files, responsive to the file (step 2004 ).
- the client machine 10 retrieves at least one characteristic required for execution of the plurality of resource files, responsive to the file (step 2006 ).
- the client machine 10 determines whether the client machine 10 includes the at least one characteristic (step 2008 ).
- the client machine 10 executes a second client, the second client requesting execution of the plurality of resource files on a remote machine 30 , responsive to a determination that the client machine 10 lacks the at least one characteristic (step 2010 ).
- the client machine 10 receives a file including access information for accessing a plurality of resource files and for executing a first client capable of receiving a resource stream (step 2002 ).
- the client machine 10 receives access information including an identification of a location of a plurality of resource files comprising a resource.
- the client machine 10 receives the file responsive to requesting execution of the resource.
- the access information includes an indication that the plurality of resource files reside on a remote machine 30 ′ such as a resource server or a file server.
- the access information indicates that the client machine 10 may retrieve the plurality of resource files from the remote machine 30 over a resource streaming session.
- the client machine 10 retrieves an identification of the plurality of resource files, responsive to the file (step 2004 ).
- the client machine 10 identifies a remote machine 30 on which the plurality of resource files resides, responsive to the file including access information.
- the client machine 10 retrieves from the remote machine 30 a file identifying the plurality of resource files.
- the plurality of resource files comprises a resource.
- the plurality of resource files comprises multiple resources.
- the plurality of resource files comprises multiple versions of a single resource.
- a block diagram depicts one embodiment of a plurality of resource files residing on a remote machine 30 ′, such as file server 1940 .
- a plurality of resource files referred to as a package, includes resource files comprising three different versions of one or more resources.
- each subset of resource files comprising a version of one or more resources and stored within the package is referred to as a target.
- Target 1 for example, includes a version of a word processing resource and of a spreadsheet program, the version compatible with the English language version of the Microsoft Windows 2000 operating system.
- Target 2 includes a version of a word processing resource and of a spreadsheet program, the version compatible with the English language version of the Microsoft XP operating system.
- Target 3 a version of a word processing resource and of a spreadsheet program, the version compatible with the Japanese language version of the Microsoft Windows 2003 operating system with service pack 3.
- the file retrieved from the remote machine 30 hosting the plurality of resource files includes a description of the package and the targets included in the plurality of resource files.
- the file retrieved from the remote machine 30 identifies the plurality of resource files comprising a resource requested for execution by the client machine 10 .
- the client machine 10 retrieves at least one characteristic required for execution of the plurality of resource files, responsive to the file (step 2006 ).
- the client machine 10 may not execute a resource unless the client machine 10 includes certain characteristics.
- different resources require client machines 10 to include different characteristics from the characteristics required by other resources.
- the client machine 10 receives an identification of the at least one characteristic required for execution of the plurality of resource files comprising the resource requested by the client machine 10 .
- the client machine 10 determines whether the client machine 10 includes the at least one characteristic (step 2008 ). In one embodiment, the client machine 10 evaluates an operating system on the client machine 10 to determine whether the client machine 10 includes the at least one characteristic. In another embodiment, the client machine 10 identifies a language used by an operating system on the client machine 10 to determine whether the client machine 10 includes the at least one characteristic. In still another embodiment, the client machine 10 identifies a revision level of an operating system on the client machine 10 to determine whether the client machine 10 includes the at least one characteristic. In yet another embodiment, the client machine 10 identifies a resource version of a resource residing on the client machine 10 to determine whether the client machine 10 includes the at least one characteristic.
- the client machine 10 determines whether the client machine 10 includes a device driver to determine whether the client machine 10 includes the at least one characteristic. In other embodiments, the client machine 10 determines whether the client machine 10 includes an operating system to determine whether the client machine 10 includes the at least one characteristic. In still other embodiments, the client machine 10 determines whether the client machine 10 includes a license to execute the plurality of resource files to determine whether the client machine 10 includes the at least one characteristic.
- the client machine 10 determines whether the client machine 10 comprises a required amount of available disk space to access the resource. In another embodiment, the client machine 10 determines whether a central processing unit of the client machine 10 provides a required processing speed. In still another embodiment, the client machine 10 determines whether the client machine 10 comprises a required amount of available RAM. In yet another embodiment, the client machine 10 determines whether the client machine 10 comprises a required level of graphical processing and display capabilities.
- the client machine 10 executes a second client, the second client requesting execution of the plurality of resource files on a remote machine 30 , responsive to a determination that the client machine 10 lacks the at least one characteristic (step 2010 ).
- the client machine 10 determines that the client machine 10 lacks the at least one characteristic
- the client machine 10 does not execute the first client capable of receiving a resource stream.
- a policy prohibits the client machine 10 from receiving the plurality of resource files over a resource stream when the client machine 10 lacks the at least one characteristic.
- the client machine 10 determines that the client machine 10 does include the at least one characteristic.
- the client machine 10 executes the first client, the first client receiving a resource stream comprising the plurality of resource files from a remote machine 30 for execution on the client machine 10 .
- the client machine 10 executes the second client requesting execution of the plurality of resource files on a remote machine 30 upon determining that the client machine 10 lacks the at least one characteristic.
- the second client transmits the request to a remote machine 30 hosting the plurality of resource files.
- the remote machine 30 executes the plurality of resource files comprising the resource and generates resource-output data.
- the second client receives resource-output data generated by execution of the plurality of resource files on the remote machine 30 .
- the second client displays the resource-output on the client machine 10 .
- the client machine 10 requests execution of the plurality of application files on a physical machine 30 .
- the client machine 10 requests execution of the plurality of application files on a virtual machine executing on a remote machine 30 .
- the second client receives a file comprising access information for accessing a plurality of resource files and requests, responsive to a determination by the first client that the client machine 10 lacks the at least one characteristic, execution of the plurality of resource files on a virtual machine providing a computing environment having the least one characteristic.
- the client machine 10 executes the second client requesting execution of the plurality of resource files on a remote machine 30 upon determining that the client machine 10 lacks the at least one characteristic.
- the second client transmits the request to a remote machine 30 hosting the plurality of resource files.
- a virtual machine executing on the remote machine 30 executes the plurality of resource files comprising the resource and generates resource-output data.
- the second client receives resource-output data generated by execution of the plurality of resource files on the virtual machine.
- the second client displays the resource-output on the client machine 10 .
- the second client transmits the request to a remote machine 30 that does not host the plurality of resource files.
- the remote machine 30 may request the plurality of resource files from a second remote machine 30 hosting the plurality of resource files.
- the remote machine 30 may receive the plurality of resource files from the second remote machine 30 across a resource streaming session.
- the remote machine 30 stores the received plurality of resource files in an isolation environment and executes the resource within the isolation environment.
- the remote machine 30 transmits the generated resource-output data to the second client on the client machine 10 .
- the second client transmits the request to a remote machine 30 that does not host the plurality of resource files.
- the remote machine 30 may request the plurality of resource files from a second remote machine 30 hosting the plurality of resource files.
- the remote machine 30 may receive the plurality of resource files from the second remote machine 30 across a resource streaming session.
- the remote machine 30 stores the received plurality of resource files in a computing environment provided by a virtual machine executing on the remote machine 30 , the computing environment having the at least one characteristic. In yet another of these embodiments, the remote machine 30 executes the resource within the computing environment provided by the virtual machine and transmits the generated resource-output data to the second client on the client machine 10 .
- a virtual machine on the remote machine 30 executes the plurality of resource files. In one of these embodiments, the virtual machine receives for execution a resource stream comprising the plurality of resource files. In some embodiments, a virtual machine may receive for execution a resource stream responsive to an application of a policy. In one of these embodiments, the result of the application of the policy depends on an availability of the requested resource in the machine farm 38 (including availability of a suitably configured physical machine 30 or virtual machine), the sensitivity of the requested resource (including whether a policy prevents the transmission of the requested resource to an unsecured environment), information associated with the user of the client machine 10 (including authorization to execute or access the requested resource in an unsecured environment).
- the first client machine 10 capable of receiving the resource stream, is a resource streaming client 1952 .
- the resource streaming client 1952 receiving the file, retrieving an identification of a plurality of resource files and at least one characteristic required for execution of the plurality of resource files, responsive to the file, and determining whether the client machine 10 includes the at least one characteristic.
- the second client is a client agent 1960 .
- the client agent 1960 receives the file from the resource streaming client 1952 responsive to a determination, by the resource streaming client 1952 , that the client machine 10 lacks the at least one characteristic.
- a remote machine 30 includes functionality for monitoring resource usage by a client machine 10 .
- the remote machine 30 may monitor the status of each resource used by the client machine 10 , for example upon execution or termination of a resource.
- the remote machine 30 requires the client machine 10 to transmit messages about the status of a resource executed by the client machine 10 .
- the client machine 10 transmits a message indicating that the client machine 10 has connected to the network.
- the client machine 10 is said to have a session when the client machine 10 interacts with the remote machine 30 and executes one or more resources.
- the remote machine 30 requires the client machine 10 to maintain, for the duration of a session, a license authorizing execution of resources received from a remote machine 30 .
- sessions have unique session identifiers assigned by the remote machine 30 .
- the client machine 10 transmits the messages to the remote machine 30 with which it interacted to receive and execute the resource.
- the client machine 10 receives from the remote machine 30 an identifier of a second remote machine 30 , such as a session management server 1962 , the second remote machine 30 receiving and storing all transmitted messages associated with the session on the client machine 10 .
- the session management server 1962 is a remote machine 30 providing license management and session monitoring services. In one of these embodiments, the session management server 1962 includes a server management subsystem 1908 providing these services.
- the client machine 10 transmits messages directly to the session management server 1962 . In another embodiment, the client machine 10 transmits messages to a remote machine 30 , the remote machine 30 forwarding the messages to the session management server 1962 with an identification of the client machine 10 .
- a client machine 10 may transmit a heartbeat message to the remote machine 30 .
- the heartbeat message includes a request for a license.
- the client machine 10 may transmit the heartbeat message after receiving access information associated with a resource which the client machine 10 requested authorization to execute.
- the client machine 10 may transmit the heartbeat message prior to executing the resource.
- the client machine 10 includes with the heartbeat message a launch ticket received with the access information.
- the remote machine 30 may grant the client machine 10 a license upon successful verification of the launch ticket.
- the heartbeat message includes an indication that the client machine 10 has initiated execution of a resource. In still another embodiment, the heartbeat message includes an indication that the client machine 10 has terminated execution of a resource. In yet another embodiment, the heartbeat message includes an indication of a failure to execute a resource.
- the heartbeat message includes a request for an identification of a second session management server, such as a session management server 1962 .
- the heartbeat message includes an indication that the client machine 10 has connected to a network on which the remote machine 30 resides.
- the heartbeat message includes a request to reset a resource streaming session.
- the client machine 10 transmits this heartbeat message when an error has occurred and a connection is terminated between a network on which the remote machine 30 resides and the client machine 10 .
- the client machine 10 transmits with the heartbeat message information associated with the session.
- the remote machine 30 may transmit to the client machine 10 session-related data if the session has not expired.
- the client machine 10 may not receive a reply to a heartbeat message transmitted to the remote machine 30 .
- the client machine 10 may re-establish a session by transmitting a message requesting a session reset to the remote machine 30 .
- the client machine 10 may re-establish a session by transmitting a message requesting a session reset to a second remote machine 30 .
- the remote machine 30 reconnects to the network, it will create a new session for each session reset request received while the remote machine 30 was disconnected.
- the new session will be associated with the reconnected and unlicensed state.
- no new license will be acquired for the new session.
- the client machine 10 executes a resource, a new license will be acquired and all sessions associated with the client machine 10 will be associated with an active and licensed state.
- a resource streaming client 1952 on the client machine 10 generates the heartbeat message.
- the resource streaming client 1952 forwards the heartbeat message to a web interface 1958 for transmission to the client machine 10 for transmission to the remote machine 30 .
- the management service 1904 on the remote machine 30 receives the heartbeat message from the client machine 10 via the web interface 1958 .
- a remote machine 30 comprising a collector point 240 (described above) receives and stores the heartbeat messages.
- the resource streaming client 1952 requests a license from the remote machine 30 .
- the license authorizes execution of a resource on the client machine 10 .
- the remote machine 30 may access a second remote machine 30 to provide the license.
- the remote machine 30 may provide the license to the client machine 10 .
- the remote machine 30 may provide a license acceptable for authorization purposes to a second remote machine 30 .
- the license is revoked upon termination of execution of a resource.
- a request for access to a resource is received (step 802 ).
- the resource is a file.
- an application program is selected and executed to provide access to the file.
- a type of file associated with the requested file is identified to select an application program for execution.
- an application program prior to the request for access to the file, an application program is associated with a type of file, enabling automatic selection of the application program upon identification of a type of file associated with the requested file.
- file type association (FTA) functionality permits users to automatically initiate the execution of application programs associated with a data file, even though the data file and the executable program are hosted on different computing nodes.
- file type association functionality permits users to transparently execute executable programs by selecting data files located on a computing machine that differs from the machine(s) where the executable programs are located.
- a user of a client machine 10 can transparently invoke the execution of an executable program on a remote machine 30 by selecting a data file located on the client machine 10 .
- a user can transparently invoke the execution of an application program on their client machine 10 by selecting a data file located on a remote machine 30 .
- a user can select a data file stored on a remote machine 30 ′, such as a web server, and transparently invoke the execution of an associated executable program on a remote machine 30 , such as an application execution server.
- execution permits processing of the contents of the selected data file, the output of which is then provided to the user at the client machine 10 .
- examples using filename extensions necessarily reflect the idiosyncrasies of embodiments utilizing the WINDOWS family of operating systems.
- Other embodiments implement methods and apparatus in accord using special parameters stored in the data file itself, the data contained in the data file, the file system records associated with the data file, or a separate data file or database.
- embodiments using the MacOS family of operating systems utilize file and application creator types and store file-type association data in the Desktop file associated with each storage device.
- Embodiments using a UNIX-variant operating system utilize file extensions, embedded parameters, or other mechanisms as appropriate. Accordingly, the scope of the claims should not be read to be limited to embodiments relying on filename extensions or embodiments utilizing WINDOWS operating systems.
- a flow diagram depicts one embodiment of the steps taken in a method of enabling transparent distributed program execution on a remote machine 30 through the selection of graphical indicia representative of a data file located on the client machine 10 .
- the client machine 10 receives, from one of a plurality of remote machines 30 , a mapping specifying an association between a type of data file and an executable program for execution on one of a plurality of remote machines 30 (Step 2206 ).
- the mapping specifies an association between a type of data file and an executable program for execution on a virtual machine located on one of a plurality of remote machines 30 .
- the client machine 10 presents a graphical depiction of a data file stored on the client machine 10 (Step 2214 ) and receives a selection of the graphical depiction of the data file (Step 2218 ).
- the client machine 10 identifies an executable program associated with the type of the selected data file using the received mapping (Step 2222 ) and sends a request to a remote machine 30 for execution of the identified executable program (Step 2226 ).
- the client machine 10 initiates the execution of a local display application (Step 2230 ) to receive application output data from the executing program (Step 2234 ), which it displays to the end user (Step 2238 ).
- mapping when the client, machine 10 receives the mapping (Step 106 ), the mapping may be received by itself, with several other mappings, or with other messages or data such as software updates.
- Table 3 illustrates an exemplary mapping provided in one embodiment of the invention:
- the mapping identifies an association between a particular executable program for use with a particular data file or type of data file stored on the user's client machine 10 .
- the mapping specifies the relationship between an executable program and a data file in terms of a client machine 10 application that launches the executable program on a remote machine 30 and displays the output from execution at the client machine 10 .
- the mapping could specify that when a “.DOC” file is selected, the client machine 10 is to execute METAFRAME from Citrix Software of Ft.
- a remote machine 30 receiving the request to execute the application program chooses a method for providing access to the application program, as described above in connection with FIG. 8 (step 804 ).
- the remote machine 30 determines to execute the application and provide the application output data to the client machine 10 .
- the remote machine 30 identifies a remote machine 30 that executes the application and provides the application output data to the client machine 10 .
- the remote machine 30 identifies an application streaming service that transmits the application program to the client machine 10 for local execution. In yet another of these embodiments, the remote machine 30 identifies a remote machine 30 ′ on which a virtual machine provides a computing environment capable of executing the application program and transmitting the application output data to the client machine 10 .
- mapping specifies the relationship between an executable program and a data file in terms of a client machine 10 application that requests transmission of the executable program to the client machine 10 from an application streaming service provided by a remote machine 30 .
- the mapping could specify that when a file is selected, the client machine 10 is to establish a connection to a virtual machine provided by one of a plurality of remote machines 30 to initiate execution of an application program on the virtual machine and to receive application output data from the execution for display to the user at client machine 10 .
- a virtual machine and an execution machine onto which the virtual machine is launched are identified, configured, and provide the user of the client machine 10 with access to the file.
- the client machine 10 displays a list of file names associated with data files stored on the client machine 10 .
- indicia representative of files stored on the client machine 10 are intermingled with indicia representative of files stored on one or more remote machines 30 , or on virtual machines executing on remote machines 30 .
- client-based FTA is operative when indicia representative of a file stored on the client machine 10 is selected.
- multiple forms of FTA are operative, with the appropriate form of FTA activated based on the location of the file associated with the selected indicia.
- FIG. 22B illustrates one embodiment of the steps taken by a remote machine 30 in the client-based file-type association process.
- a mapping is provided specifying an association between a type of data file stored on a client machine 10 and an executable program for execution on one of a plurality of remote machines 30 (Step 2254 ).
- a request to execute the executable program is received (Step 2262 ) and the executable program is executed on one of a plurality of remote machines 30 (Step 2266 ).
- the remote machine 30 receiving the request to execute the executable program chooses to provide the requested access as describe above in connection with FIG. 8 (step 2204 and step 2206 ).
- the remote machine 30 receives a request for transmission of the identified executable program to the client machine 10 for local execution.
- the remote machine 30 chooses to provide the client machine 10 with the executable program via an application streaming service as described above. In another of these embodiments, the remote machine 30 chooses to stream the executable program to a remote machine 30 or to a virtual machine executing on a remote machine 30 ′.
- a flow diagram depicts another embodiment of the steps taken in a method for enabling transparent distributed program execution on a client machine 10 through the selection of graphical indicia representative of a data file located on a remote machine 30 .
- the client machine 10 presents a graphical depiction of a data file stored on one of a plurality of remote machines 30 (Step 2300 ).
- the client machine 10 receives a selection of the graphical depiction of the data file (Step 2304 ) and transmits the selection to one of the plurality of remote machines 30 (Step 2308 ).
- the client machine 10 receives a request from one of the plurality of remote machines 30 to execute an executable program associated with the selected data file (Step 2312 ) and executes the associated executable program (Step 2316 ).
- the client machine 10 presents a user with a graphical depiction of at least one data file stored on at least one remote machine 30 (Step 2300 ).
- indicia representative of files stored on one or more remote machines 30 and on virtual machines executing on the one or more remote machines 30 , are intermingled with indicia representative of files stored on the client machine 10 .
- server-based FTA is operative when indicia representative of a file stored on a remote machine 30 is selected.
- multiple forms of FTA are operative, with the appropriate form of FTA activated based on the location of the file associated with the selected graphical indicia.
- a remote machine 30 receiving a request to access a selected data file chooses a method for providing access to the data file.
- the data file resides on the remote machine 30 .
- the data file resides on a remote machine 30 ′, such as a web server.
- the remote machine 30 consults a mapping to identify an application program associated with the requested data file.
- the remote machine 30 chooses to provide the client machine 10 with access to the file via execution of the associated application program in a computing environment provided by a virtual machine (step 806 ).
- the remote machine 30 may identify a remote machine 30 ′ to execute the application program and transmit application output data to the client machine 10 .
- the remote machine 30 identifies a remote machine 30 ′ to execute the application program in a computing environment provided by a virtual machine executing on the remote machine 30 ′, as described in connection with FIG. 8 (step 808 ).
- the remote machine 30 identifies a remote machine 30 ′ providing an application streaming service capable of transmitting the application program to the client machine 10 for execution on the client machine 10 as described in connection with FIG. 8 (step 816 ).
- the application streaming service transmits the application program to a remote machine 30 ′ for execution and the remote machine 30 transmits application output data resulting from the execution to the client machine 10 .
- the remote machine 30 selects one of a predetermined number of methods for executing a requested application program, responsive to a policy, the predetermined number of methods including a method for executing the requested application in a computing environment provided by a virtual machine.
- the application streaming service transmits the application program to a remote machine 30 ′ for executing in a computing environment provided by a virtual machine executing in the remote machine 30 ′.
- the remote machine 30 selects a method for streaming the requested application program to a virtual machine and executing the enumerated application in the virtual machine environment.
- the virtual machine is evaluated and, a determination to stream the requested application is made responsive to the evaluation.
- the determination to stream one of a plurality of files comprising an enumerated application program to a virtual machine is made responsive to credentials gathered from a client machine 10 .
- the client machine 10 Having received data associated with the selected data file, the client machine 10 typically processes the received data using the executing program and displays the result of the processing to the end user.
- a client machine 10 connects to one or more of the remote machines 30 in the machine farm 38 .
- the client machine 10 may communicate with remote machines 30 to receive application-output data generated by an execution of an application program on a remote machine 30 , or on a virtual machine executing on the remote machine 30 .
- protocol stacks are implemented to enable communications between the client machine 10 and remote machines 30 .
- FIG. 24 is a flow diagram depicting one particular embodiment of a method for establishing an extensible and dynamically bindable protocol stack 20 .
- the method allows a client machine 10 to specify the contents of a protocol stack dynamically without requiring that a remote machine 30 have a prior protocol stack description for a particular client machine and a particular application requirement.
- a remote machine 30 is on-line and monitoring activity on a specific transport system (e.g. LAN or WAN) and has initialized its protocol stack with the minimal necessary protocol modules to support a “TTY” communication mode.
- This mode is a raw ASCII stream mode with no protocol assumptions above the transport layer (i.e. there are no protocol layers for compression, encryption, reliability, framing, or modem).
- a client machine 10 seeking access to the remote machine 30 establishes a connection to the common transport system with the minimum protocol set needed to support a TTY communication mode.
- step 2401 Upon detecting that a client machine 10 has established transport system connection (step 2401 ), the application server broadcasts a TTY data stream, “DETECT.sub.--STRING”, in step 2402 that indicates service is available.
- the method used for detecting a client machine connection is transport system dependent (e.g. in the case of the TCP transport, when a client machine connects to a known port). If the client machine 10 does not respond within a prescribed time period, step 2403 , a re-broadcast of mission of the message occurs in step 2402 . Otherwise the process proceeds to step 2405 where the client machine 10 sends the TTY string “DETECT-STRING”.
- step 2406 the client machine 10 waits for the remote machine 30 to respond and, if the response is within a prescribed time interval, the process proceeds to steps 2407 where the client machine 10 enables the required protocol for supporting its application. Otherwise, the client machine 10 repeats the transmission of the message in step 2405 .
- the server responds in step 4108 by enabling the required set of protocols.
- step 2409 the TTY mode of communication ends because the next message sent by the server is a presentation layer protocol packet, “PACKET.sub.--INIT.sub.—REQUEST”, which indicates that the client's required “DETECT.sub.--STRING” has been received and accepted.
- the client In response to step 2409 , the client, at step 2410 , sends a set of presentation layer protocol packets, “PACKET.sub.--INIT.sub.--RESPONSE”, each of which is used to specify a required or optional protocol module that is being negotiated with the server.
- the server sends a set of “PACKET.sub.--INIT.sub.--CONNECT” packets.
- the number of packets is variable: one for each client packet sent in step 2410 , thus giving the remote machine 30 the opportunity to negotiate the parameters under which communications will take place by overriding the parameters of the client machine 10 ; or, the remote machine 30 may indicate that all of the parameters of the client machine 10 are acceptable by sending the parameters unchanged.
- the remote machine 30 enables the negotiated protocols (including any optional protocols) of step 2411 . After the client machine 10 receives the packets from step 2411 , the client machine 10 enables the negotiated protocols in step 2413 .
- a virtual machine host server communicates with the client machine 10 to enable negotiated protocols.
- a request is received from a client machine 10 for access to a computing environment or for application execution, the request including an identification of a user of the client machine 10 .
- a virtual machine is launched in communication with a hypervisor.
- a virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications.
- a virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism.
- a virtual machine host server creates a first portion of a protocol stack.
- a hypervisor creates the first portion of the protocol stack.
- the hypervisor transmits a request protocol message to the client machine 10 .
- the hypervisor receives from the client machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by the client machine 10 .
- the virtual machine host server generates, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters.
- the virtual machine host server transmits a request protocol message to the client machine 10 .
- the virtual machine host server receives from the client machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by the client machine 10 .
- the virtual machine host server transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters.
- the virtual machine host server sends an acknowledgment message to the client machine 10 indicating that at least one of the protocols specified by the client machine 10 has been enabled.
- the virtual machine host server responds to each received protocol packet transmitted by the client machine 10 with a virtual machine host server protocol packet, at least one of the virtual machine host server protocol packets modifying at least one of the associated protocol parameters.
- the virtual machine host server creates on the virtual machine host server a second portion of a protocol stack, the first portion and the second portion of the protocol stack establishing a communication channel for communicating with the client machine 10 having the negotiated protocol parameters.
- a virtual machine communicates with the client machine 10 to enable negotiated protocols as described above.
- a request is received from a client machine 10 for access to a computing environment or for application execution, the request including an identification of a user of the client machine 10 .
- a virtual machine in communication with a hypervisor is identified.
- a virtual machine is launched in communication with a hypervisor.
- a virtual machine in communication with a hypervisor is allocated.
- a second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism.
- the second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications.
- the second virtual machine creates a first portion of a protocol stack.
- the second virtual machine transmits a request protocol message to the client machine 10 .
- the second virtual machine receives from the client machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by the client machine 10 .
- the second virtual machine transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters.
- the second virtual machine sends an acknowledgement message to the client machine 10 indicating that at least one of the protocols specified by the client machine 10 has been enabled.
- the second virtual machine responds to each received protocol packet transmitted by the client machine 10 with a response protocol packet, at least one of the response protocol packets modifying at least one of the associated protocol parameters.
- the first virtual machine creates a second portion of a protocol stack, the first portion and the second portion of the protocol stack establishing a communication channel for communicating with the client machine 10 having the negotiated protocol parameters.
- the first virtual machine sends an acknowledgment message to the client machine 10 indicating that at least one of the protocols specified by the client machine 10 has been enabled.
- the first virtual machine responds to each received protocol packet transmitted by the client machine 10 with a response protocol packet, at least one of the response protocol packets modifying at least one of the associated protocol parameters.
- a virtual machine host server communicates with the client machine 10 to enable negotiated protocols as described above.
- a request is received from a client machine 10 for access to a computing environment or for application execution, the request including an identification of a user of the client machine 10 .
- a virtual machine is launched in communication with a hypervisor.
- a virtual machine in communication with a hypervisor is allocated.
- the virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism.
- the virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications.
- the virtual machine host server transmits a request protocol message to the client machine 10 .
- the virtual machine host server receives from the client machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by the client machine 10 .
- the virtual machine host server transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters.
- the virtual machine host server sends an acknowledgement message to the client machine 10 indicating that at least one of the protocols specified by the client machine 10 has been enabled.
- the virtual machine host server responds to each received protocol packet transmitted by the client machine 10 with a virtual machine host server protocol packet, at least one of the virtual machine host server protocol packets modifying at least one of the associated protocol parameters.
- the virtual machine host server generates a data structure representing the connection and associated with an initial protocol stack.
- the virtual machine host server identifies a virtual machine in communication with a hypervisor and generates a client space in the identified virtual machine.
- the virtual machine host server generates a second protocol stack associated with the generated client space and transfers the established connection between the virtual machine host server and the client machine 10 from the initial protocol stack to the second protocol stack by associating the data structure with the second protocol stack.
- a virtual machine communicates with the client machine 10 to enable negotiated protocols as described above.
- a request is received from a client machine 10 for access to a computing environment or for application execution, the request including an identification of a user of the client machine 10 .
- a first virtual machine in communication with a hypervisor is identified.
- a second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism.
- a second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications.
- the second virtual machine transmits a request protocol message to the client machine 10 .
- the second virtual machine receives from the client machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by the client machine 10 .
- the second virtual machine transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters.
- the second virtual machine sends an acknowledgement message to the client machine 10 indicating that at least one of the protocols specified by the client machine 10 has been enabled.
- the second virtual machine responds to each received protocol packet transmitted by the client machine 10 with a response protocol packet, at least one of the response protocol packets modifying at least one of the associated protocol parameters.
- the second virtual machine generates a data structure representing the connection and associated with an initial protocol stack.
- the second virtual machine generates a client space in the identified first virtual machine.
- the second virtual machine generates a second protocol stack associated with the generated client space and transfers the established connection between the second virtual machine and the client machine 10 from the initial protocol stack to the second protocol stack by associating the data structure with the second protocol stack.
- a block diagram depicts one embodiment of a client machine 10 in communication with a remote machine 30 .
- the client machine 10 may transmit a request to the general communications port previously defined by the communications protocol or to the “well-known” communications port on the remote machine 30 .
- the communication takes place by way of a datagram service.
- the remote machine 30 accesses the table of server addresses and returns a message containing the address of the remote machine 30 ′ providing access to the requested resource and having the least load.
- an address of a virtual machine executing on a remote machine 30 ′ having the least load is provided.
- the operating system or hypervisor may forward the communication request, and all subsequent traffic, to the appropriate virtual machine.
- Subsequent communications are automatically addressed by the client machine 10 also to a “well-known” or predefined general communications port on the remote machine 30 ′.
- the type of protocol with which the initial query was made to the remote machine 30 determines the protocol of the information returned by the remote machine 30 to the client machine 10 .
- the remote machine 30 would return the TCP/IP address of the remote machine 30 ′ to the client machine 10 and the client machine 10 would subsequently establish contact with the remote machine 30 ′ using that protocol.
- the datagram requesting an application address by a client machine 10 includes a request for a different type of protocol than the one used to send the request to the remote machine 30 .
- the client machine 10 may make a request to the remote machine 30 using the IPX protocol and request the address of the remote machine 30 ′ as a TCP/IP protocol address.
- a remote machine 30 receives a request for access to a resource and chooses a method for providing access to the requested resource.
- the remote machine 30 returns the network address of a remote machine 30 ′ having the desired resource to the client machine 10 .
- the client machine 10 uses the information received from the remote machine 30 to request connection to the specified remote machine 30 ′.
- a connection is first established to a “well-known” communications port and is later transferred to a specific communications port under control of a connection manager.
- the specific communications port is associated with the resource executing on the remote machine 30 ′ which then communicates with the client machine 10 through the specific communications port.
- a client process 2502 on client machine 10 makes a request 2504 to the remote machine 30 to obtain the address of a remote machine 30 ′ which includes the desired resource 2506 .
- the remote machine 30 returns to the client machine 10 a message 2508 containing the address of the remote machine 30 ′ which includes the resource 2506 .
- the protocol used at this point of the connection is a datagram service.
- the client machine 10 uses the returned address to establish a communication channel 2510 with the remote machine 30 ′.
- the port number used by the client machine 10 corresponds to the “well-known port” in the remote machine 30 ′ which has been defined by the network protocol as the port by which the remote machine 30 ′ establishes communication connections with client machines 10 .
- the well-known port 2512 has a rudimentary protocol stack 2514 which includes primarily an endpoint data structure 2516 .
- the endpoint data structure 2516 points to the communication protocol stack 76 and client connection thereby establishing a unique representation or “handle” for the client machine 10 .
- the endpoint data structure 2516 permits the connection between the remote machine 30 ′ and the client machine 10 to be moved at will between the connection manager 2518 and the various resources 2506 on the machine 30 ′.
- the endpoint data structure 2516 permits the connection between the remote machine 30 ′ and the client machine 10 to be moved at will to or from a virtual machine providing management functionality for a virtual machine on the remote machine 30 ′.
- the endpoint data structure 2516 in one embodiment, not only contains the handle to the client machine 10 but may also contain other information relating to the client connection.
- the machine 30 ′ monitors activity on a specific communications system (e.g. LAN or WAN) and has initialized this minimum protocol stack 76 with only the necessary protocol modules needed to support a “TTY” communication mode.
- the “TTY” communication mode is a simple ASCII stream with no protocol assumptions above the transport layer. That is, there are no protocol layers for compression, encryption, reliability, framing, or presentation of transmitted data.
- a client machine 10 seeking a resource 2506 running on the client machine 10 ′ establishes a connection to the well-known communications port 2512 with the minimum protocol set needed to support a TTY communication mode.
- a connection manager 2518 executing on the machine 30 ′ is “listening” to the well-known communications port 2512 for a connection request 2510 .
- the connection manager 2518 is notified 2520 .
- the connection manager 2518 knows which protocol is being used based on the notification 2520 .
- connection manager 2518 creates a new minimum protocol communications stack 2522 , starts a computing environment 2524 (referred to throughout this discussion as an execution environment 2524 ) and binds the new minimum protocol stack 2522 to the execution environment 2524 .
- the connection manager 2518 creates a new minimum protocol stack 2522 in a virtual machine on the remote machine 30 ′.
- the connection manager 2518 creates a new minimum protocol stack 2522 in a virtual machine providing administrative or management functionality for a virtual machine executing on the remote machine 30 ′.
- connection manager 2518 creates a plurality of minimum protocol stacks 2522 , each of which may be located on the remote machine 30 ′, in a computing environment provided by a virtual machine executing on the remote machine 30 ′, or on a virtual machine providing administrative or management functionality for a virtual machine executing on the remote machine 30 ′.
- the remote machine 30 ′ includes a number of execution environments 2524 which have been previously been started, but which have not been associated with a communications port.
- the pre-connection starting of the execution environments permits a faster response time than if each execution environment 2524 is started when the connection request is received from the client machine 10 .
- the execution environment 2524 is started, the resource 2506 requested by the client machine 10 is also started.
- the client machine 10 does not specify a resource, either a default application is started or the execution environment 2524 with no resource started.
- the execution environment 2524 is the requested resource.
- connection manager 2518 then moves the client connection, including the unique client identifier or handle, from the well-known port 2512 to the new minimum protocol stack 2522 .
- the connection manager 2518 moves the client connection to the new minimum protocol stack 2522 in a virtual machine on the remote machine 30 ′.
- the connection manager 2518 moves the client connection to the new minimum protocol stack 2522 in a virtual machine providing administrative or management functionality for a virtual machine executing on the remote machine 30 ′.
- connection manager 2518 moves portions of the client connection to a plurality of minimum protocol stacks 2522 , each of which may be located on the remote machine 30 ′, in a computing environment provided by a virtual machine executing on the remote machine 30 ′, or on a virtual machine providing administrative or management functionality for a virtual machine executing on the remote machine 30 ′.
- connection manager 2518 using the minimum protocol stack 2522 sends a TTY data stream that indicates service is available.
- this method for detecting a client connection is independent of the port to which the connection is first established. If the client machine 10 does not respond within a prescribed time period (e.g. 5 seconds) to the service available message, a resend of the “service available” message is performed by the machine 30 ′.
- the client machine 10 If the client machine 10 receives the message, the client machine 10 sends a TTY string indicating that the “service available” message was detected. The client machine 10 waits for the machine 30 ′ to respond and if the response is not within a prescribed time interval (e.g. 5 seconds) the client machine 10 resends the message. The connection manager 2518 then queries 90 the client machine 10 asking for the client's default communication parameters. This query 90 takes the form of a message which is passed back to the client machine 10 and which indicates that the client machine 10 should respond with details regarding what protocols the client machine 10 would like to use in the connection.
- a prescribed time interval e.g. 5 seconds
- the client machine 10 sends a set of protocol packets 2526 ; each packet of which is used to specify a required or optional protocol module that is being requested from the remote machine 30 ′.
- the number of packets in the set is variable with one packet being sent for each protocol requested.
- the number of packets that is being sent is included in the header of the first packet.
- the remaining number of packets being sent is included in the header of each packet and is decremented with each succeeding packet sent.
- the client machine 10 may respond to the query 2528 by indicating that, for example, encryption and data compression will be used. In such a case, two protocol packets will be sent from the machine client 10 to the remote machine 30 ′ and, in one embodiment, the header of the first packet will indicate the number of packets as two.
- the connection manager 2518 builds a protocol stack using protocol drivers 2530 , 2530 ′, 2530 ′′ which correspond to the protocols requested by the client machine 10 .
- the connections manager 2518 places each of the required protocol drivers 2530 , 2530 ′, 2530 ′′, corresponding to the requested client protocols (e.g. an encryption driver if encryption is desired by the client) into the protocol stack “container” 2532 and links them together.
- the connections manager 80 places protocol drivers 2530 , 2530 ′, 2530 ′′ into a plurality of protocol stack “containers” 2532 residing in different locations and links the plurality of protocol stack “containers” 2532 .
- This dynamic process allows a client machine 10 to specify the contents of a protocol stack dynamically without requiring that the machine 30 ′ have a prior protocol stack description for a particular client machine 10 .
- multiple client machines 10 may be served by a single machine 30 , even if the separate client machines 10 have vastly differing requirements for the associated communications channel.
- each client machine 10 , 10 ′, 10 ′′ is associated with a respective communications protocol stack 2522 , 2522 ′ and 2522 ′′.
- Such dynamically extensible protocol stacks are described in more detail below.
- the “container” 2532 is a user level or kernel level device driver, such as an NT device driver.
- This container driver provides ancillary support for the inner protocol modules or “drivers” (generally 2530 ) which correspond to the protocol requirements of the client machine 10 .
- This ancillary support is in the form of helper routines that, for example, aid one protocol driver to transfer data to the next driver.
- each protocol driver is a complete user-level or kernel-level driver in itself.
- the viewing user uses a so-called “browser” program to display an HTML page 2602 having a resource window 2604 on the screen 2606 of the user's client machine 10 .
- the browser application 2706 instantiates a parameter handler 2708 and passes the instantiation parameters associated with the resource window 2604 by the generic embedded window tag 2704 .
- the parameter handler 2708 instance spawns a network executive 2710 and passes to it the parameters of the resource window 2604 .
- the network executive 2710 determines which resource 2506 is to be invoked, and on what machine 30 ′ that resource 2506 resides.
- the network executive 2710 may need to query another remote machine 30 , in order to determine which servers, if any, host the desired resource 2506 .
- the network executive 2710 then begins execution of the resource and displays the output of the resource 2506 in the resource window 2604 as described in detail above.
- the network executive 2710 continues to directly display resource output in the resource output window 2604 ′ until the viewing user indicates that execution of the resource 2506 should stop, e.g. by closing the resource window 2604 , or until the viewing user clicks on a tag indicating that a different HTML page should be displayed. When this occurs, execution of the resource 2506 can be terminated. It is preferred, however, is to “cache” the connection. In effect, the first parameter handler 2708 instance is not immediately terminated. However, the resource 2506 continues executing with a reduced priority level, i.e. in “background” mode, because the first parameter handler 2708 no longer has “focus”.
- connection caching it is desirable to accomplish connection caching by providing the parameter handler 2708 source code with a globally accessible data structure for registering instances.
- the parameter handler 2708 may be provided with a globally accessible linked list data structure, data array, data table, or other data structure. Because the data structure is globally available, each instance of the parameter handler 2708 is able to read and write the data structure. This allows each instance of the parameter handler 2708 to “register” with every other instance by writing to the data structure to signal its existence.
- a predetermined limit on the number of connections that may be cached at any one time can be set. In these embodiments if registration of an instance would result in an excess number of cached connections, one of the “cached” connections is removed, i.e. the parameter handler 2708 instantiation associated with that connection is notified that it should terminate. Before termination, the parameter handler 2708 notifies its associated network executive 2710 that it should terminate. In turn, the network executive 2710 closes its session with the server hosting the resource 2506 and then terminates.
- the additional information may be used to more effectively manage the cached connections. For example, if a user has not actively viewed an HTML page 2602 in a predetermined number of minutes, e.g. ten minutes, the parameter handler 2708 instantiation is instructed to terminate, the session with the hosting server is terminated, and the parameter handler 2708 instance removes its entry in the registry.
- a predetermined number of minutes e.g. ten minutes
- Cached connection information may be managed using any known cache management scheme. Connection entries may be discarded on a “first in, first out” basis, i.e. the oldest entry is discarded each time a new entry must be added. Alternatively, cached connection information entries may be discarded on a “least recently used” basis, which discards information relating to connections which have been used the least amount by the user. Other cache management techniques, such as random replacement, may also be used.
- the network executive 2710 associated with the HTML page 2602 is returned to the foreground, i.e., it regains “focus”, and processing of the associated resource resumes at a normal priority level. If necessary, the network executive 2710 re-establishes the connection with the resource 2506 . Although no output data is stored by the network executive 2710 for cached connections, as soon as a connection is re-established for a resource window 2604 the connection to the resource 2506 is re-established and the resource 2506 again writes directly to the resource window 2604 .
- an HTML file 2602 located on a machine 30 ′ and constructed in accordance with an embodiment of the invention includes a generic embedded window tag 2704 .
- the generic embedded window tag 2704 is any data construct which indicates to a browser 60 displaying the HTML file 2602 that a generic embedded window 2604 should be displayed at a particular location in the HTML page 2602 described by the HTML file 2602 .
- the generic embedded window tag 2704 may include additional information, such as height of the window, width of the window, border style of the window, background color or pattern in the window, which resources may be displayed in the window, how often the output display should be updated, or any other additional information that is useful to enhance display of the resource output.
- the tag indicates that a window having a height of 295 pixels and a width of 436 pixels should be drawn to receive resource output.
- Each tag also specifies that the resource should automatically start execution and that the window in which the resource output is displayed should be drawn with a border.
- the ActiveX and Netscape Plugin tags have the remote resource parameters specified in the file “direct.ica” located in the directory “/ica.”
- the JAVA tag specifies the remote resource parameters directly. In the example above, the address of the machine 30 hosting the resource is specified as well as the name of the resource to be executed.
- the browser application 2706 accesses the HTML file 2602 by issuing a request to a specific Uniform Resource Locator (URL) address.
- the machine 30 ′ hosting the HTML file 2602 transmits the HTML file 2602 data to the browser application 2706 , which displays text and translates any tags that are included in the HTML file 2602 .
- the browser application 2706 displays the HTML file 2602 data as an HTML page 2602 . If a generic embedded window tag 2704 is present in the HTML file 2602 , such as one of the tags described above, the browser 60 draws a blank window 2604 in the displayed HTML page 2602 .
- Execution of the desired resource 2506 may commence immediately upon display of the HTML page 2602 or execution may await some signal, e.g. a specified user input which indicates execution of the resource 2506 should begin.
- the browser application 2706 instantiates a parameter handler 2708 associated with the resource window 2604 .
- the parameter handler 2708 instance may be spawned as a child process of the browser application 2706 , as a peer process of the browser application 2706 , a statically-linked thread of execution, a dynamically-link thread of execution, or as a Dynamically Linked Library (“DLL”) associated with the browser application 2706 .
- DLL Dynamically Linked Library
- the browser application 2706 passes any specific parameters associated with the resource window 2604 that were provided by the generic embedded window 66 tag to the parameter handler 2708 instance. Additionally, the browser application 2706 may pass the handle for the resource window 2604 to the parameter handler 2708 instance or the parameter handler 2708 instance may query the browser application 2706 to retrieve the handle for the resource window 2604 .
- the parameter handler 2708 instance also spawns a network executive 2710 .
- the network executive 2710 may be spawned as a child process of the parameter handler 2708 instance, a statically-linked thread of execution, a dynamically-link thread of execution, or as a peer process of the parameter handler 2708 instance.
- the parameter handler 2708 instance forwards any specified resource window 2604 parameters to the network executive 2710 .
- Parameters which are not specified by the parameter handler 2708 instance or the embedded generic window tag 2704 may be set to default values.
- the network executive 2710 may have certain parameter defaults hard-coded, or the network executive 2710 may access a file which contains parameter defaults.
- the network executive 2710 creates its own resource output window 2604 ′.
- the network executive 2710 creates its resource output window 2604 ′ as a child of the displayed resource window 2604 and displays its resource output window 2604 ′ directly over the parent window 2604 drawn by the browser application 2706 . Since the resource output window 2604 ′ drawn by the network executive 2710 is a child of the resource window 2604 drawn by the browser application 2706 , the resource output window 2604 ′ inherits various properties of its parent including position information. Accordingly, the resource output window 2604 ′ will follow the resource window 2604 as the viewing user scrolls the screen of the browser application 2706 or performs other actions which vary the position of the resource window 2604 .
- the network executive 2710 also establishes a communications channel with the machine 30 ′ and invokes execution of the desired resource 2506 by the machine 30 ′ using the connection methodology described above.
- the network executive 2710 which acts as the client machine 10 in the above description, passes any parameters it received from the parameter handler 2708 instantiation to the machine 30 ′, along with any necessary default values. If a parameter is not passed to the machine 30 ′, the machine 30 ′ may request the parameter if it is a necessary parameter which has no default value, e.g. “user id,” or it may provide a default value for the parameter, e.g. execution priority.
- the machine 30 ′ begins execution of the desired resource 2506 and directs the output to the network executive 2710 .
- the network executive 2710 receives data from the resource 2506 and displays the output data in its resource output window 2604 ′. Since the resource output window 2604 ′ is drawn on top of the resource window 2604 drawn by the browser application 2706 , the resource output data is displayed in the HTML page 2602 . As noted above, the resource output window 2604 ′ drawn by the network executive 2710 is a child of the resource window 2604 drawn by the browser application 2706 . This allows the resource output window 2604 ′ to scroll as the HTML page 2602 is scrolled
- the resource output window 2604 ′ also receives input from the viewing user.
- Raw input data e.g. a mouse click
- the network executive 2710 forwards the raw input data to the resource 2506 executing on the machine 30 ′′ In this manner, the viewing user is able to interact with the resource 2506 via the HTML page 2602 .
- an embodiment of an interactive hypermedium system of the invention includes a client machine 10 , a network remote machine 30 and an execution remote machine 30 ′ interconnected by a communications link 150 , herein referred to without any loss of generality as a network or web.
- the network remote machine 30 may be provided by a remote machine 30 .
- the execution machine 30 ′ may be provided by a physical machine or a virtual machine.
- a user on a client machine 10 wishing to access the resource 2802 which is located on the execution machine 30 ′ on the web 150 does so through a graphical user interface 2804 , which is herein referred to without any loss of generality as a hypermedium, located on the client machine 10 .
- the graphical interface is displayed on a graphical display device 124 .
- Data is entered by a mouse 16 and a keyboard 17 located on the client machine 10 .
- the graphical display or page 2806 which the user first views on the hypermedium 2804 is referred to herein without any loss of generality as the home page or web page of the resource 2802 .
- a page 2806 or home page of the hypermedium 2804 includes a graphic link 2808 or textual link 2810 herein referred to without any loss of generality as a hyperlink.
- the web page is displayed by a process 2602 referred to herein without any loss of generality as a network browser 2602 executing on the client machine 10 .
- the network browser 2602 obtains the first page or web page 2806 from a network remote machine 30 and displays the web page 2806 on the hypermedium 2804 for the user to view on the graphical display device 124 .
- the network browser 2602 obtains a network configuration file 2812 corresponding to the selected resource 2802 from a predetermined network server 2606 and starts a client agent 2814 which will communicate with the selected resource 2802 . This will be discussed in more detail below.
- the client agent 2814 reads the configuration file 2812 and establishes a communications link to a server agent 2816 on the execution server 24 specified by the configuration file 2812 .
- the configuration file 2812 includes the name of the resource and the node location of the resource 2802 corresponding to the hyperlink 2808 , 2810 .
- the configuration file may also contain optional information such as authentication or authorized user information.
- Server agent 2816 performs the operations necessary (such as authentication) to permit the client agent 2814 access to the resource 2802 , and once access is permitted, allows access to the resource 2802 requested by the user.
- the server agent 2816 may execute in a hypervisor, a virtual machine, or on an operating system.
- the functionality provided by the server agent 2816 is split between a hypervisor and a virtual machine or between two virtual machines. In still other embodiments, the functionality provided by the server agent is split between a hypervisor and a guest operating system executing in a virtual machine. In some embodiments, a connection to a computing environment including the resource 2802 is established, as described in further detail below.
- the client machine 10 may access the resource 2802 through the server agent 2816 directly with the client agent 2814 without intervention by the network browser 2602 .
- the client agent 2814 is then responsible for receiving data from the user through the mouse 16 and keyboard 17 and transmitting it to the resource 2802 on the execution machine 30 ′.
- the client agent 2814 is responsible for receiving data from the resource 2802 on the execution machine 30 ′ and displaying the data in a display window 2818 on the graphical display device 124 on the client machine 10 . It should be noted that the display window 2818 may be located within the boundaries or outside the boundaries of the hypermedium 2804 .
- the server agent 2816 instructs the client agent 2814 to disconnect the communication link 150 between the client agent 2814 and the server agent 2816 .
- the server agent 2816 may reside outside of the execution machine 30 ′.
- the client agent 2814 may reside outside of the client machine 10 .
- FIG. 29 depicts the operation of the system in more detail.
- the client agent 2814 is registered (step 2901 ) with the network browser 2602 of the client machine 10 and an entry is made in the network browser's registration file 2820 ( FIG. 28 ).
- This entry permits the network browser 2602 to start the client agent 2814 whenever a given file type (including types such as a MIME type) is requested by the hyperlink 2808 , 2810 of the hypermedium 2804 .
- the client agent 2814 is designed to permit a user on the client machine 10 to execute and interact with a remote resource 2802 on an execution machine 30 ′.
- the client agent 2814 would be registered with the network browser 2602 such that whenever a hyperlink 2808 , 2810 requested the given file type (for example .RMT for remote execution) from the network browser 2602 , the network browser 2602 would start the client agent 2814 which would permit remote execution and interaction with a resource 2802 resident on an execution machine 30 ′.
- the invoking of the client agent 2814 is discussed in more detail below.
- the hypermedium 2804 When a user wishes to access a resource from a hypermedium environment, for example a database program, the hypermedium 2804 is displayed in a manner that is well known to those skilled in the art.
- a hyperlink 2808 , 2810 on the page 2806 of the hypermedium step 2902
- a request is made to the network browser 2602 for the corresponding data file (step 2903 ).
- the file type (.RMT) is requested.
- the network browser 2602 obtains the corresponding configuration file 2812 from the network server 2606 which is specified in the file request made by the hyperlink 2808 , 2810 to the network browser 2602 (step 2904 ).
- the network browser 2602 compares the obtained configuration file 2812 with the registration file 2820 of client agent names which it maintains (step 2905 ).
- the network browser 2602 compares a file type of the obtained configuration file 2812 with the registration file 2820 .
- the network browser 2602 compares an entry in the obtained configuration file 2802 with the registration file 2820 . If the client agent 2814 specified by the configuration file 2812 is found in the registration file 2820 , the client agent 2814 is started (step 2906 ).
- the invoked client agent 2814 reads the configuration file 2812 (step 2907 ), and based upon the information in the configuration file 2812 , begins to establish a communication link with the server agent 2816 on the execution server 24 (step 2908 ), in this case the sales database application execution server (generally 30 ′).
- step 2908 communication begins with the server agent 2816 monitoring communication activity on the network 150 .
- the server agent 2816 monitors communication activity on the network 150 .
- no protocol assumptions are made by the server agent 2816 beyond those necessary for the transport layer.
- the client agent 2814 also makes no assumption of the communications protocol beyond that required by the transport layer.
- the server agent 2816 determines that a client agent 2814 is attempting to communicate with it, the server agent 2816 transmits a message to the client agent 2814 indicating that service is available.
- the client agent 2814 determines that service is available on the execution remote machine 30 ′, the client agent 2814 transmits a message to the server agent 2816 indicating that it is ready to proceed with the communication protocol. Once the server agent 2816 has responded that it is ready to continue the communication protocol, the client agent 2814 enables the protocol necessary for it to run the application 36 . In response to the message from the client agent 2814 , the server agent 2816 also enables the required protocol. The server agent 2816 then transmits a message using the required protocol indicating that the client agent's request has been received and accepted.
- the client agent 2814 and the server agent 2816 exchange a set of messages which negotiate the parameters under which communications will occur. Once negotiations are complete, the client agent 2814 and the server agent 2816 are able to communicate as necessary for the resource 2802 to be run by the user.
- step 2909 Once the communications protocol has been established and the server agent 2816 has authenticated the client agent 2814 (step 2909 ) (for example determining that the user has permission to read and write to the database) access to the resource 2802 (step 2910 ) is provided by the application execution server 24 .
- resource 2802 on the execution server 30 ′ is communicating via the server agent 2816 with the client agent 2814 on the client machine 10 .
- the client agent 2814 is now responsible for transmitting data input by the user using the mouse 16 and keyboard 17 to the resource 2802 on the execution machine 30 ′. Further, the client agent 2814 is responsible for receiving data for display from the resource 2802 and displaying that data in the application window 2818 on the graphical display device 124 of the client machine 10 .
- the underlying presentation protocol which passes data to a transport layer such as TCP/IP must be capable of transferring graphical information.
- Examples of such protocols which may be used for interactive hypermedia communication include public domain X11 protocol, the proprietary Independent Computing Architecture (ICA) protocol of Citrix Systems Inc., or the proprietary Remote Desktop Protocol (RDP) of Microsoft Corporation.
- ICA Independent Computing Architecture
- RDP Remote Desktop Protocol
- the above described system permits a user on a client machine 10 , which may have very limited resources, to start and interact with a resource 2802 located on an execution machine 30 ′.
- the resource 2802 then runs on the execution machine 30 ′ and the data is input and the results displayed on the client machine 10 .
- the accessed resource 2802 executes in a virtual machine provided by the remote machine 30 ′.
- a flow diagram depicts an embodiment of method of making a hypermedium page interactive, the hypermedium page displayed by a network browser.
- a hyperlink on a hypermedium page displayed on a client machine 10 is selected, the hyperlink identifying a desired computing resource (step 3002 ).
- a hyperlink configuration file is retrieved, the hyperlink configuration file corresponding to the hyperlink and identifying a remote machine 30 ′ (step 3004 ).
- a client agent is started on a client machine 10 (step 3006 ).
- the client agent creates a communication link to a virtual machine executing on the remote machine 30 ′ identified by the hyperlink configuration file (step 3008 ).
- the client agent receives data from the virtual machine and displays on the client machine 10 the received data without intervention by the network browser (step 3010 ).
- a hyperlink on a hypermedium page displayed on a client machine 10 is selected, the hyperlink identifying a desired computing resource (step 3002 ).
- the hypermedium page is obtained from a remote machine 30 prior to selection of the hyperlink on the hypermedium page.
- the hypermedium page is received responsive to a request for an enumeration of available resources.
- a hyperlink configuration file is retrieved, the hyperlink configuration file corresponding to the hyperlink and identifying a remote machine 30 ′ (step 3004 ).
- a remote machine 30 functioning as a brokering machine, identifies the remote machine 30 ′.
- the remote machine 30 ′ functions as an execution machine.
- a hypervisor executes on the remote machine 30 ′.
- a virtual machine is launched into a hypervisor executing on the remote machine 30 .
- a server agent starts on a virtual machine in the remote machine 30 ′.
- a client agent is started on the client machine 10 (step 3006 ).
- the client agent is started by the network browser upon a successful match of an entry in the hyperlink configuration file with an identifier associated with the client agent in a registration file accessible by the network browser.
- the client agent is registered with the network browser.
- the client agent creates a communication link to a virtual machine executing on the remote machine 30 ′ identified by the hyperlink configuration file (step 3008 ).
- execution of an identified application program begins on the virtual machine in response to the created communication link.
- the client agent creates the communication link without intervention by the network browser.
- the client agent receives data from the virtual machine and displays on the client machine 10 the received data without intervention by the network browser (step 3010 ).
- the data received from the virtual machine is displayed in a display window on the client machine 10 .
- a presentation layer protocol is employed for communication over the communication link.
- access to a requested computing environment is provided through the interactive hypermedium page.
- the client machine 10 executes a browser application 2602 .
- a remote machine 30 functions as a network server 2606 and transmits a network configuration file to the client machine 10 .
- a client agent 2814 executing on the client machine 10 establishes a communications link with a remote machine 30 ′, functioning as an execution machine 30 ′.
- the client machine 10 executes a browser application 2602 , which displays a hypermedium page including a hyperlink identifying a resource 2802 .
- a remote machine 30 functions as a network server 30 and transmits, in response to selection of said hyperlink, a network configuration file to the client machine 10 , the network configuration file corresponding to said identified computing resource 2802 .
- a process obtains the hypermedium page from the network server 30 and provides the hypermedium page to the client machine 10 .
- the network configuration file comprises a resource identifier corresponding to said hyperlink and a virtual machine address corresponding to said hyperlink.
- the virtual machine address is a virtual IP address provided by a hyperlink in which the virtual machine executes. In other embodiments, the virtual machine address is an IP address associated with an execution machine 30 ′ on which the virtual machine executes.
- a client agent 2814 executing on the client machine 10 establishes a communications link with a remote machine 30 ′, functioning as an execution machine 30 ′.
- the client agent 2814 establishes the link responsive to data in the network configuration file.
- a hypervisor executes on the execution machine 30 ′ and a virtual machine providing the resource 2802 executes in the hypervisor.
- the virtual machine transmits data to the client agent 2814 for display without intervention by the browser application 2602 .
- the virtual machine provides access to the requested resource 2802 and the data is output from an execution of the requested resource 2802 .
- the client agent establishes, responsive to data in the configuration file, a communications link with a management program executing on a remote machine.
- the management program executes on the network server 2606 .
- the management program executes on the execution machine 30 ′.
- the management program executes on a virtual machine in the execution machine 30 ′.
- the management program executes on a virtual machine having management privileges on the execution machine 30 ′ or on a remote machine 30 ′′.
- the management program launches the virtual machine providing the desired computing resource into a hyperlink on the execution machine 30 ′.
- the client agent 2814 displays data received from said virtual machine in a display window located at the client machine 10 .
- the display window is located within the boundaries of the hypermedium page. In another of these embodiments, the display window is located outside the boundaries of the hypermedium page.
- data transmitted by the resource 2506 is sent to other remote machines 30 prior to being sent to client machines 10 .
- data transmitted by the resource 2506 is transmitted to an increasing number of client machines 10 as the network fans out.
- each client protocol stack (generally 2522 ) and its associated minimal stack (generally 3102 ) is destroyed.
- the minimal protocol stack (generally 3104 ) associated with the first client protocol stack 2522 is also destroyed.
- the configuration is as it was initially with only a first client communications protocol stack 2522 associated with the execution environment 2524 . Note that until all the second and subsequent client protocol stacks 2522 are terminated, the first client protocol stack 2522 may not be destroyed, even if the client machine 10 is no longer present.
- each execution environment 2524 communicates with each protocol stack 2522 through a multiplexer 2534 , 2534 ′, 2534 ′′.
- a multiplexer 2534 , 2534 ′, 2534 ′′ it is possible for more than one machine 10 to receive data being transmitted to the client machine 10 , for example, in order to shadow or monitor the transmission of data from a machine 30 ′ or to broadcast data from a specialized broadcast application, such as a stock quotation application, from which the same data is broadcast or transmitted substantially simultaneously to a number of clients (generally 10 ).
- the client machine 10 causes the specialized resource 2506 to execute and transmit its data to the client machine 10 as discussed previously.
- the connection manager 2518 begins to construct the protocol stack 2522 ′ for the second client machine 10 ′ as previously discussed with regard to the first client machine 10 .
- the resource 2506 is a broadcast application
- the connection manager 2518 recognizes that it need not start an additional execution environment 2524 and instead takes the steps necessary to send the data from the broadcast resource 2506 to the client machine 10 and any additional machine 10 ′′.
- connection manager 2518 creates a first minimal communications protocol stack 3104 which it associates with a communications protocol stack 2522 of the first client machine 10 .
- the connection manager 2518 next creates a second minimal protocol stack 3102 and associates it with the communications protocol stack 2522 ′ of the second client machine 10 ′.
- another minimal protocol stack 3104 ′ is created and associated with the first client protocol stack 2522 and another minimal protocol stack 3102 ′ and client protocol stack 2522 ′′ is created for each new client machine 10 ′′.
- the first client protocol stack 2522 and all the minimal protocol stacks 3104 , 3104 ′ associated with the first client protocol stack 2522 , and each pair of client protocol stacks 2522 ′, 2522 ′′ and minimal protocol stacks 3102 , 3102 ′ associated with each additional machine 10 ′, 10 ′′ are in communication by way of a multiplexer 2534 .
- connection manager 2518 resides outside of a virtual machine executing on a remote machine 30 ′ and creates minimal protocol stacks 3102 within the virtual machine executing on the remote machine 30 ′. In other embodiments, the connection manager 2518 resides outside of a virtual machine executing on a remote machine 30 ′ and creates minimal protocol stacks 3102 within a second virtual machine providing management and administrative functionality for the virtual machine executing on the remote machine 30 ′. In still other embodiments, the connection manager 2518 resides outside of a virtual machine executing on a remote machine 30 ′ and creates minimal protocol stacks 3102 within a hypervisor providing management and administrative functionality for the virtual machine executing on the remote machine 30 ′.
- connection manager 2518 resides outside of a virtual machine executing on a remote machine 30 ′ and creates minimal protocol stacks 3102 within a host operating system on the remote machine 30 ′ providing management and administrative functionality for the virtual machine executing on the remote machine 30 ′. In some embodiments, the connection manager 2518 resides inside a virtual machine executing on a remote machine 30 ′ and creates minimal protocol stacks 3102 within the virtual machine executing on the remote machine 30 ′.
- each multiplexer 2534 takes on two additional configurations.
- the multiplexer 2534 is configured to send resource data to or receive data from both the first client protocol stack 2522 and each of the minimal communications protocol stacks 3104 , 3104 ′ associated with it.
- the multiplexer 2534 is configured to send data received by the minimal protocol stack 3102 , 3102 ′ to the client protocol stack 2522 ′, 2522 ′′, respectively, associated with it.
- the multiplexer 2534 may receive input data directly from each client protocol stack 2522 , 2522 ′, 2522 ′′.
- the connection manager 2518 connects the minimal protocol stacks 3104 , 3104 ′ associated with the client machine 10 with the minimal protocol stacks 3102 , 3102 ′ respectively, of the second client machine 10 ′ and subsequent client machines 10 ′′ and instructs the multiplexer 2534 to direct output from the resource 2506 to the communications protocol stack 2522 of the client machine 10 and its associated minimal protocol stacks 3104 , 3104 ′.
- the multiplexer 2534 is also instructed by the connection manager 2518 to connect each second and subsequent client minimal protocol stack 3102 , 3102 ′ to its associated client protocol stack 2522 , 2522 ′, respectively.
- Protocol stack container includes a data structure to keep track of the number and type of protocols associated with a given resource 2506 .
- the “clients” of one machine 30 ′ be other remote machines 30 ′ and 30 ′′ (only two being shown for simplicity).
- the remote machines 30 ′ and 30 ′′ then transmit the data to client machines 10 or to additional remote machines 30 ′.
- the output of the server protocol stack (generally 2522 ) is connected to the protocol stacks 107 ′ of the secondary remote machines 30 ′ and 30 ′′.
- the data is transmitted between the protocol stacks and out to the client machines 10 . In this manner the data may fan out and be distributed to many more clients than may reasonably be supported by one server.
- the output of the server protocol stack may be connected to protocol stacks 3102 ′ created in virtual machines executing on remote machines 30 .
- a user of a client machine 10 requests access to one or more resources from a remote machine 30 , which may provide web server functionality.
- the web server accesses user-specific and resource-specific parameters from a memory coupled to the web server.
- the web server subsequently communicates these parameters to one or more remote machines 30 hosting the requested resources, and software processes operating on the resource servers execute and initialize the requested resources using the communicated parameters.
- each instance of the resources is personalized for a particular requesting user.
- the particular network addresses of the resource servers hosting these personalized application programs are then forwarded to the user's client machine 10 , which establishes a communications link and client-server session therewith.
- Commands, events, graphical data, and window attribute information associated with the executing resources are communicated between the user device and the resource servers during the client-server session to ensure that the resource-output data is displayed seamlessly on the desktop of the user device.
- Seamless display of the resource-output data refers to the presentation of the data on the user desktop in a manner that is consistent with how locally-executing resources are presented and manipulated in the local desktop of the user device. A user may therefore view and interact with the resource-output data generated by the remote resources as if the resources were being executed locally.
- the output of the resources is displayed in one or more resource-output windows positioned within a web page displayed by a web browser of the user's device.
- the resource may be executing on a remote machine 30 or on a virtual machine executing on the remote machine 30 .
- the attributes of the resource-output windows can be modified so that the resource-output windows are moveable and resizeable within the boundaries of the web page.
- the resource-output windows initially appear within the boundaries of the web page and are subsequently moveable so that they are positioned outside the boundaries of the web page and thus give the appearance that the application-output windows correspond to locally-executing applications rather than to remotely-executing applications.
- the application-output windows initially appear outside the boundaries of the web page and thus also appear to correspond to locally-executing applications.
- the application output displayed in the application-output windows and the attributes of the application-output windows themselves are communicated and manipulated by software processes on the user's device and on the resource servers, without involvement of the web server or web browser that initially provided access to the resources.
- a server-based computing architecture 3300 capable of providing remote users with web-access to the full functionality of web and legacy applications (e.g., unmodified application programs that are not designed for web-based delivery), includes a client machine 10 (e.g., any digital data processing device), a web server 3304 , one or more remote machines 30 that are either standalone or clustered within a machine farm 38 and which are preferably protected by a firewall 3302 , and a data communications network 150 (e.g., Internet, Intranet, etc.) that provides the necessary connectivity to enable each of these elements to communicate with each other.
- a client machine 10 e.g., any digital data processing device
- a web server 3304 one or more remote machines 30 that are either standalone or clustered within a machine farm 38 and which are preferably protected by a firewall 3302
- a data communications network 150 e.g., Internet, Intranet, etc.
- the web server 3304 is a remote machine 30 .
- virtual machines may be executing on one or more of the remote machines 30 , the virtual machines providing computing environments in which a requested resource resides and generates resource-output data.
- a user of the client machine 10 directs a browser 2822 executing on the client machine 10 to submit a request for access to particular web page content 3306 accessible via the web server 3304 .
- the user enters a universal resource locator (“URL”) address into the browser 2822 .
- the URL is associated with the web page content 3306 hosted by the web server 3304 and the browser 2822 responds by transmitting the request for access to the appropriate URL address.
- the web server 3304 receives the request for access, which typically includes user credential information (e.g., user ID, password, group/project membership identifier, etc.), and authenticates the user to the machine farm 38 or to the individual servers 114 that provide at least some of the web page content 3306 .
- user credential information e.g., user ID, password, group/project membership identifier, etc.
- the web server 3304 authenticates the user by accessing an authentication process that compares the credentials entered by the user with previously-assigned credentials.
- the authentication process and database of previously-assigned credentials are stored and maintained on the web server 3304 .
- the previously-assigned credentials can be stored in the machine farm 38 , on individual application remote machines 30 , and/or on an administrative server (not shown) that is coupled to the web server 3304 via the Internet or other data communication network.
- the web server 3304 accesses one or more resource objects 3310 (e.g., COM-compliant Java objects, ActiveX objects, HTML tags, etc.) that call web server-side scripts to authenticate the user and/or to obtain the resource set 3308 information associated with the portal and user from the machine farm 38 .
- the resource objects 3310 also include properties that are associated with the user and/or the particular resources 3312 in the resource set 3308 that are provided via the portal.
- the user properties include, for example, group/project information that identifies the particular resources 3312 and data that the user needs to access in order to allow the user to collaborate with other members of the group/project.
- the resource properties include, for example, the user's preferences for each of the resources 3312 in the resource set 3308 .
- the scripts called by the resource objects 3310 establish a network session between the web server 3304 and the machine farm 38 via, for example, a central administrative process (not shown), which monitors and controls each resource machine 30 in the machine farm 38 .
- the administrative process selects one or more resource servers, which host the resources 3312 in the resource set 3308 specified by the resource objects 3310 , based, for example, on a server and/or network performance basis.
- the desired resource set 3308 can be provided entirely by a single server 30 by selecting/allocating each resource 3312 in the resource set 3308 from a plurality of resources 3312 , 3314 hosted on the server 30 .
- the resource set 3308 ′ can be provided by a plurality of remote machines 30 with each machine 30 hosting at least one of the resources in the resource set 3308 ′.
- Server agents 3316 are software processes that execute, initialize, and interact with each of the resources 3312 in the resource set 3308 in accordance with the properties specified by the resource objects 3310 .
- there is a single server agent 3316 for the resource set 3308 to the extent that all of the resources 3312 are hosted on the same server 30 .
- the server agents 3316 then provide the output of the resources 3312 in the resource set 3308 as well as any other information relating to the resource set 3308 to the web server 3304 , which subsequently formats the resource set information into the web page content 3306 .
- the web page content 3306 can include application icons corresponding to one or more of the resources 3312 in the resource set 3308 as well as resource-output data from one or more of the resources 3312 .
- the resource-output data provided by the resources 3312 corresponds to graphical data that is formatted to fit into a window, which exhibits attributes (e.g., window position on the web page, size, style, z-order, etc.) as initially specified by the properties of the resource objects 3310 .
- the browser 2822 receives and displays the web page content 3306 within a browser window 3402 , which includes many possible graphical user interface (“GUI”) elements (e.g., menu 3406 , local window 3408 , etc.) that form the client desktop 3410 displayed on a display device coupled to the client machine 10 .
- GUI graphical user interface
- the web page content 3306 is displayed within a web page 3412 displayed in the browser window 3402 and includes one or more resource icons 3414 and/or one or more resource-output windows 3416 , which are associated with the resource set 3308 .
- one or more of the resource objects 3310 also form part of the web page content 3306 of the web page 3412 and can therefore set the initial attributes (size, z-order, position) of the resource-output windows 3416 .
- the initial orientation, size, position, and z-order of each of the resource-output windows 3416 displayed on the web page 3412 can be modified, as described below, so that the resource-output windows 3416 exhibit different orientations, sizes, positions, and z-orders relative to the web page 3412 and/or relative to the client desktop 3410 .
- the resource objects 3310 can be any data constructs which indicate to the browser 2822 displaying the web page content 3306 that a resource-output window 3416 should be displayed at a particular location in the web page 3412 .
- the resource objects 3310 may include additional information, such as the height, width, border style, background color or pattern in the resource-output window 3416 , along with indicia of which resources 3312 may be displayed in the window 3416 , how often the output display should be updated, or any other additional information that is useful to enhance the display of the resource output.
- the resource objects 3310 are window tags that are embedded in an HTML file, examples of such tags are delineated below.
- the tag indicates that a resource-output window 3416 having a height of 295 pixels and a width of 436 pixels should be drawn to receive output data from the resource 3312 .
- Each tag also specifies that the resource 3312 should automatically start execution and that the resource-output window 3416 in which the resource output is displayed should be drawn with a border.
- the ActiveX and Netscape Plugin tags have the properties of the remote resource 3312 specified in the file “direct.ica” located in the directory “/ica.”
- the JAVA tag specifies the properties of the remote resource 3312 directly. In the example above, the address of the server 30 hosting the resource 3312 is specified as well as the name of the resource 3312 to be executed.
- the resource 3312 executes substantially at the same time as the display of the web page 3412 . In another embodiment, the resource 3312 executes when instructed to do so by the server 30 as part of providing web page content 3306 to the web server 3304 . In yet another embodiment, the resource executes in response to a signal, such as a user-specified input (e.g., selecting a resource icon 3414 on the web page 3412 .
- a signal such as a user-specified input (e.g., selecting a resource icon 3414 on the web page 3412 .
- the client agent 2814 comprises one or more software processes, which execute on the client machine 10 and which are configured to interact with the server agent 3316 , browser 2822 , resource-output window 3416 , and/or web server 3304 .
- the client agent 2814 is spawned as a child process of the browser 2822 .
- the client agent 2814 is a peer process of the browser 2822 or a dynamically linked library associated with the browser 2822 .
- a client agent 2814 is instantiated for each resource-output window 3416 displayed in the web page 3412 .
- a single client agent 2814 is instantiated for one or more resource-output windows 3416 associated with a particular one of the resources 3312 in the resource set 3308 .
- a single client agent 2814 is instantiated for each server agent 3316 , which contributed to the web page content 3306 .
- a single client agent 2814 is instantiated for the entire resource set 3308 .
- the browser 2822 passes the properties of the resource objects 3310 relating to particular resources 3312 in the resource set 3308 to the client agent 2814 associated with those same resources 3308 . Additionally, the browser 2822 may pass a handle for a resource-output window 3416 to the client agent 2814 or the client agent 2814 may query the browser 2822 to retrieve the handle for the resource-output window 3416 . Resource properties, which are not specified by either the browser 2822 or the resource objects 3310 , may be set to default values. The client agent 2814 may also have certain property defaults hard-coded, or the client agent 2814 may access a file which contains property defaults.
- the client agent 2814 uses the name of the resource 3312 and the address of the resource server 30 , which are both provided as part of the properties of the resource objects 3310 , to establish a communications link and initiate a client-server session with the server agent 3316 associated with the resource server 30 and resource 3312 .
- the client agent 2814 passes some or all of the properties of the resource objects 3310 to the server agent 3316 along with any necessary default values.
- the server agent 3316 may have already received some or all of the properties of the resource objects 3310 from the web server 3304 prior to contributing to the web page content 3306 , which was subsequently displayed in the web page 3412 .
- the server agent 3316 may request it from the client agent 2814 if it is a necessary property to which it has no default value (e.g., user ID) or the server agent 3316 may provide its own default value for the property (e.g., execution priority).
- the server agent 3316 uses the properties received from the client agent 2814 to authenticate the client agent 2814 and to execute the desired resource 3312 if it has not previously been started. Once the resource 3312 is executing and the client agent 2814 has been authenticated, the resource 3312 communicates through the server agent 130 directly with the client agent 2814 , without intervention of the browser 2822 or web server 3304 .
- the client agent 2814 receives output data from the resource 3312 and displays the output data in the appropriate resource-output window 3416 in the web page 3412 .
- the client agent 2814 also detects input events, such as mouse clicks and keyboard inputs, associated with the resource-output window 130 and forwards any such input events to the resource 3312 via the server agent 3316 . This type of client-server session is repeated for each resource 3312 in the application set 126 that is selected by the user and thus enables the user to interact with all of the resources in the resource set 3308 .
- the data exchanged between the client agent 2814 and server agent 3316 during the client-server session includes not only input events and the graphical output data of the resource 3312 , but also window attribute information (e.g., window position, z-order, size, style, color, etc.).
- the window attribute information of the resource-output windows 3416 is initially specified by the resource objects 3310 embedded in the web page 3412 .
- the resource objects 3310 can include an ActiveX control, which specifies and controls the window attributes of the resource-output windows 3416 during the client-server session.
- the resource-output windows 3416 exhibit the same dimensions as the corresponding ActiveX controls.
- the client agent 2814 communicates the initial window attributes of the local application-output windows to the server agent 3316 along with information relating to the client desktop 3410 (e.g., size, resolution, etc.).
- the server agent 3316 responds by conforming the size of its server desktop to that of the client desktop 3410 and by conforming the window attributes of local server windows to those of the resource-output windows 3416 on the client desktop 3410 .
- the resource-output windows 3416 on the client desktop 3410 and the server windows on the server desktop thus exhibit the same window attributes and display the same graphical output data that is generated by the resource 3312 .
- the server desktop can correspond to either an offscreen surface contained within the server's video memory or to an onscreen surface displayed on a display device coupled to the server 30 .
- the user of the client machine 10 can move, resize, and/or alter the z-order or other initial window attributes of the resource-output windows 3416 during the client-server session, by entering an input event that is detected by the client agent 2814 and then communicated to the server agent 3316 .
- the server agent 3316 conforms its desktop and/or windows to be consistent with the input event and then transmits updated graphical output data and window attribute information, corresponding to the input event, to the client agent 2814 with instructions to update the resource-output windows 3416 so that they match the windows on the server 30 .
- the client agent 2814 detects the input event generated by the mouse action and communicates it to the server agent 3316 , which effects the same resize event in the on or offscreen surfaces of the server 30 .
- the server agent 3316 then sends repaint and resizes command messages to the client agent 2814 along with updated graphical output data and window attribute information.
- the client agent 2814 modifies the appropriate resource object 3310 affected by the resize event (e.g., the ActiveX control discussed above) so that the corresponding resource-output window 3416 is resized and the updated graphical output data is painted within the borders of the -output window 3416 .
- the resize event e.g., the ActiveX control discussed above
- resource-output window B′ 3502 can be resized using the methodology described above to form resource-output window B′′ 3504 , which overlaps (thus exhibiting a different z-order from) resource-output window F 3506 .
- the resource-output window 3416 can be moved or resized to extend beyond or be entirely outside of the browser window 3402 .
- resource-output window J 3602 lies within the boundaries of the browser window 3402
- resource-output window K 3604 extends beyond the boundaries of the browser window 3402
- resource-output window L 3606 is entirely outside the browser window 3402 .
- the resource-output windows can exhibit varying z-orders with respect to other elements in the client desktop 3410 .
- local window 3608 exhibits a z-order between that of the browser window 3402 and resource-output window L 3606 .
- the client agent 2814 instructs the operating system of the client machine 10 to draw the desired resource-output window 3416 in response to command messages received from the server agent 3316 , without having to first modify the properties of the resource objects 3310 embedded in the web page 3412 , which initially established the window attributes of the resource-output window 3416 .
- each input event affecting the resource-output window 3416 is transferred to and processed by the server agent 3316 , which then instructs the client agent 2814 to effect corresponding changes in the resource-output window 3416 .
- one or more input event types e.g., click and drag mouse actions directed at moving the resource-output window 3416 to another grid location on the web page 3412 ) are processed entirely by the client agent 2814 and not reported to the server agent 3316 , where the graphical output data displayed within the resource-output window 3416 remains unchanged.
- the client agent 2814 comprises a monitor process 3702 , a command process 3704 , a message receiving process 3706 , and a message transmission process 3708 .
- each process 3702 , 3704 , 3706 , 3708 is a separately functioning code segment that operates independently of the other processes.
- the message receiving process 3706 and the command process 3704 can be implemented as separate threads, which communicate with each other via a named pipe or shared memory. Use of a common data set allows the message receiving process 3706 and the message transmission process 3708 to be synchronized.
- the message receiving process 3706 receives graphical data, window attribute information, and commands from the server agent 3316 via the communications link that provides the connectivity between the client agent 2814 and server agent 3316 during the client-server session.
- the communications link preferably includes a first virtual channel 3710 and a second virtual channel 3712 .
- Command, event, and window attribute information is passed between the client agent 2814 and the server agent 3316 via the first virtual channel 3710 , while graphical data corresponding to the graphical contents of the resource-output windows 3416 is passed via the second virtual channel 3712 .
- the message receiving process 3706 informs the command process 3704 of the commands, window attributes, and graphical data received from the server agent 3316 and the command process 3704 further processes this data.
- the command process 3704 processes the commands received from the server agent 3316 by instructing the client operating system 3714 to form and/or modify affected resource-output windows 3416 in accordance with the window attributes specified by the server agent 3316 .
- the command process 3704 also instructs the client operating system 3714 to display the graphical data provided by the server agent 3316 in the appropriate resource-output windows 3416 .
- the command process 3704 implements changes to the resource-output windows 3416 in the client desktop 3410 by issuing GDI commands.
- the command process 3704 issues commands directly to an associated graphics subsystem or via graphics API commands.
- the command process 3704 also instructs the monitor process 3702 to periodically monitor the client desktop 3410 in order to detect changes affecting the resource-output windows 3416 .
- the monitor process 3702 instructs the client operating system 3714 to return information relating to the client desktop 3410 at predetermined polling intervals.
- the monitor process 3702 monitors the message queue maintained by the client operating system 3714 in order to detect changes affecting the resource-output windows.
- the monitor process 3702 communicates some or all of the detected desktop changes to the command process 3704 for further processing.
- the command process 3704 instructs the message transmission process 3708 to transmit all of the changes detected by the monitor process 3702 to the server agent 3316 via the first virtual channel. In another embodiment, the command process 3704 instructs the message transmission process 3708 to transmit a subset of the detected changes, such as changes which only affect the graphical data and/or window attributes of the resource-output windows 3416 .
- the server agent 3316 receives the detected changes along with any commands from the command process 3704 and any input events made by the user of the client machine 10 that triggered the detected changes.
- the server agent 3316 modifies its local desktop to accommodate the detected changes and transmits associated commands, window attributes, and graphical data back to the client's message receiving process 3706 . In this manner, desktop elements, such as the resource-output windows 3416 , that are common in the client and server desktops remain in lock step.
- the command process 3704 of the client agent 2814 ensures that analogous/common elements in the client and server desktops remain in lock step by maintaining a common window list.
- the common window list includes the window attribute information for each window in the client desktop 3410 and for each corresponding window in the resource server desktop.
- the command process 3704 of a single client agent 2814 has primary responsibility for maintaining the common window list. If the single client agent 2814 terminates, while other client agents remain in operation, the remaining client agents will elect another primary client agent to maintain the common window list.
- FIG. 38 depicts a system in which a client machine 10 is connected to more than one remote machine 30 , 30 ′.
- client machine 10 has an associated display 3802 .
- the display 3802 may be used to display one or more components of a graphical user interface, such as windows and pull-down menus.
- the collection of graphical user interface components displayed to a user by the display 3802 is generally referred to as the “desktop.”
- the client machine 10 displays a local desktop environment 3804 to a user.
- Client machine 10 may provide at least a part of the local desktop environment 3804 or client machine 10 may simply display various desktop components received from other sources such as remote machines 30 .
- FIG. 38 depicts a system in which a client machine 10 is connected to more than one remote machine 30 , 30 ′.
- client machine 10 has an associated display 3802 .
- the display 3802 may be used to display one or more components of a graphical user interface, such as windows and pull-down menus.
- each remote machine 30 , 30 ′ has an associated display 3806 , 3806 ′ which also displays a desktop environment 3808 , 3808 ′.
- display 3806 , 3806 ′ need not be a video display monitor.
- display 3806 , 3806 ′ may simply be a bank of video RAM to which resources write the output of graphical procedure calls.
- FIG. 38 depicts an embodiment of a system in which each machine 30 displays 3806 , 3806 ′ displays one graphical user interface window 3810 , 3812 ′.
- Each remote machine 30 , 30 ′ also includes at least one agent 3814 , 3814 ′.
- each remote machine 30 , 30 ′ includes one agent 3814 , 3814 ′ for each client machine 10 connected to the remote machine 30 , 30 ′.
- Client machine 10 may also host an agent 3816 .
- a client machine 10 hosts a separate local agent 3816 for each remote machine 30 to which the client machine 10 is connected.
- the client machine 10 hosts a single agent 3816 that manages connections to multiple remote machines 30 .
- Each of the agents 3814 , 3814 ′, 3816 may monitor their associated desktop environment 3808 , 3808 ′, 3816 for windows which: change position; are opened; are closed; change size; are minimized; are maximized; or are brought to the top of the desktop, i.e., windows which gain focus that do not previously have focus.
- Each agent 3814 , 3814 ′, 3816 transmits messages indicative of changes in their associated desktop 3808 , 3808 ′, 3804 to other agents.
- local agent 3816 may receive messages transmitted from server node agents 3814 , 3814 ′.
- the local agent 3816 commands the client machine 10 to modify the local desktop environment 3804 in response to the messages received from server agents 3814 , 3814 ′, that is, the local agent 3816 issues commands to the client machine 10 to conform the local desktop environment 3804 to the desktop environment 3804
- agents 3814 , 3814 ′ for remote machine 30 , 30 ′ receive messages from a local agent 3816 and command the machine 30 , 30 ′ to modify the desktop environment 3808 , 3808 ′ in response to messages received from the local agent 3816 .
- the agents 3814 , 3816 monitor changes to their associated desktop environment 3808 , 3808 ′ by periodically issuing one or more of a set of commands provided by the operating system that allow details of the graphical user interface desktop to be determined.
- the agents 3814 , 3816 may periodically issue the Enum Windows command to the WINDOWS operating system, which returns a list of all windows present on the desktop, together with information related to those windows.
- the agents 3814 , 3816 can issue the Enum Windows command every 50 milliseconds, every 100 milliseconds, every 500 milliseconds, or at any period that allows the agent 3814 , 3816 to rapidly determine when changes to its associated desktop environment have occurred without putting a significant computational burden on the node.
- the agent 3814 , 3816 maintains a data structure storing information about the desktop windows and compares the values returned by the Enum Windows command to the data structure to determine changes.
- Information determined and stored by the agent 3814 , 3814 ′ can include the title bar associated with each window, the location of each window in the desktop environment 3808 , 3808 ′, the size of each window, and the z-order positioning of each window in the desktop environment 3808 , 3808 ′.
- the agent 3814 , 3814 ′, 3816 monitors an intranode graphics message queue to determine changes to its associated desktop environment.
- Server agents 3814 , 3814 ′ monitor an intraserver message queue and local agent 3816 monitors an intraclient message queue.
- changes to the desktop environment 3808 , 3808 ′ are affected via messages sent to a graphics subsystem from system applications or the operating system itself.
- a resource executing on a remote machine 30 , 30 ′ would send a message to a graphics engine residing on the server 30 , 30 ′ in order to change the server desktop environment 3808 , 3808 ′.
- Other commands which return graphical user interface data are readily apparent to those of ordinary skill in the art.
- the agents 3814 , 3816 reside on nodes executing a version of the WINDOWS operating system
- the agents 3814 , 3816 monitor the Windows Message Queue for messages affecting the desktop environment associated with the node on which the agent resides.
- WM_SETFOCUS which indicates to which window focus will be given (i.e., brought to the “top” of the desktop);
- WM_KILLFOCUS which removes focus from an indicated window;
- WM_WINDOWPOSCHANGING which indicates a change in the position of a window.
- Other messages that can be posted to the Windows Message Queue are readily known to those of ordinary skill in the art.
- the agent 3814 for remote machine 30 senses a change in its associated desktop (step 3902 ).
- the agent 3814 may do this by intercepting a window event on the server message queue, or the agent 3814 may determine a change in the desktop by comparing the results returned from serially issued operating system commands, as described above.
- the agent 3814 sends a message to a client agent 3816 indicating the change in the server desktop 3810 (step 3904 ). For example, if a new window has been given focus, the agent 3814 can transmit a message to a client agent 3816 indicating the identity of the new “top” window.
- the agent 3814 broadcasts its message to all client agents 3816 that exist in the system.
- the agent 3814 may transmit its message only to a predetermined subset of client agents 3816 .
- the client agent 3816 may register with the agent 3814 .
- the agent 3814 would transmit change messages only to those client agents that have registered with the remote machine 30 .
- the client agent 3816 receives the transmitted message (step 3906 ).
- the client agent 3816 must have some mechanism for determining whether a transmitted command affects its associated desktop.
- the client agent 3816 may maintain a list of remote machines 30 to which it is connected.
- the client agent 3816 responds to messages broadcast by any remote machine 30 present in its list. For embodiments in which the agent 3814 does not broadcast messages, no such mechanism is necessary.
- the client agent 3816 implements a change to its associated desktop 14 responsively to the received message (step 3908 ).
- the client agent 3816 may accomplish this by directly issuing graphics Application Programming Interface commands that cause the client machine 10 to change the display of its associated desktop.
- the client agent 3816 may issue GDI commands to change its associated desktop.
- the client agent 3816 issues commands directly to the system, whether implemented in hardware or software, responsible for displaying graphics on the client machine 10 .
- the client agent 3816 senses a change in its associated desktop 14 (step 4002 ). As noted above, this may be done on an event-driven basis or by polling the operating system operating on the client machine 10 .
- the client agent 3816 determines to which remote machine 30 the affected window belongs (step 4004 ). To facilitate this process, the client agent 3816 may maintain a list that associates remote windows with a particular remote machine 30 .
- the client agent 3816 then sends a message to the identified remote machine 30 indicating the change in its desktop 14 (step 4006 ). Alternatively, the client agent 3816 may skip step 404 entirely and broadcast its change message to all remote machines 30 .
- the server agent receives the transmitted message (step 4008 ) and implements the change in its associated desktop (step 4010 ), as described above.
- a client machine 10 and a remote machine 30 communicate using the ICA protocol and the client machine 10 and the remote machine 30 execute a version of the WINDOWS operating system.
- Client machine 10 hosts a local agent 3816 that may be provided as a dynamically linked library module.
- the remote machine 30 hosts an agent 3814 that may be provided as a separate thread.
- the local agent 3816 and the agent 3814 exchange graphical data, i.e., the data actually displayed in each window on the desktop, via a first ICA virtual channel.
- Information about window positioning, window size, z-access ordering of window and other such information is communicated between the client machine 10 and the remote machine 30 via a second ICA virtual channel.
- the client machine 10 and the remote machine 30 are actively exchanging information via the second ICA virtual channel, the client machine 10 will be referred to as being in “seamless windowing mode.”
- FIG. 41 the process for enabling seamless windowing mode between the local agent 3816 and agent 3814 is shown.
- all communication between a server agent and a client agent is packet-oriented and takes place over a dedicated ICA virtual channel, making the functioning of the agents 3814 , 3816 independent from the underlying communication protocol.
- All packets start with packet type (1 byte), followed by packet data length (2 bytes, can be zero) and data (optional).
- Agents 3814 , 3816 will try to send as much data in a single network packet as possible, but it will always send complete packets. That is, the size of seamless window virtual packets never exceeds the allowable size of an ICA packet.
- Packet flow control and delivery confirmation is implemented by the transport level of the ICA protocol. Individual packets are executed immediately on reception.
- the client agent 3816 waits for an initial packet from the server agent 3814 . After user logon to the server, a server agent 3814 will be invoked (step 4104 ).
- the server agent 3814 sends a TWI_PACKET_START packet to the client agent 3816 , which includes some essential information about the remote machine 30 desktop environment (desktop resolution, desktop size, version number of ICA protocol supported by the server, etc.) (step 4106 ).
- This packet is sent by the server agent 3814 on initial connection or on reconnect, and is used to: (1) detect seamless windowing capabilities of the client machine 10 ; and (2) requests basic machine 10 information.
- the client agent receives the TWI_PACKET_START packet (step 4107 ) and responds with a TWI_PACKET_C2H_START_ACK packet, confirming TWI_PACKET_START and supplying machine 10 version/capabilities information (step 4108 ).
- This packet is sent by the client agent 3816 to confirm reception of TWI_PACKET_START packet and to send the requested basic machine 10 information to the server agent 3814 .
- the server agent 3814 assumes that the client machine 10 is unable to enter seamless windowing mode, and the seamless windowing virtual channel is not used by the remote machine 30 to communicate window information. In this case, the remote machine 30 continues to communicate graphical data to the client machine 10 via another virtual channel, and the client machine 10 desktop displays the server desktop without incorporating windows from other nodes.
- the client agent 3816 uses the information sent by the server agent 3814 in step 4106 to determine if a seamless windowing session can be established between the server agent 3814 and the client agent 3816 .
- the client agent 3816 compares information relating to the version of the virtual channel protocol supported by the server agent 3814 to makes the determination If the client agent 3816 determines that it is possible to enable seamless windowing mode (step 4110 ), the client agent 3816 sends a TWI_PACKET_C2H_OPEN packet to the server agent 3814 (step 4111 ). This packet requests that the server agent 3814 enable seamless windowing mode.
- the server agent 3816 On reception of a TWI_PACKET_C2H_OPEN packet (step 4112 ) the server agent 3816 (I) resets its internal data structures, (ii) sends a TWI_PACKET_SYSINFO packet to the client agent 3816 to communicate some general information regarding the window settings on the remote machine 30 to the client agent 3816 , (iii) sends a TWI_PACKET_OPEN packet to the client agent 3816 (step 4114 ) indicating the establishment of seamless windowing mode, and (iv) enables its main polling loop (step 4116 ) that will poll the operating system on the server node for desktop changes. If the client agent 3816 and the server agent 3814 do not support the same version of the seamless window protocol, the server agent 3814 ignores the TWI_PACKET_C2H_OPEN packet.
- the client agent 3816 On reception of TWI_PACKET_OPEN packet (step 4120 ), the client agent 3816 resets its internal data structures (step 4122 ) and seamless windowing mode between the client agent 3816 and the server agent 3814 is established.
- the server agent 3814 will send window information such as window position, size, styles, window text, etc. for all top-level windows on the server node. Also, foreground window information is sent, i.e., which window on the server node desktop is the foreground window. In accordance with this information, the client agent 3816 creates windows with the same size/position as the server node windows on the machine desktop. In some embodiments, window elements are transmitted as bitmaps from the server node 20 .
- Examples of packets sent by the server agent 3814 include: TWI_PACKET_CLOSE, which is sent to switch the client agent 3816 out of seamless windowing mode and back to regular, or full screen, mode; that is, the client machine 10 is switched back to displaying the server node desktop environment without incorporating windows from other desktop environments; TWI_PACKET_CREATEW, which is sent to create new windows on the client machine 10 ; TWI_PACKET_DELETEW, which is sent to destroy a window on the client machine 10 ; TWI_PACKET_CHANGEW, which is sent to change a window displayed by the local node 10 ; TWI_PACKET_SYSINFO, which is sent to report remote machine 30 system settings—normally it is sent only once, but the packet can be sent multiple times; TWI_PACKET_FOREGROUNDW, which is sent during normal seamless windowing mode operation to change the foreground window; TWI_PACKET_SETTOPW, which is sent during normal seamless windowing mode operation to change the top window, that is, to
- TWI_PACKET_FOCUSACK which is sent in response to TWI_PACKET_C2H_SETFOCUS (see below), and reports the result of a SetFocus attempt
- TWI_PACKET_SPA_STATUS which is sent in response to TWI_PACKET_C2H_START_PUBLICAPP (see below), and is used to report the result of the requested operation.
- Examples of packets that can be sent by the client agent 3816 to the server agent 3814 include: TWI_PACKET_C2H_PAUSE, which is sent to suspend the server agent 3814 , that is, the server agent 3814 will stop sending window information, clear its internal data structure and send a TWI_PACKET_CLOSE packet (see above); TWI_PACKET_C2H_RESUME, which is sent to resume the server agent 3814 —the server agent 3814 will clear its internal data structure, and send a TWI_PACKET_OPEN packet (see above); TWI_PACKET_C2H_SETPOS, which is sent to report window size/position change on the machine; TWI_PACKET_C2H_SETFOCUS, which is sent to report a change in the focus window on the machine; TWI_PACKET_C2H_RESTORE, which is sent to request restoration of a minimized window; TWI_PACKET_C2H_TERMINATE, which is sent to request termination of a program executing on the remote machine 30
- the client agent 3816 will try to perform some operations (such as window move and resize) locally, sending update information back to the remote machine 30 afterwards.
- Proper window behavior is emulated by intercepting the WM_NCHITTEST message for the client-created windows.
- Foreground window changes can happen on both the client machine 10 and the remote machine 30 , so the client machine 10 and remote machine 30 will negotiate and balance actual foreground window changes. For example, if the remote machine 30 changes its foreground window, that change should be properly represented on the client machine 10 desktop.
- the server agent 3814 sends information regarding the new foreground window to the client agent 3816 using the TWI_PACKET_FOREGROUNDW packet.
- the client agent 3816 detects a foreground window change on the client machine 10 desktop, the client agent 3816 sends information regarding the change to the server agent 3814 and the server agent 3814 implements the change on the remote machine 30 desktop.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Multimedia (AREA)
- General Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Data Mining & Analysis (AREA)
- Computer Graphics (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
A method for providing access to a computing environment includes the step of receiving a request from a client system for an enumeration of available computing environments. Collected data regarding available computing environments are accessed. Accessed data are transmitted to a client system, the accessed data indicating to the client system each computing environment available to a user of the client system. A request is received from the client system to access one of the computing environments. A connection is established between the client system and a virtual machine hosting the requested computing environment.
Description
- The present application claims priority to U.S. Provisional Patent Application Ser. No. 60/761,674, entitled “Methods and Systems for Providing Access to a Computing Environment,” filed Jan. 24, 2006, which is incorporated herein by reference.
- The invention generally relates to providing access to computing environments. More particularly, the invention relates to methods and systems for establishing a connection between a client system and a virtual machine hosting a requested computing environment.
- Contemporary computer networks consist of a number of computer systems communicating with other computer systems via communication links. Typically, some of the systems are client machines and other systems are server machines. A server machine may host a variety of application programs that can be accessed and executed by client machines. When a client machine launches an application program, the execution of that application program can occur at either the client machine or the server machine, depending upon the computing model followed by the computer network. In some environments, the server machine executes a virtual machine, which executes the application program and provides output data to the client machine.
- One drawback of contemporary computer networks is that client machines may be unaware of the application programs and resources available for use on the server machines. In fact, client machines may not even be aware of each available server machine on the network. Additionally, in environments in which a virtual machine provides access to a resource for the client machine, the virtual machine may be relocated from one server machine to another server. In other environments in which a virtual machine provides access to a resource for the client machine, the client machine may not know that a virtual machine provides access to the application program. To find available application programs on a particular server machine, a user of the client machine may need to find and gain access to that server machine and perform a directory listing of the files existing on that server machine. Even then, this listing might not indicate to the user those applications which the user is authorized to use.
- Moreover, once the user is aware of the application programs on a server machine, often that user must establish a link to those applications. There are software tools to aid the user in creating these links. However, these tools typically require that the user be an administrator with an understanding the details of networking protocols and domains in order to establish the connection.
- A method for identifying and providing access to virtualized resources available to a user of the client machine, including application programs, desktop environments, and other computing environments provided via virtual machines executing on server machines would be desirable.
- In one aspect, problems of current desktop deployment strategies are addressed. An array of inexpensive physical machines may be partitioned into multiple virtual machines, creating a virtual PC for each user. The physical machines may be servers such as rack-mount servers, blade servers, or stand-alone servers. The physical machines may also be workstations or workstation blades or personal computers. A policy-based dynamic deployment system provisions the virtual machines and associates the virtual machine with an execution machine (i.e., a physical machine) and a user. Centralized hosting provides the manageability of server-based computing while the dedicated environment provides the flexibility and compatibility with applications that a desktop PC enables. However, the system has a much lower total cost of ownership—because the system is implemented in software, rather than being dependent on hardware, the system has a much lower total cost of ownership.
- In another aspect, the hardware lifecycle may be extended by increasing the amount of hardware resources assigned to virtual machines as computational demands increase over time. Additionally, the use of virtualization eases the difficulty in dealing with multiple OS images.
- In one embodiment, machines are configured to run multiple copies of one or more operating systems (e.g. different versions/releases of WINDOWS from Microsoft Corporation). Users transmit requests for access to computing resources to the deployment system, which may use a configuration policy to decide how (with what physical and/or virtual resources) and where (on which physical machine in the machine farm and on which virtual machine) to provide access to the requested computing resource. The virtual machine can be created on demand, and the requested software resource may be downloaded and installed in the virtual machine as required. Alternatively, the virtual machine may be pre-configured with a plurality of software and/or virtual hardware resources to provide a particular computing environment to the user. The user request is directed to the selected, configured virtual machine and a remote display connection is established between the virtual machine and a remote display client on the user's access device, which will be referred to generally as a “client machine.” Devices such as CD-ROM drives, floppy drives, USB drives and other similar devices that are connected to the client machine are connected and remotely accessible to the virtual machine, thereby allowing the use of these devices in a manner similar to a standard desktop computer.
- A deployment system may manage a pool of virtual machines (a machine farm) to which new virtual machines can be added on demand. Alternatively, a plurality of software modules, including a session management component and a virtual machine management component may provide management functionality. Executing virtual machines may be migrated from one physical machine to another, under control of the deployment system, to provide load balancing or to facilitate hardware maintenance. Inactive virtual machines may be suspended to free physical computing resources. Active virtual machines may be migrated from one physical machine to another to consolidate them onto a smaller number of physical machines to allow the unused physical machines to be shutdown to save power during off-peak periods or to free the physical resource to be re-assigned for a different purpose e.g. process web requests. Suspended virtual machines may be resumed prior to users requiring access. This can be done manually or automatically via policies or preferences or through a learning process by monitoring a user's behavior over time.
- Performance requirements of the requested resource may be considered when allocating computing resources to virtual machines. For example, a financial analysis package may require twice as many CPU resources as a generic productivity application, such as those included in MICROSOFT OFFICE, manufactured by Microsoft Corporation of Redmond, Wash. A virtual machine providing the financial analysis package may execute on a physical machine determined to have sufficient spare computational capacity, or existing virtual machines may be relocated to other available physical machines to ensure sufficient available capacity on a particular physical machine.
- Each user is provided a separate virtual machine environment, which provides increased flexibility in that each user may run any version or configuration of an operating system independently of other users and also allows users to run potentially dangerous or destabilizing applications with little risk of affecting other users. This is particularly useful for developers/testers/information technology personnel who frequently need to re-install and modify the operating system and run potentially destabilizing applications.
- Since sharing computing resources and CPU scheduling occurs outside of the virtual machine environment, users can run computing-resource intensive resources with no risk of affecting other users. Virtual machines also provide increased security isolation between users. Because each user is running a separate copy of the OS, there is much less chance of security breaches and virus infections over the between-users boundaries than in the shared OS case.
- A solution is also provided for problems that arise from a situation where, in a hardware-based system of machines, the hardware is mixed, whether due to an initial purchasing decision or due to the acquisition of different types of physical machines over time. Even if initially all of the hardware was uniform, purchasing additional hardware to replace failing modules and increasing the capacity typically leads to non-uniform hardware throughout a machine farm. Even if all hardware is purchased from the same vendor, it is likely that the hardware purchased later will use different chipsets and components, and will require different drivers. Non-uniform hardware has traditionally translated into the need to maintain multiple versions of the operating system images (which means higher costs) and limits flexibility of moving users between machines—because the operating system image may be incompatible—which also translates into higher cost. Virtual machines allow efficient use of the same operating system image even in a hardware farm that includes heterogeneous machines. The use of the same operating system image helps to significantly reduce the management cost.
- Adding remote display capability (e.g. presentation layer protocols, such as ICA, RDP, or X11) to virtualization techniques allows virtualization to be used for interactive computing. Hosting multiple virtual machines on an execution machine allows better utilization of the available physical computing resources (e.g.: space, power, processing power, processing capacity, RAM, bandwidth, etc.) thereby lowering costs. The use of virtualization also allows hardware to be updated and maintained independently of OS version and specific device drivers hosted in the operating systems or virtual machines. Additionally, virtual machines enhance system security by isolating computing environments from each other.
- In still another aspect, a method for providing access to a computing environment, includes the step of receiving a request from a client system for an enumeration of available computing environments. Collected data regarding available computing environments are accessed. Accessed data indicating to a client system each computing environment available to a user of the client system are transmitted to the client system. A request to access one of the computing environments is received from the client system. A connection is established between the client system and a virtual machine hosting the requested computing environment.
- In one embodiment, for each stored computing environment, a determination is made as to whether that computing environment is available to a user of the client system. In another embodiment, the accessed data transmitted to the client system are displayable at the client system as icons in a graphical user interface window representing computing environments available to a user of the client system. In still another embodiment, the accessed data transmitted to the client system are displayable at the client system as icons in a graphical user interface window representing computing environments unavailable to a user of the client system. In yet another embodiment, the connection between the client system and the virtual machine is established using a presentation layer protocol.
- In one embodiment, user credentials are received from the client system. In another embodiment, the accessed data are transmitted to the client system responsive to receiving the user credentials. In still another embodiment, the user of the client system is authenticated based on the received user credentials and access is provided to a selected one of the available computing environment images without requiring further input of user credentials by a user of the client system.
- In one embodiment, information is gathered about the client system and a data set is generated from the gathered information. In another embodiment, the accessed data are transmitted to the client system indicating, responsive to the generated data set, each computing environment available to the client system. In another embodiment, the accessed data are transmitted to the client system indicating, responsive to an application of a policy to the generated data set, each computing environment available to the client system.
- In one embodiment, a web server receives a request from a client system for an enumeration of available computing environments. In another embodiment, a page template is retrieved from a persistent storage, the web server creates a page describing a display of computing environment images available to the client system, and the created page is transmitted to the client system.
- In yet another aspect, in a network including a client system and a plurality of servers storing computing environments, a server includes a broker module, a transmitter, a receiver, and a transceiver. The broker module accesses collected data regarding computing environments and determines, for each computing environment, whether that computing environment image is available to a client system. The transmitter sends accessed data to the client system indicating to the client system each computing environment determined to be available to the client system. The receiver receives a request to access one of the available computing environments. The transceiver provides a connection between the client system and a virtual machine providing the requested computing environment.
- In one embodiment, the receiver receives user credentials from the client system. In another embodiment, the server further comprises a database storing the collected data. In still another embodiment, the broker module determines for each computing environment whether that computing environment image is available to a client system based on the user credentials and the collected data.
- In one embodiment, the server further comprises an output display creation engine creating output displays indicating each computing environment available to the client system. In another embodiment, the output display creation engine creates a web page describing a display of the computing environments available to a client system, the web page created responsive to the collected information and a web page template. In still another embodiment, transceiver provides a connection between the client system and a virtual machine providing the requested computing environment by establishing a presentation layer protocol connection.
- These and other aspects of this invention will be readily apparent from the detailed description below and the appended drawings, which are meant to illustrate and not to limit the invention, and in which:
-
FIG. 1 is a block diagram of one embodiment of an environment in which a client machine accesses a computing resource provided by a remote machine; -
FIGS. 1A and 1B are block diagrams depicting embodiments of typical computers useful in embodiments with remote machines or client machines; -
FIG. 2A is a block diagram of a system for providing access to a resource; -
FIG. 2B is a block diagram of one embodiment of a system in which a client machine can initiate execution of an application program for determining the resource neighborhood of that client machine; -
FIG. 2C is a block diagram of an embodiment in which a client machine uses a web browser application to determine its resource neighborhood; -
FIGS. 3A , 3B, and 3C are block diagrams of embodiments of systems of communication among a client machine and multiple remote machines; -
FIG. 3D is a block diagram of one embodiment of a system in which a client machine can access a resource from a resource neighborhood web page displayed at that client machine; -
FIG. 3E is a block diagram of one embodiment of a system in which a remote machine acts as an intermediary for a machine farm; -
FIG. 4 is a block diagram of one embodiment of a resource neighborhood application in which a client machine is in communication with one of the remote machines; -
FIG. 5 is a block diagram of a computing embodiment in which a client machine is in communication with a remote machine having an installed resource neighborhood application program of the invention; -
FIG. 6A is a screen shot of an embodiment of a display of a client machine after a resource neighborhood application program is executed; -
FIG. 6B is a screen shot of another embodiment of a display screen of a client machine after the resource neighborhood application program is executed; -
FIG. 7A is a block diagram of an embodiment of a network providing policy-based access to application programs for a machine; -
FIG. 7B is a block diagram depicting a more detailed embodiment of a policy engine; -
FIG. 8 is a flowchart depicting one embodiment of a process for providing access to a resource; -
FIG. 9 is a flow diagram depicting one embodiment of a process for electing a management node; -
FIG. 10 is a flow diagram depicting one embodiment of a process to update information collected by the management node; -
FIG. 11 is a block diagram depicting an embodiment of a machine farm including first and second network management processes; -
FIG. 12 is a block diagram depicting one embodiment of a virtual machine management component; -
FIG. 13 is a block diagram depicting one embodiment of a session management component; -
FIG. 14 is a block diagram depicting one embodiment of a system in which a drive associated with theclient machine 10 is made available to a computing environment; -
FIG. 15A is a block diagram depicting one embodiment of a client machine supporting multiple client machine display devices; -
FIG. 15B is a block diagram depicting one embodiment of a system for supporting multiple client machine display devices -
FIG. 15C is a block diagram depicting one embodiment of a session login mechanism providing support for multiple client machine display devices; -
FIG. 16A is a flow diagram depicting one embodiment of the steps to be taken to provide a desired display layout to a client machine having multiple display devices; -
FIG. 16B is a flow diagram depicting one embodiment of a process to modify a window message; -
FIG. 16C is a flow diagram depicting one embodiment of the steps taken to associate a display layout with a client machine; -
FIG. 16D is a flow diagram depicting one embodiment of the steps taken to change a desired display layout for a client machine; -
FIG. 17 is a block diagram depicting one embodiment of a system in which a remote machine authenticates the user of a client machine; -
FIG. 18 is a flow diagram depicting one embodiment of the steps taken to access a plurality of files comprising an application program; -
FIG. 19 is a block diagram depicting one embodiment of aclient machine 10 including an application streaming client, a streaming service and an isolation environment; -
FIG. 20 is a flow diagram depicting one embodiment of steps taken by a client machine to execute an application; -
FIG. 21 is a block diagram depicts one embodiment of a plurality of application files; -
FIG. 22A is a flow diagram depicting one embodiment of the steps taken to enable transparent distributed program execution on a remote machine through the selection of graphical indicia representative of a data file located on the client machine; -
FIG. 22B is a flow diagram depicting one embodiment of the steps taken by a remote machine to enable transparent distributed program execution on a remote machine through the selection of graphical indicia representative of a data file located on the client machine; -
FIG. 23 is a flow diagram depicting another embodiment of the steps taken to enable transparent distributed program execution on a client machine through the selection of graphical indicia representative of a data file located on a remote machine; -
FIG. 24 is a flow diagram depicting one embodiment of the steps taken to negotiate the protocol for a connection between a client machine and a remote machine; -
FIG. 25 is a block diagram depicting an embodiment of a remote machine and a client machine establishing a protocol stack for communication; -
FIG. 26 is a block diagram depicting one embodiment of a client machine architecture; -
FIG. 27 is a block diagram depicting one embodiment of communication between a client machine and a machine farm; -
FIG. 28 is a block diagram depicting one embodiment of a client machine architecture; -
FIG. 29 is a flow diagram depicting one embodiment of the steps taken to display application output in a web page; -
FIG. 30 is a flow diagram depicting one embodiment of the steps taken link to a virtual machine identified by a hyperlink configuration file; -
FIG. 31 is a block diagram depicting an embodiment of a system architecture in which a multiplexer is used to transmit data to more than one client machine; -
FIG. 32 is a block diagram depicting another embodiment of a system architecture in which a multiplexer is used to transmit data to more than one client machine; -
FIG. 33 is a block diagram depicting one embodiment of an architecture for displaying application output in a web page; -
FIG. 34 is a block diagram depicting another embodiment of an architecture for displaying application output in a web page; -
FIG. 35 is a block diagram depicting another embodiment of an architecture for displaying application output in a web page; -
FIG. 36 is a block diagram depicting another embodiment of an architecture for displaying application output in a web page; -
FIG. 37 is a block diagram depicting one embodiment of a client machine receiving window attribute data via a virtual channel; -
FIG. 38 is a block diagram depicting a client machine connected to more than one remote machine; -
FIG. 39 is a flow diagram depicting one embodiment of the steps taken to detect and transmit server-initiated display changes; -
FIG. 40 is a flow diagram depicting one embodiment of the steps taken to detect and transmit client-initiated display changes; -
FIG. 41 is a flow diagram depicting one embodiment for enabling transmission of seamless windows between a client machine and a remote machine; -
FIG. 42 is a block diagram depicting one embodiment of an agent; -
FIG. 43 is a block diagram depicting one embodiment of a system for enabling seamless windowing mode between a client machine and remote computing environments; -
FIG. 44 is a flow diagram depicting one embodiment of the steps taken in a method of receiving window attribute data and graphical data associated with remote windows from virtualized operating systems and from native operating systems; -
FIG. 45 is a block diagram of a system for providing a client with a reliable connection to a host service according to an embodiment of the invention; -
FIG. 46 is a block diagram of a system for providing a client with a reliable connection to a host service according to another embodiment of the invention; -
FIG. 47 depicts communications occurring over a network according to an embodiment of the invention; -
FIG. 48 depicts communications occurring over a network according to another embodiment of the invention; -
FIG. 49 depicts a process for encapsulating a plurality of secondary protocols within a first protocol for communication over a network according to an embodiment of the invention; -
FIG. 50 is a block diagram of an embodiment of a computer system to maintain authentication credentials in accordance with the invention; -
FIG. 51 is a flow diagram of the steps followed in an embodiment of the computer system ofFIG. 5 to maintain authentication credentials during a first communication session in accordance with the invention; -
FIG. 52 is a flow diagram of the steps followed in an embodiment of the computer system ofFIG. 50 to maintain authentication credentials during a second communication session following the termination of the first communication session ofFIG. 53A in accordance with the invention; -
FIG. 53 is a block diagram of an embodiment of a computer system to maintain authentication credentials in accordance with another embodiment of the invention; -
FIG. 54 is a flow diagram of the steps followed in an embodiment of the computer system ofFIG. 53 to maintain authentication credentials during a first communication session in accordance with the invention; -
FIG. 55 is a flow diagram of the steps followed in an embodiment of the computer system ofFIG. 53 to maintain authentication credentials during a second communication session following the termination of the first communication session ofFIG. 53 in accordance with the invention; -
FIG. 56 is a flow diagram of the steps followed in an embodiment of the computer system ofFIG. 53 to maintain authentication credentials during a second communication session following the termination of a second communication channel of the first communication session ofFIG. 53 in accordance with the invention; -
FIG. 57 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to an embodiment of the invention; -
FIG. 58 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to another embodiment of the invention; -
FIG. 59 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to another embodiment of the invention; -
FIG. 60 is a block diagram of a system to maintain authentication credentials and provide a client with a reliable connection to a host service according to another embodiment of the invention; -
FIG. 61 is a block diagram of a system for providing a client with a reliable connection to a host service and further including components for reconnecting the client to a host service according to an embodiment of the invention; -
FIG. 62 is a block diagram of an embodiment of a system for providing a client with a reliable connection to a host service and further including components for reconnecting the client to a host service; -
FIG. 63 is a block diagram of an embodiment ofFIG. 61 further including components for initially connecting the client to a host service; -
FIG. 64 is a block diagram of the system ofFIG. 62 further including components for initially connecting the client to a host service and to maintain authentication credential according to an embodiment of the invention; -
FIG. 65 is a flow diagram of a method for network communications according to an embodiment of the invention; -
FIG. 66 is a flow diagram of a method for reconnecting the client to the host services; -
FIGS. 67-69 are flow diagrams of a method for connecting a client to a plurality of host services according to an embodiment of the invention; -
FIG. 70 is a flow diagram of a method for providing a client with a reliable connection to host services and for reconnecting the client to the host services according to an embodiment of the invention; -
FIGS. 71-72 are flow diagrams of a method for reconnecting a client to host services according to an embodiment of the invention; -
FIG. 73 is a conceptual block diagram of an embodiment of client software and server software; -
FIG. 74 is a flow chart of an embodiment of a method for monitoring network performance; -
FIG. 75 is a flow chart of an embodiment of a method of operation of the server software; -
FIG. 76 is a flow chart of an embodiment of a method of generating sub-metrics by the client; -
FIG. 77 is a flow chart of an embodiment of a method of generating sub-metrics by the client; -
FIG. 78 is a flow chart of an embodiment of a method of generating sub-metrics by the server; -
FIG. 79 is a schematic diagram depicting a networked client-server computing system; -
FIG. 80 is a flow chart depicting a method for connecting a client machine to disconnected application sessions; -
FIG. 81 is a flow chart depicting on embodiment a method for connecting the client machine to active application sessions; -
FIG. 82 is a schematic diagram depicting one embodiment of a client machine in communication with several remote machines; -
FIG. 83 is a flow diagram depicting one embodiment of steps taken in a method to connect a user of a client machine to a computing environment; -
FIG. 84 is a flow diagram depicting an embodiment of steps taken in a method to connect a user of a client machine to a computing environment in response to selection of a graphical user interface element; -
FIG. 85 is a block diagram depicting one embodiment of a remote machine able to connect the client machine to an application session; -
FIG. 86 is a block diagram of an embodiment of a system for connecting a client machine to an application session responsive to application of a policy; -
FIG. 87 is a flow diagram depicting the steps taken in one method to connect a client machine to an application session responsive to application of a policy; -
FIG. 88 is a block diagram depicting one embodiment of a system for providing, by a virtual machine, access to a computing environment; -
FIG. 89A is a block diagram depicting one embodiment of a storage device and a computing device; -
FIG. 89B is a flow diagram depicting one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a storage device; -
FIG. 90A is a block diagram depicting one embodiment of a mobile computing device; -
FIG. 90B is a flow diagram depicting one embodiment of the steps taken in a method for providing a portable computing environment by a mobile computing device; -
FIG. 91A is a block diagram of one embodiment of a mobile computing device and a computing device; -
FIG. 91B is a flow diagram depicting depicts one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a mobile computing device; -
FIG. 92A is a block diagram depicting one embodiment of a mobile computing device and a computing device comprising a computing environment selector; -
FIG. 92B is a flow diagram depicting an embodiment of the steps taken in a method for establishing a computing environment on a computing device via a mobile computing device; -
FIG. 93A is a block diagram depicting one embodiment of a mobile computing device connecting to a docking station; -
FIG. 93B is a block diagram depicting one embodiment of a docking station connecting a mobile computing device and a computing device; -
FIG. 93C is a block diagram depicting one embodiment of a mobile computing device and computing device having a docking mechanism; -
FIG. 93D is a flow diagram depicting one embodiment of the steps taken in a method of providing to a mobile computing device one or more hardware resources; -
FIG. 94A is a block diagram depicting one embodiment of a mobile computing device having a plurality of processors; -
FIG. 94B is a flow diagram depicting one embodiment of the steps taken in a method for switching, by a mobile computing device, between use of multiple processors; -
FIG. 95 is a block diagram depicting one embodiment of a system for providing to a first client agent, via a second client agent on a first remote machine, output data generated by a resource executing in a virtual machine provided by a second remote machine; -
FIG. 96 is a block diagram depicting an embodiment of a system for providing to a first client agent, via a second client agent on a first remote machine, output data generated by a resource executing in a virtual machine provided by a second remote machine; and -
FIG. 97 is a block diagram depicting one embodiment of a system for identifying, by a coordinator machine, a worker machine providing, via a virtual machine, access to a computing environment. - Referring now to
FIG. 1 , a block diagram of one embodiment of an environment in which aclient machine - A
remote machine 30 such asremote machine client machine 10. Although only twoclient machines 10 and only fourremote machines 30 are depicted in the embodiment shown inFIG. 1 , it should be understood that the system may provide multiple ones of any or each of those components. For example, in one embodiment, the system may include multiple, logically-groupedremote machines 30, one or more of which is available to provide aclient machine FIG. 1A asmachine farm 38. In some of these embodiments, theremote machines 30 may be geographically dispersed. Thus, the group ofremote machines 30 logically grouped as amachine farm 38 may be interconnected using a wide-area network (WAN) connection, metropolitan-area network (MAN) connection, a local area network (LAN) a storage-area network (SAN), or a public network such as the Internet. For example, amachine farm 38 may includeremote machines 30 physically located in geographically diverse locations around the world, including different continents, regions of a continent, countries, regions of a country, states, regions of a state, cities, regions of a city, campuses, regions of a campus, or rooms. Data transmission speeds betweenremote machines 30 in themachine farm 38 can be increased if theremote machines 30 are connected using a local-area network (LAN) connection or some form of direct connection. Amachine farm 38 may be administered as a single entity. - A centralized service may provide management for
machine farm 38. In some embodiments, one or moreremote machines 30 elect a particularremote machine 30 to provide management functionality for the farm. The electedremote machine 30 may be referred to as a management server, management node, or management process. Themanagement node 30 may gather and store information about a plurality ofremote machines 30, respond to requests for access to resources hosted byremote machines 30, and enable the establishment of connections betweenclient machines 10 andremote machines 30. In other embodiments, an administrator designates one or moreremote machines 30 to provide management functionality formachine farm 38. - Alternatively, management of the
machine farm 38 may be de-centralized. In some embodiments, one or moreremote machines 30 comprise components, subsystems and modules to support one or more management services for themachine farm 38. In one of these embodiments, one or moreremote machines 30 provide functionality for management of dynamic data, including techniques for handling failover, data replication, and increasing the robustness of themachine farm 38. In another of these embodiments, one or moreremote machines 30 include communications capabilities to enable the one or moreremote machines 30 to interact with one another to share responsibility for management tasks. Eachremote machine 30 may communicate with a persistent store and, in some embodiments, with a dynamic store. - Persistent store may be physically implemented on a disk, disk farm, a redundant array of independent disks (RAID), writeable compact disc, or any other device that allows data to be read and written and that maintains written data if power is removed from the storage device. A single physical device may provide storage for a plurality of persistent stores, i.e., a single physical device may be used to provide the persistent store for more than one
machine farm 38. The persistent store maintains static data associated with eachremote machine 30 inmachine farm 38 and global data used by allremote machines 30 within themachine farm 38. In one embodiment, the persistent store may maintain the server data in a Lightweight Directory Access Protocol (LDAP) data model. In other embodiments, the persistent store stores server data in an ODBC-compliant database. For the purposes of this description, the term “static data” refers to data that do not change frequently, i.e., data that change only on an hourly, daily, or weekly basis, or data that never change. - The data stored by the persistent store may be replicated for reliability purposes physically or logically. For example, physical redundancy may be provided using a set of redundant, mirrored disks, each providing a copy of the data. In other embodiments, the database itself may be replicated using standard database techniques to provide multiple copies of the database. In further embodiments, both physical and logical replication may be used concurrently.
- As described above, the
remote machines 30 store “static” data, i.e., data that persist across client sessions, in the persistent store. Writing to the persistent store can take relatively long periods of time. To minimize accesses to the persistent store, theremote machines 30 may develop a logical, common database (i.e., the dynamic store) that is accessible by all of the remote machines 30in themachine farm 38 for accessing and storing some types of data. The dynamic store may be physically implemented in the local memory of a single or multiple remote machines 30in themachine farm 38. The local memory can be random access memory, disk, disk farm, a redundant array of independent disks (RAID), or any other memory device that allows data to be read and written. - In general, data stored in the dynamic store are data that are typically queried or changed frequently during runtime. Examples of such data (hereafter referred to as runtime data) are the current workload level for each of the remote machines 30in the
machine farm 38, the status of theremote machines 30 in themachine farm 38, client session data, the number of virtual machines supported by aremote machine 30, the identity of the operating systems supported by aremote machine 30, and licensing information. - In one embodiment, the dynamic store comprises one or more tables, each of which stores records of attribute-value pairs. Any number of tables may exist, but each table stores records of only one type. Tables are, in some embodiments identified by name. Thus, in this embodiment, two
remote machines 30 that use the same name to open a table refer to the same logical table. - The dynamic store (i.e., the collection of all record tables) can be embodied in various ways. In one embodiment, the dynamic store is centralized; that is, all runtime data are stored in the memory of one
remote machine 30 in themachine farm 38. That server operates in a manner similar to the management node described above, that is, all otherremote machines 30 in themachine farm 38 communicate with the server acting as the centralized data store when seeking access to that runtime data. In another embodiment, eachremote machine 30 in themachine farm 38 keeps a full copy of the dynamic store. Here, eachremote machine 30 communicates with every otherremote machine 30 to keep its copy of the dynamic store up to date. - In another embodiment, each
remote machine 30 maintains its own runtime data and communicates with every otherremote machine 30 when seeking to obtain runtime data from them. Thus, for example, aremote machine 30 attempting to find an application program requested by theclient machine 10 may communicate directly with every otherremote machine 30 in themachine farm 38 to find one or more servers hosting the requested application. - For machine farms 38 having a large number of
remote machines 30, the network traffic produced by these embodiments can become heavy. One embodiment alleviates heavy network traffic by designating a subset of the remote machines 30in amachine farm 38, typically two or more, as “collector points.” Generally, a collector point is a server that collects run-time data. Each collector point stores runtime data collected from certain otherremote machines 30 in themachine farm 38. Eachremote machine 30 in themachine farm 38 is capable of operating as, and consequently is capable of being designated as, a collector point. In one embodiment, each collector point stores a copy of the entire dynamic store. In another embodiment, each collector point stores a portion of the dynamic store, i.e., it maintains runtime data of a particular data type. The type of data stored by aremote machine 30 may be predetermined according to one or more criteria. For example,remote machines 30 may store different types of data based on their boot order. Alternatively, the type of data stored by aremote machine 30 may be configured by an administrator usingadministration tool 140. In these embodiments, the dynamic store is distributed among two or more remote machines 30in themachine farm 38. -
Remote machines 30 not designated as collector points know theremote machines 30 in amachine farm 38 that are designated as collector points. Aremote machine 30 not designated as a collector point communicates with a particular collector point when delivering and requesting runtime data. Consequently, collector points lighten network traffic because eachremote machine 30 in themachine farm 38 communicates with a single collector pointremote machine 30, rather than with every otherremote machine 30, when seeking to access the runtime data. - The
machine farm 38 can be heterogeneous, that is, one or more of theremote machines 30 can operate according to one type of operating system platform (e.g., WINDOWS NT, manufactured by Microsoft Corp. of Redmond, Wash.), while one or more of the otherremote machines 30 can operate according to another type of operating system platform (e.g., Unix or Linux). Additionally, aheterogeneous machine farm 38 may include one or moreremote machines 30 operating according to a type of operating system, while one or more otherremote machines 30 execute one or more types of hypervisors rather than operating systems. In these embodiments, hypervisors may be used to emulate virtual hardware, partition physical hardware, virtualize physical hardware, and execute virtual machines that provide access to computing environments. Hypervisors may include those manufactured by VMWare, Inc., of Palo Alto, Calif.; the Xen hypervisor, an open source product whose development is overseen by XenSource, Inc., of Palo Alto; the VirtualServer or virtual PC hypervisors provided by Microsoft or others. - In some embodiments, a hypervisor executes on a machine executing an operating system. In one of these embodiments, a machine executing an operating system and a hypervisor may be said to have a host operating system (the operating system executing on the machine), and a guest operating system (an operating system executing within a computing resource partition provided by the hypervisor). In other embodiments, a hypervisor interacts directly with hardware on a machine, instead of executing on a host operating system. In one of these embodiments, the hypervisor may be said to be executing on “bare metal,” referring to the hardware comprising the machine.
-
Remote machines 30 may be servers, file servers, application servers, appliances, network appliances, gateways, application gateways, gateway servers, virtualization servers, deployment servers, or firewalls. Theremote machine 30 may be an SSL VPN server. Theremote machine 30 may be an application acceleration appliance. For embodiments in which theremote machine 30 is an application acceleration appliance, theremote machine 30 may provide functionality including firewall functionality, application firewall functionality, or load balancing functionality. In some embodiments, theremote machine 30 comprises an appliance such as one of the line of appliances manufactured by the Citrix Application Networking Group, of San Jose, Calif., or Silver Peak Systems, Inc., of Mountain View, Calif., or of Riverbed Technology, Inc., of San Francisco, Calif., or of F5 Networks, Inc., of Seattle, Wash., or of Juniper Networks, Inc., of Sunnyvale, Calif. - In some embodiments, a
remote machine 30 comprises a remote authentication dial-in user service, referred to as a RADIUS server. In other embodiments,remote machines 30 may have the capacity to function as a master network information node monitoring resource usage of other machines in thefarm 38. In still other embodiments, aremote machine 30 may provide an Active Directory.Remote machines 30 may be referred to as execution machines, intermediate machines, broker machines, intermediate broker machines, or worker machines. - In one embodiment,
remote machines 30 in themachine farm 38 may be stored in high-density racking systems, along with associated storage systems, and located in an enterprise data center. In this embodiment, consolidating the machines in this way may improve system manageability, data security, the physical security of the system, and system performance by locating machines and high performance storage systems on localized high performance networks. Centralizing the machines and storage systems and coupling them with advanced system management tools allows more efficient use of machine resources. - The
client machines 10 may also be referred to as endpoints, client nodes, clients, or local machines. In some embodiments, theclient machines 10 have the capacity to function as both client machines seeking access to resources and asremote machines 30 providing access to remotely hosted resources forother client machines 10. In some embodiments,remote machines 30 may request access to remotely-hosted resources. In one of these embodiments, theremote machines 30 may be referred to asclient machines 10. - In one embodiment, the
client machine 10 communicates directly with one of theclient machines 30 in amachine farm 38. In another embodiment, theclient machine 10 executes an application to communicate with theremote machine 30 in amachine farm 38. In yet another embodiment, theclient machine 10 communicates with one of theremote machines 30 via a gateway, such as an application gateway. In some embodiments, theclient machine 10 communicates with theremote machine 30 in themachine farm 38 over acommunications link 150. Over the communications link 150, theclient machine 10 can, for example, request access to or execution of various resources provided byremote machines 30, such as applications, computing environments, virtual machines, or hypervisors hosted by or executing on theremote machines machine farm 38. Theclient machine client machine 10 and the applications or computing environments provided by theremote machines 30. In another of these embodiments, over the communications link 150, theclient machine 10 can receive the output of applications executing in one or more virtual machines on aremote machine machine farm 38. - The communications link 150 may be synchronous or asynchronous and may be a LAN connection, MAN connection, or a WAN connection. Additionally, communications link 150 may be a wireless link, such as an infrared channel or satellite band. The communications link 150 may use a transport layer protocol such as TCP/IP or any application layer protocol, such as the Hypertext Transfer Protocol (HTTP), Extensible Markup Language (XML), Independent Computing Architecture Protocol (ICA) manufactured by Citrix Systems, Inc. of Ft. Lauderdale, Fla., or the Remote Desktop Protocol manufactured by the Microsoft Corporation of Redmond, Wash. In one embodiment, the communications link 150 uses a Wi-Fi protocol. In still another embodiment, the communications link 150 uses a mobile internet protocol.
- The communications link 150 may provide communications functionality through a variety of connections including standard telephone lines, LAN or WAN links (e.g., T1, T3, 56 kb, X.25, SNA, DECNET), broadband connections (ISDN, Frame Relay, ATM, Gigabit Ethernet, Ethernet-over-SONET), and wireless connections or any combination thereof. Connections can be established using a variety of communication protocols (e.g., TCP/IP, IPX, SPX, NetBIOS, Ethernet, ARCNET, SONET, SDH, Fiber Distributed Data Interface (FDDI), RS232, IEEE 802.11, IEEE 802.11a, IEEE 802.11b, IEEE 802.11g, CDMA, GSM, WiMax and direct asynchronous connections). In one embodiment, the
remote machine 30 and theclient machine 10 communicate via any type and/or form of gateway or tunneling protocol such as Secure Socket Layer (SSL) or Transport Layer Security (TLS), or the Citrix Gateway Protocol manufactured by Citrix Systems, Inc. of Ft. Lauderdale, Fla. Thecomputer system 100 may include a network interface comprising a built-in network adapter, network interface card, PCMCIA network card, card bus network adapter, wireless network adapter, USB network adapter, modem or any other device suitable for interfacing thecomputer system 100 to any type of network capable of communication and performing the operations described herein. - The
computer system 100 may support installation devices, such as a floppy disk drive for receiving floppy disks such as 3.5-inch, 5.25-inch disks or ZIP disks, a CD-ROM drive, a CD-R/RW drive, a DVD-ROM drive, network interface card, tape drives of various formats, USB device, hard-drive or any other device suitable for installing software, programs, data or files, such as any software, or portion thereof. - The
computer system 100 may also include a storage device of any type and form for storing an operating system and other related software, and for storing application software programs. In one embodiment, the storage device includes one or more hard disk drives or redundant arrays of independent disks. In other embodiments, the storage device comprises any type and form of portable storage medium or device, such as a compact flash card, a micro hard drive or pocket drive, embedded flash storage, or USB storage drive. Portable storage devices may be generally referred to by a variety of names, including but not limited to, finger drive, flash disk, flash drive, flash memory drive, jump drive, jump stick, keychain drive, keydrive, memory key, mobile drive, pen drive, thumb drive, thumb key, vault drive, USB drive, or USB stick. Optionally, any of the installation devices or mediums could also provide a storage medium or device. - In some embodiments, the
client machine 10 includes a client agent which may be, for example, implemented as a software program and/or as a hardware device, such as, for example, an ASIC or an FPGA. An example of a client agent with a user interface is a Web Browser (e.g., INTERNET EXPLORER manufactured by Microsoft Corp. of Redmond, Wash. or SAFARI, manufactured by Apple Computer of Cupertino, Calif.). The client agent can use any type of protocol, such as a remote display protocol, and it can be, for example, an HTTP client agent, an FTP client agent, an Oscar client agent, a Telnet client agent, an Independent Computing Architecture (ICA) client agent manufactured by Citrix Systems, Inc. of Fort Lauderdale, Fla., or a Remote Desktop Protocol (RDP) client agent manufactured by Microsoft Corporation of Redmond, Wash. In some embodiments, the client agent is configured to connect to theremote machine 30. In other embodiments (not shown), theclient machine 10 includes a plurality of client agents, each of which may communicate with aremote machine 30, respectively. - In many embodiments, the
remote machines 30, and theclient machines 10, are provided as computers or computer servers, of the sort manufactured by Apple Computer, Inc., of Cupertino, Calif., International Business Machines of White Plains, N.Y., Hewlett-Packard Corporation of Palo Alto, Calif. or the Dell Corporation of Round Rock, Tex. In some embodiments, theremote machines 30 may be blade servers, servers, workstation blades or personal computers executing hypervisors emulating hardware required for virtual machines providing access to computing environments. In these embodiments, a single physical machine may provide multiple computing environments. -
FIGS. 1A and 1B depict block diagrams of typical computer architectures useful in those embodiments as theremote machine 30, or theclient machine 10. As shown inFIGS. 1A and 1B , eachcomputer 100 includes acentral processing unit 102, and amain memory unit 104. Eachcomputer 100 may also include other optional elements, such as one or more input/output devices 130 a-130 n (generally referred to using reference numeral 130), and acache memory 140 in communication with thecentral processing unit 102. - The
central processing unit 102 is any logic circuitry that responds to and processes instructions fetched from themain memory unit 104. In many embodiments, the central processing unit is provided by a microprocessor unit, such as those manufactured by Intel Corporation of Mountain View, Calif.; those manufactured by Motorola Corporation of Schaumburg, Ill.; those manufactured by International Business Machines of White Plains, N.Y.; or those manufactured by Advanced Micro Devices of Sunnyvale, Calif. -
Main memory unit 104 may be one or more memory chips capable of storing data and allowing any storage location to be directly accessed by themicroprocessor 102, such as Static random access memory (SRAM), Burst SRAM or SynchBurst SRAM (BSRAM), Dynamic random access memory (DRAM), Fast Page Mode DRAM (FPM DRAM), Enhanced DRAM (EDRAM), Extended Data Output RAM (EDO RAM), Extended Data Output DRAM (EDO DRAM), Burst Extended Data Output DRAM (BEDO DRAM), Enhanced DRAM (EDRAM), synchronous DRAM (SDRAM), JEDEC SRAM, PC100 SDRAM, Double Data Rate SDRAM (DDR SDRAM), Enhanced SDRAM (ESDRAM), SyncLink DRAM (SLDRAM), Direct Rambus DRAM (DRDRAM), or Ferroelectric RAM (FRAM). - In the embodiment shown in
FIG. 1A , theprocessor 102 communicates withmain memory 104 via a system bus 120 (described in more detail below).FIG. 1B depicts an embodiment of acomputer system 100 in which the processor communicates directly withmain memory 104 via a memory port. For example, inFIG. 1B , themain memory 104 may be DRDRAM. -
FIG. 1A andFIG. 1B depict embodiments in which themain processor 102 communicates directly withcache memory 140 via a secondary bus, sometimes referred to as a “backside” bus. In other embodiments, themain processor 102 communicates withcache memory 140 using thesystem bus 120.Cache memory 140 typically has a faster response time thanmain memory 104 and is typically provided by SRAM, BSRAM, or EDRAM. - In the embodiment shown in
FIG. 1A , theprocessor 102 communicates with various I/O devices 130 via alocal system bus 120. Various buses may be used to connect thecentral processing unit 102 to the I/O devices 130, including a VESA VL bus, an ISA bus, an EISA bus, a MicroChannel Architecture (MCA) bus, a PCI bus, a PCI-X bus, a PCI-Express bus, or a NuBus. For embodiments in which the I/O device is a video display, theprocessor 102 may use an Advanced Graphics Port (AGP) to communicate with the display.FIG. 1B depicts an embodiment of acomputer system 100 in which themain processor 102 communicates directly with I/O device 130 b via HyperTransport, Rapid I/O, or InfiniBand.FIG. 1B also depicts an embodiment in which local busses and direct communication are mixed: theprocessor 102 communicates with I/O device 130 a using a local interconnect bus while communicating with I/O device 130 b directly. - A wide variety of I/O devices 130 may be present in the
computer system 100. Input devices include keyboards, mice, trackpads, trackballs, microphones, and drawing tablets. Output devices include video displays, speakers, inkjet printers, laser printers, and dye-sublimation printers. An I/O device may also provide mass storage for thecomputer system 100 such as a hard disk drive, a floppy disk drive for receiving floppy disks such as 3.5-inch, 5.25-inch disks or ZIP disks, a CD-ROM drive, a CD-R/RW drive, a DVD-ROM drive, DVD−RW drive, DVD+RW drive, tape drives of various formats, and USB storage devices such as the USB Flash Drive line of devices manufactured by Twintech Industry, Inc. of Los Alamitos, Calif., and the iPod Shuffle line of devices manufactured by Apple Computer, Inc., of Cupertino, Calif. - In some embodiments, the
client machine 10 may comprise or be connected to multiple display devices, which each may be of the same or different type and/or form. As such, any of the I/O devices 130 a-130 n may comprise a display device or any type and/or form of suitable hardware, software, or combination of hardware and software to support, enable or provide for the connection and use of multiple display devices by theclient machine 10. For example, theclient machine 10 may include any type and/or form of video adapter, video card, driver, and/or library to interface, communicate, connect or otherwise use the display devices. In one embodiment, a video adapter may comprise multiple connectors to interface to multiple display devices. In other embodiments, theclient machine 10 may include multiple video adapters, with each video adapter connected to one or more of the display devices. In some embodiments, any portion of the operating system of theclient machine 10 may be configured for using multiple displays. In other embodiments, one or more of the display devices may be provided by one or more other computing devices, such asremote machine 30 connected to theclient machine 10, for example, via a network. These embodiments may include any type of software designed and constructed to use another computer's display device as a second display device for theclient machine 10. One ordinarily skilled in the art will recognize and appreciate the various ways and embodiments that aclient machine 10 may be configured to have multiple display devices. - In further embodiments, an I/O device 130 may be a bridge between the
system bus 120 and an external communication bus, such as a USB bus, an Apple Desktop Bus, an RS-232 serial connection, a SCSI bus, a FireWire bus, a FireWire 800 bus, an Ethernet bus, an AppleTalk bus, a Gigabit Ethernet bus, an Asynchronous Transfer Mode bus, a HIPPI bus, a Super HIPPI bus, a SerialPlus bus, a SCI/LAMP bus, a FibreChannel bus, or a Serial Attached small computer system interface bus. - General-purpose computers of the sort depicted in
FIG. 1A andFIG. 1B typically operate under the control of operating systems which control scheduling of tasks and access to system resources. In some embodiments, the computers operate under control of hypervisors, which represent virtualized views of physical hardware as one or more virtual machines. Operating systems may execute in these virtual machines to control the virtual machine in a manner analogous to the way a native operating system controls a physical machine. Typical operating systems include: the MICROSOFT WINDOWS family of operating systems, manufactured by Microsoft Corp. of Redmond, Wash.; the MacOS family of operating systems, manufactured by Apple Computer of Cupertino, Calif.; OS/2, manufactured by International Business Machines of Armonk, N.Y.; and Linux, a freely-available operating system distributed by Caldera Corp. of Salt Lake City, Utah, among others. - The
client machines client machines client machines 10 can include a visual display device (e.g., a computer monitor), a data entry device (e.g., a keyboard), persistent or volatile storage (e.g., computer memory) for storing downloaded application programs, a processor, and a mouse. Execution of a small, display presentation program allows theclient machines 10 to participate in a distributed computer system model (i.e., a server-based computing model). - In other embodiments, the general-purpose computers of the sort depicted in
FIG. 1A andFIG. 1B may have different processors, operating systems, and input devices consistent with the device and in accordance with embodiments further described herein. Thecomputer system 100 can be any workstation, desktop computer, laptop or notebook computer, server, handheld computer, mobile telephone or other portable telecommunication device, media playing device, a gaming system, or any other type and/or form of computing, telecommunications or media device that is capable of communication and that has sufficient processor power and memory capacity to perform the operations described herein. For example, thecomputer system 100 may comprise a device of the IPOD family of devices manufactured by Apple Computer of Cupertino, Calif., aPLAYSTATION 2,PLAYSTATION 3, or PERSONAL PLAYSTATION PORTABLE (PSP) device manufactured by the Sony Corporation of Tokyo, Japan, a NINTENDO DS, NINTENDO GAMEBOY, NINTENDO GAMEBOY ADVANCED or NINTENDO REVOLUTION device manufactured by Nintendo Co., Ltd., of Kyoto, Japan, or an XBOX orXBOX 360™ device manufactured by the Microsoft Corporation of Redmond, Wash. - For embodiments in which a
client machine 10 is a mobile device, the device may be a JAVA-enabled cellular telephone, such as those manufactured by Motorola Corp. of Schaumburg, Ill., those manufactured by Kyocera of Kyoto, Japan, or those manufactured by Samsung Electronics Co., Ltd., of Seoul, Korea. In other embodiments in which theclient machine 10 is mobile, it may be a personal digital assistant (PDA) operating under control of the PalmOS operating system, such as the devices manufactured by palmOne, Inc. of Milpitas, Calif. In further embodiments, theclient machine 10 may be a personal digital assistant (PDA) operating under control of the PocketPC operating system, such as the iPAQ devices manufactured by Hewlett-Packard Corporation of Palo Alto, Calif., the devices manufactured by ViewSonic of Walnut, Calif., or the devices manufactured by Toshiba America, Inc. of New York, N.Y. In still other embodiments, theclient machine 10 is a combination PDA/telephone device such as the Treo devices manufactured by palmOne, Inc. of Milpitas, Calif. In still further embodiments, theclient machine 10 is a cellular telephone that operates under control of the PocketPC operating system, such as those manufactured by Motorola Corp. - In some embodiments, a
client machine 10 communicates with aremote machine 30 to determine an enumeration of resources available to theclient machine 10 or to a user of theclient machine 10. Resources may include, without limitation, computing environments, applications, documents, and hardware resources. In another of these embodiments, theremote machine 30 provides theclient machine 10 with address information associated with aremote machine 30′ hosting a resource identified by the enumeration of resources. In still another of these embodiments, theclient machine 10 communicates with theremote machine 30′ to access the identified resource. In one embodiment, theclient machine 10 executes a resource neighborhood application to communicate with theremote machines remote machines 30 provides the functionality required to identify and provide address information associated with aremote machine 30′ hosting a requested resource. - Referring now to
FIG. 2A , a block diagram depicts one embodiment of a system for providing access to a resource. In brief overview, a request to enumerate computing resources is transmitted from a client machine 10 (step 202). In some embodiments, the request includes an identification of a user of theclient machine 10. An enumeration of a plurality of resources available to the user of the requesting machine is provided by the remote machine (step 204). Theclient machine 10 transmits a request for access to a particular resource included in the enumeration (step 206). - Still referring to
FIG. 2A , and in more detail, the transmitted request is a request for an enumeration of computing environments available to theclient machine 10. In another embodiment, the request is a request for an enumeration of computing environments supporting a particular application requested for execution by theclient machine 10. In still another embodiment, the request is a request for access to a computing environment supported by a particular plurality of hardware resources. - In some embodiments, information associated with the
client machine 10 or with a user of theclient machine 10 is received with the request. In one of these embodiments, credentials associated with the user, or with a user of theclient machine 10, are received. In one embodiment, theremote machine 30 receives a request for an enumeration of available computing environments from theclient machine 10 with the information associated with theclient machine client machine 10. In another embodiment, theremote machine 30 receives a transmission from a policy engine including the information. In still another embodiment, theremote machine 30 receives a transmission from a collection agent including the information. In yet another embodiment, theremote machine 30 comprises a component receiving requests and associated information. - In some embodiments, a
remote machine 30 functioning as a web server receives communications from theclient machine remote machine 30′. In one of these embodiments, the web server forwards the communications to a service on theremote machine 30′. In another of these embodiments where communications from theclient machine remote machine 30′ by the web server, theremote machine 30 may be selected responsive to an Internet Protocol (IP) address of theclient machine 10. - In some embodiments, the user provides credentials to the
remote machine 30 via a graphical user interface presented to theclient machine remote machine 30. In other embodiments, aremote machine 30′″ having the functionality of a web server provides the graphical user interface to theclient machine 10. In still other embodiments, a collection agent transmitted to theclient machine remote machine 30 gathers the credentials from theclient machine 10. - In some embodiments, collected data regarding available resources is accessed. In some of these embodiments, collected data regarding computing environments is accessed. In some of these embodiments, the accessed data includes an indication of a virtual machine providing access to one of the computing environments. In one of these embodiments, the accessed data includes an indication of a location of the virtual machine. In other embodiments, the accessed data concerning computing environments includes an indication of a plurality of hardware resources required to support the computing environments. In still other embodiments, the accessed data concerning computing environments includes an indication of a user or type of user authorized to access the computing environments. In yet other embodiments, the accessed data is provided responsive to a request for identification of a computing environment providing access to an application program.
- In some embodiments, the collected data is stored on a server, such as a
remote machine 30. In other embodiments, the server is in communication with a database storing the collected data. In still other embodiments, the server collects the data from a plurality ofmachines 30 in amachine farm 38. In one of these embodiments, the data is received from at least one server responsive to a request for the information concerning the computing environments. In another of these embodiments, the server collects the data from a hypervisor executing on amachine 30′ in themachine farm 38. In still another of these embodiments, the server collects the data from a management component residing in a guest operating system provided by a virtual machine launched into a hypervisor executing on amachine 30′ in themachine farm 38. - In some embodiments, the data is collected by an intermediate, brokering machine. In one of these embodiments, the brokering machine maintains a database of a status of at least one computing environments and collects information from at least one machine providing access to at least one computing environments. In another of these embodiments, the brokering machine collects information from a virtual machine service component residing in a virtual machine providing the computing environments. In still another of these embodiments, the brokering machine collects information from a virtual machine providing management functionality for a virtual machine providing a computing environment. In yet another of these embodiments, the brokering machine collects information from a hypervisor on which an executing virtual machine provides a computing environment. In other embodiments, the brokering machine comprises a
machine 30 including a brokering module. - In some embodiments, a determination is made for each available computing environment as to whether that computing environment is available to a user of the client system. In other embodiments, data is gathered about the client system and a data set is generated from the gathered information. In one of these embodiments, the accessed data is transmitted to the client system with an indication to the client system, made responsive to the generated data set, of each computing environment available to the client system. In another of these embodiments, the accessed data is transmitted to the client system indicating to the client system, responsive to the application of a policy to the generated data set, each computing environment available to the client system. In still another of these embodiments, the indication includes at least one method of access available to the user seeking access to the computing environment. In yet another of these embodiments, the indication includes at least one type of action associated with the computing environment which may be taken by, or on behalf of, the user of the client system.
- An enumeration of a plurality of resources available to the
client machine 10 is provided (step 204). In one embodiment, the enumeration is provided responsive to an application of a policy to received information associated with the user of theclient machine 10 or theremote machine 30. In another embodiment, the enumeration is provided responsive to a request from the user for a particular type of computing environment. In still another embodiment, the enumeration is provided responsive to a request from the user for computing environments providing access to a type of application program. In yet another embodiment, the enumeration is provided responsive to a request from the user for computing environments supported by a specified plurality of hardware resources. - In some embodiments, an indication is transmitted to the
client machine 10 of a plurality of computing environments available to a user of theclient machine 10. In one of these embodiments, the indication is generated responsive to accessing collected data associated with the plurality of computing environments. In another of these embodiments, the accessed data is transmitted to theclient machine 10 with an enumeration of computing environments available to theclient machine 10. In some embodiments, a determination is made, for each stored computing environment, as to whether that computing environment is available to theclient machine 10. In one embodiment, the collected information is transmitted to theclient machine 10, the transmitted information displayable at theclient machine 10 as icons in a graphical user interface window representing computing environments available to the client system. In another embodiment, the collected information is transmitted to theclient machine 10, the transmitted information displayable at theclient machine 10 as icons in a graphical user interface window representing computing environments unavailable to theclient machine 10. - In some embodiments, an enumeration of available computing environments is presented to a user of the
client machine 10. In other embodiments, an enumeration of applications is presented to a user of theclient machine 10. In one of these embodiments, a physical machine provides access to an enumerated application. In another of these embodiments, a virtual machine provides access to an enumerated application. In still another of these embodiments, a virtual machine provides access to a computing environment from which a user of theclient machine 10 may access the application. In still other embodiments, an enumeration of standard operating environments (such as a guest operating system pre-configured with a plurality of application programs) is provided to the user of theclient machine 10. - In some embodiments, the enumeration of available resources includes an enumeration of a plurality of actions associated with a requested resource. In one of these embodiments, the enumeration of the plurality of actions enables the user to request execution of a computing environment. In another of these embodiments, the enumeration of the plurality of actions enables the user to request cloning of a computing environment. In still another of these embodiments, the enumeration of the plurality of actions enables the user to request shutdown of a computing environment. In yet another of these embodiments, the enumeration of the plurality of actions enables the user to request that a computing environment be rebooted. In some embodiments, the enumeration of the plurality of actions enables the user to request that a snapshot be taken of an existing state of a computing environment. In other embodiments, the enumeration of the plurality of actions enables the user to request that a previous snapshot of a computing environment be provided.
- A request is transmitted for access to a particular resource (step 206). In one embodiment, a user of the
client machine 10 requests a resource responsive to a received enumeration of available resources. In another embodiment, the user requests a resource independent of a received enumeration. In some embodiments, the user requests a resource by selecting a graphical representation of the resource presented on theclient machine 10 by a client agent. In other embodiments, the user requests a resource by selecting a graphical or textual representation of the resource presented to the user on a web server or otherremote machine 30′″. - In some embodiments, the user requests an action associated with a resource. In one of these embodiments, the user requests execution of the resource. In another of these embodiments, the user requests termination of the resource. In still another of these embodiments, the user requests transmission of the resource, including transmission across an application streaming session. In yet another of these embodiments, the user requests that a resource be shutdown. In other embodiments, a request to execute an application is received from the
client machine 10, the requested application requiring one of the computing environments. In still other embodiments, a request to access a file is received from theclient machine 10, the requested file requiring execution within one of the computing environments. - Still referring to
FIG. 2A , aremote machine 30 launches the Resource Neighborhood (RN) application and presents results of the RN application to theclient machine 10. Theremote machine 30 can launch theRN application 241 in response to arequest 202 by theclient machine 10 for an enumeration of available resources. Theremote machine 30 provides an enumeration of available resources to the client machine 10 (step 204). Theclient machine 10 andremote machine 30′ establish a connection (arrows 245 and 246). By this connection, theremote machine 30′ can transfer the executable code of the particular application to theclient machine 10, when theclient machine 10 andremote machine 30′ are operating according to the client-based computing model. Alternatively, theremote machine 30′ can execute the particular application and transfer the graphical user interface to theclient machine 10, when theclient machine 10 andremote machine 30′ are operating according to the server-based computing model. In some embodiments theremote machine 30′ can execute theResource Neighborhood application 241 and push the results back to theclient machine 10 so that when theclient machine 10 requests the Resource Neighborhood application, the Resource Neighborhood results are already available at theclient machine 10. -
FIG. 2B shows another embodiment of a system in which theclient machine 10 initiates execution of theResource Neighborhood application 241 and aremote machine 30 presents the results of theRN application 241 to theclient machine 10. Theclient machine 10 launches the Resource Neighborhood application (e.g., by clicking on a Resource Neighborhood icon representing the application 241). In response, theclient machine 10 directs arequest 202 for the Resource Neighborhood application to theremote machine 30. Theremote machine 30 can execute theResource Neighborhood application 241, if the application is on theremote machine 30, and return the results to theclient machine 10. Alternatively, theremote machine 30 can indicate (arrow 204) to theclient machine 10 that theResource Neighborhood application 241 is available on another remote machine, in this exampleremote machine 30′. Theclient machine 10 andremote machine 30′ establish a connection (arrows 206 and 210) by which theclient machine 10 requests execution of theResource Neighborhood application 241. Theremote machine 30′ can execute theapplication 241 and transfer the results (i.e., the graphical user interface any audio output etc.) to theclient machine 10. -
FIG. 2C shows another embodiment of a system in which aclient machine 10 initiates execution of theResource Neighborhood application 241, in this example via the World Wide Web. Aclient machine 10 executes aweb browser application 280, such as NETSCAPE NAVIGATOR, manufactured by Netscape Communications, Inc. of Mountain View, Calif., INTERNET EXPLORER, manufactured by Microsoft Corporation of Redmond, Wash., or SAFARI, manufactured by Apple Computer of Cupertino, Calif. - The
client machine 10, via theweb browser 280, transmits arequest 282 to access a Uniform Resource Locator (URL) address corresponding to an HTML page residing onremote machine 10. In some embodiments the first HTML page returned 284 to theclient machine 10 by theremote machine 30 is an authentication page that seeks to identify theclient machine 10 or the user of theclient machine 10. - The authentication page allows the
client machine 10 to transmit user credentials, via theweb browser 280, to theremote machine 30 for authentication. Transmitted user credentials are verified either by theremote machine 30 or by anotherremote machine 30 in thefarm 38. This allows a security domain to be projected onto theremote machine 30. For example, if theremote machine 30 runs the WINDOWS NT operating system, manufactured by Microsoft Corporation of Redmond, Wash., and the authenticating machine runs the UNIX operating system, the UNIX security domain may be said to have been projected onto theremote machine 30. User credentials may be transmitted “in the clear,” or they may be encrypted. For example, user credentials may be transmitted via a Secure Socket Layer (SSL) connection, which encrypts data using algorithms such as the RC4 algorithm, manufactured by RSA Security Inc. of Bedford, Mass. - In some embodiments, an access control decision is made based on received information about the user resources available to the user of the client system are identified responsive to the access control decision. In other embodiments, a policy is applied to the received information about the user. The
remote machine 30 may verify the user credentials received from theclient machine 10. Alternatively, theremote machine 30 may pass the user credentials to another remote machine for authentication. In this embodiment, the authenticating server may be in a different domain from theremote machine 30. Authenticated user credentials of theclient machine 10 may be stored at theclient machine 10 in a per-session cookie, in fields that are not displayed by theweb browser 280, or in any other manner common in maintenance of web pages. In some embodiments, amachine farm 38 with which theremote machine 30 is associated may allow guest users, i.e., users that do not have assigned user credentials, to access resources hosted by thefarm 38. In these embodiments, the authentication page may provide a mechanism for allowing aclient machine 10 to identify that it is a guest user, such as a button or menu selection. In other of these embodiments, theremote machine 30 may omit the authentication page entirely. - Still referring to
FIG. 2C , once theclient machine 10 is authenticated by theremote machine 30, the remote machine prepares and transmits to theclient machine 10 an HTML page 288 that includes aResource Neighborhood window 258 in which appearsgraphical icons client machine 10 has access. A user ofclient machine 10 requests access to a resource represented byicon 257 by clicking thaticon 257. -
FIG. 3A shows one embodiment of a process of communication among theclient machine 10 and multipleremote machines FIG. 3A , theclient machine 10 has anactive connection 372 with theremote machine 30′. Theclient machine 10 andremote machine 30′ can use theactive connection 372 to exchange information regarding the status or execution of a first resource. User credentials may be stored at theclient machine 10. Such storage of the user credentials can be in cache memory or persistent storage. - In this embodiment, the Resource Neighborhood application (not shown on
FIG. 3A ) runs on theclient machine 10. The client machine display has aResource Neighborhood window 258 in which appears agraphical icon 257 representing a second resource. A user of theclient machine 10 can access the second resource by double-clicking theicon 257 with the mouse. The request passes to theremote machine 30 viaconnection 359. Theremote machine 30 indicates to theclient machine 10 viaconnection 359 that the sought-after resource is available onremote machine 30′. Theclient machine 10 signals theremote machine 30′ to establish asecond connection 370. Theremote machine 30′ requests the user credentials from theclient machine 10 to authenticate access to the second resource. Upon a successful authentication, theclient machine 10 andremote machine 30′ establish thesecond connection 370 and exchange information regarding status of or execution of the second resource. In some embodiments, the remote machine does not request user credentials to establish thesecond connection 370. In these embodiments, theremote machine 30′ may use the credentials supplied by the user ofclient machine 10 to establish theconnection 372 to also establish thesecond connection 370. Accordingly, theclient machine 10 and theremote machine 30′ communicate with each other over multiple connections. -
FIG. 3B shows one embodiment of a system of communication among theclient machine 10, masterremote machine 30, andservers client machine 10 has anactive connection 373 with theremote machine 32. Theclient machine 10 andremote machine 32 can use theactive connection 373 to exchange information regarding the status of or execution of a first resource. User credentials may be stored at theremote machine 32 in cache memory or in persistent storage. - In this embodiment, the Resource Neighborhood application runs on the
remote machine 32. Theremote machine 32 includes software providing a server-basedclient engine 62, enabling theremote machine 32 to operate in the capacity of theclient machine 10. Theclient machine 10 display has aResource Neighborhood window 258 in which appeargraphical icons client machine 10 can access the second resource by double-clicking theicon 357. The request to launch the second resource passes to theremote machine 32 viaactive connection 373, and theremote machine 32 forwards the request to the master remote machine 30 (arrow 365). - The master
remote machine 30 indicates (arrow 365) to theremote machine 32 that the sought-after resource is available onserver 34. Theremote machine 32 contacts theserver 34 to establish a connection 366. To authenticate access to the application, theserver 34 obtains the user credentials of theclient machine 10 from theremote machine 32. Theremote machine 32 andserver 34 establish the connection (arrow 366) by which theremote machine 32 requests access to the second resource and theserver 34 returns the results to theremote machine 32. Theremote machine 32 forwards the results to theclient machine 10, where the results are displayed. Accordingly, the information exchanged between theclient machine 10 and theserver 34 “passes through” theremote machine 32. - Similarly, the
client machine 10 can launch the third resource by double-clicking theicon 357′. The request to launch the third resource passes to theremote machine 32. Theremote machine 32 forwards the request to the masterremote machine 30. In this example, the masterremote machine 30 indicates that theserver 36 can be used to access the third resource. - The
remote machine 32 and theserver 36 establish a connection (arrow 374) by which theremote machine 32 requests access to the third resource, and theserver 36 returns the results to theremote machine 32. To permit access to the third resource, theserver 36 can authenticate the user credentials of the user of theclient machine 10, which are obtained from theremote machine 32. Theremote machine 32 forwards the results to theclient machine 10 where the results are displayed. Accordingly, the results of accessing the third resource pass between theclient machine 10 and theserver 36 through theremote machine 32. -
FIG. 3C shows another embodiment of a system of communication among theclient machine 10, a masterremote machine 30, andservers client machine 10 has anactive connection 376 withserver 32. Theclient machine 10 andserver 32 can use theactive connection 376 to exchange information regarding the access to a first resource. Theclient machine 10 can store user credentials in cache memory or in persistent storage. - In this embodiment, the Resource Neighborhood application runs on the
server 32. Theclient machine 10 display has aResource Neighborhood window 258 in which appears agraphical icon 257 representing a second resource. A user of theclient machine 10 can access the second resource by double-clicking theicon 257. The request to access the second resource passes to theserver 32. Theserver 32 responds (i.e., “calls back”) to theclient machine 10 by returning resource-related information such as the name of the resource and capabilities needed by theclient machine 10 to access the second application. - With the information provided by the
server 32, theclient machine 10 then communicates with the masterremote machine 30 viaconnection 377 to determine the server for accessing the second resource. In this example, that server isserver 34. Theclient machine 10 then establishes a connection 378 to theserver 34.Server 34 requests the user credentials from theclient machine 10 to authenticate the user of theclient machine 10. Theclient machine 10 accesses the second resource on theserver 34, and theserver 34 returns the results to theclient machine 10 via the established connection 378. Accordingly, theclient machine 10 can have multiple active connections between the multiple servers. -
FIG. 3D shows one embodiment of a system of communication between theclient machine 10, aremote machine 30 that in this example acts as a web server, and a secondremote machine 30′. Theclient machine 10 authenticates itself to theremote machine 30 as described above in connection withFIG. 2C . In one embodiment, theremote machine 30 accesses anoutput display template 390, such as an SGML, HTML or XML file, to use as a base for constructing the Resource Neighborhood window to transmit to theclient machine 10. The Resource Neighborhood window may display an enumeration of resources available to the client. The enumeration of resources may include an enumeration of available application programs or computing environments. The template may be stored in volatile or persistent memory associated with theserver 30 or it may be stored in mass memory 392, such as a disk drive or optical device, as shown inFIG. 3D . - In this embodiment, the
template 390 is a standard SGML, HTML, or XML document containing Resource Neighborhood-specific tags that are replaced with dynamic information. The tags indicate to theserver 30 where in the output display to insert information corresponding to available resources, such as icon images. In one particular embodiment, the Resource Neighborhood-specific tags are embedded within comments inside a file, allowing the file to remain compatible with standard interpreters. In another embodiment, the Resource Neighborhood-specific tags are extensions of the markup language used as the base for the template. - Examples of HTML tags that may be used in a template are set forth below in Table 1:
-
TABLE 1 Tag Description ControlField field value This tag is used to set the value of data that either persists between Resource Neighborhood web pages, is set by the user, or is used to help in cross page navigation, such as user name, domain, password, template, and resource. DrawResourceNeighborhood This tag is used to draw a Resource Neighborhood display at this location in an output display. ResourceName This tag is replaced by the name of the published resource in the current context. WindowType This tag is replaced by the window type of the published resource in the current context. WindowHeight This tag is replaced by the window height of the published resource in the current context. WindowWidth This tag is replaced by the window width of the published resource in the current context. WindowScale This tag is replaced by the window scale of the published resource in the current context. WindowColors This tag is replaced by the color depth of the published resource in the current context. SoundType This tag is replaced by the sound setting of the published resource in the current context. VideoType This tag is replaced by the video setting of the published resource in the current context. EncryptionLevel This tag is replaced by the encryption level of the published resource in the current context. Icon This tag is replaced by the icon of the published resource in the current context. - Other tags can be provided to set control fields and to provide conditional processing relating to the Resource Neighborhood application.
- In one embodiment, the template is constructed dynamically using, for example, COLD FUSION, manufactured by Allaire Corp. of Cambridge, Mass. or ACTIVE SERVER PAGES manufactured by Microsoft Corporation of Redmond, Wash. Alternatively, the template may be static. The Resource Neighborhood application parses the template, replacing Resource Neighborhood-specific tags as noted above. Tags that are not Resource Neighborhood-specific are left in the file to be parsed by the browser program 80 executing on the
client 10. - In one embodiment, a template parser object is provided that accepts an HTML template as input, interprets Resource Neighborhood-specific tags present in the template, and outputs the original template with all Resource Neighborhood tags replaced with appropriate text. The template parser object can be passed a cookie, a URL query string, or a control field from a web server interface to provide the information with which Resource Neighborhood-specific tags should be replaced.
- In some embodiments, a web server receives a request from the
client machine 10 for an enumeration of available computing environments. In one of these embodiments, the web server executes an application to access data regarding the computing environments. In another of these embodiments, a page template is retrieved from a database. In still of these embodiments, a page is created, at the web server, describing a display of stored computing environment images available to theclient machine 10 responsive to the collected information and the retrieved page template, and the created page is transmitted to theclient machine 10, indicating to theclient machine 10 each computing environment available to theclient machine 10. In some embodiments, computing environment images may comprise virtual machine images, resource images, screenshots of suspended virtual machines, and other images selected by a user or administrator for presentation to the user. In yet another of these embodiments, an output display is created indicating each computing environment available to theclient machine 10 and transmitting the created output display to theclient machine 10. - In some embodiments, an output display is created comprising a page constructed in a markup language, the output display indicating each computing environment available to the client system and transmitted to the client system.
- In another embodiment, the Resource Neighborhood application allows scripts to access information via an application programming interface. Scripts may be written in, for example, VBScript or Jscript. In this embodiment, the scripting language is used to dynamically generate an output display using information returned by the application in response to queries posed by the script. Once the output display is generated, it is transmitted to
client machine 10 for display by the browser program 80. - A user of the
client machine 10 can access a resource by clicking anicon icon client machine 10 establishes a connection (arrow 394) with theremote machine 30′ identified as hosting the requested resource and exchanges information regarding access to the desired resource. In some embodiments, theconnection 394 is made using the Independent Computing Architecture (ICA) protocol, manufactured by Citrix Systems, Inc. of Fort Lauderdale, Fla. In other embodiments, the connection is made using: the RDP protocol, manufactured by Microsoft Corp. of Redmond, Wash.; the X11 protocol; or the Virtual Network Computing (VNC) protocol, manufactured by AT&T Bell Labs. Thus, theclient machine 10 may display the results of accessing the resource in a window separate from theweb browser 280, or it may “embed” application output within the web browser. -
FIG. 3E depicts an embodiment in which aremote machine 30 acts as an intermediary for amachine farm 38 and comprises abroker module 310, a transmitter 312, a receiver 314, and a transceiver 316. - The
broker module 310 accesses collected data regarding resources, including application programs, computing environments, and hardware resources. In some embodiments, thebroker module 310 accesses collected data regarding resources and determines for each resource whether that resource image is available to aclient machine 10. In some embodiments, the server further comprises a database storing the collected data. In one of these embodiments, thebroker module 310 determines for each resource whether that resource image is available to aclient machine 10 based on the collected data. In other embodiments, thebroker module 310 receives user credentials and determines for each resource whether that resource image is available to aclient machine 10 based on the user credentials and the collected data. - In some embodiments, the server further comprises an output display creation engine creating output displays indicating each resource available to the
client machine 10. In one of these environments, the output display creation engine creates a page describing a display of the resources available to a client system, the page created responsive to the collected information and a page template. - The transmitter 312 transmits accessed data to the
client machine 10 indicating to theclient machine 10 each resource determined to be available to theclient machine 10. In some embodiments, the transmitted data is displayable at the client system as icons in a graphical user interface window representing resources available to the client system. In other embodiments, the transmitted data is displayable at the client system as icons in a graphical user interface window representing resources unavailable to the client system. The receiver 314 receives a request to access one of the available resources. In some embodiments, the receiver receives user credentials from theclient machine 10. In other embodiments, the receiver receives a request to access an application program available through one of the available resources, such as an available computing environment. In still other embodiments, a database storing the collected information and the service module determines for each resource stored by the plurality of servers whether that resource image is available to aclient machine 10 based on the user credentials and the collected information. In yet other embodiments, a determination is made as to an availability of resources, such as virtual machines or application servers, providing access to the available resources. - The transceiver 316 provides a connection between the
client machine 10 and a virtual machine providing the requested resource. In some embodiments, the transceiver 316 provides a connection between theclient machine 10 and a virtual machine providing the requested resource and the transceiver 316 establishes a presentation-layer protocol connection. In one of these embodiments, the transceiver 316 establishes an X11 or VNC connection. In another of these embodiments, the transceiver 316 establishes an ICA connection. In still another of these embodiments, the transceiver 316 establishes an RDP connection. - An intermediary machine of the sort just described may be used as any one of the
remote machine 30 described above inFIGS. 1-1B , 2A-2B, and 3A-3D. -
FIG. 4 illustrates one embodiment of program components for a client-based implementation of the Resource Neighborhood application. A client-based implementation of theResource Neighborhood application 416 can be used in a network using either the server-based computing model in which the servers execute the Resource Neighborhood application or in a client-based computing model in which theclient machine 10 executes the Resource Neighborhood application locally. The Resource Neighborhood application includes a Resource Neighborhood Service (RNSVC)component 444, aresource database component 448, a Resource Neighborhood Application Program Interface (RNAPI) component 452, a Resource Neighborhood User Interface component 456, and a local cache 460. - The
remote machine 30, for example, includes the service component (RNSVC) 444 and theresource authorization cache 448. Theclient machine 10, which is a representative example of aclient machine 10 that can support a client-based implementation of the Resource Neighborhood application, includes the application program interface RNAPI 452, the user interface user interface component 456, and the local cache 460 components. The RNAPI 452 communicates with the user interface component 456 and the local cache 460. TheRNSVC 444 communicates with theresource authorization cache 448 and with the RNAPI 452 on theclient machine 10 via communications link 462. - The communications link 462 can be established by, for example, using the ICA protocol, the RDP protocol, the X11 protocol, the VNC protocol, or any other suitable presentation-level protocol designed to run over industry standard transport protocols, such as TCP/IP, IPX/SPX, NetBEUI, using industry-standard network protocols, such as ISDN, frame relay, and asynchronous transfer mode (ATM) and which provides for virtual channels, which are session-oriented transmission connections that can be used by application-layer code to issue commands for exchanging data. The communications link 462 may also be established by protocols that support RPC or RPC-equivalents such as SOAP and HTTP. The communications link 462 may also be a communications link 150 as described above. The virtual channel commands are designed to be closely integrated with the functions of client machines. The ICA protocol can support the Resource Neighborhood virtual channel.
- The Resource Neighborhood virtual channel protocol can include four groups of commands:
- (1) Initialization-related commands;
- (2) Single authentication related commands that can be supported by each client machine wanting a copy of the user credentials;
- (3) Resource data related commands for implementing the Resource Neighborhood user interface; and
- (4) Resource launch callback-related commands for running the user interface on a remote machine.
- The
resource authorization cache 448 may be a cache of the authorized user and group information for all the public (i.e., published) resources in amachine farm 38 or in a group of trusted domains. Each remote machine in amachine farm 38 can maintain its own resource-related information in persistent storage and build up theresource authorization cache 448 in volatile storage. In another embodiment, all collected resource-related information in theresource authorization cache 448 can be stored in persistent storage and made accessible to each other server in themachine farm 38. Theresource authorization cache 448 can be implemented in a proprietary format (e.g., as a linked list in memory) or using Novell's Directory Services (NDS) or any directory service adhering to the X.500 standard defined by the International Telecommunication Union (ITU) for distributed electronic directories. Theresource authorization cache 448 may be implemented as a standard relational database. - The
resource authorization cache 448 includes a list of remote machines. Each remote machine in the list has an associated set of resources. Associated with each resource is resource-related information that can include the resource name, a list of remote machines, and client users that are authorized to use that resource. An overly-simplified example of the resource-related information maintained in the database is illustrated by the following Table 2. Users A and B are users of theclient machines 10, “n/a” indicates that a desired application program is hosted, but is not available to client machine users, and “-” indicates that the application program is not hosted. -
TABLE 2 Remote Customer Word Machine Name SpreadSheet Database Processor Calculator Server 30 User A User B n/a — Server 32User B n/a User A — Server 34— — — User A User B - Table 2 shows: a list of
servers server 30 hosts the Spreadsheet program, the Customer Database and the Word Processor. User A is authorized to use the Spreadsheet, User B is authorized to use the Customer Database, and no users are authorized to use the Word Processor. It is to be understood that other techniques can be used to indicate who is authorized to use a particular application. For example, the user information stored in the database can be used to indicate those users who are unauthorized to use a particular application rather than those who are authorized, or to indicate that multiple users may access a resource on aremote machine 30, or to indicate that a predetermined group of users are authorized to access a particular resource. Although Table 2 depicts an embodiment in which the resources that are available are application programs, a similar technique may be used for computing environments and other resources. - To obtain the information that is stored in the
resource authorization cache 448, theremote machine 30 obtains the resource-related information from each other machine in themachine farm 38 regarding the resources on those remote machines, including control information that indicates which client users and remote machines are permitted to access each particular resource. The resource-related information maintained in the database may or may not persist across re-boots of theremote machine 30. - Each
remote machine 30 having the Resource Neighborhood application installed thereon executes theRNSVC software 444. TheRNSVC software 444, operating on eachremote machine 30 establishes a communication link (e.g. a named pipe) with at least one other and, in some embodiments, each otherremote machine 30. Theremote machines 30 exchange resource-related information on the communications links. In another embodiment, theRNSVC software 444 collects the resource-related information from the otherremote machine 30 in themachine farm 38 through remote registry calls (e.g., theservice component 444 transmits a datagram to otherremote machine 30 in thefarm 38 requesting the resource-related information corresponding to the resources hosted by those remote machine 30). In some embodiments the resource authorization cache is populated by system administrators of by programs and scripts communicating withremotes machines 30. TheRNSVC 444 software also maintains the relationships of groups and users to published resources in theresource authorization cache 448 and accesses the information when authenticating a client user. An administrator of theremote machine 30 can use a user interface to configure theRNSVC 444. - Other functions of the
RNSVC software 444 include implementing the services and functions requested by the RNAPI 452 and communicating with the RNAPI 452 on theclient machine 10 using a Resource Neighborhood virtual channel driver (VCRN). The VCRN operates according to the Resource Neighborhood virtual channel protocol described. - The RNAPI 452 is a set of software functions or services that are used by the Resource Neighborhood application to perform various operations (e.g., open windows on a display screen, open files, and display message boxes). The RNAPI 452 provides a generic mechanism for accessing user interface elements (e.g., icons) produced by running the Resource Neighborhood application and objects in a legacy (i.e., predecessor or existing for some time) client user interface. When the
client machine 10 accesses an available resource, the accessing mechanism can launch the resource on theremote machine 30, if necessary (e.g., when theclient machine 10 is unable to locally execute the application). - The RNAPI 452 provides all published resource information to the user interface component 456 for display on the screen 12 (
FIG. 1 ) of theclient machine 10. The RNAPI 452 also managesmachine farm 38 logons in a local database of logon credentials (e.g., passwords) for users of theclient machine 10 to support the single authentication feature. Credentials may or may not be persistent across a reboot (power-off and on cycles) of theclient machine 10. - The RNAPI 452 provides automatic and manual management for Resource Neighborhood objects stored in the local cache 460. The local cache 460 can either be refreshed manually by the user of the
client machine 10, or at a user-definable refresh rate, or by the server at any time during a connection. In a Windows implementation, the RNAPI 452 can build remote application file resource associations and manage the “Start” menu and desktop icons for resource object shortcuts. - The user interface module 456 interfaces the RNAPI 452 and can be a functional superset of an existing client user interface (e.g., Remote Resource Manager). The user interface module 456 accesses the information stored in the local cache 460 through the RNAPI 452 and visually presents that information to the user on the display screen 12 (
FIG. 1 ) of theclient machine 10. The displayed information is a mixture of information generated by a user of theclient machine 10 and information obtained by the Resource Neighborhood application. The user interface module 456 can also show the user all resources that the user is currently accessing and all active and disconnected sessions. - In a Windows-based embodiment, the user interface module 456 can present a variety of graphical components, such as windows and pull-down menus, to be displayed on the display screen 12 (
FIG. 1 ). A display of a combination of such graphical user interface components is generally referred to as a “desktop.” A desktop produced by the user interface module 456 can include a Resource Neighborhood window displaying the neighborhood of resources available to the user of theclient machine 10. These resources may be a filtered combination of the published resources hosted by amachine farm 38. The user interface module 456 can generate a Resource Neighborhood window for eachmachine farm 38 or merge the resources fromdifferent machine farms 38 under a single Resource Neighborhood window. - At a top level, the Resource Neighborhood window includes a folder for each
machine farm 38. Clicking on one of the folders produces a window containing a representation (e.g., an icon) of each hosted resource available to the user, e.g., seeFIGS. 6A and 6B . The Resource Neighborhood window becomes the focal point for accessing published resources, and the user interface module 456 can be used to access resources and launch applications through the RNAPI 452. For example, the user of theclient machine 10 can use the mouse 18 (FIG. 1 ) to select one of the displayed icons and launch the associated resource. - A feature of a client-based implementation is that the user can browse the objects displayed in the Resource Neighborhood window although the client machine is offline, that is, the
connection 462 is inactive. Also, a user of theclient machine 10 can drag application objects and folders out of the Resource Neighborhood window and into other graphical components (e.g., other windows, folders, etc.) of the desktop. -
FIG. 5 shows one embodiment of the program components for a server-based implementation of the Resource Neighborhood application. The components include a Service (RNSVC) component 544′, a Resource Database component 548′, an Application Program Interface (RNAPI)component 552′, a User Interface component 556′ and a local cache 560′. Each software component 544′, 548′, 552′, 556′, and 560′ is installed on theapplication server 30′. The software components for the server-based implementation correspond to the software components for the client-based implementation ofFIG. 4 . The functionality of each server-based software component is similar to the client-based counterpart, with differences or added capabilities described below. The RNSVC 544′ communicates with the resource database 548′ and with theRNAPI 552′ using local procedure calls. TheRNAPI 552′ also communicates with the user interface module 556′ and the local cache 560′. - Similar to that described in
FIG. 4 for theclient machine 10, theclient machine 10 logs on to the network 40 (FIG. 1 ), theserver 30′ develops and maintains a database containing the resource related information collected from the other machines in themachine farm 38, and a communication link is established between theserver 30′ and theclient machine 20. Theapplication server 30′ may be in communication with theclient machine 10 via anICA connection 562′. - To run the Resource Neighborhood application in a server-based implementation, the user of the
client machine 10 connects to an initial desktop (at theserver 30′) and launches the Resource Neighborhood application from within that desktop environment. The connection to the initial desktop can occur automatically, e.g., via a logon script of theclient machine 20, via an entry in a Startup group, or by another centrally managed server specific mechanism. All remote application management and launching is accomplished through this initial desktop. - Similar to that described in
FIG. 4 for theserver 30, theserver 30′ uses the user credentials to determine those resources that the user of theclient machine 10 is authorized to use. A Resource Neighborhood graphical window is returned to theclient machine 10 and displayed on the client screen 22 (FIG. 1 ). This window can contain icons representing the available and, possibly, the unavailable resources that are in the Resource Neighborhood of theclient machine 20. - In one embodiment, the web-based Resource Neighborhood application includes a group of objects that manage various aspects of a resource. In one embodiment, the Resource Neighborhood application includes three primary object classes that “plug in” to a web server: a gateway object class; a credentials object class; and a resources object class. In some specific embodiments, the object classes are provided as JavaBeans. The three primary object classes facilitate: validation of user credentials into a server farm; generation of lists of published resources that a specified user may access; provisioning of detailed information about a specific published resource; and conversion of resource application information into a format compatible with the protocol over which connection will be made.
- When provided as JavaBeans, the objects can be accessed in a number of different ways. For example, they may be compiled as COM objects and made available to the web server as ActiveX components. In another embodiment, the JavaBeans can be used in their native form, such as when the server uses Java Server Pages technology. In yet another embodiment, the JavaBeans can be instantiated and used directly in a Java Servlet. In still another embodiment, the
remote machine 30 can instantiate the JavaBeans as COM objects directly. - A credentials object class manages information necessary to authenticate a user into a
target machine farm 38. A credentials object passes stored user credentials to other Resource Neighborhood objects. In some embodiments, the credentials object is an abstract class that cannot be instantiated and represents a user's credentials. Various class extensions may be provided to allow different authentication mechanisms to be used, including biometrics, smart cards, token-based authentication mechanisms such as challenge-response and time-based password generation, or others. For example, a “clear text credentials” extension may be provided that stores a user's name, domain, and password in plain text. - A gateway object class handles communications with a
target machine farm 38. In one embodiment, the gateway object class is provided as an abstract Java class that cannot be instantiated. A particular gateway object may retrieve resource information by communicating with amachine farm 38 using a particular protocol, reading cached resource information, a combination of these two methods, or other various methods. - As noted above, the gateway object class may cache information to minimize communication with a
target machine farm 38. Extensions to the gateway object may be provided to communicate with themachine farm 38 over specific protocols, such as HTTP. In one embodiment, an extension class is provided that allows the gateway object to communicate with themachine farm 38 via WINDOWS NT named pipes. The gateway object may provide an application programming interface hook that allows other Resource Neighborhood objects to query the object for application information. - A resources object class contains information about published resources and returns information about resources hosted by the
machine farm 38 in order to create the Resource Neighborhood web page. The resources object class creates objects representing resources by retrieving information relating to the resources, either from an object created by the gateway object or directly from the machines in themachine farm 38. A resources object acts as a container for certain properties of the resource, some settable and some not settable, such as: the name of the resource (not settable); the width of the client window, in pixels, for this resource (settable); the height of the client window, in pixels, for this resource (settable); the number of colors to use when connecting to the resource (settable); the severity of audio bandwidth restriction (settable); the level of encryption to use when connecting to the resource (settable); the level of video to use when connecting to this resource (settable); whether the resource should be placed on a client's start menu (settable); whether the resource should be placed on the client's desktop (settable); the identity of the Resource Neighborhood folder to which the resource belongs (settable); the description of the resource (settable); the source of the graphics icon file for the resource (settable); the type of window that should be used when connecting to the resource (not settable); and whether to override default parameters for the object. -
FIG. 6A is a screenshot of one embodiment of Resource Neighborhood window 620 that can be displayed on thescreen 12, 22 (FIG. 1 ) of aclient machine window 120 includesgraphical icons 622. Eachicon 622 represents a resource that is hosted by one of the machines in amachine farm 38. Each represented resource is available to the user of theclient machine 10. The user can select one of the resources using the mouse 18, 28 orkeyboard 14, 24. -
FIG. 6B is a screenshot of another embodiment of aResource Neighborhood window 624 that can be displayed on thescreen 12, 22 (FIG. 1 ) of aclient machine window 624 includesgraphical icons icon machine farm 38. Each resource represented by one of theicons 626 is available to the user of theclient machine 10. The user can select one of the resources using the mouse 18, 28 orkeyboard 14, 24. For web-based Resource Neighborhood environments, the screenshots ofFIGS. 6A and 6B are similar, except thaticons - Each resource represented by one of the
icons 628 is unavailable to the user of theclient machine 10, although such resources are present in the server farm. The unavailability of these resources can be noted on the display screen (e.g., “X”s can be drawn through the icons 628). An attempt to access such a resource can trigger a message indicating that the user is not authorized to access the resource. Alternatively, the attempt may invoke a method allowing the user of theclient machine 10 to request access to the resource. - In some embodiments, the resource comprises a computing environment. In one of these embodiments, a connection is established between the
client machine 10 and a virtual machine hosting the requested computing environment. In one embodiment, a presentation layer protocol is used in establishing the connection between the client system and the virtual machine. In another embodiment, the X11 protocol is used in establishing the connection. In still another embodiment, the Remote Desktop Protocol (RDP) is used in establishing the connection. In yet another embodiment, the Independent Computing Architecture (ICA) protocol is used in establishing the connection. - In some embodiments, a connection is established between the
client machine 10 and a physical machine, such as a traditional workstation or server, hosting the requested computing environment. In other embodiments, a connection is established between theclient machine 10 and a hardware partition hosting the requested computing environment. - In some embodiments, an enumeration of a plurality of resources available to the
client machine 10 is provided (step 204) responsive to a determination by a policy engine regarding whether and how a client machine may access a resource. The policy engine may collect information about the client machine prior to making the determination. Referring now toFIG. 7A , one embodiment of a computer network is depicted which includes aclient machine 10, amachine farm 38, acollection agent 704, apolicy engine 706, apolicy database 708, and aresource server 30′. In one embodiment, thepolicy engine 706 is aremote machine 30. Although only oneclient machine 10,collection agent 704,policy engine 706,machine farm 38, andresource server 30′ are depicted in the embodiment shown inFIG. 7A , it should be understood that the system may provide multiple ones of any or each of those components. - In brief overview, when the
client machine 10 transmits the policy engine 706 arequest 206 for a resource enumeration, thecollection agent 704 communicates with theclient machine 10, retrieving information about theclient machine 10, and transmits theclient machine information 712 to thepolicy engine 706. Thepolicy engine 706 makes an access control decision by applying a policy from thepolicy database 708 to the receivedinformation 712. - In more detail, the
client machine 710 transmits to the policy engine 706 arequest 206 for resource enumeration. In one embodiment, thepolicy engine 706 resides on aresource server 30′. In another embodiment, thepolicy engine 706 resides on aremote machine 30. In still another embodiment, aresource server 30′ receives therequest 206 from theclient machine 10 and transmits therequest 206 to thepolicy engine 706. In yet another embodiment, theclient machine 10 transmits arequest 206 for resource enumeration to an intermediateremote machine 30′″ (not shown), which transmits therequest 206 to thepolicy engine 706. - In some embodiments, the
client machine 10 transmits therequest 206 over a network connection such as those described above. Upon receiving the request, thepolicy engine 706 initiates information gathering by thecollection agent 704. Thecollection agent 704 gathers information regarding theclient machine 10 and transmits theinformation 712 to thepolicy engine 706. - In some embodiments, the
collection agent 704 gathers and transmits theinformation 712 over a network connection. In some embodiments, thecollection agent 704 comprises bytecode, such as an application written in the bytecode programming language JAVA. In some embodiments, thecollection agent 704 comprises at least one script. In those embodiments, thecollection agent 704 gathers information by running at least one script on theclient machine 10. In some embodiments, the collection agent comprises an Active X control on theclient machine 10. An Active X control is a specialized Component Object Model (COM) object that implements a set of interfaces that enable it to look and act like a control. - In one embodiment, the
policy engine 706 transmits thecollection agent 704 to theclient machine 10. In some embodiments, thepolicy engine 706 requires another execution of thecollection agent 704 after thecollection agent 704 has transmittedinformation 712 to thepolicy engine 706. In some of these embodiments, thepolicy engine 706 requires another execution of thecollection agent 704 because thepolicy engine 706 may haveinsufficient information 712 to determine whether theclient machine 10 satisfies a particular condition. In other embodiments, thepolicy engine 706 requires a plurality of executions of thecollection agent 704 in response to receivedinformation 712. - In some embodiments, the
policy engine 706 transmits instructions to thecollection agent 704 determining the type of information thecollection agent 704 gathers from theclient machine 10. In those embodiments, a system administrator may configure the instructions transmitted to thecollection agent 704 from thepolicy engine 706. This provides greater control over the type of information collected. This also expands the types of access control decisions that thepolicy engine 706 can make, due to the greater control over the type of information collected. Thecollection agent 704 gathersinformation 712 including, without limitation, machine ID of theclient machine 10, operating system type, existence of a patch to an operating system, MAC addresses of installed network cards, a digital watermark on the client device, membership in an Active Directory, existence of a virus scanner, existence of a personal firewall, an HTTP header, browser type, device type, network connection information such as internet protocol address or range of addresses, machine ID of theremote machine 30, date or time of access request including adjustments for varying time zones, and authorization credentials. - In some embodiments, the device type is a personal digital assistant. In other embodiments, the device type is a cellular telephone. In other embodiments, the device type is a laptop computer. In other embodiments, the device type is a desktop computer. In other embodiments, the device type is an Internet kiosk. In still other embodiments, the device type is a game console.
- In some embodiments, the digital watermark includes data embedding. In some embodiments, the watermark comprises a pattern of data inserted into a file to provide source information about the file. In other embodiments, the watermark comprises hashed data files to provide tamper detection. In other embodiments, the watermark provides copyright information about the file.
- In some embodiments, the network connection information pertains to bandwidth capabilities. In other embodiments, the network connection information pertains to the Internet Protocol address of the
client machine 10. In still other embodiments, the network connection information consists of the Internet Protocol address of theclient machine 10. In one embodiment, the network connection information comprises a network zone identifying the logon agent to which theclient machine 10 provided authentication credentials. - In some embodiments, the authorization credentials include a number of types of authentication information, including without limitation, user names, client names, client addresses, passwords, Personal Identification Numbers (PINs), voice samples, one-time passcodes, biometric data, digital certificates, tickets, etc. and combinations thereof. After receiving the gathered
information 712, thepolicy engine 706 makes an access control decision based on the receivedinformation 712. - Referring now to
FIG. 7B , a block diagram depicts one embodiment of apolicy engine 706, including afirst component 720, including acondition database 722 and alogon agent 724, and asecond component 730, including apolicy database 732. Thefirst component 720 applies a condition from thecondition database 722 toinformation 712 received aboutclient machine 10 and determines whether the receivedinformation 712 satisfies the condition. - In some embodiments, a condition may require that the
client machine 10 execute a particular operating system to satisfy the condition. In other embodiments, a condition may require that theclient machine 10 execute a particular operating system patch to satisfy the condition. In still other embodiments, a condition may require that theclient machine 10 provide a MAC address for each installed network card to satisfy the condition. In some embodiments, a condition may require that theclient machine 10 indicate membership in a particular Active Directory to satisfy the condition. In another embodiment, a condition may require that theclient machine 10 execute a virus scanner to satisfy the condition. In other embodiments, a condition may require that theclient machine 10 execute a personal firewall to satisfy the condition. In some embodiments, a condition may require that theclient machine 10 comprise a particular device type to satisfy the condition. In other embodiments, a condition may require that theclient machine 10 establish a particular type of network connection to satisfy the condition. - If the received information satisfies a condition, the
first component 720 stores an identifier for that condition in adata set 726. In one embodiment, the received information satisfies a condition if the information makes the condition true. For example, a condition may require that a particular operating system be installed. If theclient machine 10 has that operating system, the condition is true and satisfied. In another embodiment, the received information satisfies a condition if the information makes the condition false. For example, a condition may address whether spyware exists on theclient machine 10. If theclient machine 10 does not contain spyware, the condition is false and satisfied. - In some embodiments, the
logon agent 724 resides outside of thepolicy engine 706. In other embodiments, thelogon agent 724 resides on thepolicy engine 706. In one embodiment, thefirst component 720 includes alogon agent 724, which initiates the information gathering aboutclient machine 10. In some embodiments, thelogon agent 724 further comprises a data store. In these embodiments, the data store includes the conditions for which the collection agent may gather information. This data store is distinct from thecondition database 722. - In some embodiments, the
logon agent 724 initiates information gathering by executing thecollection agent 704. In other embodiments, thelogon agent 724 initiates information gathering by transmitting thecollection agent 704 to theclient machine 10 for execution on theclient machine 10. In still other embodiments, thelogon agent 724 initiates additional information gathering after receivinginformation 712. In one embodiment, thelogon agent 724 also receives theinformation 712. In this embodiment, thelogon agent 724 generates thedata set 726 based upon the receivedinformation 712. In some embodiments, thelogon agent 724 generates thedata set 726 by applying a condition from thedatabase 722 to the information received from thecollection agent 704. - In another embodiment, the
first component 720 includes a plurality oflogon agents 724. In this embodiment, at least one of the plurality oflogon agents 724 resides on each network domain from which aclient machine 10 may transmit aresource request 710. In this embodiment, theclient machine 10 transmits theresource request 710 to aparticular logon agent 724. In some embodiments, thelogon agent 724 transmits to thepolicy engine 706 the network domain from which theclient machine 10 accessed thelogon agent 724. In one embodiment, the network domain from which theclient machine 10 accesses alogon agent 724 is referred to as the network zone of theclient machine 10. - The
condition database 722 stores the conditions that thefirst component 720 applies to received information. Thepolicy database 732 stores the policies that thesecond component 730 applies to the receiveddata set 726. In some embodiments, thecondition database 722 and thepolicy database 732 store data in an ODBC-compliant database. For example, thecondition database 722 and thepolicy database 732 may be provided as an ORACLE database, manufactured by Oracle Corporation of Redwood Shores, Calif. In other embodiments, thecondition database 722 and thepolicy database 732 can be a Microsoft ACCESS database or a Microsoft SQL Server database, manufactured by Microsoft Corporation of Redmond, Wash. - After the
first component 720 applies the received information to each condition in thecondition database 722, the first component transmits thedata set 726 tosecond component 730. In one embodiment, thefirst component 720 transmits only thedata set 726 to thesecond component 730. Therefore, in this embodiment, thesecond component 730 does not receiveinformation 712, only identifiers for satisfied conditions. Thesecond component 730 receives thedata set 726 and makes an access control decision by applying a policy from thepolicy database 732 based upon the conditions identified withindata set 726. - In one embodiment,
policy database 732 stores the policies applied to the receivedinformation 712. In one embodiment, the policies stored in thepolicy database 732 are specified at least in part by the system administrator. In another embodiment, a user specifies at least some of the policies stored in thepolicy database 732. The user-specified policy or policies are stored as preferences. Thepolicy database 732 can be stored in volatile or non-volatile memory or, for example, distributed through multiple servers. - Using the
policy engine 706 as just described, an access control decision based upon information received about aclient machine 10 is made. Upon receiving gathered information about theclient machine 10, thepolicy engine 706 generates a data set based upon the information. The data set contains identifiers for each condition satisfied by the receivedinformation 712. Thepolicy engine 706 applies a policy to each identified condition within thedata set 726. That application yields an enumeration of resources which theclient machine 10 may access. In some embodiments, the enumeration of resources includes an enumeration of levels of access to the resource. In one of these embodiments, a plurality of allowable actions associated with the resource is enumerated. In another of these embodiments, a plurality of methods of execution of the resource is enumerated. Thepolicy engine 706 then presents that enumeration to theclient machine 10. In some embodiments, as described above in connection withFIGS. 6A and 6B , thepolicy engine 706 creates a Hypertext Markup Language (HTML) document used to present the enumeration to the client machine. - In some embodiments, the
policy engine 706 transmits the enumeration to a differentremote machine 30. In one of these embodiments, theremote machine 30 transmits the enumeration to theclient machine 10. In another of these embodiments, theremote machine 30 applies additional policies to the enumeration. In still another of these embodiments, the remote machine is an appliance such as an application gateway or a firewall. In some of these embodiments, thepolicy engine 706 transmits an assigned level of action applicable to a requested resource to aremote machine 30 functioning as a broker server. The broker server establishes, responsive to the assigned level of access, a connection between theclient machine 10 and a computing environment providing the requested resource. - Referring now to
FIG. 8 , a flow diagram depicts one embodiment of the steps taken to provide access to a resource. In brief overview, a request for access to a resource is received (step 802). A method for providing access to the resource is identified (step 804). An application execution server may be selected to provide access to the resource (step 806). A virtualized environment may be selected to provide access to a resource (step 808). An application streaming service may be selected to provide access to the resource (step 816). If the virtualized environment is selected to provide access to the resource, an execution machine is identified (step 810). A virtual machine is selected (step 812). The virtual machine is configured (step 814). Access to the resource is provided (step 818). - Still referring to
FIG. 8 , and in more detail, a request for access to a resource is received (step 802). In one embodiment, aremote machine 30 receives the request. In some embodiments, theremote machine 30 is an intermediate broker server. In other embodiments, theremote machine 30 is a gateway. In still other embodiments, theremote machine 30 is a policy engine. In yet other embodiments, theremote machine 30 is an appliance. - In one embodiment, the
remote machine 30 verifies that the user is authorized to access the resource. In still another embodiment, theremote machine 30 receives with the request information verifying authorization for access by the user. - In one embodiment, the
remote machine 30 receives a request for an application program. In another embodiment, theremote machine 30 receives a request for access to a file. In yet other embodiments, theremote machine 30 receives a request for access to a computing environment. In one of these embodiments, the computing environment is a desktop environment from which theclient machine 10 may execute application programs. In another of these embodiments, the computing environment provides access to one or more application programs. In some embodiments, theremote machine 30 receives a request for access to a computing environment supported by a plurality of hardware requirements. In some embodiments, aremote machine 30 functioning as deployment system receives a request for access to a resource, such as execution of an application program, from aclient machine 10. - A method for providing access to the resource is identified (step 804). In one embodiment, a
remote machine 30 consults a database to identify the method for providing access. In another embodiment, aremote machine 30 consults a policy or rules database to identify the method for providing access. In still another embodiment, aremote machine 30 receives from a policy engine an identification of a method to select. - For embodiments in which the resource is an application program, a policy may allow execution of the application program on the
client machine 10. In another of these embodiments, a policy may enable theclient machine 10 to receive a stream of files comprising the application program. In this embodiment, the stream of files may be stored and executed in an isolation environment on the client. In still another of these embodiments, a policy may allow execution of the application program only on a remote machine, such as an application server, and require the remote machine to transmit application-output data to theclient machine 10. In yet another of these embodiments, a policy may allow execution of the application program only in a computing environment hosted on a virtual machine. In either of these cases, a stream of files comprising the application programs may be sent to the remote machine. - For embodiments in which the resource is a computing environment, a policy may allow installation of the computing environment on the
client machine 10. In another of these embodiments, a policy may enable theclient machine 10 to access a copy of the computing environment executing in a virtual machine on aremote machine 30. In still another of these embodiments, a policy may forbid the user of theclient machine 10 to access the requested computing environment and offer an alternative computing environment. - For embodiments in which the resource is a computing environment supported by a plurality of hardware resources, a policy may enable the
client machine 10 to access a copy of the computing environment executing in a virtual machine, which in turn executes on a hypervisor providing access to the requested plurality of hardware resources. In still another of these embodiments, a policy may forbid the user of theclient machine 10 to access the requested computing environment and offer a computing environment supported by an alternative plurality of hardware resources. - The
remote machine 30 may choose to provide access to an application execution server which provides access to a requested application program (step 806). The application execution server executes the application program and transmits application output data to theclient machine 10. The application execution server may transmit the application output data over a presentation layer protocol, such as X11, VNC, ICA, or RDP. - Referring back to step 804, the
remote machine 30 may choose to provide access to an application streaming service capable of transmitting a requested application program to the client machine 10 (step 816) for execution. Embodiments of application streaming services are described in greater detail below. - Referring back to step 804, the
remote machine 30 may choose to respond to the client's request by allowing access to a computing environment provided by a virtual machine, the computing environment providing access to the requested resource (step 808). The computing environment may be provided by a virtual machine launched into a hypervisor executing on aremote machine 30′. In other embodiments, theremote machine 30 determines to provision on theclient machine 10 a virtual machine providing access to the computing environment. - In embodiments where a
remote machine 30 determines to provide access to the requested resource via a virtualized environment, theremote machine 30 identifies an execution machine providing access to a computing environment requested by the client machine 10 (step 810). In one of these embodiments, theremote machine 30 identifies an execution machine capable of hosting the computing environment. In another of these embodiments, theremote machine 30 determines that the user requesting access to the computing environment lacks authorization to access the requested computing environment. Theremote machine 30 may identify an alternative computing environment which the user is authorized to access. In still another of these embodiments, theremote machine 30 identifies an execution machine on which a hypervisor provides access to a requested plurality of hardware and in which the requested computing environment may execute. - In other embodiments, the
remote machine 30 is an execution machine capable of hosting the computing environment. In some of these embodiments, the computing environment is installed on the execution machine. In others of these embodiments, a hypervisor on the execution machine emulates a plurality of hardware resources required by the requested computing environment and the computing environment is launched in the hypervisor. - In some embodiments, the
remote machine 30 identifies aremote machine 30′ functioning as an execution machine capable of providing access to the computing environment supported by a requested plurality of hardware resources. In one of these embodiments, theremote machine 30′ functions as an execution machine on which a hypervisor emulating the requested plurality of hardware resources executes and on which a computing environment supported by the hypervisor executes. - In some embodiments, an execution machine providing hardware resources, physical or virtual, capable of supporting a particular virtual machine is identified responsive to a load-balancing determination. In one of these embodiments, the execution machine is selected responsive to load-balancing information maintained by a
management server 30. In some embodiments, themanagement server 30 is a single machine. In still other embodiments, severalremote machines 30 may be capable of acting as a management server, but only one of such nodes is designated the management server. In some embodiments, a client request is directed to themanagement server 30 in the first instance. In other embodiments, aremote machine 30 queries themanagement server 30 to determine the identity of a suitable execution machine. - The master network
information server node 30 maintains a table of addresses for theremote machines 30′, 30″. In addition, the master networkinformation server node 30 receives messages from theremote machines 30′, 30″ indicating their level of activity, which may comprise CPU load or may comprise an identification of the number of a virtual machines currently hosted by aremote machine 30′, 30″. The level of activity of theremote machines 30′, 30″ is maintained in a table along with the address of each of theremote machines 30′, 30″. - For embodiments, in which a
single management server 30 is used, it is desirable to dynamically select a master networkinformation server node 30 from the availableremote machines 30 on the network. In this way, if theactive management server 30 fails, anew management server 30 may be selected as soon as the failure of theprevious management server 30 is detected. In one embodiment amanagement server 30 is selected by an election process among theremote machines 30. - In one embodiment, any machine (
client machine 10 or remote machine 30) may force an election at any time by broadcasting a request election datagram to themachine farm 38. The election results are determined by a comparison of the set of election criteria which is transmitted within the request election datagram transmitted by the requesting node with the set of election criteria maintained on each receiving node. That is, the first election criterion from the datagram of the requesting node is compared by the receiving node to the first criterion of the receiving node. The highest ranking of the two criteria being compared wins the comparison and the node with that criterion wins the election. If the two criteria tie, then the next criteria are sequentially compared until the tie is broken. If aremote machine 30 receiving the request election datagram has a higher election criterion than that received in the request election datagram, theremote machine 30 receiving the request election datagram issues its own request election datagram. If the receivingremote machine 30 has a lower election criteria than the criteria received in the request election datagram, the receivingremote machine 30 determines it is not the master network information server node and attempts to determine whichremote machine 30 in themachine farm 38 is themanagement server 30. - In one embodiment the criteria which determine the outcome of the election include: whether or not the node is statically configured as a master network information server node; whether the
remote machine 30 has the higher master network information server software version number; whether theremote machine 30 is an NT domain controller; whether theremote machine 30 is the longest running node; and whether theremote machine 30 has a lexically lower network name. In one embodiment, the datagram structure for the election request includes an unsigned shortword for the server version number, an unsigned shortword in which the bits are flags which designate whether the node is statically configured as a master network information server node, or is executing on a NT domain controller and an unsigned longword containing the amount of time the server has been running. - Periodically, the
management server 30 transmits a declare message to the otherremote machines 30 declaring itself to be themanagement server 30. If anotherremote machine 30 believes itself to be amanagement server 30, the otherremote machine 30 will request an election. In this way erroneous master networkinformation server nodes 30 of the same protocol are detected and removed. In addition an election will also be requested: by anyremote machine 30 when thatremote machine 30 reboots; by anyremote machine 30 to whom the master network information server node has failed to acknowledge an update message; or anyclient machine 10 to whom the master networkinformation server node 30 has failed to respond to a request for information. - In more detail and referring to
FIG. 9 , once any remote machine 30 (which may be referred to as a node) broadcasts a request election datagram requesting an election (Step 920), theremote machine 30 receiving the request election datagram (Step 924) first compares its election criteria to the criteria in the request election datagram (Step 930) to determine if the receivingremote machine 30 has higher criteria (Step 934). If theremote machine 30 receiving the datagram has lower election criteria (Step 938) than the criteria contained in the request election datagram, theremote machine 30 receiving the request election datagram drops out of the election process and awaits the results of the election (Step 938). - If the
remote machine 30 receiving the request election datagram has higher election criteria than that contained in the request election datagram, then theremote machine 30 receiving the request election datagram broadcasts its own request election datagram containing the remote machine's own election criteria (Step 940). If in response to the transmission of the request election datagram by the secondremote machine 30, anotherremote machine 30′ responds with a request election datagram with even higher election criteria, then the secondremote machine 30 drops out of the election and theremote machine 30′ with higher criteria broadcasts it's own request election datagram. If no otherremote machine 30 responds with higher election criteria, the node which has apparently won the election for master network information server node sends n more election requests, (in one embodiment three requests) (Step 956) and then if still no otherremote machine 30 responds with higher election criteria, theremote machine 30 which has sent the n election requests is thenew management server 30. - After the election has occurred and the
new management server 30 has been determined, all theremote machines 30 send all of their configured gateway addresses to the new networkinformation server node 30. In this way thenew management server 30 becomes a gateway node. - Referring again to
FIG. 1 , once themanagement server 30 is elected, theremote machines 30 send update datagrams to the masternetwork information server 30 providing information about eachremote machine 30 transmitting the update datagram. In one embodiment, the update datagram sent to the master networkinformation server node 30 from aremote machine 30 includes: theremote machine 30 name; the network address; the cluster name; the network transport protocol; the total number ofremote machines 30 configured with this transport; the number of ports available for connection with a client using this transport protocol; the total number of users permitted to be active at one time; number of available user slots; and server load level. Upon receipt of the update datagram, the master networkinformation server node 30 returns an acknowledgment to theremote machines 30 that transmitted the update datagram indicating that the update datagram was received. If theremote machine 30 transmitting the update datagram does not receive an acknowledgment from the master networkinformation server node 30, the transmittingremote machine 30 assumes that the master networkinformation server node 30 has failed and transmits an election request. - In more detail and referring to
FIG. 10 , aremote machine 30, after the election of amanagement server 30, waits a random period of time and then sends a datagram to themanagement server 30 with its latest load information (Step 1000). In one embodiment the delay is between four and six seconds. If themanagement server 30 receives (Step 1008) an update datagram from aremote machine 30, then the master networkinformation server node 30 replies to the transmittingremote machine 30 with an acknowledgment (Step 1010) and forwards the data to anyremote machine 30 configured as a gateway node. If the masternetwork information server 30 fails to receive data from a remote machine 30 (Step 1008), then the masternetwork information server 30 discards the old data from theremote machine 30 after a predetermined amount of time (Step 1020). - If the
remote machine 30 does not receive an acknowledgment from the master networkinformation server node 30 after theremote machine 30 has sent an update datagram (Step 1028), theremote machine 30 retransmits the update datagram. Theremote machine 30 will attempt n retransmits (in one embodiment three) before it assumes that the masternetwork information server 30 has failed and then transmits an election request (Step 1030). If theremote machine 30 receives an acknowledgment, then it periodically updates the master networkinformation server node 30, in one embodiment every 5 to 60 minutes (Step 1040). - In some embodiments, a remote machine's participation in the activities just described is controlled by a virtual machine executing in the hypervisor rather than by an operating system.
FIG. 11 is a block diagram depicting one embodiment of amachine farm 38 including a first and second network management processes. The firstnetwork management process 1110 executes in a native operating system 1105 (such as WINDOWS NT) and accesses a native memory element storing (i) a data table and (ii) at least one election criteria for allowing the firstnetwork management process 1110 to be dynamically selected as a management process, the data table having an entry for each of said at least two network management processes. The second network management process 1120 executes in avirtualized operating system 1115 and accesses a virtualized memory element storing (i) a data table and (ii) at least one election criteria for allowing the secondnetwork management process 1 120 to be dynamically selected as the management process, the data table having an entry for each of said at least two network management processes. Theclient machine 10 communicates with the one of the firstnetwork management process 1110 and the second network management process 1120 selected as the management process and receives from the management process an address of aremote machine 30 with which to communicate. In some embodiments, a plurality ofclient machines 10 is in communication with a master network information process. - The first
network management process 1110 executes in anative operating system 1105. The second network management process 1120 executes in avirtualized operating system 1115. In one embodiment, the at least two network management processes are grouped into clusters. In another embodiment, one of the at least two network processes is a gateway process. In still another embodiment, the gateway process is a master network management process. In some embodiments, the master network management process is selected by a process comprising the steps of (a) broadcasting an election datagram to the at least two network management processes, the election datagram comprising election criteria; and (b) selecting a master network management process in response to the election criteria. In one of these embodiments, the master network management process broadcasts a declare datagram to detect multiple master network management processes using the same transport protocol. In another of these embodiments, the master network management process is selected by a process that occurs after an event selected from the group of events consisting of: a system reboot, a master network management process failing to respond to a datagram sent from a network management process, a master network management process failing to respond to a request from a client machine, detection of at least two master network management processes configured with the same transport, and a new network management process appearing on said network. - In one embodiment, the management process is elected as described above in connection with
FIGS. 9 and 10 . - In some embodiments, the network includes a third network management process using a different network transport protocol from the first network management process. In one of these embodiments, the third network management process comprises a master network management process for the different network transport protocol.
- For embodiments in which machine farm management is decentralized, each
remote machine 30 may include a load management subsystem (LMS) providing a load management capability. In general, the LMS manages overall server and network load to minimize response time to client requests. - In some embodiments, an apparatus for selecting a server from a network plurality of servers to service a client request comprises a plurality of network management processes. In one of these embodiments, each of said plurality of network management processes includes an event bus and a subsystem in communication with the event bus. In another of these embodiments, a first one of the plurality of network management processes receives from a client machine a request for access to a computing resource and sends the client request to a second one of the plurality of network management processes. In still another of these embodiments, the second one of the plurality of network management processes executes in a virtualized operating system and comprises a dynamic store and a load management subsystem.
- The dynamic store loads information associated with at least some of the plurality of network management processes in a virtualized memory element. In some embodiments, the dynamic store contains information relating to server processor load. In other embodiments, the dynamic store contains information relating to server input/output transaction load.
- The load management subsystem (i) receives, via said event bus, a request to identify a server for servicing a client request, (ii) retrieves from said dynamic store the loading information, (iii) chooses, based on the retrieved loading information, one of the plurality of servers for servicing the client request, and (iv) transmits, via said event bus, a message including information identifying the chosen server. In some embodiments, the load management subsystem stores run-time information in the dynamic store at predetermined intervals. In other embodiments, the apparatus further includes a persistent store, the load management subsystem in communication with the persistent store via the event bus, the persistent store containing an identification of at least one rule to be used to manage server load.
- In one embodiment, the LMS is rule-based, and an administration tool can be used to modify or create rules for managing server load. A rule is one or more criteria that influences how a LMS will direct requests. Rules may be individualized to a specific
remote machine 30. Rules can also be individualized to a specific application or computing environment on a per-server basis. That is, one or more rules may be associated with a copy of an application or a computing environment residing on a firstremote machine 30 in themachine farm 38 and different rules may be associated with a copy of the same application or computing environment residing on a secondremote machine 30 in amachine farm 38. The output of rules individualized to a specific application may be combined with the output of general server rules to direct a client request. - Rules use the output from one or more operational meters. Operational meters may measure any aspect of server performance and the result is used by rules to help determine which
remote machine 30 is most appropriate to service a client request. For example, operational meters may measure: processor load; context switches; memory usage; page faults; page swaps; transmission rate of input/output reads or writes; number of input/output operations performed or number of virtual machines hosted. In one embodiment, operational meters are used by a LMS to measure server performance during the occurrence of certain events such as a request for a client connection. In another embodiment, operational meters are used by a LMS to measure server performance at predetermined intervals, which may be configured by an administrator. A LMS on eachremote machine 30 in themachine farm 38 evaluates various performance metrics for theremote machine 30 for each predetermined period of time and stores that information in the dynamic store. For example, every thirty seconds, an evaluation of server load may include a query to operational meters for server's CPU utilization and memory utilization. The results from the query will be used, in conjunction with other applicable load factors, to calculate a load number for this server load. The new load number is then sent to the dynamic store. - Rules and operational meters are, in one embodiment, executable code modules that query specific system conditions, resources, and performance metrics for remote machines 30in the
machine farm 38. Some of the rules accept user-configurable parameters that are entered by the administrator via the administration tool. Rules may be provided to the LMS using a dynamic link library (“DLL”), and the rules and rule parameters applicable to a specific server may be stored in the persistent store. That is, the administrator's selection of rules is stored, together with a weighting factor and applicable settings associated with those rules, in the persistent store. For example, some operational meters may measure load at a predetermined interval; the predetermined interval may be set by the administrator. - Examples of conditional rules that may be used by the LMS to determine to which
remote machine 30 to direct a request include: whether the number ofclient machines 10 that may connect to aremote machine 30 is limited; whether the number of client sessions that may be serviced by aremote machine 30 is limited; whether the number of virtual machines that may be hosted by aremote machine 30 is limited; the number of application or connection licenses available to aremote machine 30; whether the application requested by theclient machine 10 is currently executing on theremote machine 30; whether a client is physically proximate to, or is connected by a high bandwidth link to, a server; and whether a client request is being made during a time period for which theremote machine 30 is available to service client requests. - A set of rules may be grouped together by the group subsystem 300 to form a load evaluator associated with a particular server or a particular application. A server load evaluator is a load evaluator that applies to all applications published on the server. An application load evaluator is a load evaluator that encapsulates rules specific to certain applications. In one embodiment, loads for published application programs are the sum of a server load evaluator and an application load evaluator. The load evaluator associated with a particular server may be stored in the persistent store 230. When a LMS initializes, it queries persistent store 230 to determine whether a load evaluator is associated with the
remote machine 30 on which the LMS resides. If so, the rules and operational meters are loaded and the LMS begins using those elements of the load evaluator. The outputs of the constituent parts of the load evaluator are combined to calculate composite indicia of the load on particular servers, and each LMS stores the results of its load evaluator in dynamic store. Each rule encapsulated in a load evaluator may have a configurable weighting factor. Many rules have user-configurable parameters that control the way LMS loads are calculated. For example, in one embodiment, a CPU Utilization rule has two parameters: Report Full Load when processor utilization is greater than X-percent; report no load when processor utilization is less than X percent. In one particular embodiment, the load reported by a load evaluator equals the sum of each rule's load times each rule's weight. - In another example, a
remote machine 30 that hosts four applications may have three load evaluators with which it is associated. The server itself and a first application may by associated with a first load evaluator, the second and third applications may be associated with a second load evaluator, and the fourth application may be associated with a third load evaluator. When theremote machine 30 boots, it read the first, second, and third load evaluators from the persistent store 230. Periodically (or perhaps after certain events) theremote machine 30 calculates the output for each of the load evaluators and sends those values to the dynamic store. When a connection request is received, those values are used to determine if theremote machine 30 should service a client request. - For example, using operational meters the LMS can obtain information about the processor load on a particular
remote machine 30, the memory load on thatremote machine 30, and the network load of thatremote machine 30. The LMS combines these results to obtain an overall load number that indicates the total aggregate load on thatremote machine 30. In determining the aggregate load, the load evaluator may weight each piece of information differently. For embodiments in which a rule is associated with aremote machine 30, the rule may disqualify aremote machine 30 from servicing a client request. For example, a rule may limit the number of client sessions aremote machine 30 may initiate. In this embodiment, if aremote machine 30 is currently servicing the maximum number of client sessions allowed by the rule, it will not be chosen by the LMS to service a new client request, even if the outputs of its operational meters indicate that it is the most favorableremote machine 30 to which to route the client request. - Referring back to
FIG. 8 , after an execution machine has been selected, a virtual machine providing a requested computing environment is identified (step 812). In some embodiments, declarative policies such as rules databases, policy databases or scripts are consulted to direct requests to a virtual machine. In other embodiments, aremote machine 30 functioning as an application server hosting a plurality of virtual machines is identified. In one of these embodiments, one of the plurality of virtual machines hosted by the application server may be selected and associated with theclient machine 10. In another of these embodiments, an identifier for the selected virtual machine may be transmitted to theclient machine 10. - In some embodiments, a session management component identifies the virtual machine. In one of these embodiments, an
intermediate machine 30 receiving the request invokes a session management component. In another of these embodiments, the intermediate machine launches the session management component in a terminal services session executing on the intermediate machine. In still another of these embodiments, the intermediate machine launches the session management component in a terminal services session executing on the identified execution machine. - In one embodiment, the session management component provides functionality for identifying a location of a virtual machine providing access to a computing environment. In still another embodiment, the session management component is provided as a program module published on a server, such as an application server. In yet another embodiment, the session management component identifies, launches, and monitors virtual machines.
- In some embodiments, the session management component communicates with a virtual machine management component to identify a virtual machine. In one of these embodiments, the virtual machine management component provides functionality for locating virtual machines. In another of these embodiments, the virtual machine management component provides functionality for allocating an available virtual machine to a user from a plurality of available virtual machines. In still another embodiment, the virtual machine management component provides functionality for reallocating shared virtual machines to the plurality of available virtual machines. In yet another embodiment, the virtual machine management component provides functionality for tracking a state associated with a virtual machine for each virtual machine in a plurality of virtual machines.
- Referring now to
FIG. 12 , a block diagram depicts one embodiment of a virtualmachine management component 1200. In one embodiment, the virtualmachine management component 1200 provides functionality for accessing and updating a database including a virtual machine catalog. In another embodiment, the virtualmachine management component 1200 provides functionality for allowing an administrator or virtual machine provisioning system to add, remove, or modify entries in the database including a virtual machine catalog. In some embodiments, the virtualmachine management component 1200 includes a virtual machine providing administrative functionality. In other embodiments, thevirtual machine component 1200 includes a virtual machine providing management functionality. - In some embodiments, the virtual
machine management component 1200 may receive a request from a provisioning system or from a session management component. In one of these embodiments, a provisioning system contacts the virtualmachine management component 1200 when a virtual machine is created or destroyed. In another of these embodiments, the session management component contacts the virtualmachine management component 1200 when the session management component is invoked to request a virtual machine to launch. In still another of these embodiments, the session management component contacts the virtualmachine management component 1200 when the session management component identifies a change in a state of a launched virtual machine. The session management component may send messages, such as heartbeat messages, to the virtualmachine management component 1200 while a virtual machine is active. If the virtual machine may be accessed by more than one user, the virtualmachine management component 1200 may reassign the virtual machine to the plurality of available virtual machines after a user has terminated a session with the virtual machine. - In some embodiments, virtual machines of the same machine type may be categorized into a plurality of standard operating environments (SOE). In one of these embodiments, an SOE may be a group of virtual machine images of a particular configuration that implement the function of a particular Machine Type, e.g. a machine type “C++ Developer Workstation” may have one SOE containing images with WinXP Pro SP2 with Visual Studio 2003 installed and another SOE containing images with Win Vista with Visual Studio 2005 installed.
- In other embodiments, the virtual
machine management component 1200 may provide functionality for one or more of the following actions related to a standard operating environment (an SOE): creating an SOE, updating an SOE, deleting an SOE, finding an SOE, and retrieving an SOE. In still another embodiment, the virtualmachine management component 1200 may provide functionality for one or more of the following actions related to virtual machines: create a virtual machine, update a virtual machine, delete a virtual machine, find a virtual machine, and assignment to or removal from a standard operating environment. - A machine type may refer to a non-technical description of a computing environment provided by a virtual machine. Some examples of machine types are “C++ Developer Workstation” or “Secretarial Workstation.” Many virtual machines may be grouped in a single machine type. In one embodiment, the virtual
machine management component 1200 may provide functionality for one or more of the following actions related to machine types: creating machine types, updating a machine type, deleting a machine type, finding a machine type, and retrieving a machine type. - In some embodiments, the virtual
machine management component 1200 may provide functionality for creating virtual machines. In one of these embodiments, an administrator or provisioning service creates a new machine type in a database of virtual machines. The machine type is given a meaningful name such as “HR Manager Workstation.” In one embodiment, the machine type name is the name for a class of standard operating environment (SOE) rather than a specific SOE, and multiple SOEs may be assigned to the machine type name. In another embodiment, the machine type may be used to publish the class of virtual machines. - In another of these embodiments, a standard operating environment (SOE) is created for the machine type and assigned to the machine type in the database of virtual machines. In one embodiment, the SOE is a virtual machine with a specific hardware and software configuration. A snapshot of the SOE virtual machine may be taken and used as a template for virtual machine clones. In one embodiment, clones of the SOE virtual machine are assigned to users.
- In one embodiment, an administrator clones an SOE for use by users by creating linked clones of the snapshot of the SOE virtual machine. The linked clone virtual machines may be created in consecutively numbered subfolders in the SOE folder. The linked clones of the SOE may be assigned to the SOE in the database of virtual machines.
- In another embodiment, an administrator updates a machine type by creating a new SOE, and new linked clones of the SOE. The administrator updates an SOE pointer within a machine type record in the database of virtual machines to point to the new SOE, and marks the old SOE as being superseded. The administrator may create the new SOE by creating a new virtual machine and installing the software, or by creating a full clone of an existing SOE and updating it. As an example the administrator could create a new virtual machine and install Microsoft Windows XP Professional, followed by Windows XP SP1, followed by Microsoft Office 2003, or the administrator could have taken a full clone of an existing SOE with Windows XP and Microsoft Office 2003 already installed, and installs Windows XP SP1 to achieve the same SOE. The new SOE may be created in a new SOE folder and a new SOE record is created in the database of virtual machines. Linked clones of the superseded SOE can be deleted when users have finished with them and the superseded SOE can be deleted when all linked clones have been deleted.
- In some embodiments, a virtual machine may be designated as a shared virtual machine. In one of these embodiments, a shared virtual machine is an instance of a virtual machine image that is designated for use by multiple users. In another of these embodiments, the shared virtual machine is used by one user at a time and returned to a pool of available virtual machines when not in use. In still another of these embodiments, as the image of a shared virtual machine is executed, users may change the image but may not persist any changes to the image once it is shutdown. In this embodiment, all changes are discarded when the image is shutdown or a user terminates a session.
- In other embodiments, a virtual machine may be designated as a private virtual machine. In one of these embodiments, a private virtual machine is an instance of a virtual machine image that is designated for use by a specific user. Only that user may be allocated to the image, launch the image, or execute the image. In another of these embodiments, private images will be configured to permit changes to be persisted when the image is shutdown. In still another of these embodiments, changes may be configured to be discarded upon image shutdown as per shared images, depending on the requirements of the user.
- In some embodiments, a session management component is launched and identifies a virtual machine. In one of these embodiments, the session management component transmits an identification of a user and a virtual machine type identified responsive to a request for access to a resource to the virtual
machine management component 1200. In another of these embodiments, the session management component requests an identification of a specific virtual machine to launch. In still another of these embodiments, the session management component requests an identification of a location of the configuration and virtual disk files of the identified virtual machine. - In some embodiments, a virtual machine is identified responsive to the received identification of the user of the requesting machine. In other embodiments, a virtual machine is identified responsive to a request by the user for a type of virtual machine. In still other embodiments, a virtual machine is identified responsive to a request by the user for a type of computing environment.
- In some embodiments, the virtual
machine management component 1200 transmits to the session management component an identification of a specific virtual machine to launch. In one of these embodiments, the session management component then proceeds to launch the virtual machine. In another of these embodiments, the virtual machine management component launches the virtual machine. - In other embodiments, the virtual machine management component transmits to the session management component an identification of a plurality of virtual machines to launch. In one of these embodiments, the session management component may present an enumeration of available virtual machines to a user. In another of these embodiments, the session management component receives a selection of a virtual machine from the enumeration of available virtual machines and the session management component launches the selected virtual machine. In still other embodiments, the virtual machine management component transmits to the session management component an indication that no virtual machines are available for the user requesting the access. In yet other embodiments, the virtual
machine management component 1200 transmits to the session management component an indication that an existing, executing virtual machine has now been allocated to the user. - In yet other embodiments, the virtual machine management component transmits to the session management component an identification of an available virtual machine responsive to accessing a database storing information associated with a plurality of virtual machines, the information including, but not limited to, an identification of the plurality of virtual machines, an identification of a location of files associated with the plurality of virtual machines, an identification of an access control list associated with the plurality of virtual machines, and an indication of availability of the plurality of virtual machines.
- In one embodiment, when a virtual machine has been identified as a machine to launch, the virtual
machine management component 1200 modifies an access control list associated with the virtual machine responsive to the identification of the user received from the session management component in the initial request. In another embodiment, the virtualmachine management component 1200 modifies the access control list to allow the virtual machine to be launched for the user. In still another embodiment, the virtualmachine management component 1200 transmits additional information associated with the virtual machine to the session management component. The additional information may include network share details relating to a folder storing files associated with the virtual machine. In yet another embodiment, the session management component uses the additional information to map the folder to a mount point, such as a drive letter, in the virtual machine. - In some embodiments, virtual machine images—configuration and data files comprising the virtual machine—are stored on a storage area network. In other embodiments, virtual machine images are stored in network attached storage. In one of these embodiments, a file server in communication with the storage area network makes the virtual machine images accessible as if they were located on network attached storage.
- Referring back to
FIG. 8 , an identified virtual machine is configured (step 814). In brief overview, an execution machine identified by the intermediate machine executes a hypervisor emulating hardware resources required by the requested computing environment. A session management component launches a configured virtual machine in the hypervisor. Configuration occurs of the virtual machine for aparticular client machine 10. A connection is established between the client machine and the virtual machine. - Referring now to
FIG. 13 , a block diagram depicts one embodiment of asession management component 1300 in a system providing access to a computing environment by an intermediate machine to a requesting machine. In brief overview, thesession management component 1300 includes anidentification component 1302, anexecution component 1304, and a management component 1306. - The
identification component 1302 is in communication with a virtual machine management component and receives an identification of a virtual machine providing a requested computing environment. In some embodiments, theidentification component 1302 is in communication with the virtualmachine management component 1200. In one embodiment, theidentification component 1302 receives an identification of anexecution machine 30′ into which to launch the virtual machine. In some embodiments, theidentification component 1302 identifies an execution machine on which a required hypervisor executes and into which to launch the virtual machine. In other embodiments, theidentification component 1302 receives an identification of the execution machine. In one of these embodiments, theidentification component 1302 receives the identification from theintermediate machine 30. - In some embodiments, the
identification component 1302 further comprises a transceiver. In one of these embodiments, the transceiver in theidentification component 1302 receives an identification of a user of the requesting machine and transmits the identification of the user to the virtual machine management component. In another of these embodiments, the transceiver receives an identification by a user of a type of computing environment requested and transmits the identification to the virtualmachine management component 1200. In still another of these embodiments, the transceiver receives an identification by a user of a type of virtual machine requested and transmits the identification of the type of virtual machine requested to the virtualmachine management component 1200. - In some embodiments, the
identification component 1302 receives an identification of a virtual machine providing a requested computing environment, the virtual machine selected responsive to a received identification of a user of the requesting machine. In other embodiments, theidentification component 1302 receives an identification of a virtual machine providing a requested computing environment, the virtual machine selected responsive to a received identification of a type of computing environment requested. In other embodiments, theidentification component 1302 receives an identification of a virtual machine providing a requested computing environment, the virtual machine selected responsive to a received identification of a type of virtual machine requested. - The
execution component 1304 launches the virtual machine into a hypervisor. In one embodiment, the hypervisor executes on anexecution machine 30′. In another embodiment, theexecution component 1304 is in communication with the identification component. In still another embodiment, theexecution component 1304 receives from theidentification component 1302 an identification of anexecution machine 30′ executing a hypervisor into which to launches the virtual machine. In yet another embodiment, theexecution component 1304 launches the virtual machine into a hypervisor emulating hardware resources required to support the computing environment. In some embodiments, a virtual machine service component executes in the hypervisor. In other embodiments, a virtual machine service component executes in a guest operating system provided by a virtual machine executing in the hypervisor. In one of these embodiments, the virtual machine service component is in communication with thesession management component 1300 and receives configuration information associated with theclient machine 10. - The management component 1306 establishes a connection between the requesting machine and the virtual machine and manages the connection. In one embodiment, the management component 1306 provides an internet protocol address associated with the virtual machine to the user of the requesting machine. In another embodiment, the management component 1306 provides an internet protocol address associated with an execution machine to the user of the requesting machine. In still another embodiment, the management component 1306 provides a proxy for communication between the requesting machine and the virtual machine. In yet another embodiment, the management component 1306 establishes a connection between the requesting machine and the virtual machine using a presentation layer protocol.
- Although described above as separate functional entities, it should be understood that the
identification component 1302, theexecution components 1304 and the management component 1306 may be provided as a single functional unit or the functions provided by those components may be grouped into two or more components. - In some embodiments, the
session management component 1300 establishes and manages a user's virtual machine session. In one of these embodiments, thesession management component 1300 provides functionality for, without limitation, locating a virtual machine, launching a hypervisor, launching a virtual machine in the hypervisor, connecting a user to the virtual machine, and managing the established connection. In another of these embodiments, thesession management component 1300 publishes a plurality of available virtual machines. In still another of these embodiments, thesession management component 1300 provides, without limitation, enumeration into client drives, mapping of client drives to shared folders on the virtual machine, monitoring of the hypervisor, monitoring of an operating system provided by the virtual machine, and a virtual machine control panel to the user. - In one embodiment, the
session management component 1300 provides a virtual machine control panel to the user. The virtual machine control panel may enable a user to switch to the virtual machine, power off the virtual machine, reset the virtual machine, or suspend the virtual machine. In some embodiments, thesession management component 1300 provides the virtual machine control panel only to users authorized to access the functionality of the virtual machine control panel. - In some embodiments, a virtual machine service component executes in the hypervisor. In one of these embodiments, the virtual machine service component is in communication with the
session management component 1300 and receives configuration information associated with theclient machine 10. In another of these embodiments, thesession management component 1300 creates a connection to the virtual machine service component, such as a TCP/IP connection, and communicates with the virtual machine service component over the created connection. In still another of these embodiments, thesession management component 1300 transmits information associated with theclient machine 10, such as initialization parameters or client monitor geometry, to the virtual machine service component. - In some embodiments, the
session management component 1300 identifies a folder containing an image of the identified virtual machine. In one of these embodiments, the folder contains configuration and data files comprising the virtual machine. In another of these embodiments, thesession management component 1300 mounts the folder in the execution machine prior to launching the virtual machine. In still another of these embodiments, thesession management component 1300 copies definition data files associated with the virtual machine onto the execution machine. Thesession management component 1300 may copy the definition data files back into the identified folder when a session is completed. In yet another of these embodiments, the configuration and data files are streamed to the execution machine, as described below. - In other embodiments, the
session management component 1300 enumerates in the virtual machine a plurality of drives associated with theclient machine 10. In one of these embodiments, thesession management component 1300 creates a folder associated with each drive in the plurality of drives. In another of these embodiments, thesession management component 1300 stores a folder associated with a drive in the plurality of drives in the mounted folder containing the identified virtual machine. In still another of these embodiments, an enumeration of the stored folder associated with the drive is provided to a user of theclient machine 10. In some embodiments, a protocol stack located in the hypervisor or in the guest operating system enables drive mapping through other techniques, including techniques enabled by presentation layer protocols. - Referring now to
FIG. 14 , a block diagram depicts one embodiment of a system in which a drive associated with theclient machine 10 is made available to a computing environment. In brief overview, theclient machine 10 has a connection (1) to an execution machine and a connection (2) to a plurality of drives available to a user of theclient machine 10. - The
session management component 1300 creates a folder associated with each drive in the plurality of drives (3). In one embodiment, thesession management component 1300 stores the created folder associated with a drive in the plurality of drives in avirtual machine folder 1002, the mounted folder containing configuration and data files associated with the identified virtual machine. In another embodiment, thesession management component 1300 generates a list of shared folders stored in thevirtual machine folder 1002. - The
session management component 1300 notifies the virtual machine service component of the change to the virtual machine folder 1002 (4). In some embodiments, thesession management component 1300 responds to changes in the client device by rebuilding a shared folder list in thevirtual machine folder 1002. In one of these embodiments, thesession management component 1300 receives an identification of a modification to the drive associated with theclient machine 10. In another of these embodiments, the session management component 1300transmits a notification to the virtual machine service component identifying the change to thevirtual machine 1002. - For each folder associated with a drive in the
virtual machine folder 1002, the virtual machine service component provides an indication of a mapped client drive to the virtual machine (5). In one embodiment, the virtual machine service component associates the mapped client drive with a drive letter on the virtual machine. In another embodiment, the virtual machine service component monitors for changes to the shared folder list in thevirtual machine folder 1002. In some embodiments, an enumeration of the stored folder associated with the drive is provided to a user of theclient machine 10. - In some embodiments, the
session management component 1300 enumerates in the virtual machine a plurality of printers associated with theclient machine 10. In one of these embodiments, thesession management component 1300 accesses a printer service to acquire an authorization level required to enumerate a printer in the plurality of printers. - In one embodiment, a printer associated with the
client machine 10 is shared as a network printer and made accessible to the virtual machine as a network resource. In another embodiment, the virtual machine generates printer output using the TCP/IP and LPR protocols, and this output is intercepted and transmitted to the printer associated with theclient machine 10. In still another embodiment, the virtual machine transmits printer output to a virtualized hardware resource provided by the hypervisor, such as a COM port on the virtual machine. The output is captured and transmitted to the printer associated with theclient machine 10. In yet another embodiment, a hypervisor may provide access to a virtual printer or printer port. - Referring back to
FIG. 8 , as part of the configuration process, an execution machine identified by the intermediate machine executes a hypervisor emulating hardware resources required by the requested computing environment. In one embodiment, the hypervisor executes on the intermediate machine. In another embodiment, the hypervisor executes in a terminal services session executing on the intermediate machine. In still another embodiment, the hypervisor executes on the execution machine. In yet another embodiment, the hypervisor executes in a terminal services session executing on the execution machine. In some embodiments, the hypervisor may be executed on theclient machine 10. - In one embodiment, the hypervisor provisions a plurality of hardware resources on the execution machine for use by the requested computing environment. In another embodiment, the hypervisor partitions a plurality of hardware resources on the execution machine and makes the partition available for use by the requested computing environment. In still another embodiment, the hypervisor emulates a plurality of hardware resources on the execution machine for use by the requested computing environment. In yet another embodiment, the hypervisor may partition hardware resources, emulate hardware resources, or provision hardware resources, or all three. For example, a hypervisor may emulate a device (such as a graphics card, network card, and disk), partition the (execution time) of the CPU, and virtualize registers, storage, and underlying devices which they use to fulfill operations on their emulated hardware (such as RAM, and network interface cards).
- In some embodiments, the
session management component 1300 executes the hypervisor. In one of these embodiments, thesession management component 1300 executes the hypervisor in full-screen mode. In other embodiments, thesession management component 1300 monitors execution of the hypervisor. In one of these embodiments, thesession management component 1300 transmits a notification to the virtualmachine management component 1200 that the virtual machine has terminated when thesession management component 1300 receives an indication that a virtual machine executing in the hypervisor has terminated. In another of these embodiments, thesession management component 1300 receives a notification when the user logs out of a session. - In some embodiments, the hypervisor provides a hardware abstraction layer between hardware on the execution machine and a computing environment provided by a virtual machine. In one of these embodiments, there is no operating system between the execution machine hardware and the hypervisor. The hypervisor may be said to be executing “on bare metal.” In another of these embodiments, there is an operating system executing on the execution machine, referred to as a host operating system, and the hypervisor executes from within the operating system. Computing environments provided by a virtual machine may be referred to as guest operating systems.
- In one embodiment, the hypervisor executes in a terminal server session on a host operating system on the execution machine. The hypervisor may emulate hardware resources required by a computing environment provided by a virtual machine. The hypervisor may partition hardware and provide access to the partition. The hypervisor may also virtualize existing hardware, making it appear to at least one domain on the hardware as if that domain were the only domain accessing the hardware. In another embodiment, output from the computing environment, or an application or resource executing within the computing environment, is passed from the computing environment to a virtualized hardware resource provided by the hypervisor. In still another embodiment, the hypervisor transmits the output to a component such as the
session management component 1300. Thesession management component 1300 may transmit the received output to aclient machine 10 from which a user accesses the computing environment. In yet another embodiment, the hypervisor redirects the output from the virtualized hardware resource to an actual hardware resource, such as a network interface card. - In some embodiments, the hypervisor provides a hardware abstraction layer and creates an environment into which a virtual machine may be launched, the virtual machine comprised of configuration and data files creating a computing environment, which may comprise a guest operating system and application programs or other resource. In other embodiments, the hypervisor provides functionality for transmitting data directed to a virtualized hardware resource and redirecting the data to a requesting machine via the
session management component 1300. In one of these embodiments, the communication between thesession management component 1300 and the hypervisor enable transmission of updates, such as audio updates, updates associated with a graphical user interface, or updates associated with serial COM port input/output, from the virtual machine to the requesting machine. In another of these embodiments, the communication enables transmission of keyboard or mouse or audio updates from the requesting machine to the virtual machine. In still another of these embodiments, where the hypervisor executes within a terminal server session, the hypervisor may map terminal server drives to the computing environment. - Referring still to
FIG. 8 , a virtual machine is configured for access by aparticular client machine 10. In some embodiments, themanagement component 1300 receives an identification of a virtual machine already executing in the hypervisor. In other embodiments, thesession management component 1300 launches the virtual machine in the hypervisor. In one embodiment, thesession management component 1300 receives an identification of a folder containing configuration and data files comprising the virtual machine. In another embodiment, thesession management component 1300 mounts the identified folder in the execution machine. - In some embodiments, a virtual machine service component executes in a guest operating system executing within the virtual machine. In one of these embodiments, the virtual machine service component is a system service running in a network service account. In another of these embodiments, the virtual machine service component is configured to initiate execution automatically upon the execution of the computing environment. In still another of these embodiments, the virtual machine service component communicates with the
session management component 1300. In other embodiments, the virtual machine service component executes in the hypervisor. - In some embodiments, a virtual machine service component executes within the virtual machine. In one of these embodiments, after launching the virtual machine in the hypervisor, the
session management component 1300 establishes a connection, such as a TCP/IP connection, with the virtual machine service component. In another of these embodiments, the virtual machine service component establishes the connection. The connection may be a single multiplexed connection between the components or multiple independent connections. - In still another of these embodiments, the
session management component 1300 uses the connection to transmit configuration information to the virtual machine service component. The configuration information may be associated with a presentation layer protocol session executing on theclient machine 10 in which output from the virtual machine is presented. The configuration information may also include information associated with display settings and changes, client drive information and authentication data. - In other embodiments, the virtual machine service component receives information associated with a printer to which the requesting machine has access. In one of these embodiments, the virtual machine service component access a network printer service to create in the virtual machine a printer connected to the printer to which the requesting machine has access.
- In still other embodiments, the virtual machine service component transmits session status messages to the
session management component 1300. In one of these embodiments, the virtual machine service component transmits heartbeat messages to thesession management component 1300. In another of these embodiments, the virtual machine service component transmits keep-alive messages to thesession management component 1300, to prevent thesession management component 1300 from shutting down the virtual machine. In still another of these embodiments, the virtual machine service component transmits a message to thesession management component 1300 providing an indication that the user of theclient machine 10 has logged off, shut down, or suspended a session with the computing environment. The virtual machine service component may receive the indication of the user's activity from an authentication module. - Referring still to
FIG. 8 , as described above, a request for access to a resource is received (step 802), a method for providing access to the resource is identified (step 804), and a virtualized environment may be selected to provide access to a resource (step 808). In some embodiments, aclient machine 10 receives the request, identifies a method for providing access, and selects a virtualized environment to provide access to a resource. In one of these embodiments, a mobile computing device connects to aclient machine 10 referred to as a computing device, which identifies a method for providing access to a computing environment, selects a portable computing environment residing in storage on the mobile computing device and provides access to the portable computing environment. - Referring ahead to
FIGS. 89A and 89B , a storage device and a computing device are depicted. In brief overview, the storage device stores data associated with a computing environment, such as a portable computing environment, which in some embodiments includes virtualization software, a virtual machine image, and user data. A computing device connecting to the storage device, executing a virtual machine, and providing access to the computing environment responsive to data stored in the storage device. - Still referring to
FIG. 89A , and in further detail, thestorage device 8905 stores theportable computing environment 8920 of one or more users. In one embodiment, thestorage device 8905 may be any type and form of hard drive, including a micro hard drive. In another embodiment, thestorage device 8905 may be any type and form of portable storage device, such as a flash drive or USB drive, or any type and form of portable storage medium, such as a CD or DVD. In still another embodiment, thestorage device 8905 comprises a flash card, a memory stick, multi-media card or a secure digital card. In some embodiments, thestorage device 8905 may store applications including word processing or office applications, ICA clients, RDP clients, software to establish any type and form of virtual private network (VPN) or SSL VPN connection, software to accelerate network communications or application delivery or any other type and form of application. - In one embodiment, the
storage device 8905 may store a virtual machine image. In another embodiment, thestorage device 8905 may comprise a transmitter for transmitting stored data to acomputing device 8910. In still another embodiment, thestorage device 8905 may comprise a transceiver for accessing stored data, transmitting stored data and receiving data for storage. In yet another embodiment, thestorage device 8905 may comprise stored data comprising an application program for executing a virtual machine on a computing device. - In some embodiments, the
storage device 8905 is embedded in a mobile computing device. In other embodiments, thestorage device 8905 is connected to a mobile computing device. In still other embodiments, thestorage device 8905 comprises a portable storage device removable from a computing device. - The
storage device 8905 stores data associated with a computing environment. The data may comprise aportable computing environment 8920. In one embodiment, theportable computing environment 8920 is considered portable in that theportable computing environment 8920 may be easily or conveniently carried and transported from onecomputing device 8910 to anothercomputing device 8910′. In another embodiment, theportable computing environment 8920 is considered portable in that the computing environment may be established or executed on anysuitable computing device 8910 with little or no changes to thecomputing device 8910, or in a further embodiment, with little or no maintenance or administration. In still another embodiment, theportable computing environment 8920 includes a plurality of files representing a desktop environment, or a portion thereof, of acomputer system 100, which a user desires to execute on thecomputing device 8910. In yet another embodiment, theportable computing environment 8920 may represent an environment under which a user operates a home or office desktop computer. In some embodiments, theportable computing environment 8920 represents one or more applications to which a user has access. - The
portable computing environment 8920 may include avirtual machine image 8925. In one embodiment, thevirtual machine image 8925 comprises a computing environment image, including any of the information, data, files, software, applications and/or operating system needed to execute acomputing environment 8920, including files needed to execute thecomputing environment 8920 via thevirtualization software 8921. In another embodiment, thevirtual machine image 8925 comprises configuration and data files required to execute a virtual machine providing access to a computing environment requested by a user. In still another embodiment, thevirtual machine image 8925 comprises a virtual machine image as described above. - The
portable computing environment 8920 may also include user data 8930, including, without limitation, any data, information, files, software or applications of a user. In one embodiment, the user data 8930 is stored in, or as a part of, thevirtual machine image 8925. In another embodiment, the user data 8930 may be created, edited or provided by any software, program, or application of thestorage device 8905 or of thecomputing device 8910. - The
portable computing environment 8920 may includevirtualization software 8921. In some embodiments, thevirtualization software 8921 may comprise any suitable means or mechanisms for a user to access, read and/or write any user data 8930 included in or provided by thevirtualization software 8921 and/orvirtual machine image 8925. In one of these embodiments, thevirtualization software 8921 may track, manage and synchronize the access, reading and/or writing of user data 8930 during an establishedcomputing environment 8920′ with the user data 8930 provided on thestorage device 8905. In another of these embodiments, the user data 8930 may only be accessed via thevirtualization software 8921 or the establishedcomputing environment 8920′. In still another of these embodiments, any software, programs or applications of thestorage device 8905 may access the user data 8930 when thestorage device 8905 is not connected to thecomputing device 120 or when acomputing environment 8920′ is not executing. In yet another of these embodiments, the user data 8930 may comprise data and files created during a session of an establishedcomputing environment 8920′. - The
computing device 8910 may be any type and form of computer system as described in connection withFIG. 1A andFIG. 1B above. In one embodiment, thecomputing device 8910 is aclient machine 10 as described above. In another embodiment, a connection between acomputing device 8910 and astorage device 8905 provides a user of aclient machine 10 with access to a requested resource. In still another embodiment, thecomputing device 8910 receives a request for access to a resource when a connection is made between thecomputing device 8910 and thestorage device 8905. In yet another embodiment, a method for providing access to the resource is identified responsive to information received from thestorage device 8905. - In one embodiment, the
computing device 8910 has astorage element 128. In another embodiment, thecomputing device 8910 has anetwork interface 118′ connected tonetwork 150. In still another embodiment, thecomputing device 8910 has a transceiver for accessing data stored in astorage device 8905 or in acomputing device 8910′. - In some embodiments, the
computing device 8910 comprises an operational or performance characteristic not provided by thestorage device 8905. In one of these embodiments, thecomputing device 8910 comprises elements, such as a processor or a memory, which thestorage device 8905 does not include. In another of these embodiments, thecomputing device 8910 provides an I/O device, display device, installation medium, or other peripherals, such as a keyboard or printer not available to thestorage device 8905. In still another of these embodiments, thecomputing device 8910 may provide a feature, a resource, or peripheral desired to be used by the user of thestorage device 8905. For example, the user may want to access a file or an application provided on aremote machine 30′ available via a connection across thenetwork 150. In yet another of these embodiments, thecomputing device 8910 provides access to a network, such asmachine farm 38, not available to thestorage device 8905, or to a user of thestorage device 8905. - In one embodiment, the
computing device 8910 establishes acomputing environment 8920′ based on theportable computing environment 8920 provided by thestorage device 8905. Thecomputing device 8910 establishes avirtual machine 8925′ and avirtualization layer 8922 to execute thecomputing environment 8920′ based on thevirtualization software virtual machine image 8925 and /or user data 230. - In some embodiments, virtualization allows multiple
virtual machines 8925′, with heterogeneous operating systems to run in isolation, side-by-side on the samephysical machine 8910. In one embodiment, thevirtualization software 8921 may include a virtual machine image. Virtual machines may include cross-platform X86 PC emulators, such as the products distributed by The Bochs Project at bochs.sourceforge.net, or VMware products manufactured and distributed by VMware, Inc. of Palo Alto, Calif., or products manufactured and distributed by Softricity, Inc., or the Virtuozzo products manufactured and distributed by SWSoft, Inc. of Herndon, Va., or the Microsoft® Virtual PC products manufactured and distributed by Microsoft Corporation of Redmond, Wash. In another embodiment, thevirtualization software 8921 includes any the AppStream products manufactured and distributed by AppStream Inc, of Palo Alto, Calif., or the AppExpress products manufactured and distributed by Stream Theory, Inc of Irvine, Calif. - The
computing device 8910 may use any other computing resources ofcomputer system 100b required by thecomputing environment 8920′. In some embodiments, thehypervisor 8923 provides a virtualized hardware resource required by thecomputing environment 8920′. In other embodiments, ahypervisor 8923 provides, via avirtualization layer 8922, access to a hardware resource required for execution of a computing environment. In one of these embodiments, thehypervisor 8923 provisions the hardware resource. In another of these embodiments, thehypervisor 8923 virtualizes the hardware resource. In still another of these embodiments, thehypervisor 8923 partitions existing hardware resources and provides access to a partitioned hardware resource. - In some embodiments, a
virtual machine 8925′ executing on a virtualization layer provides access to acomputing environment 8920′. In other embodiments, asession management component 1300 executes thevirtual machine 8925. In still other embodiments,virtualization software virtual machine 8925. In one of these embodiments, theportable computing environment 8920 includes any type and form of software for virtualizing on a computing device a user-accessible resource, such as an operating system, desktop, application, and any hardware computing resources. In yet other embodiments,virtual machine image 8925 is accessed to execute avirtual machine 8925′. In one of these embodiments, thevirtualization software - In some embodiments, the
virtualization software 8921 may include software for virtualizing a server, such as the Microsoft Virtual Server products manufactured and distributed by Microsoft Corporation of Redmond, Wash., or the Linux Vserver products distributed by the Linux Vserver Project located at linux-vserver.org. In other embodiments, thevirtualization software 8921 may also include an interpreter or just-in-time compiler, such as the JAVA Virtual Machine (JVM) originally manufactured by Sun Microsystems of Santa Clara, Calif., or the Common Language Runtime (CLR) interpreter manufactured by the Microsoft Corporation. - In some embodiments, the
computing device 8910 has thevirtualization software 8921′ stored or installed instorage element 128 prior to a connection with thestorage device 8905. In one embodiment, thevirtualization software 8921′ does not need to be installed on thecomputing device 8910, and can, instead, be executed from thestorage device 8905. In another embodiment, thecomputing device 8910 installs and executes thevirtualization software 8921 on a per connection basis. In this embodiment, thecomputing device 8910 may remove thevirtualization software 8921 fromstorage element 128 upon termination of the establishedcomputing environment 8920′. In still another embodiment, thecomputing device 8910 installs and executes thevirtualization software 8921 on a first connection. In yet embodiment, upon other connections, if thecomputing device 8910 detects changes to thevirtualization software 8921, such as a newer version, thecomputing device 8910 updates thevirtualization software 8921, or installs a newer version of thevirtualization software 8921. In other embodiments, thecomputing device 8910 obtains thevirtualization software 8921 from astorage element 128″ or aremote machine 30 accessible vianetwork 150. - In one embodiment, the
virtualization software 8921 is used to establish avirtualization layer 8922 on thecomputing device 8910. In another embodiment, thevirtualization layer 8922 provides an abstraction layer that decouples or isolates an application or a hardware resource from the operating system. In still another embodiment, thevirtualization layer 8922 comprises an application to host or run another operating system or application, such asvirtual machine 8925. - In some embodiments, the
hypervisor 8923 comprises thevirtualization software 8921. In other embodiments, thesession management component 1300 comprises thevirtualization software 8921. In still other embodiments, thehost computing device 8910stores virtualization software 8921′ instorage element 128. In yet other embodiments, thecomputing device 8910 accesses a remotely located copy ofvirtualization software 8921′. - In some embodiments, the
virtualization layer 8922 and/orvirtual machine 8925 provide an execution environment on thecomputing device 8910. In one of these embodiments, each execution environment is a unique instance of the same execution environment, while, in another of these embodiments, each execution environment may be an instance of different execution environments. Each execution environment may be isolated from and/or not accessible by another execution environment. In other embodiments, thevirtualization layer 8922 and/orvirtual machine 8925 provides an execution context, space or “sandbox” to isolate processes and tasks running on the same operating system. - In one embodiment, the
virtualization layer 8922 communicates with asession management component 1300. In some embodiments, thesession management component 1300 is software executing in a layer between a hypervisor 8923 or operating system of thecomputing device 8910 and one or morevirtual machines 8925 that provide a virtual machine abstraction to guest operating systems. In other embodiments, as described above, thesession management component 1300 may reside outside of thecomputing device 8910 and be in communication with ahypervisor 8923 or operating system of thecomputing device 8910. In still other embodiment, thesession management component 1300 can load, run or operate thevirtual machine image 8925 from thestorage device 8905 to execute avirtual machine 8925′. In yet other embodiments, thesession management component 1300 andhypervisor 8923 are incorporated into the same application, software or other executable instructions to provide thevirtualization layer 8922. In further embodiments, thesession management component 1300 is in communication with a virtual machine service component executing within thecomputing environment 8920. - In some embodiments and still referring to
FIG. 89A , thecomputing device 8910 includes aloading mechanism 8940, which may comprise software, hardware, or any combination of software and hardware. In one embodiment, theloading mechanism 8940 comprises an autorun configuration file. In another embodiment, thestorage device 8905 may include theloading mechanism 8940. In still another embodiment, thestorage device 8905 includes theloading mechanism 8940 in an autorun file. In some embodiments, aloading mechanism 8940 on thestorage device 8905 establishes thecomputing environment 8920′ on thecomputing device 8910 based on theportable computing environment 8920 stored in thestorage device 8905. In other embodiments, theloading mechanism 8940′ of thecomputing device 8910 establishes of thecomputing environment 8920′. In still other embodiments, theloading mechanism 8940 of thestorage device 8905 works in conjunction with theloading mechanism 8940′ of thecomputing device 8910 to establish thecomputing environment 8920′. - In one embodiment, the
loading mechanism 8940 comprises a driver, such as a device driver or a kernel or user-mode driver for connecting to and/or accessing thestorage device 8905, or thestorage element 128 thereof. In another embodiment, theloading mechanism 8940 comprises any type and form of executable instructions, such as a program, library, application, service, process, thread or task for accessing thestorage element 128 orstorage device 8905. In still another embodiment, theloading mechanism 8940 accesses any type and form of data and information on thestorage 128 to establish theuser environment 8920′ in accordance with the operations discussed herein. For example, in some embodiments, theloading mechanism 8940 reads an autorun configuration file instorage element 128 or onstorage device 8905. In some embodiments, theloading mechanism 8940 comprises a plug-n-play (PnP) mechanism by which the operating system of thehost computing device 8910 recognizes thestorage device 8905 upon connection, and loads the drivers to connect to thestorage device 8905. - In one embodiment, the
loading mechanism 8940 upon detection of a connection between thestorage device 8905 andcomputing device 8910 initiates the loading, establishing and/or executing of thevirtualization software 8921 and/or theuser environment 8920′ on thecomputing device 8910. In another embodiment, theloading mechanism 8940 may comprise any rules, logic, operations and/or functions regarding the authentication and/or authorization of establishing acomputing environment 8920′ on thecomputing device 8910 based on theportable computing environment 8920. In still another embodiment, theloading mechanism 8940 may determine the existence of thevirtualization software 8921′ on thecomputing device 8910 and/or the difference in versions between thevirtualization software 8921 andvirtualization software 8921′. In yet another embodiment, theloading mechanism 8940 may store, load, and/or execute thevirtualization software computing device 8910. In a further embodiment, theloading mechanism 8940 may store, load, and/or execute thevirtual machine image 8925 on thecomputing device 8910 as avirtual machine 8925 providing access to thecomputing environment 8920′. In still another embodiment, theloading mechanism 8940 may comprise or provide any type and form of user interface, such as graphical user interface or command line interface. - In some embodiments, the
virtualization software 8921,portable computing environment 8920 and/orloading mechanism 8940 are designed and constructed in accordance with the U3 application design specification, or USB smart drive, provided by U3 LLC of Redwood City, Calif. For example, theloading mechanism 8940 may comprise a U3 launchpad program, and thevirtualization software 8921 and/orportable user environment 120 may comprise a U3-based application. - Referring now to
FIG. 89B , a flow diagram depicts one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a storage device. In brief overview, a method for providing access to a computing environment includes the step of storing, in a storage device, data associated with a computing environment (step 8950). A computing device connects to the storage device (step 8960). A virtual machine executing on the computing device provides access to the computing environment, based on the data stored in the storage device (step 8970). - In further detail, a
storage device 8905 stores data associated with a portable computing environment 8920 (step 8950). In one embodiment, thestorage device 8905 stores user data associated with the computing environment. In another embodiment, thestorage device 8905 stores avirtual machine image 8925. In still another embodiment, thestorage device 8905 stores data associated with a computing environment, the computing environment comprising at least one application program. In yet another embodiment, thestorage device 8905 stores data associated with a computing environment, the computing environment comprising an operating system. - In one embodiment, the
storage device 8905 stores data comprising an operating system. In another embodiment, thestorage device 8905 stores data comprising an application program. In still another embodiment, thestorage device 8905 stores an application program for executing a virtual machine on a computing device. In yet another embodiment, thestorage device 8905 stores virtualization software for executing a virtual machine on a computing device. - In some embodiments, the
storage device 8905 may include a connector for establishing a connection between thestorage device 8905 and a computing device. In other embodiments, thestorage device 8905 resides in a computing device, such as a mobile computing device. In one of these embodiments, thestorage device 8905 is embedded in a mobile computing device. In still other embodiments, thestorage device 8905 comprises a portable storage device removable from a computing device. - A computing device connects to the storage device (step 8960). The
storage device 8905 may connect to thecomputing device 8910 by any suitable means and/or mechanism. In one embodiment, thestorage device 8905 connects to acomputing device 8910 via a mobile computing device. In another embodiment, thestorage device 8905 is embedded in a mobile computing device connectable to thecomputing device 8910. - Upon connection, a request may be received by the
computing device 8910 for access to a resource. In one embodiment, the request is for a desktop environment. In another embodiment, the request is for an application or for a plurality of applications. In still another embodiment, the request is for a virtual machine. - In some embodiments, a determination may be made to provide access to the requested resource via a virtualized environment. In one of these embodiments, the determination is made as described above in connection with
FIG. 8 . In another of these embodiments, the determination is made responsive to information received from thestorage device 8905, such as a rule requiring the determination. - In one embodiment, the
computing device 8910 accesses thestorage device 8905 to access theportable computing environment 8920. In another embodiment, thecomputing device 8910 obtains thevirtualization software 8921 from thestorage device 8905 to establish acomputing environment 8920′. In still another embodiment, thecomputing device 8910 does not obtain thevirtualization software 8921 from thestorage device 8905 as thecomputing device 8910 has access to thevirtualization software 8921 instorage element 128′ or vianetwork 150. In yet another embodiment, thecomputing device 8910 obtains portions of thevirtualization software 8921 from thestorage device 8905. For example, thevirtualization software 8921 on thestorage device 8905 may be an updated version or have updated files to thevirtualization software 8921′ on thecomputing device 8910. In some embodiments, thestorage device 8905 transmits information to thecomputing device 8910. In one of these embodiments, thestorage device 8905 transmits the information with a request for access to a resource. - A virtual machine executing on the computing device provides access to the computing environment, based on the data stored in the storage device (step 8970). In one embodiment, the
computing device 8910 retrieves data from thestorage device 8905. In another embodiment, thecomputing device 8910 accesses thestorage device 8905 to obtain avirtual machine image 8925 used to execute the virtual machine. In still another embodiment, thecomputing device 8910 accesses thestorage device 8905 to obtain data or information identifying a location of theportable computing environment 8920 that may be accessible to thecomputing device 8910. For example, thestorage device 8905 may comprise user data 8930 identifying a Uniform Resource Locator (URL) associated with a location on which avirtual machine image 8925 is stored, the URL accessible by thecomputing device 8910 vianetwork 150. In yet another embodiment, thecomputing device 8910 accesses a storage element identified by the user data 8930, for example, a storage element orremote machine 30 on thenetwork 150 storing thevirtual machine image 8925. - In some embodiments, the
computing device 8910 mounts thestorage device 8905 as a storage, such as a disk, available to thecomputing device 8910. In one of these embodiments, thecomputing device 8910 mounts thestorage device 8905 as removable media. In other embodiments, theloading mechanism 8940 accesses thestorage device 8905. - The
computing device 8910 establishes an environment for executing or providing access to thecomputing environment 8920′. In one embodiment, a virtual machine may be executed in thecomputing environment 8920′ to provide access to a requested resource. In another embodiment, a virtual machine is the requested resource. In still another embodiment, avirtual machine 8925′ executes avirtual machine 8925″. - In one embodiment, the
computing device 8910 executes a virtual machine responsive to avirtual machine image 8925 stored in thestorage device 8905. In another embodiment, thecomputing device 8910 executes avirtual machine 8925′ responsive to the data stored in thestorage device 8905. In still another embodiment, thecomputing device 8910 executes the virtual machine responsive to a policy stored in the storage device. - In one embodiment, the
computing device 8910 retrieves data stored in thestorage device 8905. In another embodiment, thecomputing device 8910 uses an application program stored in thestorage device 8905 to access the data. In still another embodiment, thecomputing device 8910 provides access to a computing environment by executing an operating system providing access to one or more applications identified by information stored in the storage device, the operating system and the one or more applications having access to user data stored in thestorage device 8905. - In one embodiment, the
computing device 8910 installs and/or loads thevirtualization software 8921 to establish thevirtualization layer 8922. In some embodiments, thevirtualization software 8921 is designed and constructed as a portable application that can execute, load or establish thevirtualization layer 8922 on thecomputing device 8910 without requiring installation of thevirtualization software 8921. In other embodiments, thevirtualization software 8921 is automatically installed on thecomputing device 8910 via an installation script. In one of these embodiments, thevirtualization software 8921 is installed without requiring a reboot. In another of these embodiments, thevirtualization software 8921 is installed and thevirtualization layer 8922 established transparently to a user. In still other embodiments, thevirtualization layer 8922 is established using thevirtualization software 8921′ stored on thecomputing device 8910 or accessed vianetwork 150. - In some embodiments, the
computing device 8910 executes ahypervisor 8923 to establish thevirtualization layer 8922. In other embodiments, ahypervisor 8923 on thecomputing device 8910 and in communication with ahypervisor 8923′ on aremote machine 30′ establishes thevirtualization layer 8922. In still other embodiments, ahypervisor 8923 in communication with asession management component 1300 establishes thevirtualization layer 8922. In one of these embodiments, upon establishment of thevirtualization layer 8922, thesession management component 1300 identifies, provisions, and/or executes a virtual machine in thevirtualization layer 8922 as described above in connection withFIG. 8 . In yet other embodiments, theloading mechanism 8940 establishes thevirtualization layer 8922. In further embodiments, thecomputing device 8910 establishes avirtualization layer 8922 in which a virtual machine service component executes. - In one embodiment, the
virtualization layer 8922 has been established prior to thestorage device 8905 connecting to thecomputing device 8910. For example, thevirtualization layer 8922 may have been established for anothercomputing environment 8920′ or during a previous connection of the same or adifferent storage device 8905. In some embodiments, thecomputing device 8910 and/orloading mechanism 8940 establishes thevirtualization layer 8922 and actuates, starts, or executes asession management component 1300 and/orhypervisor 8923. In other embodiments, thecomputing device 8910 and/orloading mechanism 8940 executessession management component 1300 and/orhypervisor 8923 upon loading or executing avirtual machine 8925. - The
computing device 8910 provides access to thecomputing environment 8920′ based on the portable computing environment 8920 (step 8970). In one embodiment, thecomputing device 8910 and/orloading mechanism 8940 accesses thevirtual machine image 8925 fromstorage device 8905 and executes thevirtual machine image 8925 as avirtual machine 8925′ in the establishedvirtualized environment 8922. In another embodiment, thecomputing device 8910 and/orloading mechanism 8940 automatically loads, executes or otherwise establishes thecomputing environment 8920 with thevirtualization layer 8922 upon detection of a connection overnetwork 150. In still another embodiment, thecomputing device 8910 and/orloading mechanism 8940 automatically loads, executes or otherwise establishes thecomputing environment 8920 and thevirtualization layer 8922 upon detection of existence or identification of theportable computing environment 8920 instorage element 128. - In some embodiments, a user may select the
virtual machine image 8925 from thestorage device 8905 for execution as avirtual machine 8925′ via any type and form of user interface. In one of these embodiments, thevirtualization software 8921,virtualization layer 8922,hypervisor 8923, orloading mechanism 8940 may display a user interface for a user to identify avirtual machine image 8925, and/or to execute avirtual machine 8925′ based on avirtual machine image 8925. In another of these embodiments, a client, such as an ICA client, an RDP client, or an X11 client, executes on thecomputing device 8910 and provides the user interface to the user. - In some embodiments, a user may access, read, and/or write user data 8930 during the course of using the established
computing environment 8920′. In one of these embodiments, a user of thecomputing device 8910 may access, read and/or write the user data 8930 to thestorage device 8905. In another of these embodiments, a user of thecomputing device 8910 may edit or modify user data 8930 or may create new data and information in user data 8930. - In other embodiments, a user of the
computing device 8910 may access, read, and/or write user data to thestorage 128′ of thecomputing device 8910. In still other embodiments, thecomputing device 8910 may synchronize user data 8930 on thecomputing device 8910 with user data 8930 on thestorage device 8905. In one of these embodiments, thecomputing device 8910 uses thevirtualization layer 8922 or theloading mechanism 8940 to synchronize the user data 8930. In yet other embodiments, thestorage device 8905 may have a program or application for synchronizing data between thestorage device 8905 and thecomputing device 8910. - In some embodiments, the
storage device 8905 may disconnect from thecomputing device 8910 at any point in time during the establishedcomputing environment 8920′. In other embodiments, thestorage device 8905 may disconnect after thecomputing environment 8920′ is terminated on thecomputing device 8910. In still other embodiments, thecomputing environment 8920′ is automatically terminated upon disconnection of thestorage device 8905 to thecomputing device 8910. In yet other embodiments, thecomputing environment 8920′ may remain established on thecomputing device 8910 after thestorage device 8905 disconnects from thecomputing device 8910. In one of these embodiments, once thecomputing environment 8920′ is established on thecomputing device 8910, thestorage device 8905 may be disconnected. - In some embodiments, the
storage device 8905 can access, read, and/or write user data 8930 to any portion of theportable computing environment 8920. In one of these embodiments, although theportable computing environment 8920 is not established or virtualized oncomputing device 8910, thestorage device 8905 can still access, read, and/or write to and from the user data 8930. In other embodiments, a user may use a first application in the establishedcomputing environment 8920′ to access a file of the user data 8930. In still other embodiments, the user may use a second application on thestorage device 8905 to access the same file of the user data 8930. In yet other embodiments, thevirtualization software 8921 orvirtual image 8925 allows access to the user data 8930, even thoughvirtualization software 8921 orvirtual machine image 8925 is not executing or operating. - Although
FIGS. 89A and 89B are generally discussed with oneportable computing environment 8920 stored in thestorage device 8905, thestorage device 8905 may store a plurality ofportable computing environments 8920 for establishing a corresponding plurality ofcomputing environments 8920′ on thecomputing device 8910. In some embodiments, thecomputing device 8910,loading mechanism 8940, or thevirtualized layer 8920 provides a user interface for the user to select a portable computing environment from storage to establish thecomputing environment 8920. For example, thestorage device 8905 or thecomputing device 8910 may have a portable computing environment selection mechanism as is further discussed in connection withFIG. 92A and withFIG. 93A . In other embodiments, thecomputing device 8910,loading mechanism 8940, or thevirtualized layer 8922 uses one of the plurality of portable computing environments based on a characteristic of the computing device, such as operating system type, or based on user data identifying the portable computing environment to use for the computing device. - Referring now to
FIGS. 90A , amobile computing device 9005 is depicted. In brief overview, themobile computing device 9005 may be any type and form of computer system as described in connection withFIG. 1A andFIG. 1B above. In one embodiment, themobile computing device 9005 comprises a storage device, such as astorage device 8905 as described in connection withFIG. 89A andFIG. 89B . In another embodiment, themobile computing device 9005 is connected to astorage device 8905. In still another embodiment, themobile computing device 9005 comprises a portable storage device removable from a computing device. In yet another embodiment, themobile computing device 9005 has anetwork interface 118 used to connect toremote machines 30 orclient machines 10 on thenetwork 150, such as thecomputing device 8910. Thestorage device 8905 may store aportable computing environment 8920, which in some embodiments includesvirtualization software 8921, avirtual image 8925, and user data 8930. - In some embodiments, the
mobile computing device 9005 stores data associated with a computing environment, executes a virtual machine, and provides access to the computing environment responsive to data stored in themobile computing device 9005. In one of these embodiments, themobile computing device 9005 comprises a stored virtual machine image. In another of these embodiments, themobile computing device 9005 comprises an application program for executing a virtual machine on a computing device. In still another of these embodiments, themobile computing device 9005 provides access to a computing environment by executing an operating system with access to one or more applications identified via data stored on the mobile computing device, the operating system and the one or more applications having access to the user data on the mobile computing device. In other embodiments, themobile computing device 9005 stores theportable computing environment 8920 of one or more users in storage provided by a storage device, such as astorage device 8905 as described above in connection withFIG. 89A and 89B . - In one embodiment, the
mobile computing device 9005 decrypts stored data. In another embodiment, themobile computing device 9005 prevents one of unauthenticated and unauthorized access by a user of themobile computing device 9005 to a computing environment provided by themobile computing device 9005. - Referring now to
FIG. 90B , a flow diagram depicts one embodiment of the steps taken in a method for providing a computing environment by a mobile computing device. In brief overview, a method includes the step of storing, in amobile computing device 9005, data associated with a computing environment (step 9020). A virtual machine executing on the mobile computing device provides access to the computing environment, based on the stored data (step 9025). - In further detail, the
mobile computing device 9005 stores data associated with a computing environment (step 9020). In one embodiment, themobile computing device 9005 receives the data associated with the computing device from a storage device connected to themobile computing device 9005. In another embodiment, the mobile computing device stores the data associated with the computing environment in astorage device 8905 embedded in the mobile computing device. In still another embodiment, themobile computing device 9005 stores user data associated with the computing environment. In yet another embodiment, themobile computing device 9005 stores a virtual machine image. - In one embodiment, the
mobile computing device 9005 stores data associated with a computing environment, the computing environment comprising at least one application program. In another embodiment, themobile computing device 9005 stores data associated with a computing environment, the computing environment comprising an operating system. In still another embodiment, themobile computing device 9005 stores data comprising an operating system. In yet another embodiment, themobile computing device 9005 stores data comprising an application program. In some embodiments, themobile computing device 9005 stores an application program for executing a virtual machine. In other embodiments, themobile computing device 9005 stores virtualization software for executing a virtual machine. - In some embodiments, a request may be received by the
mobile computing device 9005 for access to a resource. In one of these embodiments, the request is for a desktop environment. In another of these embodiments, the request is for an application or for a plurality of applications. In still another of these embodiments, the request is for a virtual machine. In yet another of these embodiments, the request is for access to a computing environment. - In some embodiments, a determination may be made to provide access to the requested resource via a virtualized environment. In one of these embodiments, the determination is made as described above in connection with
FIG. 8 . In another of these embodiments, the determination is made responsive to information received from themobile computing device 9005, such as a rule requiring the determination. - A virtual machine executing on the mobile computing device provides access to the computing environment, based on the stored data (step 9025). In one embodiment, an application program stored in the
mobile computing device 9005 executes to access data associated with the computing environment. In another embodiment, themobile computing device 9005 executes virtualization software, at least a portion of which is stored on themobile computing device 9005. In still another embodiment, themobile computing device 9005 provides access to a computing environment by executing an operating system with access to one or more applications stored on the mobile computing device, the operating system and the one or more applications having access to user data stored in themobile computing device 9005. - In one embodiment, the
mobile computing device 9005 executes a virtual machine, responsive to data stored in themobile computing device 9005. In another embodiment, the mobile computing device executes a virtual machine responsive to a policy stored in themobile computing device 9005. In still another embodiment, themobile computing device 9005 executes a virtual machine that provides access to a requested resource or computing environment, the virtual machine executed responsive to a virtual machine image stored in themobile computing device 9005. In yet another embodiment, themobile computing device 9005 transfers execution of the virtual machine to acomputing device 8910. - Although
FIGS. 90A and 90B are generally discussed with oneportable user environment 8920 stored instorage 8905 of themobile computing device 9005, themobile computing device 9005 may store a plurality ofportable computing environments 8920 for establishing a corresponding plurality ofcomputing environments 8920′ on themobile computing device 9005. - Referring now to
FIG. 91A , a mobile computing device and a computing device are depicted. In brief overview, the mobile computing device stores data associated with a computing environment. The computing device connects to the mobile computing device, executes a virtual machine, and provides access to the computing environment responsive to data stored in the mobile computing device. In one embodiment, the virtual machine executing on the computing device provides access to the computing environment. - In one embodiment, the
mobile computing device 9005 may be any type and form of computer system as described in connection withFIG. 1A andFIG. 1B above. In another embodiment, themobile computing device 9005 comprises astorage device 8905 as described above in connection withFIG. 90A andFIG. 90B . In another embodiment, the mobile computing device may be amobile computing device 9005 as described above in connection withFIG. 90A andFIG. 90B . In some embodiments, themobile computing device 9005 provides access to aportable computing environment 8920 of one or more users in storage provided by a storage device, such as astorage device 8905 as described above in connection withFIG. 89A and 89B . - In some embodiments, the
mobile computing device 9005 and thecomputing device 8910 may have the same processor or computer architecture, such as an X86 based processor architecture. In other embodiments, themobile computing device 9005 may have a different processor or architecture than thecomputing device 8910. For example, thecomputing device 8910 may be a SPARC (Scalable Processor Architecture) and themobile computing device 9005 may be an ARM based architecture. In some embodiments, themobile computing device 9005 and thecomputing device 8910 may both operate a processor, or a data address or bus using the same numbers of bits, such as a 32-bit or 64-bit processor or bus. In other embodiments, themobile computing device 9005 and thecomputing device 8910 may operate on processors and/or a data bus with different bit architectures. Furthermore, themobile computing device 9005 andcomputing device 8910 may operate the same operating system, in one embodiment, and different operating systems, in another embodiment. For example, themobile computing device 9005 may operate a PALM operating system while thecomputing device 8910 runs a WINDOWS operating system. - In one embodiment, a
mobile computing device 9005 has multiple processors. One processor may have higher performance characteristics than the other processor, and each processor may share one or more storage and memory elements. For example, a storage element, such as a disk drive or portable storage device, may include a computing environment. Themobile computing device 9005 may also have a switching mechanism to switch between using a first processor having higher performance characteristics and a second processor having lower performance characteristics, based on operating conditions and applications executing on the device. The processor having lower performance characteristics may be used to execute applications with lower power requirements, such as typical PDA functionality of calendar access and email. When an application requires more power, themobile computing device 9005 may automatically switch execution of such applications to the more powerful processor. - The
computing device 8910 connects to the mobile computing device, executes a virtual machine, and provides access to the computing environment responsive to data stored in themobile computing device 9005. In one embodiment, thecomputing device 8910 may mount thestorage device 8905 of themobile computing device 9005 as a removable hard drive orstorage element 128′ of thecomputing device 8910. In some embodiments, themobile computing device 9005 may be a plug and play device (PnP) of thecomputing device 8910, such that a PnP protocol manufactured by Microsoft Corporation of Redmond, Wash., is used between themobile computing device 9005 andcomputing device 8910, such as via I/O devices 130 a-130 n ornetwork interfaces - In some embodiments, the
computing device 8910 comprises an operational or performance characteristic not provided by themobile computing device 9005. In one of these embodiments, thecomputing device 8910 has a morepowerful processor 102′ and/orlarger memory 122′ than theprocessor 102 andmemory 122 of themobile computing device 9005. In another of these embodiments, thecomputing device 8910 provides an I/O device 130 b, display device, installation medium, or other peripherals, such as a keyboard or printer not available to themobile computing device 9005. In still another of these embodiments, thecomputing device 8910 may provide a feature, a resource, or peripheral desired to be used by the user of themobile computing device 9005. For example, the user may want to access a file or an application provided on aremote machine 30′ available via a connection across thenetwork 150. In yet another of these embodiments, thecomputing device 8910 provides access to machines on anetwork 150, such as those inmachine farm 38, not available to themobile computing device 9005, or to a user of the mobile computing device. - In one embodiment, the
computing device 8910 provides access to acomputing environment 8920′ based on theportable computing environment 8920 provided in themobile computing device 9005. Thecomputing device 8910 executes avirtual machine 8925′ and avirtualization layer 8922 to execute thecomputing environment 8920′ based on thevirtualization software virtual machine image 8925, or user data 230. In some embodiments, the computing device comprises a transceiver for accessing data stored in themobile computing device 9005. - In some embodiments, a loading mechanism on the
mobile computing device 9005 actuates the establishment of thecomputing environment 8920′ on thecomputing device 8910 based on theportable computing environment 8920 stored in themobile computing device 9005. In other embodiments, theloading mechanism 8940 of thecomputing device 8910 actuates the establishment of thecomputing environment 8920′. In yet another embodiment, a loading mechanism on themobile computing device 9005 works in conjunction with theloading mechanism 8940 of thecomputing device 8910 to establish thecomputing environment 8920′. - Referring now to
FIG. 91B , a flow diagram depicts one embodiment of the steps taken in a method for providing access to a computing environment on a computing device via a mobile computing device. In brief overview, a method includes the step of storing, in a mobile computing device, data associated with a computing environment (step 9155). A computing device connects to the mobile computing device (step 9160). A virtual machine executing on the computing device provides access to a computing environment, based on the data stored in the mobile computing device (step 9165). - A mobile computing device stores data associated with a computing environment (step 9155). In one embodiment, the
mobile computing device 9005 may store data associated with a computing environment as described above in connection withFIG. 90A and 90B . In one embodiment, themobile computing device 9005 may comprise a storage device embedded in themobile computing device 9005, such as thestorage device 8905 described in connection withFIG. 89A throughFIG. 90B . - The
computing device 8910 connects to themobile computing device 9005 by any suitable means and/or mechanism (step 9160). In one embodiment, thecomputing device 8910 connects to a storage device, such as astorage device 8905 as described above in connection withFIG. 89A andFIG. 89B , via themobile computing device 9005. Upon connection, a request may be received by thecomputing device 8910 for access to a resource. In one embodiment, the request is for access to a desktop environment. In another embodiment, the request is for an application or for a plurality of applications. In still another embodiment, the request is for a virtual machine. In some embodiments, a determination may be made to provide access to the requested resource via a virtualized environment. In one of these embodiments, the determination is made as described above in connection withFIG. 8 . In another of these embodiments, the determination is made responsive to information received from themobile computing device 9005, such as a rule requiring the determination. - In one embodiment, the
computing device 8910 accesses themobile computing device 9005 to obtain theportable user environment 8920. In another embodiment, thecomputing device 8910 obtains thevirtualization software 8921 to establish thevirtualized environment 8922. In still another embodiment, thecomputing device 8910 does not obtain thevirtualization software 8921 from themobile computing device 9005 as thecomputing device 8910 has access to thevirtualization software 8921 instorage element 128′ or vianetwork 150. In yet another embodiment, thecomputing device 8910 obtains portions of thevirtualization software 8921 from themobile computing device 9005. For example, thevirtualization software 8921 on themobile computing device 9005 may be an updated version or have updated files to thevirtualization software 8921′ on thecomputing device 8910. In some embodiments, themobile computing device 9005 transmits information to thecomputing device 8910. In one of these embodiments, themobile computing device 9005 transmits the information with a request for access to a resource. - In one embodiment, the
computing device 8910 accesses themobile computing device 9005 to obtain thevirtual machine image 8925. In another embodiment, thecomputing device 8910 accesses themobile computing device 9005 to obtain data or information identifying a location of theportable user environment 8920 in any storage that may be accessible to thecomputing device 8910. For example, themobile computing device 9005 may comprise user data 8930 identifying a Uniform Resource Locator (URL) associated with a location on which avirtual machine image 8925 is stored, the URL accessible by thecomputing device 8910 vianetwork 150. In still another embodiment, thecomputing device 8910 accesses a storage element identified by the user data 8930, for example, a storage element onnetwork 150 storing thevirtual machine image 8925. In some embodiments, thecomputing device 8910 mounts themobile computing device 9005 as a storage element, such as a disk, available to thecomputing device 8910. For example, in one embodiment, thecomputing device 8910 mounts themobile computing device 9005 as removable media. In one embodiment, theloading mechanism 8940 accesses themobile computing device 8905. - In some embodiments, the
computing device 8910 provides access to a computing environment by executing an operating system with access to one or more applications identified via data stored on the mobile computing device, the operating system and the one or more applications having access to the user data on the storage device. In other embodiments, the computing device prevents one of unauthenticated or unauthorized access by a user of themobile computing device 9005 to a computing environment provided by thecomputing device 8910. In still other embodiments, thecomputing device 8910 decrypts data stored on themobile computing device 9005. - A virtual machine executing on the
computing device 8910 provides access to a computing environment, based on data stored in the mobile computing device 9005 (step 9165). In one embodiment, thecomputing device 8910 establishes a virtualized environment for providing access to thecomputing environment 8920′ by executing thevirtual machine 8925. In another embodiment, a virtual machine may be executed in theuser environment 8920′ to provide access to a requested resource. In still another embodiment, a virtual machine is the requested resource. In some embodiments, thecomputing device 8910 executes a virtual machine responsive to avirtual machine image 8925 stored in themobile computing device 9005. In other embodiments, thecomputing device 8910 executes a virtual machine responsive to data stored in themobile computing device 9005. - In one embodiment, an application program stored in the
mobile computing device 9005 is executed to access data associated with a computing environment. In another embodiment, thecomputing device 8910 executesvirtualization software 8921′ by accessing at least a portion of thevirtualization software 8921 stored in themobile computing device 9005. - In one embodiment, the
computing device 8910 executes thevirtualization software 8921 to establish thevirtualization layer 8922. In some embodiments, thevirtualization software 8921 is automatically installed on thehost computing device 8910 via an installation script. In one of these embodiments, thevirtualization software 8921 is installed without requiring a reboot. In another of these embodiments, thevirtualization software 8921 is installed and thevirtualization layer 8922 established transparently to a user. - In some embodiments, the
computing device 8910 executes ahypervisor 8923 to establish thevirtualization layer 8922. In other embodiments, ahypervisor 8923 on thecomputing device 8910 and in communication with ahypervisor 8923′ on aremote machine 30′ establishes thevirtualization layer 8922. In still other embodiments, ahypervisor 8923 in communication with asession management component 1300 establishes thevirtualization layer 8922. In one of these embodiments, upon establishment of thevirtualization layer 8922, thesession management component 1300 identifies, provisions, and/or executes a virtual machine in thevirtualization layer 8922 as described above in connection withFIG. 8 . In yet other embodiments, theloading mechanism 8940 establishes thevirtualization layer 8922. In one embodiment, thecomputing device 8910 establishes avirtualization layer 8922 in which a virtual machine service component executes. - In one embodiment, the
virtualization layer 8922 has been established prior to themobile device 9005 connecting to thecomputing device 8910. For example, thevirtualization layer 8922 may have been established for anotheruser environment 8920′ or during a previous connection of the same or differentmobile computing device 9005. In some embodiments, thecomputing device 8910 and/orloading mechanism 8940 establishes thevirtualization layer 8922 and actuates, starts, or executes asession management component 1300 and/orhypervisor 8923. In other embodiments, thecomputing device 8910 and/orloading mechanism 8940 executes thesession management component 1300 and/orhypervisor 8923 upon loading or executing avirtual machine 8925. - In some embodiments, the
computing device 8910 establishes, executes or otherwise provides thecomputing environment 8920′ based on theportable computing environment 8920. In one embodiment, thecomputing device 8910 and/orloading mechanism 8940 accesses thevirtual image 8925 from themobile computing device 9005 and loads or executes thevirtual machine image 8925 as avirtual machine 8925 in the establishedvirtualized environment 8922. In another embodiment, thecomputing device 8910 and/orloading mechanism 8940 automatically loads, executes or otherwise establishes thecomputing environment 8920 with thevirtualization layer 8922 upon detection of a connection overnetwork 150. In still another embodiment, thecomputing device 8910 and/orloading mechanism 8940 automatically loads, executes or otherwise establishes thecomputing environment 8920 and thevirtualization layer 8922 upon detection of existence or identification of theportable computing environment 8920 on themobile computing device 9005. - In some embodiments, a user may select the
virtual machine image 8925 from themobile computing device 9005 for execution as avirtual machine 8925 via any type and form of user interface. In one of these embodiments, thevirtualization software 8921,virtualization layer 8922,hypervisor 8923, orloading mechanism 8940 may display a user interface for a user to identify avirtual image 8925, and/or to execute avirtual machine 8925 based on avirtual image 8925. In another of these embodiments, a client, such as an ICA client, an RDP client, or an X11 client, executes on thecomputing device 8910 and provides the user interface to the user. - In some embodiments, a user may access, read, and/or write user data 8930 during the course of using the established
user environment 8920′. In one of these embodiments, the userhost computing device 8910 may access, read and/or write the user data 8930 to themobile computing device 9005. In another of these embodiments, the user of thecomputing device 8910 may edit or modify user data 8930 or may create new data and information in user data 8930. - In other embodiments, a user of the
computing device 8910 may access, read, and/or write user data to thestorage element 128′ of thecomputing device 8910. In still other embodiments, thecomputing device 8910 may synchronize user data 8930 on thecomputing device 8910 with user data 8930 on themobile computing device 8905. In one of these embodiments, thecomputing device 8910 uses thevirtualization layer 8922 or theloading mechanism 8940 to synchronize the user data 8930. In yet other embodiments, themobile computing device 9005 may have a program or application for synchronizing data, such as files and folders, between themobile computing device 9005 and thecomputing device 8910. - In one embodiment, the
mobile computing device 9005 may disconnect from thecomputing device 8910. In some embodiments, themobile computing device 9005 may disconnect at any point in time during the use of the establishedcomputing environment 8920′. In other embodiments, themobile computing device 9005 may disconnect after thecomputing environment 8920′ is terminated on thecomputing device 8910. In still other embodiments, theuser environment 8920′ is automatically terminated upon disconnection of themobile computing device 9005 from thecomputing device 8910. In one embodiment, thecomputing environment 8920′ may remain established on thecomputing device 8910 after themobile computing device 9005 disconnects from thecomputing device 8910. In some embodiments, once thecomputing environment 8920′ is established on thecomputing device 8910, themobile computing device 9005 may be disconnected. - In some embodiments, the
mobile computing device 9005 can access, read, and/or write user data 8930 to any portion of theportable computing environment 8920. For example, in one embodiment, although theportable computing environment 8920 is not established or virtualized oncomputing device 8910, themobile computing device 9005 can still access, read, and/or write to and from the user data 8930. In one embodiment, the user may use a first application in the establishedcomputing environment 8920′ to access a file of the user data 8930. In another embodiment, the user may use a second application on themobile computing device 9005 to access the same file of the user data 8930. In some embodiments, thevirtualization software 8921 orvirtual machine image 8925 allows access to the user data 8930, even thoughvirtualization software 8921 orvirtual image 8925 is not executing or operating. - In some embodiments, the
computing device 8910,loading mechanism 8940, or thevirtualized layer 8920 provides a user interface for the user to select a portable computing environment from storage to establish thecomputing environment 8920. For example, themobile computing device 9005 or thecomputing device 8910 may have a portable computing environment selection mechanism, as discussed in greater detail below. In other embodiments, thecomputing device 8910,loading mechanism 8940, or thevirtualized layer 8922 uses one of the plurality of portable computing environments based on a characteristic of thecomputing device 8910, such as an operating system type, or based on user data identifying the portable computing environment to use for thecomputing device 8910. - Referring now to
FIG. 92A , in one embodiment, thecomputing device 8910 further comprises acomputing environment selector 9250. In brief overview,FIG. 92A depicts amobile computing device 9005 connected to acomputing device 8910 via anetwork 150. Themobile computing device 9005 further comprises astorage element 128, an I/O device or interface 130, and aloading mechanism 8940. Themobile computing device 9005 stores one or moreportable computing environments 8920 a-8920 n instorage element 128. In some embodiments, thestorage element 128 comprises a storage device, such as thestorage device 8905 described above in connection withFIGS. 90A and 90B . - In some embodiments, the
mobile computing device 9005 does not have a user input I/O device 130 and/or a user output I/O device 130. In other embodiments, themobile computing device 9005 obtains or derives power from the connection to thecomputing device 8910, such as for example, from a USB connection. In still other embodiments, themobile computing device 9005 is a card of the following type: CompactFlash, Memory Stick, MultiMediaCard, Secure Digital, or SmartMedia. - In one embodiment, the
storage element 128 stores a plurality of computing environments and a plurality of virtual machine images. In another embodiment, thestorage element 128 stores one or more of a plurality of virtual machine images providing one of a different operating system or a different application than at least one virtual machine images accessible to the computing device. In still another of these embodiments, thestorage element 128 stores one of the data associated with at least one computing environment and the at least one virtual machine image in an encrypted format. - In some embodiments, the
mobile computing device 9005 stores data associated with at least oneportable computing environment 8920. In one of these embodiments, themobile computing device 9005 stores data associated with a plurality ofportable computing environments 8920 a-8920 n. In another of these embodiments, each of theportable computing environments 8920 a-8920 n comprises thesame virtualization software 8921 a-8921 n. In still another of these embodiments, theportable computing environments 8920 a-8920 n comprisedifferent virtualization software 8921 a-8921 n. - In other embodiments, the
portable computing environments 8920 a-8920 n may comprise at least onevirtualization software 8921 a that is the same as another virtualization software 8921 b. In other embodiments, theportable computing environments 8920 a-8920 n may comprise at least onevirtualization software 8921 a that is different from another virtualization software 8921 b. In yet another embodiment, there may be one copy of thevirtualization software 8921 to be used for each of thevirtual images 8925 a-8925 n instorage 128. - In one embodiment, one or more of the
virtual machine images 8925 a-8925 n provides access to the same operating system or are used on the same operating system. In another embodiment, one or more of thevirtual machine images 8925 a-8925 n comprises a different operating system or executes on a different operating system. In some embodiments, thevirtual machine images 8925 a-8925 n share the same user data 8930. In other embodiments, thevirtual machine images 8925 a-8925 n may each have distinct sets of user data 8930 a-8930 n. In one embodiment, one of thevirtual machine images 8925 a-8925 n may provide access to a first computing environment, for example, a work desktop environment. In another embodiment, one of thevirtual machine images 8925 a-8925 n may provide access to a second computing environment, for example, a home desktop environment. In some embodiments, avirtual machine image 8925 a-8925 n may provide access to a computing environment comprising a set of one or more portable applications of the user. Themobile computing device 9005 may store any desired set of one ormore user environments 8920 a-8920 n. - The
mobile computing device 9005 includes a connector for connecting themobile computing device 9005 to a computing device, such as thecomputing device 8910. In one embodiment, the connector is connectable to acomputing device 8910 via one of the following: a wireless connection, a USB connection, a Firewire connection, a Bluetooth connection, a Wi-Fi connection, a network connection, and a docking connection. - The
mobile computing device 9005 includes aloading mechanism 8940 for automatically loading the at least one computing environment from the storage element onto a computing device upon connection of the mobile computing device to the computing device via the connector. In one embodiment, theloading mechanism 8940 automatically installs the at least one computing environment on thecomputing device 8910. In another embodiment, theloading mechanism 8940 automatically executes the at least one computing environment on thecomputing device 8910. In still another embodiment, theloading mechanism 8940 accesses at least one virtual machine image stored in thestorage element 128 to execute a virtual machine, the virtual machine providing access to a computing environment. - In some embodiments, the
mobile computing device 9005 includes a user interface provided for a user to select one virtual machine image to execute on thecomputing device 8910 from a plurality of virtual machine images. In other embodiments, thecomputing device 8910 provides the user interface. - In one embodiment, a selection mechanism, such as a
computing environment selector 9250 provides a user interface for a user to select one of theportable computing environments 8920 a-8920 n to execute or establish on thecomputing device 8910. Thecomputing environment selector 9250 may comprise software, hardware, or any combination of software and hardware. In some embodiments, thecomputing environment selector 9250 has a graphical user interface providing a list of the one or moreportable computing environment 8920 a-8920 n stored in themobile computing device 9005. In other embodiments, thecomputing environment selector 9250 may comprise a command line interface. In one embodiment, thecomputing environment selector 9250 comprises software, stored on or provided by either themobile computing device 9005 or thecomputing device 8910. In one embodiment, thevirtualized software 8921,virtualized layer 8922 orportable computing environment 8920 comprises thecomputing environment selector 9250. In another embodiment, thecomputing environment selector 9250 is executed on themobile computing device 9005. In some embodiments, thecomputing environment selector 9250 comprises a hardware and software mechanism on themobile computing device 9005 for a user to select one of theportable computing environments 8920 a-8920 n. For example, themobile computing device 9005 may provide via a screen or visual display unit a text based user interface with a thumb wheel to select aportable computing environment 8920 a-8920 n. - Referring now to
FIG. 92B , a flow diagram depicts another embodiment of the steps taken in a method for establishing a computing environment on a computing device via a mobile computing device. By connecting themobile computing device 9005 carrying aportable computing environment 8920 a-8920 n to acomputing device 8910, a user establishes avirtualized computing environment 8920′ on thecomputing device 8910. In brief overview, atstep 9255, themobile computing device 9005 is connected to thecomputing device 8910, and atstep 9260, thecomputing device 8910 detects the connection. Atstep 9265, and in some embodiments, the user selects aportable computing environment 8920 a-8920 n from storage to be used on thecomputing device 8910. Atstep 9270, aportable computing environment 8920 a-8920 n in thestorage element 128 is decrypted. Atstep 9275, thevirtualization software 8921 is automatically loaded on thecomputing device 8910. Atstep 9280, thecomputing device 8910 executes avirtual machine 8925′ in thevirtualized environment 8922 based on theportable computing environment 8920 a-8920 n, such as by accessingvirtual image 8925. Atstep 9285, thecomputing device 8910 controls access to thecomputing device 8910 via thevirtualized computing environment 8920′. - In further detail, at
step 9255, themobile computing device 9005 is connected to thecomputing device 8910 by any suitable means and/or mechanisms. Atstep 9260, thecomputing device 8910 detects the connection. In some embodiments, the operating system of thecomputing device 8910 detects connection of themobile computing device 9005. In other embodiments, a device manager detects the connection of themobile computing device 9005. In still other embodiments, a plug-and-play manager detects the connection of themobile computing device 9005. In other embodiments, a device driver for thecomputing device 8910 detects the connection. In yet another embodiment, theloading mechanism 8940′ detects the connection of themobile computing device 9005. - In some embodiments, upon detection of the connection, the
computing device 8910 may automatically install, load, and execute a device driver, software, application, process, service, thread or task to perform any of the operations described herein, as described above in connection withFIGS. 89A and 89B ,FIGS. 90A and 90B , andFIGS. 91A and 91B . In other embodiments, upon detection of the connection,computing device 8910 may perform any type and form of authentication and authorization of the user of themobile computing device 9005. - At
step 9265, the user selects aportable computing environment 8920 a-8920 n fromstorage element 128 to establish as thecomputing environment 8920′ on thecomputing device 8910. For example, the user may identify or select, via thecomputing environment selector 9250, theportable computing environment 8920 a-8920 n to run on thecomputing device 8910. In one embodiment, thecomputing device 8910 displays a user interface providing a list ofportable computing environments 8920 a-8920 n from themobile computing device 9005 for the user to select to establish on thecomputing device 8910. In some embodiments, thecomputing device 8910 executes an application program identified via thestorage element 128 of themobile computing device 9005, such as via an autorun file. In another embodiment, themobile computing device 9005 has a visual display unit displaying a user interface for the user to select one of theportable computing environments 8920 a-8920 n. In some embodiments, one of theportable computing environments 8920 a-8920 n is identified as adefault computing environment 8920 to establish on thecomputing device 8910. In another embodiment, theportable computing environments 8920 a-8920 n are identified in an order or preference or priority. In one embodiment, themobile computing device 9005 comprises oneportable computing environment 8920. In this embodiment, theportable computing environment 8920 may not need to be selected by the user and is automatically used by thecomputing device 8910. In another embodiment, although there is oneportable computing environment 8920 on themobile computing device 9005, the user may select the oneportable computing environment 8920. - At
step 9270, thecomputing device 8910 may perform decryption on any portion ofstorage element 128 which may be encrypted. In one embodiment, thestorage element 128 comprises an encrypted file system. In another embodiment, thevirtualization software 8921,virtual image 8925 and/or user data 8930, or any portions thereof may be encrypted. In one embodiment, thecomputing device 8910, decrypts the portion ofstorage 128 using a key via theloading mechanism 8940′, thevirtualization layer 8920, or another set of executable instructions. In some embodiments, the key may a public key. In other embodiments, the key may be a private key. In one embodiment, the decryption key may be identity-based, such as based on the identity of a user authenticated via thecomputing device 8910. In another embodiment, the user's authentication credentials, such as user id and/or password, may be used to generate or obtain a key for decryption. For example, the user's authentication credentials may be used to obtain a key stored in the database. In another embodiment, thecomputing device 8910 generates a private key based on performing an algorithm on the user's authentication credentials and a public key, such as a public key provided by a trusted third party. In yet another embodiment, themobile computing device 9005 may store a key that is used by thecomputing device 8910 to authenticate the user and/or generate a decryption key. In some embodiments, thecomputing device 8910 uses a ticket authority to obtain a ticket for decrypting the encrypted portions ofstorage 128. Any type and form of authentication technologies may be used in performing the operations described herein, such as password based authentication or biometric authentication. In one embodiment, a token is used to provide two-factor authentication, such as a token manufactured by RSA Security Inc. of Bedford, Mass. - At
step 9275, thecomputing device 8910 provides or establishes thevirtualization layer 8922 on thehost computing device 8910 as described above in connection withFIGS. 89A-89B ,FIGS. 90A-90B , andFIGS. 91A-91B . - At
step 9280, thecomputing device 8910 automatically loads, executes or otherwise establishes avirtual machine 8925 a-8925 n to provide access to aportable computing environment 8920 a-8920 n on thevirtualized layer 8922. In one embodiment, thecomputing device 8910 and/orloading mechanism 8940 accesses thevirtual machine image 8925 a-8925 n from thestorage element 128 and loads or executes thevirtual machine image 8925 a-8925 n as avirtual machine 8925′ in the establishedvirtualized environment 8922. In another embodiment, thecomputing device 8910 loads, executes or establishes a virtual machine as described above in connection withFIGS. 89A-89B ,FIGS. 90A-90B , andFIGS. 91A-91B . - At
step 9285, in some embodiments, thecomputing environment 8920′ orvirtual machine 8925 is established in a secured manner. In one embodiment, the establishedcomputing environment 8920′ protects access to user data 8930 or portions of thecomputing environment 8920 from the environment of thecomputing device 8910 external to thecomputing environment 8920′. In one embodiment, thevirtualization software 8921 and/orvirtualization layer 8922 ensures that contents of thevirtual machine 8925′ remain secure while running on thecomputing device 8910. In some embodiments, thevirtualization software 8921 and/orvirtualization layer 8922 ensures that no input or no output is made available to the environment of thecomputing device 8910 in a persistent fashion. For example, in one embodiment, thevirtualization software 8921 and/orvirtualization layer 8922 may disable clipboard access between the host environment and thevirtual machine 8925′. In another embodiment, thevirtualization software 8921 and/orvirtualization layer 8922 disables access to a file system, or portion thereof, of thecomputing device 8910. In other embodiments, thevirtualization software 8921 and/orvirtualization layer 8922 prevents paging by thevirtual machine 8925′ to the page file of thecomputing device 8910. In one embodiment, thevirtual machine 8925′ uses thestorage element 128 on themobile computing device 9005 for file and data operations. In some embodiments, thevirtualization layer 8922 acts as firewall between thevirtual machine 8925′ and the host environment. In yet another embodiment, thevirtualization software 8921 and/orvirtualization layer 8922 may provide a configuration mechanism, such as a user interface, to select which actions may be performed and/or data shared between thecomputing device 8910 and thevirtual machine 8925′. - Although this method is generally discussed as establishing a
computing environment 8920′ from one of a plurality ofportable computing environments 8920 a-8920 n, a plurality ofcomputing environments 8920′, 8920″ may be established on thecomputing device 8910. For example, afirst computing environment 8920′ may be established on thecomputing device 8910 using a firstportable computing environment 8920 a from themobile computing device 9005, and asecond computing environment 8920″ may be established on thecomputing device 8910 using a second portable computing environment 8920 b from themobile computing device 9005. - Referring now to
FIGS. 93A-93D , block diagrams depict embodiments of systems and methods for a mobile computing device to one or more hardware resources. The hardware resource may provide access to resources, such as a processor or memory with greater power, size, capacity or performance as compared to corresponding resources of the mobile computing device.FIG. 93A depicts an embodiment of amobile computing device 9005 connecting to a docking station or device having a processor, memory and other computing resources for use by the mobile computing device.FIG. 93B depicts an embodiment of a mobile computing device connecting to a second hardware resource, via a docking mechanism, to use a processor, memory and/or resources of the second hardware resource.FIG. 93C depicts an embodiment of a docking station providing connectivity to a second hardware resource, such as a computing device, to use a processor, memory and/or resources of the second hardware resource.FIG. 93D depicts one embodiment of the steps taken in a method of providing to a mobile computing device one or more hardware resources, as described in the environments illustrated inFIGS. 93A-93C . In some embodiments, a portable computing environment may be established on the hardware resource in accordance with any of the systems and method described in conjunction withFIGS. 89A-89B , 90A-90B, 91A-91C, 92A-92B. In other embodiments, the computing environment of the mobile computing device is accessed using the processor, memory, and/or resources of the hardware resource. - Referring now to
FIG. 93A , in brief overview, the depicted system includes amobile computing device 9005 connected to ahardware resource 9302. Themobile computing device 9005 has acentral processing unit 102. Thehardware resource 9302 has acentral processing unit 102′. In one embodiment, thehardware resource 9302 includes adocking station 9310 providing access to thehardware resource 9302. In another embodiment, thedocking station 9310 includes aprocessor 102′ andmemory 122′. In still another embodiment, the mobile computing device provides the functionality of amobile computing device 9005 as described above in connection withFIGS. 90A , 90B, 91A, 91B, 92A, and 92B. - The
mobile computing device 9005 comprises aconnection mechanism 9305 for connecting themobile computing device 9005 to thehardware resource 9302. Themobile computing device 9005 uses thecentral processing unit 102 to effect an initial quanta of work and uses thecentral processing unit 102′ of thehardware resource 9302 to effect subsequent quanta of work when connected to thehardware resource 9302. In one embodiment, themobile computing device 9005 uses theconnection mechanism 9305 to switch to using the processing or computing capabilities of thehardware resource 9302 upon or after connecting to thehardware resource 9302. For example, themobile computing device 9005 may execute acomputing environment 8920 on thehardware resource 9302 after connecting to thedocking station 9310. - In one embodiment, the
mobile computing device 9005 connects to thehardware resource 9302 via connection acrossnetwork 150. In another embodiment, themobile computing device 8905 is docked to thehardware resource 9302 via a I/O device mechanism 130 a-130 n designed and constructed to connect to, and/or interface or communicate with the type and form ofmobile computing device 9005. In one embodiment, themobile computing device 9005 is docked to thehardware resource 9302 via a docking connector. For example, one of thedevices device - The
connection mechanism 9305 may comprise software, hardware, or any combination of software and hardware enabling themobile computing device 9005 to access thehardware resource 9302. In some embodiments, theconnection mechanism 9305 comprises any type and form of integrated circuit, such as a Field Programmable Gate Array (FPGA), Programmable Logic Device (PLD), or Application Specific Integrated Circuit (ASIC) capable of performing any of the operations described herein. - In one embodiment, the
connection mechanism 9305 comprises one of the following: a wireless connection, a USB connection, a Firewire connection, a Bluetooth connection, a Wi-Fi connection, a network connection, and a docking connection. - In some embodiments, the
connection mechanism 9305 is enables the system or mother board of themobile computing device 9005 to use aprocessor 102′ and/ormemory 122′ of thehardware resource 9302. In other embodiments, theconnection mechanism 9305 communicates with any system or data bus of themobile computing device 9005 to transmit and receive signals directing themobile computing device 9005 to use a resource of thehardware resource 9302, such as theprocessor 102′ andmemory 122′ of thedocking station 9310. In some embodiments, theconnection mechanism 9305 may communicate with a system or data bus of thehardware resource 9302 to enable the use of resources of thehardware resource 9302 by themobile computing device 9005. - In one embodiment, the
connection mechanism 9305 may have themobile computing device 9005 reboot, restart or reset when connected or docked to thehardware resource 9302. In another embodiment, theconnection mechanism 9305 may allow real-time switching to use a computing resource of thehardware resource 9302 without a reboot or restart. In some embodiments, theconnection mechanism 9305 transfers data frommemory 122 on themobile computing device 9005 tomemory 122′ ofhardware resource 9302. In other embodiments, theconnection mechanism 9305 transfers execution of a process from aprocessor 102 on themobile computing device 9005 toprocessor 102′ of thehardware resource 9302. In still other embodiments, themobile computing device 9005 transfers central processing control and management to thehardware resource 9302. In yet other embodiments, theconnection mechanism 9305 provides for the use of theprocessor 102 and/ormemory 122 on themobile computing device 9005 in conjunction with theprocessor 102′ and/ormemory 122′ of thehardware resource 9302. For example, when connected to thehardware resource 9302, themobile computing device 9005 may operate as a multi-processor device. - In some embodiments, the
mobile computing device 9005 and/orconnection mechanism 9305 maintains the state of theprocessor 102 and/ormemory 122 on themobile computing device 9005. As such, in some of these embodiments, upon disconnection from thehardware resource 9302, themobile computing environment 9005 continues from a state prior to connection to thehardware resource 9302. In others of these embodiments, theconnection mechanism 9305 transfers data, information, and execution or control from aprocessor 102′ and/ormemory 122′ to theprocessor 102 and/ormemory 122 of themobile computing device 9005. - In one embodiment, the
connection mechanism 9305 comprises any type and form of user interface to receive user input regarding connection to thehardware resource 9302, use of hardware resources, and transfer of data and control between hardware resources. For example, theconnection mechanism 9305 may display a graphical user interface upon docking to thehardware resource 9302 for the user to setup, configure, control and/or manage the use of thehardware resource 9302. - In some embodiments, the
hardware resource 9302 uses thestorage element 128 of themobile computing device 9005 to provide access to a computing environment. In one of these embodiments, thehardware resource 9302 executes an operating system stored instorage element 128 of the connectedmobile computing device 9005. In another of these embodiments, thehardware resource 9302 mounts thestorage element 128 of the connectedmobile computing device 9005 for access by thehardware resource 9302. In still another of these embodiments, the user uses the operating system or computing environment of thehardware resource 9302 but executes applications and accesses data on thestorage element 128 of themobile computing device 9005. In yet another of these embodiments, themobile computing device 9005 may store portable applications to execute in thehardware resource 9302. - In one embodiment, the
hardware resource 9302 executes a virtual machine to provide access to a computing environment stored in themobile computing device 9005. In another embodiment, thehardware resource 9302 executes a virtual machine, the virtual machine providing access to a virtualized computing environment. In still another embodiment, a file from a storage location provided by themobile computing device 9005 is accessed by a user via thehardware resource 9302 when themobile computing device 9005 is connected to thehardware resource 9302, and the file is accessed by the user, via themobile computing device 9005, when themobile computing device 9005 is not connected to thehardware resource 9302. - Still referring to
FIG. 93A and in one embodiment, thehardware resource 9302 comprises adocking station 9310, thedocking station 9310 comprising acomputer system 100. In some embodiments, the docking station 9110 may be any type and form ofcomputer system 100, as described above in connection withFIGS. 1A-1B . In one of these embodiments, and as described in connection withFIGS. 1A-1B , the docking station 9110 may comprise components including, but not limited to, aprocessor 102′,memory 122,storage 128, anetwork interface 118′, and/or one or more I/O devices 130 a-130 n′. In another of these embodiments, the docking station 9110 is connected to adisplay device 124, akeyboard 126, and/or apointing device 127. Thedocking station 9310 may also be connected to or provide access to other hardware resources and computing peripherals. In some embodiments, thedocking station 9310 provides access to resources of anothercomputer system 100 via anetwork 150. - In one embodiment, the
hardware resource 9302 has aprocessor 102′ having a higher processor speed than theprocessor 102 of themobile computing device 9005. In another embodiment, thehardware resource 9302 has aprocessor 102′ comprising a processor architecture different than a processor architecture of theprocessor 102 of themobile computing device 9005. In still another embodiment, themobile computing device 9005 uses theprocessor 102 to effect an initial quanta of work and, upon connection to thehardware resource 9302 via theconnection mechanism 9305, uses theprocessor 102′ to effect a subsequent quanta of work. In yet another embodiment, themobile computing device 9005 determines that amemory 122′ of thehardware resource 9302 has a memory size larger than a memory size of amemory 122 of themobile computing device 9005 and uses thememory 122′ of thehardware resource 9302 to effect subsequent quanta of work. - In some embodiments, the
mobile computing device 9005 uses a first operating system executing on the first central processing unit when not connected to the hardware resource and a second operating system executing on the second central processing unit when connected to the hardware resource. In one of these embodiments, the second operating system is different than the first operating system. - Referring now to
FIG. 93B , another embodiment of thehardware resource 9302 and themobile computing device 9005 is depicted. In brief overview, themobile computing device 9005 connects to adocking station 9310 across anetwork 150, and in turn,docking station 9310 connects to acomputing device 8910. In this embodiment, thehardware resource 9302 includes adocking station 9310 connected to or in communication with acomputing device 8910. Instead of providing resources, such as aprocessor 102′ andmemory 122′ as depicted inFIG. 93A , thedocking station 9310 provides access to resources of asecond computing device 8910 via the connection acrossnetwork 150′. In one embodiment, after connection to thedocking station 9310, themobile computing device 9005 uses resources of thecomputing device 8910 via connections acrossnetworks - Referring now to
FIG. 93C , another embodiment of thehardware resource 9302 and themobile computing device 9005 is depicted. In brief overview, themobile computing device 9005 connects to thecomputing device 8910 viadocking mechanism 9310. In this embodiment, thehardware resource 9302 includes acomputing device 8910 having adocketing mechanism 9310, such as an I/O device or mechanism 130, to dock themobile computing device 9005. After connection viadocking mechanism 9310, themobile computing device 9005 uses the resources of thecomputing device 8910, such as a processor and/or memory. In some embodiments, thehardware resource 9302 provides access themobile computing device 9005 with access to a peripheral computing device. - In any of the embodiments depicted in
FIGS. 93A-93C , thehardware resource 9302 may provide resources and capabilities offering improved power, performance, or other operating or performance characteristics desired by the user of themobile computing device 8905 or suitable for one or more applications of the mobile computing device, as described in more detail above in connection withFIGS. 89A-89B , 90A-90B, 91A-91B, and 92A-92B. - Referring now to
FIG. 93D , a flow diagram depicts one embodiment of the steps taken in a method for providing to a mobile computing device one or more hardware resources. In brief overview, the mobile computing device uses a first central processing unit of themobile computing device 9005 to effect an initial quanta of work (step 9355). Themobile computing device 9005 connects to ahardware resource 9302 including a second central processing unit (step 9360). The mobile computing device uses a second central processing unit of thehardware resource 9302 to effect subsequent quanta of work (step 9365). - A mobile computing device uses a first central processing unit to effect an initial quanta of work (step 9355). In one embodiment, the mobile computing device is a
computer 100 as described above in connection withFIG. 1A and 1B . In another embodiment, the mobile computing device is amobile computing device 9005 as described above in connection withFIGS. 90A-92B . - The
mobile computing device 9005 connects to ahardware resource 9302 including a central processing unit (step 9360). In one embodiment, themobile computing device 9005 connects to thehardware resource 9302 by any suitable means and/or mechanisms. In some embodiments, themobile computing device 8905 connects or docks to adocking station 9310 providing one or more resources. In one of these embodiments, themobile computing device 9005 connects to adocking station 9310 having aprocessor 102′ and/ormemory 122′. In another of these embodiments, themobile computing device 9005 connects to adocking station 9310 providing a connection to asecond computing device 8910, thesecond computing device 8910 including aprocessor 102′. In still another of these embodiments, themobile computing device 9005 connects or docks to adocking mechanism 9310 of ahost computing device 8910. - In some embodiments, the
mobile computing device 8905 and the docking station 9110 may connect via any type and form of connection, wired, wireless or otherwise, including, but not limited to, via a wireless connection, a Wi-Fi connection, a USB connection, a Firewire connection, a Bluetooth connection, a network connection, and a docking connection. Themobile computing device 8905 and docking station 9110 may communicate via any type and form of protocol, such as a device, bus, communication, application, data, or network protocol. - The
mobile computing device 9005 uses a central processing unit of the hardware resource 9302 (step 9370). In one embodiment, themobile computing device 9005 initiates use of aprocessor 102′ and/ormemory 122′ of thehardware resource 9302 via aconnection mechanism 9305. In another embodiment, themobile computing device 9005 transfers execution control and management to the central processing unit of thehardware resource 9302. In still another embodiment, themobile computing device 9005 transfers data and information to the processor and/or memory of thehardware resource 9302. In some embodiments, themobile computing device 9005 uses the processor and/or memory of thehardware resource 9302 as a second processor and/or memory for themobile computing device 9005. - In one embodiment, the
mobile computing device 9005 connects to ahardware resource 9302 comprising one of the following: a first docking station having the second central processing unit; a second computing device having the second central processing unit; and a second docking station providing access to a third computing device having the second central processing unit. - In some embodiments, an application program on the
mobile computing device 9005 executes in theprocessor 102′ and usesmemory 122′ of the computing environment 9102 and displays on a visual display unit of themobile computing device 9005. In other embodiments, an application program executing on the processor and using the memory of thehardware resource 9302 receives user input from an input device of themobile computing device 9005. In still other embodiments, an application program executing on the processor and using the memory of thehardware resource 9302 displays on adisplay device 124 of thehardware resource 9302 while receiving input from an input mechanism of themobile computing device 9005. - In one embodiment, an application program executing on the processor and using the memory of the
hardware resource 9302 displays on a visual display unit of themobile computing environment 9005 while receiving input from an input device of thehardware resource 9302, such askeyboard 126 andpointing device 127. In some embodiments, the computing environment ofmobile computing device 9005 executes on the processor and memory of themobile computing device 9005 but also uses a resource of thehardware resource 9302, such as a network connection, printer, display device, input device, or any I/O device 120. - In one embodiment, the
mobile computing device 9005 determines that the second central processing unit has a processor speed greater than a processor speed of the first central processing unit and uses the second central processing unit of the hardware resource to effect subsequent quanta of work. In another embodiment, themobile computing device 9005 determines that the second central processing unit has a processor architecture different than a processor architecture of the first central processing unit and uses the second central processing unit of the hardware resource to effect subsequent quanta of work. In still another embodiment, themobile computing device 9005 identifies a memory of themobile computing device 9005 and identifies a second memory of thehardware resource 9302. In yet another embodiment, themobile computing device 9005 determines that the second memory of the hardware resource has a memory size larger than a memory size of the first memory of the mobile computing device and uses the second memory of the hardware resource to effect subsequent quanta of work. - In some embodiments, the
hardware resource 9302 uses one or more resources of themobile computing device 9005. In one of these embodiments, thehardware resource 9302 accesses a storage element or storage device of themobile computing device 9005, such as thestorage element 128. In some embodiments, thehardware resource 9302 mounts thestorage element 128. In another of these embodiments, thehardware resource 9302 boots or reboots or otherwise establishes an environment based on a computing environment stored on the mountedstorage element 128. In still another of these embodiments, thehardware resource 9302 uses theprocessor 102 and/ormemory 122 of themobile computing device 9005 in addition to the processor and/or memory of thehardware resource 9302. - In some embodiments, the
hardware resource 9302 uses a display device and/or input device of themobile computing device 9005. In other embodiments, thehardware resource 9302 executes acomputing environment 8920′ based on aportable computing environment 8920 in thestorage element 128 of themobile computing device 9005. In some embodiments, theportable computing environment 8920 may execute in thehardware resource 9302 but display on and receive input from themobile computing device 9005. - In one embodiment, the
hardware resource 9302 provides themobile computing device 9005 with access to a peripheral computing device of the hardware resource. In another embodiment, themobile computing device 9005 uses a first operating system executing on the first central processing unit on themobile computing device 9005 when not connected to thehardware resource 9302 and a second operating system executing on the second central processing unit of thehardware resource 9302 when connected to thehardware resource 9302. In still another embodiment, the first operating system is different than the second operating system. In yet another embodiment, a virtual machine executing on thehardware resource 9302 provides themobile device 9005 with access to a first operating system. In some embodiments, thehardware resource 9302 executes a virtual machine to provide access to a computing environment stored in themobile computing device 9005. In other embodiments, themobile computing device 9005 provides access to a computing environment on thehardware resource 9302. In still other embodiments, a user accesses, via thehardware resource 9302, a file stored in themobile computing device 9005 when themobile computing device 9005 is connected to thehardware resource 9302 and accessing, by the user, via themobile computing device 9005, the file stored in themobile computing device 9005 when themobile computing device 9005 is not connected to thehardware resource 9302. - In one embodiment, the
mobile computing device 9005 uses a processor of thehardware resource 9302 to provide access to a computing environment stored on themobile computing device 9005. In another embodiment, themobile computing device 9005 uses a processor of thehardware resource 9302 to provide access to an operating system stored on themobile computing device 9005. In still another embodiment, themobile computing device 9005 uses a processor of thehardware resource 9302 to provide access to an application program stored on themobile computing device 9005. In yet another embodiment, themobile computing device 9005 uses a processor of thehardware resource 9302 to execute a virtual machine on the hardware resource, responsive to a virtual machine image stored on the mobile computing device. In some embodiments, the mobile computing device uses a processor of thehardware resource 9302 to provide access to a computing environment stored on the hardware resource. - Referring now to
FIG. 94A , a block diagram depicts one embodiment of a mobile computing device having a plurality of processors. In brief overview,mobile computing device 9005 comprises afirst processor 102 and asecond processor 102′. Theprocessors memory 122 and/orstorage element 128 on themobile computing device 9005. Themobile computing device 9005 includes aswitching mechanism 9405 for switching between using thefirst processor 102 and thesecond processor 102′. In some cases, themobile computing device 9005 may have a lower-poweredprocessor 102 for minimal functionality or standby operations, and have a higher-poweredprocessor 102 for normal operations or for applications suitable or requiring more powerful processor capability. While mobile, the user may want to access features such as email, calendar, and contact information much like a PDA or smartphone. When accessing such applications, themobile computing device 9005 may use the lower-poweredprocessor 102 to lengthen battery-life and conserve power. The user may at any time want to access an application having higher processor requirements or suitability. When accessing these applications, themobile computing device 9005 may use the higher-poweredprocessor 102′. - In further detail, the
processor 102 andprocessor 102′ may be the same type and speed of processor. In other embodiments, theprocessor 102 andprocessor 102′ may be a different type and speed of processor. In some embodiments,processor 102 comprises a processing speed and/or capability greater thanprocessor 102′. In other embodiments,processor 102′ comprises a processing speed and/or capability greater than theprocessor 102. In some embodiments, theprocessor processor processor 102 is a single core processor andprocessor 102′ is a multiple core processor, such as dual or quad core processor. In yet another embodiment, theprocessors processors - In some embodiments, a
first processor 102 comprises operational characteristics designed and constructed for lower power consumption, longer battery life, performance and/or applications of a mobile or portable computing device. In one of these embodiments, afirst processor 102 may be referred to as a low-powered CPU. In other embodiments, asecond processor 102′ comprises operational characteristics designed and constructed for the power, performance and/or application requirements of a desktop computing environment, server computing environment, or otherwise a non-mobile computing environment. In one of these embodiments, thesecond processor 102′ may be referred to as a high-powered CPU. In other embodiments, theprocessor 102 provides a first level of processing or processor capability, and thesecond processor 102′ provides a second level of processing or processor capability. In one of these embodiments, the second level of capability is greater or higher than the first level. In another of these embodiments, the second level of capability is preferred over the first level. In still other embodiments, the mobile computing device uses the first processor for one or more applications suitable for the first level of power consumption and processing capability, and the mobile computing device uses the second processor for one or more applications suitable for the second level of power consumption and processing capability. - The
switching mechanism 9405 enables themobile computing device 9005 to switch between using afirst processor 102 and asecond processor 102′, or any plurality of processors. In some embodiments, theswitching mechanism 9405 comprises any type and form of integrated circuit, such as a Field Programmable Gate Array (FPGA), Programmable Logic Device (PLD), or Application Specific Integrated Circuit (ASIC) capable of performing any of the operations described herein. In some embodiments, theswitching mechanism 9405 enables the system or mother board of themobile computing device 9005 to use afirst processor 102. In some embodiments, theswitching mechanism 9405 enables the system or mother board of themobile computing device 8905 to use asecond processor 102′. In one embodiment, theswitching mechanism 9405 communicates with any system or data bus of themobile computing device 9005 to transmit and/or receive signals directing themobile computing device 9005 to use asecond processor 102′ instead of afirst processor 102, and likewise to use thefirst processor 102 instead of thesecond processor 102′. In some embodiments, theswitching mechanism 9405 may interface and/or communicate with a system or data bus of themobile computing device 9005 to transmit and/or receive signals to use both thefirst processor 102 andsecond processor 102′ instead of just thefirst processor 102 or thesecond processor 102′. - In another embodiment, the
switching mechanism 9405 transfers data and execution fromprocessor 102 toprocessor 102′ of themobile computing device 9005. In some embodiments, theswitching mechanism 9405 transfers central processing control and management from afirst processor 102 to asecond processor 102′, or from thesecond processor 102′ to thefirst processor 102. In one embodiment, theswitching mechanism 9405 may have themobile computing device 9005 reboot, restart or reset when switching between using aprocessor switching mechanism 9405 may perform real-time switching from processor to processor. - In some embodiments, the
switching mechanism 9405 identifies a condition, event or trigger upon which to switch between using one processor and another processor. In other embodiments, switching mechanism switches to one of the first processor or the second processor based on a user selection. In one of these embodiments, theswitching mechanism 9405 comprises a user interface, such as a graphical user interface or a command line user interface, for a user to identify, specify or configure the conditions, events or triggers for performing switching between processors. For example, theswitching mechanism 9405 may switch, automatically, manually or otherwise, between afirst processor 102 and asecond processor 102′ based on any operational characteristics of themobile computing device 9005 or theprocessors switch mechanism 9405 switches between use of a processor based on a level of activity, such as task, processes, applications, of thefirst processor 102 orsecond processor 102′. In some embodiments, theswitch mechanism 9405 switches between using a first processor and a second processor based on a level of consumption of power and/or battery life. In still another embodiment, theswitch mechanism 9405 switches between use of a processor based on a type of application actuated or executed on themobile computing device 9005. - In another embodiment, the
switching mechanism 9405 comprises a user interface for the user to switch betweenprocessors mobile computing device 9005 and/orswitching mechanism 9405 to switch between processors, use one processor instead of another, or use the plurality ofprocessors - Referring now to
FIG. 94B , a flow diagram depicts one embodiment of a method for switching, by a mobile computing device, between use of multiple processors. In brief overview, the mobile computing device uses a first processor designed and constructed to provide a first level of power consumption and processing capability (step 9455). The switching mechanism determines to switch the mobile computing device to using a second processor based on an operating characteristic of the mobile computing device, the second processor designed and constructed to provide a second level of power consumption and processing capability (step 9460). Themobile computing device 9005 uses the second processor responsive to the determination by the switching mechanism. - In further detail, the
mobile computing device 9005 uses the first processor (step 9455). In one embodiment, theswitching mechanism 9405 identifies thefirst processor 120 as the default processor for use by themobile computing device 9005. In another embodiment, themobile computing device 9005 uses thefirst processor 120 upon starting, restarting or booting of the operating system on themobile computing device 9005. In some embodiments, a user selects thefirst processor 120 as the default processor. In one of these embodiments, the use may have identified thefirst processor 120 to theswitching mechanism 9405. - The
switching mechanism 9405 determines to switch themobile computing device 9005 to using thesecond processor 120′, based on an operating characteristic of the mobile computing device, the second processor designed and constructed to provide a second level of power consumption and processing capability (step 9460). In some embodiments, theswitching mechanism 9405 determines to switch based on operating conditions or characteristics of themobile computing device 9005, such as the operating system, resource usage, memory usage, power consumption, load, and numbers of processes, applications, services or tasks. - In one embodiment, the second level of power consumption and processing capability of the second processor comprises a level greater than the first level of power consumption and processing capability of the first processor. In another embodiment, the mobile computing device uses the first processor for one or more applications suitable for the first level of power consumption and processing capability, and uses the second processor for one or more applications suitable for the second level of power consumption and processing capability. In still another embodiment, the
switching mechanism 9405 switches to one of the first processor or the second processor automatically based on the initiation of execution of an application. - In some embodiments, the
switching mechanism 9405 switches to one of the first processor or the second processor automatically based on one or more of the following operating characteristics: a level of load of one of the first processor or the second processor, a level of activity of one of the first processor or the second processor, and a level of power consumption of one of the first processor or the second processor. In one of these embodiments, theswitching mechanism 9405 determines the load, activity or power consumption of thefirst processor 102 is near, equal or greater than the processing capability of thefirst processor 102. In another of these embodiments, theswitching mechanism 9405 determines the processor requirements of an application executed by the user or requested by the user for execution is near, equal or greater than the processing capability of thefirst processor 102. - In other embodiments, the
switching mechanism 9405 determines themobile computing device 9005 would perform at a more suitable performance or operational level, or in a manner desired by the user if themobile computing device 9005 was using the second level of processing capability of thesecond processor 120′. In still other embodiments, a user selects to switch to using thesecond processor 120′. In one of these embodiments, a user, via a user interface, directs or instructs theswitching mechanism 9405 to switch themobile computing device 9005 to use thesecond processor 120′. - The
mobile computing device 9005 uses the second processor 120 (step 9465). In one embodiment, themobile computing device 9005 uses thesecond processor 120′ instead of thefirst processor 120. In another embodiment, themobile computing device 9005 uses thesecond processor 120′ in addition to thefirst processor 120. In some embodiments, themobile computing device 9005 and/orswitching mechanism 9405 transfers information, data, control and/or management to thesecond processor 120′ to continue operation of the operating system, applications, process, services or tasks executing on thefirst processor 102. In other embodiments, new applications or processes initiated by the user are executed on thesecond processor 120′. - In some embodiments, the
switching mechanism 9405 switches to having themobile computing device 9005 use thefirst processor 120 for a first level of processing capability. As withstep 9460, theswitching mechanism 9405 determines to switch based on the operating conditions or characteristics of thedevice 9005, such as the operating system, resource usage, memory usage, power consumption, load, and numbers of processes, applications, services or tasks. For example, in one embodiment, theswitching mechanism 9405 determines the load, activity or power consumption of thesecond processor 102′ is greater than the processing capability needed for operating themobile computing device 9005 in its current state. In another embodiment, theswitching mechanism 9405 determines the processor requirements of an application executed by the user or requested by the user for execution is near, or equal to the processing capability of thefirst processor 102. In some embodiments, theswitching mechanism 9405 determines the processor requirements of an application executed by the user or requested by the user for execution is less than the second level of processing capability ofprocessor 120′. In other embodiments, theswitching mechanism 9405 determines themobile computing device 9005 would perform at a suitable performance or operational level, or in a manner desired by the user if themobile computing device 9005 was using the first level of processing capability of thefirst processor 120. For example, themobile computing device 9005 would perform in a suitable manner for the user using thefirst processor 102 but would also save on battery life or reduce power consumption. In yet another embodiment, a user selects to switch to using thefirst processor 120. For example, in one embodiment, the user via a user interface directs or instructs theswitching mechanism 9405 to switch themobile computing device 9005 to use thefirst processor 120. Themethod 9450 may be performed again to switch themobile computing device 9005 to using the first processor atstep 9455. - Referring still to
FIG. 8 , in some embodiments, thesession management component 1300 uses a connection to transmit information associated with a monitor on theclient machine 10 to the virtual machine service component. In one of these embodiments, multi-monitor geometry support is provided. In another of these embodiments, thesession management component 1300 accesses multi-monitor information and enables the virtual machine service component to create a version of the multi-monitor information in the virtual machine. - In one embodiment, techniques are provided for virtualizing a display environment of a client by modifying and controlling the behavior and appearance of an application's window based on a desired display layout for the client. The techniques may be used for simulating or providing a multiple display setup for a single display environment. One embodiment provides a window processing mechanism to intercept a selected message to a window of an application and modify the message to the window to display the window on the client based on the desired display layout. The message to the window provides for the behavior or appearance of a window used or displayed by the application. In one embodiment, the window processing mechanism provides a hooking mechanism to an application's window procedure and replaces the original window procedure with a window procedure designed to intercept a selected window message and modify values of arguments or parameters of the intercepted window message based on the desired display layout of the client. As such, selected window messages are processed to provide or translate the behavior or appearance of the window to the desired display layout.
- The techniques and mechanisms described may be practiced in a server-based computing environment, such as between a
client machine 10 and aremote machine 30 communicating via a remote display protocol. Aremote machine 30, or a virtual machine executing in a hypervisor on theremote machine 30, may be setup or configured for a single display environment while theclient machine 10 may be setup or configured for one or more display devices. For example, a session on a machine, such as a session on a WINDOWS server operating system may only be able to be configured or setup for a single display. The server may obtain a preferred or desired display layout for the client, and store the display layout in association with the client, such as associating the display layout with a remote session for the client. The window message processing mechanism may be used by the server to intercept and modify selected messages to windows of the application running on the server on behalf of the client. The window messages are modified to provide a behavior or appearance of the window based on the display layout associated with the client. As such, the display output communicated by the server to the client includes display output to be displayed on the client according to the client's display layout rather than the display layout, e.g., single display layout, of the session on the server. - Using the techniques and mechanisms described herein allows a user to access a remotely available application in a server-based computing environment regardless of the monitor layout of the client. Instead of the server associating a single display with the remote session, the server will provide display output based on the client's display layout. Furthermore, remotely-provided application may maximize to the proper display from the perspective of the client. Also, menu items and other windows of an application may be displayed appropriately within an application, for example, without appearing disjoint from the application. Additionally, the issue of a window being rendered off-screen after changes to the display layout is handled by automatically moving the window to a viewable upon detection of an off-screen window.
- Furthermore, these techniques and mechanisms may also be practiced in a local computing environment to virtualize, simulate, or otherwise provide a multiple monitor environment for a client having a single display device. Although the client may have a single display device, a desired display layout may be configured or provided to specify multiple displays. The window processing mechanism may be used to intercept and modify window messages for an application on the client to control the behavior or appearance of the window based on the desired display layout instead of the actual monitor layout. As such, a user may gain the functionality, benefits, and advantages of a multiple monitor environment without having multiple display devices.
- Referring now to
FIG. 15A , one embodiment of an environment 1502 is depicted. In brief overview, aclient machine 10, may be connected to or otherwise use adisplay device 124, in one embodiment, ormultiple display devices 124a-124n, in another embodiment. Theclient machine 10 includes adisplay layout 1520 comprising a desired display configuration for theclient machine 10, such as fordisplay device 124. Theclient machine 10 includes astorage element 1525 for storing the display layout of theclient machine 10. Theclient machine 10 also includes awindow processing mechanism 1550. - In further detail, the
display layout 1520 comprises any type and/or form of information or data to identify, specify, or describe a desired display layout configuration for the client. In one embodiment, thedisplay layout 1520 may comprise a file or set of files in any format. In another embodiment, thedisplay layout 1520 may comprise any information or data stored in any type and/or form of storage or memory element provided by theclient machine 10. In an additional embodiment, thedisplay layout 1520 may be provided or stored in any suitable type and/or form of database. In further embodiments, thedisplay layout 1520 may be provided via any object, data structure, or application programming interface (API). Thedisplay layout 1520 may comprise any graphical, textual, or combination of graphical and textual elements. Thedisplay layout 1520 may be created, edited, configured, or otherwise provided by any suitable means and/or mechanisms, such as a graphical and/or text-based tool, program or application. In one embodiment, a graphical tool with a user interface may be used to design, create, edit and configure thedisplay layout 1520. - The
display layout 1520 may include attributes, properties, characteristics, values, settings, profiles, and other display configuration information 1522 a-1522 n to define each display for the client. Thedisplay layout 1520 may include display configuration 1522 a-1522 n for each of the desired displays, physical, virtual, or otherwise. In some embodiments, thedisplay layout 1520 includes a description of the layout, location, position, organization, or arrangement for eachdisplay device 124 a-124 n. In one embodiment, thedisplay layout 1520 includes a visual or graphical arrangement identifying the location and/or size of each monitor with respect to each other. In some embodiments, each display 1522 a-1522 n is identified by an identifier, such as a name or number. Also, the display configuration 1522 a-1522 n may include a monitor type, a screen refresh rate, adapter type, adapter information, screen resolution, a color quality, a color scheme, a font size, a background, a style for buttons and menus, and a screen saver. - Additionally, the display configuration 1522 a-1522 n may include information or data to identify or specify a resolution 1524 a-1524 n and/or a
work area 1526 a-1526 n for each display, such as the display corresponding to adisplay device 124 a-124 n. In one embodiment, the resolution 1524 a-1524 n identifies the number of pixels, or individual points of color, contained on a display monitor, expressed in terms of the number of pixels on the horizontal axis and the number of pixels on the vertical axis. As those ordinarily skilled in the art will appreciate, the sharpness of the image displayed on thedisplay device 124 a-124 n may depend on the resolution and the size of thedisplay device 124 a-124 n. In another embodiment, thework area 1526 a-1526 n identifies the usable dimensions of the screen area of thedisplay device 124 a-124 n in pixels. In some embodiments, thework area 1526 a-1526 n does not include the dimensions of the screen area not useable by the user, such as the portion of the screen area having a menu, tool, or task bar, such as the task bar on a desktop provided via a WINDOWS operating system. - In one embodiment, the
display layout 1520 is configured to correspond to the number ofdisplay devices 124 a-124 n, and their available features and characteristics, accessible by the client. In other embodiments, thedisplay layout 1520 does not match or correspond to the number ofdisplay devices 124 a-124 n connected to the client. For example, theclient machine 10 may have asingle display device 124 a but thedisplay layout 1520 may be configured formultiple display devices 124 a-124 n. In one aspect, thedisplay layout 1520 may be configured for adisplay device 124 a that is virtual, or a virtual display device. A virtual display device is rendered off the screen area of thephysical display device 124 a and may be placed on and off the visible screen area by any suitable mechanism and/or means, such as for example, tabbing between desktops, or panning and scrolling beyond the work area of thephysical display device 124 a. A virtual display device may comprise a resolution 1524 a-1524 n, awork area 1526 a-1526 n, and any other data or information in a display configuration 1522 a-1522 n as if it was a physical display device 1524 a-1524 n connected or to be connected to aclient machine 10. - In some embodiments, the
work area 1526 a-1526 n of the virtual display device is relative to and/or adjacent horizontally or vertically to the screen area of thephysical display device 124 a-124 n. In other embodiments, the resolution 1524 a-1524 n of the virtual display device is the same resolution 1524 a-1524 n of thephysical display device 124 a, or one of the resolutions 1524 a-1524 n supported by thephysical display device 124 a. In some embodiments, adisplay 1522 a corresponding to aphysical display device 124 a is not required to be configured as the top left monitor. In other embodiments, thedisplay layout 1520 may comprise any arrangement of positive and/or negative coordinate systems, and any displays 1522 a-1522 n, ordisplay devices 124 a-124 n, virtual or otherwise, may be configured to be located with any positive and/or negative coordinates, or in any portion of the positive and/or negative coordinate system. - The
storage element 1525 illustrated in theclient machine 10 ofFIG. 15A may comprise any type and/or form of storage or memory, such as random-access memory, a disk drive, a disk array, a rewriteable optical drive, shared memory, a database, a file, an object, a data structure, or any other type and/or form of storage or memory element that allows the storing of and access to information or data, such as thedisplay layout 1520. In one embodiment,storage element 1525 provides thedisplay layout 1520 as a globally mapped data file, which may be accessible by any of theapplications 1530 of theclient machine 10. In some embodiments, thestorage element 1525 stores thedisplay layout 1520, or a portion of thedisplay layout 1520. In other embodiments, thedisplay layout 1520 may be converted, translated, transformed or otherwise altered to be stored in thestorage element 1525. Although thestorage element 1525 is illustrated on theclient machine 10, anotherclient machine 10 accessible to theclient machine 10, such as a server, may have a storage element for storing thedisplay layout 1520. - In some embodiments, the
client machine 10 executes or otherwise provides one ormore applications 1530. Theapplication 1530 can be any type and/or form of software, program, or executable instructions such as any type and/or form of web browser, web-based client, client-server application, a thin-client computing client, an ActiveX control, or a Java applet, or any other type and/or form of executable instructions capable of executing onclient machine 10. In some embodiments, theapplication 1530 provides one or more windows 1535 a-1535 n, also sometimes collectively referenced herein as 1535. In one embodiment, the window 1535 a-1535 n is a graphic, sometimes rectangular in shape, having either some kind of user interface or graphical or textual representation of the output of, and in some cases, allowing input for theapplication 1530. In another embodiment, the window 1535 a-1535 n comprises an area on the screen that displays information, including user documents as well as communications such as alert boxes and dialog boxes. Additionally, the user may open or close a window, move it around on the display, and sometimes change its size, scroll through it, and edit its contents. - In one embodiment, the user interface for the
application 1530 is the window 1535 a-1535 n. In other embodiments, theapplication 1530 provides a top level window 1535 a-1535 n for the presentation and/or navigation structure or framework for theapplication 1530, and provides additional windows 1535 a-1535 n in response to input or other events. For example, theapplication 1530 may have a menu system and screen area for a user interface represented by atop level window 1535 a, and based on user input, displays a secondary or smaller window 1535 to provide output to the user and/or receive input from the user regarding theapplication 1530. - The
application 1530, and/or any windows 1535 a-1535 n of the application may receive amessage 1540, such as a window message, as input. Themessage 1540 may be any type and/or form of communication via any type and/or form of medium. In some embodiments, themessage 1540 comprises a communication to a window 1535 a-1535 n to control or direct the behavior, appearance, attributes, or properties of the window 1535 a-1535 n. In an exemplary embodiment of a WINDOWS-based environment, theapplication 1530 is event-driven, and waits for the operating system, or system, to pass input to them. The system passes all input for an application to the various windows 1535 a-1535 n in theapplication 1530. Each window 1535 a-1535 n has a function, called a window procedure, which the operating system calls in response to receiving input for the window. A window procedure is a function that receives and processes all messages sent to the window. A window class may have a window procedure, and every window created with that class uses that same window procedure to respond to messages. The window procedure processes the input and returns control to the system. The system passes input to a window procedure in the form of amessage 1540, which may be generated by the operating system orother applications 1530. Amessage 1540 may be generated for an input event, for example, when the user types, moves the mouse, or clicks a control such as a scroll bar. Amessage 1540 may also be generated in response to changes in the operating system or computing device brought about by anapplication 1530. Anapplication 1530 can generate messages to direct windows 1535 a-1535 n of theapplication 1530 to perform tasks or to communicate with windows 1535 a-1535 n in other applications. - In the exemplary embodiment of a WINDOWS-based system, a
message 1540 is sent to a window procedure with parameters. In one embodiment, themessage 1540 comprises a set of four parameters: a window handle, a message identifier, and two values referred to as message parameters. The window handle identifies the window for which the message is intended, and is used to determine which window procedure should receive the message. A message identifier identifies a purpose or function of themessage 1540. When a window procedure receives a message, it uses the message identifier to determine how to process the message. For example, a message identifier WM_PAINT of amessage 1540 may indicate to a window procedure that the window's 1535 client area has changed and must be repainted. The parameters of amessage 1540 may specify data or the location of data used by a window procedure when processing amessage 1540. The meaning and value of the parameters may depend on themessage 1540. A message parameter can include an integer, a string, packed bit flags, a pointer to a structure containing additional data, or any type and/or form of data or information. - Although a
message 1540 is generally described in the context of a WINDOWS-based environment, amessage 1540 may be any type and/or form of communication in any type of operating system or environment, as one ordinarily skilled in the art would recognize and appreciate, to control or direct the appearance, behavior and attributes of awindow 1540 being displayed or otherwise being used, processed, or provided by theapplication 1530. As such, themessage 1540 may be in a form and have content suitable to the environment or operating system for which the operations described herein may be practiced. - Still referring to
FIG. 15A , thewindow processing mechanism 1550, also referred to as a window message processing mechanism, provides the means and mechanism for changing, controlling or directing an appearance, behavior or attribute of the window 1535 a-1535 n of anapplication 1530 based on the desireddisplay layout 1520 of the client 1505. Thewindow processing mechanism 1550 may comprise an application programming interface (API), application, module, software component, library, service, process, task or any other form and/or type of executable instructions designed to and capable of executing or providing the functionality described herein. Thewindow processing mechanism 1550 may comprise software, hardware, or any combination of software and hardware. In some embodiments, anapplication 1530 may be designed or constructed to include the functionality of thewindow processing mechanism 1550, while in some other embodiments, thewindow processing mechanism 1550 is designed and constructed to be used by existingapplications 1530, for example, without changing theapplication 1530. - In one embodiment, the
window processing mechanism 1550 comprises a mechanism for subclassing window procedures of a window 1535 of theapplication 1530, and providing a window procedure that gets called or used in place of the original window procedure of the window 1535. - In one embodiment, a hooking mechanism is used by the
window processing mechanism 1550 to provide the replacement window procedure. In some embodiments, a hooking mechanism comprises using an application programming interface (API) to replace the executable instructions or code of a function, procedure, or API with a desired set of executable instructions or code. For example, thewindow processing mechanism 1550 may introduce a hooking mechanism for any API related to creating, establishing, or providing a window 1535, for example, the CreateWindowA, CreateWindowW, CreateWindowExA, and CreateWindowExW APIs of the WINDOWS operating system environment. In some embodiments, the window procedure is replaced via the Windows application programming interface (API) calls of GetWindowLong and SetWindowLong. In other embodiments, the replaced window procedure is stored in a list of any suitable type and/or form along with a window handle or reference to the replaced window procedure. As such, the window procedure used by thewindow processing mechanism 1550 may call the replaced window procedure. For example, thewindow processing mechanism 1550 may pass through amessage 1540 to the original window procedure for processing. - The window procedure of the
window processing mechanism 1550 may be constructed and designed to intercept all or a portion of themessages 1540 communicated to or received by the window 1535. In some embodiments, the window procedure intercepts allmessages 1540 and anymessages 1540 not to be modified are communicated to the original or replaced window procedure. In one embodiment of a Microsoft® Windows based environment, the window procedure of thewindow processing mechanism 1550intercepts messages 1540 with a message identifier comprising one of the following: 1) WM_DISPLAYCHANGE, 2) WM_WINDOWPOSCHANGED, 3) WM_WINDOWPOSCHANGING, and 4) WM_GETMAXMININFO. AWM_DISPLAYCHANGE message 1540 communicates to awindow 1535 a change in a resolution 1524 of adisplay 124. AWM_WINDOWPOSCHANGED message 1540 communicates to awindow 1535 a change in a size, position, or a place in the Z order for thewindow 1540. AWM_WINDOWPOSCHANGING message 1540 is communicate to a window 1535 when a change in a size, position, or a place in the Z order for thewindow 1540 is about to occur. AWM_GETMAXMININFO message 1540 is communicated to a window 1535 when a size or position, or awindow 1540 is about to change. - The
window processing mechanism 1550 intercepts amessage 1540 and modifies a return value or parameter of themessage 1540 to correspond to or be based on thedisplay layout 1520. In some embodiments, thewindow processing mechanism 1550intercepts messages 1540 for a top-level window 1535, and in other embodiments, thewindow processing mechanism 1550 intercepts messages for windows 1535 that are not a top-level window. In further embodiments, thewindow processing mechanism 1550intercepts messages 1540 for a certain set ofwindows 1540. For example, thewindow processing mechanism 1550 may be configured to interceptwindows 1550 defined in a list, database,storage 1525, or any other type and/or form of configuration medium. - The
message 1540 intercepted by thewindow processing mechanism 1550 may have return values, arguments, and/or parameters designed or targeted for the actual display layout of theclient machine 10 orremote machine 30, but thewindow processing mechanism 1550 changes the return values, arguments and/or parameters to be designed or targeted for the display configuration 1522 a-1522 n provided by the desireddisplay layout 1520. Thewindow processing mechanism 1550 may read, access, acquire or otherwise obtain thedisplay layout 1520 from thestorage element 1525 by any suitable means and/or mechanism. Thewindow processing mechanism 1550 may comprise any type of logic, functionality, business rules, or operations to obtain the values, arguments, and parameters of themessage 1540 and analyze, compare or otherwise process the values, arguments, and parameters of themessage 1540 in view of thedisplay layout 1520, and determine any changes or modifications to the values, arguments or parameters or themessage 1540 to display the window 1535 on a display identified by thedisplay layout 1520. Thewindow processing mechanism 1550 modifies themessage 1540 according to the determined changes and communicates themessage 1540 to the window 1535. In some embodiments, thewindow processing mechanism 1550 determines themessage 1540 does not need to be modified and thus communicates themessage 1540 in the same form as intercepted by thewindow processing mechanism 1550. In other embodiments, thewindow processing mechanism 1550 replaces themessage 1540 with a second message. - Referring now to
FIG. 15B , another embodiment of a networked computer environment is shown in which theclient machine 10 communicates with aremote machine 30 via one ormore communication networks 150. Theclient machine 10 may be connected to or otherwise use one ormore display devices 124 a-124 n. Theclient machine 10 includes adisplay layout 1520 comprising a desired display configuration for theclient machine 10, such as fordisplay devices 124 a-124 n. Theclient machine 10 may also include aclient agent 1508. Theremote machine 30 includes anapplication 1530 providing one or more windows 1535 a-1535 n, and astorage element 1525 for storing thedisplay layout 1520 of theclient machine 10. Theremote machine 30 also includes aserver agent 1528, asession login mechanism 1545, and awindow processing mechanism 1550. - The environment 1500 may provide a server-based or thin-client computing environment for practicing the operations described herein. For example, the
application 1530 may be an application executed on theremote machine 30 on behalf of theclient machine 10. The display output from execution of theapplication 1530 may be communicated to theclient machine 10 for display on the client, for example, via theclient agent 1508. The display output may be communicated between theremote machine 30 andclient machine 10 via a remote display protocol. The display output may be based on awindow 1540 of theapplication 1530 running on theremote machine 30 but to be displayed on theclient machine 10. As will be described in further detail below, thewindow processing mechanism 1550 on theremote machine 30 intercepts and modifiesmessages 1540 of theapplication 1530 running on theremote machine 30, communicates themessage 1540 to the window 1535. As such, the display output communicated to theclient machine 10 reflects the modifiedmessage 1540 processed by the window 1535. - In one embodiment, as shown in
FIG. 15B , aclient agent 1508 is included within theclient machine 10. Theclient agent 1508 can be, for example, implemented as a software program and/or as a hardware device, such as, for example, an ASIC or an FPGA. An example of aclient agent 1508 with a user interface is a Web Browser (e.g. Internet Explorer and/or Netscape™ Navigator browser). Theclient agent 1508 can use any type of protocol, such as a remote display protocol, and it can be, for example, an HTTP client agent, an FTP client agent, an Oscar client agent, a Telnet client agent, an Independent Computing Architecture (ICA) client agent from Citrix Systems, Inc. of Fort Lauderdale, Fla., or a Remote Desktop Protocol (RDP) client agent from Microsoft Corporation of Redmond, Wash. In some embodiments, theclient agent 1508 is configured to connect to theremote machine 30. In some embodiments (not shown), theclient 1508 includes a plurality ofclient agents 1508, each of which may communicate with aremote machine 30, respectively. - Additionally, the
remote machine 30 may comprise aserver agent 1528 which may be capable of and configured to work in conjunction with theclient agent 1508. For example, theserver agent 1528 may be a server side component that accepts connections and requests from theclient agent 1508. In another embodiment, theserver agent 1528 may be capable of and configured to accept or establish remote access connections or sessions for theclient machine 10. In one embodiment, theclient agent 1508 andserver agent 1528 may communicate using a protocol, such as http, ICA or RDP, over the network 1504. In some embodiments, theclient agent 1508 and/orserver agent 1528 are used to establish, re-establish, maintain, or otherwise provide a server-based computing or thin-client computing based connection or session. In another embodiment, theclient agent 1508 and theserver agent 1528 establish the start and end points of communications for a connection between theclient machine 10 and the destinationremote machine 30. - In some embodiments, the
remote machine 30 includes astorage element 1525 for storing the display layout. In one embodiment,storage element 1525 provides thedisplay layout 1520 as a globally mapped data file, which may be accessible by any of theapplications 1530 of theremote machine 30. In some embodiments, thedisplay layout 1520 is stored in the same form as provided to or received by theremote machine 30. Although thestorage element 1525 is illustrated on theremote machine 30 inFIG. 15B , theclient machine 10 may also include astorage element 1525′, and in some embodiments, theclient machine 10 stores thedisplay layout 1520 in the client'sstorage element 1525′, and/or to the remote machine'sstorage element 1525. - The
remote machine 30 may also include asession login mechanism 1545, which may include any type and/or form of service, process, task or program, application, or executable instructions on theremote machine 30 to handle and process login or session requests. Thesession login mechanism 1545, or any portion thereof, may be provided via the operating system of theremote machine 30. In one embodiment, thesession login mechanism 1545 includes the windows logon process, winlogon, a component of the Microsoft® Windows families of operating systems. As such, thesession login mechanism 1545 may provide interactive logon support, and may include a Graphical Identification and Authentication dynamically linked library (DLL) referred to as the GINA, and any number of network providers. Thesession login mechanism 1545 may include any interfaces, such as an application programming interface (API) or dynamically linked libraries, i.e., a dll,, to allow any resource, application, network or network provide gather obtain any identification and authentication information during a logon process. - The
session login mechanism 1545 may perform an authentication process and password-updating operations for the operating system and/or for one or more resources, programs, applications, networks, or network providers. In one embodiment, thesession login mechanism 1545 provides authentication services for the operating system, and in additional embodiments, also provides authentication services for access toapplications 1530 to be executed on theremote machine 30 on behalf of theclient machine 10, such as in a server-based or thin-client computing model. Additionally, thesession login mechanism 1545 may monitor any mouse and/or keyboard activity related to logging on or secure access of theremote machine 30, or any resource, application, network, or network provider. In some embodiments, thesession login mechanism 1545 may establish any initial services, processes, or tasks for a user or session on theremote machine 30. - The
remote machine 30 may execute or otherwise provide one ormore applications 1530. Theapplication 1530 can be any type and/or form of software, program, or executable instructions such as any type and/or form of web browser, web-based client, client-server application, a thin-client computing client, an ActiveX control, or a Java applet, or any other type and/or form of executable instructions capable of executing onclient machine 10 or communicating via a network 1504. Theapplication 1530 can use any type of protocol and it can be, for example, an HTTP client, an FTP client, an Oscar client, or a Telnet client. In some embodiments, theapplication 1530 uses a remote display or presentation level protocol. In other embodiments, theapplication 1530 comprises any type of software related to Voice-Over-Internet Protocol (VOIP) communications, such as a soft IP telephone. In further embodiments, theapplication 1530 comprises any application related to real-time data communications, such as applications for streaming video and/or audio. In some embodiments, theapplication 1530 provides one or more windows 1535 a-1535 n, also sometimes collectively referenced herein as 1535. - In some embodiments, the
remote machine 30 or amachine farm 38 may be running one ormore applications 1530, such as anapplication 1530 providing a thin-client computing or remote display presentation application. In one embodiment, theremote machine 30 or machine farm executes as anapplication 1530, any portion of the Citrix Access Suite™ by Citrix Systems, Inc., such as the MetaFrame or Citrix Presentation Server™, and/or any of the Microsoft® Windows Terminal Services manufactured by the Microsoft Corporation. In one embodiment, theapplication 1530 is an ICA client, developed by Citrix Systems, Inc. of Fort Lauderdale, Fla. In other embodiments, theapplication 1530 includes a Remote Desktop (RDP) client, developed by Microsoft Corporation of Redmond, Wash. - Additionally, the
remote machine 30 may run anapplication 1530, which for example, may be an application server providing email services such as Microsoft Exchange manufactured by the Microsoft Corporation of Redmond, Wash., a web or Internet server, or a desktop sharing server, or a collaboration server. In some embodiments, any of theapplications 1530 may comprise any type of hosted service or products, such as GoToMeeting™ provided by Citrix Online Division, Inc. of Santa Barbara, Calif., WebEX™ provided by WebEx, Inc. of Santa Clara, Calif., or Microsoft Office LiveMeeting provided by Microsoft Corporation of Redmond, Wash. - Although in
FIG. 15A andFIG. 15B , thewindow processing mechanism 1550 is illustrated as included in theapplication 1530, thewindow processing mechanism 1550 may reside in any portion of theremote machine 30, theclient machine 10, and/or external to theapplication 1530, for example, as illustrated inFIG. 15C . In one embodiment, thewindow processing mechanism 1550 comprises a service, process, or task that runs in a system context or with the system privileges of the operating system. In some embodiments, thewindows processing mechanism 1550 may monitormessages 1540 communicated to windows 1535 a-1535 n of anapplication 1530, and intercept and modify themessage 1540 to the windows 1535 a-1535 n. One ordinarily skilled in the art will recognize and appreciate that thewindows processing mechanism 1550 may comprise any type and/or form of executable instructions capable of performing the operations described herein. - In another embodiment of illustrated in
FIG. 15C , thesession login mechanism 1545 may be used to provide for, or use, any of the functionality of thewindow processing mechanism 1550. In some embodiments, thesession login mechanism 1545 may read, access, acquire or otherwise obtain thedisplay layout 1520 from thestorage element 1525. In other embodiments, thesession login mechanism 1545 accesses, loads, or uses the functionality of thewindow processing mechanism 1550 via a dynamically loaded library, such as a library provided via a network provider to the winlogon process of a WINDOWS operating system. In other embodiments, the session login mechanism interfaces with or communicates to thewindow processing mechanism 1550 to provide the techniques described herein. In further embodiments, thesession login mechanism 1545 may use the techniques described herein during reconnection, re-establishment, and/or re-authentication of a login or user session, such as a remote session in a server-based computing environment 1500. - In another aspect, techniques for virtualizing a display environment of a
client machine 10 by controlling or directing the appearance, behavior and attributes of a window 1535 of anapplication 1530 based on the desireddisplay layout 1520 for aclient machine 10 are described. In view of the systems and structure of the environments 1500, 1501, and 1502 depicted inFIGS. 15A-15C , the operations, functionality, and techniques will be addressed by the methods depicted inFIGS. 3A-3D .FIG. 3A depicts a method 300 for practicing an embodiment using thewindow processing mechanism 1550.FIG. 3B depicts examples of window messages and processing used in conjunction with the method 300.FIG. 3C depicts a method 350 for practicing an embodiment when reconnecting, re-establishing or re-authenticating via thesession login mechanism 1545.FIG. 3D depictsillustrative method 360 for changing the client'sdisplay layout 1520, for example, during execution of anapplication 1530. - Referring now to
FIG. 16A , in brief overview, one embodiment of a method for providing a desireddisplay layout 1520 of theclient machine 10 is shown. Atstep 1610, and atstep 1615, thedisplay layout 1520 is stored in thestorage element 1525, and thedisplay layout 1520 is associated with the client 1505. Atstep 1620, thewindow processing mechanism 1550 accesses thedisplay layout 1520 from the storage element 225 to obtain the desired display layout information for theclient machine 10. Atstep 1625, thewindow processing mechanism 1550intercepts messages 1540 to a window 1535 displayed on aclient machine 10 by anapplication 1530. Atstep 1630, thewindow processing mechanism 1550 modifies themessage 1540 to provide the window 1535 on theclient machine 10 based on the desireddisplay layout 1520 for theclient machine 10. Atstep 1635, the window 1535 is displayed on theclient machine 10 based on the modifiedmessage 1540. As such, the appearance and behavior of the window 235 is translated to and based on thedisplay layout 1520. - In further detail, at
step 1610 of the method, the desireddisplay layout 120 for the client is provided. In one embodiment, thedisplay layout 120 is communicated from theclient machine 10 to theremote machine 30. For example, theclient machine 10 establishes a connection or communication session with theremote machine 30. In some cases, theremote machine 30 requests thedisplay layout 1520 from theclient machine 10, and the client 1505 communicates thedisplay layout 1520 in response to the request. In another embodiment, thedisplay layout 1520 is communicated via thesession login mechanism 1545 during a logon or authentication process, and in some embodiments, upon a re-logon or re-authentication process. In one embodiment, thedisplay layout 1520 is stored in a database and queried by theclient machine 10 orremote machine 30 to obtain thedisplay layout 1520. In other embodiments, thedisplay layout 1520 is downloaded, by either theclient machine 10 or theremote machine 30 from a web server, a web-site, an application server, anotherremote machine 30′ or via the Internet. In further embodiments, a user may configure thedisplay layout 1520 with a program, application, or tool, and store thedisplay layout 1520 on aclient machine 10,remote machine 30, or anotherclient machine 10. - At
step 1615, thedisplay layout 1520 is stored in thestorage element 1525, and associated with theclient machine 10. In some embodiments, theremote machine 30 receives thedisplay layout 1520 from theclient machine 10 and stores thedisplay layout 1520 in thestorage element 1525. In one embodiment, theremote machine 30 stores thedisplay layout 1520 as a globally mapped data file on theremote machine 30 accessible by one ormore applications 1530. In another embodiment theremote machine 30 stores thedisplay layout 1520 to anotherclient machine 10 accessible to theremote machine 30, such as via the network 1504. In some embodiments, theclient machine 10 stores thedisplay layout 1520 to astorage element 1525 on theremote machine 30, to astorage element 1525 on theclient machine 10, or to astorage element 1525 accessible via the network 1504 or via the Internet. - The
display layout 1520 may be stored to thestorage element 1525 in any form suitable to thestorage element 1525, and may be converted, transformed, altered, translated or otherwise processed for storage in thestorage element 1525. For example, in one embodiment, thedisplay layout 1520 may comprise data, such as a file, on theclient machine 10 transmitted via network packets to theremote machine 30, and then translated into a globally mapped data file on theremote machine 30. In another embodiment, thedisplay layout 1520 is stored into any type and/or form ofdatabase 1525, such as a relational database. In other embodiments, thedisplay layout 1520 is stored instorage 1525 comprising memory. For example, thedisplay layout 1520 may comprise or be represented by any type of object, data structure, or portion of memory on theclient machine 10 and/orremote machine 30. - The
display layout 1520 may be associated with theclient machine 10 by any suitable means and/or mechanisms. In one embodiment, the name, or any portion thereof, of the globally mapped data file may identify theclient machine 10. In another embodiment, any portion of content of the globally mapped data file may identify theclient machine 10. In additional embodiments, theclient machine 10 orremote machine 30 may use any type of object, data structure, process, or other elements in memory to associate thedisplay layout 1520 with theclient machine 10. In other embodiments, theclient machine 10 orremote machine 30 may use portions of thestorage element 1525 or other types of storage, such as another file, to associate thedisplay layout 1520 with the client. - The
window processing mechanism 1550, atstep 1620 of illustrative method 300, accesses thedisplay layout 1520 from thestorage element 1525 to obtain the desired display layout information for theclient machine 10. In one embodiment, the executable instructions of the window procedure used by thewindow processing mechanism 1550 comprises instructions to load, read, or otherwise acquire thedisplay layout 1520. For example, thewindow processing mechanism 1550 may perform any type and/or forms of file input/output, i.e., file I/O, operations to read a globally mapped data file having thedisplay layout 1520. In another embodiment, the instructions of the hooking application programming interface (API) for thewindow processing mechanism 1550 provides instructions for obtaining thedisplay layout 1520. In another embodiment, theapplication 1530 reads or accesses thedisplay layout 1520, for example, upon execution or start up. In some embodiments, theapplication 1530 may be executed during a session, such as a user or remote session. In one embodiment, the globally mappeddata file 1525 may only be accessible by anapplication 1530 associated with or available via the remote session. In further embodiments, access to the globally mapped data file may have access locked by a mutex or semaphore, which is global for the remote session. One ordinarily skilled in the art will recognize and appreciate that any type and/or form of locking mechanism can be used to control access thestorage element 1525, such as a globally mapped data file. - At
step 1625, thewindow processing mechanism 1550intercepts messages 1540 to a window 1535 displayed on aclient machine 10 by anapplication 1530. In one embodiment, upon obtaining the display layout 1520 a hooking mechanism is introduced into theremote machine 30 or theapplication 1530 on theremote machine 30, which hooks one or more window creation application programming interfaces (APIs), such as for example, a create window type of API in a WINDOWS based environment. In some embodiments, thewindow processing mechanism 1550 intercepts allmessages 1540 to windows 1535 of theapplication 1530. In other embodiments, thewindow processing mechanism 1550intercepts messages 1540 of a certain message identifier or name. In one embodiment, the message 240 may have arguments, parameters or values that are used by thewindow processing mechanism 1550 to determine that themessage 1540 should be intercepted. In additional embodiments, thewindow processing mechanism 1550intercepts messages 1540 to some of the windows 1535 of theapplication 1530, and in further embodiments, only for a portion of the types of messages 240 communicated to these windows 1535. In yet another embodiment, thewindow processing mechanism 1550 is configurable, for example, by a user, to select themessages 1540, by name, type, or otherwise, to be intercepted. - In some embodiments, the
window processing mechanism 1550intercepts messages 1540 communicated to or intended for a top-level window 1535 of theapplication 1530. In other embodiments, thewindow processing mechanism 1550 may intercept any level of window 1535, or only certain levels of windows 1535 in a hierarchy of windows 1535. For example, thewindow processing mechanism 1550 may ignore any popup dialog windows of a second level window displayed on top of or in front of a top-level window 1535. - In one embodiment, the
window processing mechanism 1550 may intercept amessage 1540 but pass themessage 1540 through or communicate themessage 1540 to the original or replaced window procedure. In some embodiments, thewindow processing mechanism 1550 ignorescertain messages 1540. In another embodiment, the window procedure of thewindow processing mechanism 1550 also includes the functionality and operations of the replaced window procedure. As such, thewindow processing mechanism 1550 may intercept amessage 1540 and have either the replaced window procedure or the window procedure hooked into theapplication 1540 process themessage 1540. - At
step 1630, thewindow processing mechanism 1550 modifies themessage 1540 to provide the window 1535 on theclient machine 10 based on the desireddisplay layout 1520 for theclient machine 10. In some embodiments, thewindow processing mechanism 1550 examines, inspects, analyzes, or otherwise processes any values, arguments, or parameters of themessage 1540 in comparison to thedisplay layout 1520 for theclient machine 10 displaying theapplication 1530. Based on the comparison, thewindow processing mechanism 1550 may modify, adjust, edit, change, alter, replace, translate or otherwise set or provide values, arguments, and/or parameters for themessage 1540 that will provide the desired behavior, appearance and attributes of the window 235 as displayed or to be displayed by theapplication 1530 on theclient machine 10 in accordance with thedisplay layout 1520. For example, the values and/or parameters of themessage 1540 may indicate a size, position, location, resolution or other attributes of the window 1535. These characteristics may be based on a display environment different than as specified in thedisplay layout 1520. As such, in some embodiments, thewindow processing mechanism 1550 may modify the size, position, location, resolution or other attributes of themessage 1540 for a display 1522 a-1522 n specified in thedisplay layout 1520. - By way of further example, and referring now to
FIG. 16B , thewindow processing mechanism 1550 may intercept and modify amessage 1540 identified as one of the following: 1) WM_GETMAXMININFO, 2) WM_WINDOWPOSCHANGING, 3) WM_WINDOWPOSCHANGED, and 4) WM_DISPLAYCHANGE. Atillustrative step 1630 a, for amessage 1540 intercepted and identified as a WM_GETMINMAXINFO, thewindow processing mechanism 1550 analyzes the position of theapplication 1530, i.e., a top-level window 1535, relative to the one or more displays 1522 a-1522 n of thedisplay layout 1520, and determines which of the displays 1522 a-1522 n theapplication 1530 should be maximized to. Thewindow processing mechanism 1550 modifies themessage 1540 to provide values corresponding and translated to the resolution based on the desireddisplay layout 1520. For example, aremote machine 30 may provide window resolution for a single monitor session, and thewindow processing mechanism 1550 translates the resolution to the multiple display environment provided via thedisplay layout 1520. As such, this technique enables theapplication 1530 to maximize to a desired location in accordance with thedisplay layout 1520, instead of the single monitor session. - At illustrative step 1630 b, for a
message 1540 intercepted and identified as WM_WINDOWPOSCHANGING, thewindow processing mechanism 1550 determines if the window 1535 is in the maximized state, and if so, themessage 1540 is modified to set the window flag to a no move style of window, or otherwise to fix the location or position of the window 1535, or not allow the position of the window 1535 to change. As such, in the maximized state a user may not be able to move the window 1535. This technique enables theapplication 1530, or a window 1535 of theapplication 1530 to be maximized to a set or fixed location on a display 1522 a-1522 n specified by thedisplay layout 1520. In some embodiments, either in response to theWM_WINDOWPOSCHANGING message 1540 or otherwise, thewindow processing mechanism 1550 determines the window 1535 is not in the maximized state, and modifies themessage 1540 to remove the no move style, e.g., the window's position is no longer fixed, or to otherwise allow the position of the window 1535 to be moved. - At
illustrative step 1630c, for amessage 1540 intercepted and identified as WM_WINDOWPOSCHANGED, thewindow processing mechanism 1550 compares the position or location of the window 1535 to thedisplay layout 1520 and if the window 1535 is to be rendered outside the screen or work area of display 1522 a-1522 n, then the position or location of the window 1535 is changed to be rendered in at least a portion of the screen or work area of the display 1522 a-1522 n. This technique enables the user not to lose theapplication 1530 or window 1535 of theapplication 1530 to an off-screen location. - At
illustrative step 1630 d, for amessage 1540 intercepted and identified as WM_DISPLAYCHANGED, thewindow processing mechanism 1550 suspends passing ofmessages 1540 until a new orsecond display layout 1520 is obtained or provided for the client 1505. In one embodiment, thewindow processing mechanism 1550 suspends the processing of allmessages 1540. In some embodiments, thewindow processing mechanism 1550 suspendsmessages 1540 that are intercepted and communicated to the replaced or original window procedure. In other embodiments, thewindow processing mechanism 1550 suspends messages for the replaced or original window procedure while continuing to processother messages 1540. This technique enables aclient machine 10 to dynamically change thedisplay layout 1520 at any time, for example, during the execution of anapplication 1530. - Although the techniques of are generally described above in relation to message, one ordinarily skilled in the art will recognize and appreciate that any message of any type and/or form may be used. Furthermore, the
window processing mechanism 1550 may perform any logic, function, operations or rules based on themessage 1540 and/or thedisplay layout 1520, and even for the same type ofmessage 1540, may perform a different operation or function for each instance of themessage 1540 depending on changes to thedisplay layout 1520 or any events, conditions or status of the environment 1500, 1501 or 1502. - Referring back to
FIG. 16A , atstep 1635 of method 300, the window 1535 is displayed on theclient machine 10 based on themessage 1540 processed via thewindow processing mechanism 1550. As such, when thewindow processing mechanism 1550 modifies themessage 1540 based on thedisplay layout 1520, the window 1535 is displayed on theclient machine 10 according to thedisplay layout 1520. In some embodiments, the window processing mechanism 250 does not modify themessage 1540, and therefore, thewindow 1540 is displayed on theclient machine 10 according to theunmodified message 1540. The technique as illustrated above enables, for example, in one embodiment of a server-based computing environment 1500, anapplication 1530 running onremote machine 30 to provide display output to theclient machine 10 that controls and directs the behavior, appearance, and attributes of windows in the display output in any manner desired and specified by thedisplay layout 1520, which may not correspond to the physical display layout of theclient machine 10. - In another aspect, although techniques described herein are generally described with a window management system from WINDOWS operating system, one ordinarily skilled in the art will recognize and appreciate that techniques described herein may be practiced with any type and/or form of window manager or management system, such any type and/or form of X-windows managers, including any custom or open-source based window manager running on any type of operating system.
- Referring now to
FIG. 16C , these techniques may be practiced during the re-connection, re-establishment or re-authentication of any communication session or user session, for example a remote display session between theclient machine 10 and theremote machine 30. In one embodiment, thesession login mechanism 1545 as illustrated on theremote machine 30 ofFIGS. 15A and 15B may include thewindow processing mechanism 1550, or any portion thereof. In brief overview of method 350, thesession login mechanism 1545, atstep 1652, accesses or obtains thedisplay layout 1520 from thestorage element 1525. Atstep 1654, there may be a disconnection and reconnection processed by thesession login mechanism 1545. Upon re-establishing and/or re-authenticating the session, the session login mechanism, atstep 1656, compares a location of a window 1535 to the client'sdisplay layout 1520, and atstep 1658, modifies the window 235 to display on theclient machine 10 based on the client'sdisplay layout 1520. - At
illustrative step 1652, thesession login mechanism 1545 obtains information on thedisplay layout 1520 by any suitable means and/or mechanisms. For example, thewindow processing mechanism 1550 included in or used by thesession login mechanism 1545 may have executable instructions, such as file I/O operations, to access a globally mappeddata file 1525. In another embodiment, thesession login mechanism 1545 may load dynamically linked libraries that load, read or otherwise access the storage element 225 having the display layout information. In one embodiment, as part of establishing or re-establishing the session, thesession login mechanism 1545 may obtain thedisplay layout 1520 from theclient 1520. For example, thesession login mechanism 1545 requests thedisplay layout 1520 from theclient machine 10 along with any identification or authentication credentials. - At
illustrative step 1654, any type of disconnection or disruption to a session between theclient machine 10 andremote machine 30 may occur, and any type of reconnection or re-establishment of the session may be facilitated via thesession login mechanism 1545. In some cases, a user may cause a disconnection or disruption, temporary or otherwise, to a session between theclient machine 10 and theremote machine 30 due to physical changes in the client's display environment or because the user moves to anotherclient machine 10. In one case, the user moves from afirst client machine 10 a, such as a work computer, to asecond client machine 10 b, such as a home computer. Theremote machine 30 may maintain the same user session betweencomputing devices 100 a-110 b but thedisplay layout 1520 may have changed. In another case, the user and/or theclient machine 10 may traverse network segments or network access points that cause changes in the network address or host name, e.g., internet protocol (IP) address, of theclient machine 10 or causes theclient machine 10 to disconnect. Theclient machine 10 may reconnect, manually or automatically, to the network 1504, such as via theclient agent 1508. As such, thesession login mechanism 1545 may facilitate or be used to facilitate the reconnection. - At
step 1656 of method 350, thesession login mechanism 1545 compares the location or position of a window 1535 of anapplication 1530 in relation to the desireddisplay layout 1520. In some embodiments, thesession login mechanism 1545 intercepts amessage 1540 to a window 1535, and examines, inspects or analyzes any portion of themessage 1540, such as a value or parameter. In one embodiment, thesession login mechanism 1545 queries, acquires or obtains the current location or position of one or more windows 1535 of theapplication 1530 via an application programming interface (API). In another embodiment, thesession login mechanism 1545 requests from theapplication 1530, the location or position of any of the application's windows. Thesession login mechanism 1545 compares the location, position, size, and any other attributes of the window 1535 to any information in thedisplay layout 1520. - At
step 1658, thesession login mechanism 1545 may modify the window 1535 based on the desireddisplay layout 1520. From the comparison of the information about the window 1535 to the information of thedisplay layout 1520, thesession login mechanism 1545, in some embodiments, modifies the window 1535 to display on theclient machine 10 via a display 1522 a-1522 n identified in thedisplay layout 1520 in a desired manner. In one embodiment, via the functionality of thewindow processing mechanism 1550 embodied in or interfaced with thesession login mechanism 1545, amessage 1540 to a window 1535 may be intercepted and modified in accordance with the operations described herein. In another embodiment, thesession login mechanism 1545 may modify one or more windows 1535 of theapplication 1530 via any application programming interface (API) to modify such windows 1535. The techniques depicted by method 350 enable client sessions to be disconnected and reconnected and have the display of windows be adjusted accordingly to any new or changed display environments of theclient machine 10, new or changeddisplay layouts 1520 of theclient machine 10, or changes from oneclient machine 10 a to anotherclient machine 10 b. - In another aspect, dynamically changing a
display layout 1520 for aclient machine 10 is described. Referring now toFIG. 16D , the techniques described may be practiced for a change to adisplay layout 1520 that occurs during the execution of anapplication 1530. In brief overview ofillustrative method 360, atstep 1662, a client'sdisplay layout 1520 is changed. Atstep 1664, the window processing mechanism 350 suspends window message processing when the client'sdisplay layout 1520 is changed. Atstep 1666, an updated or asecond display layout 1520′ is obtained by thewindow processing mechanism 1550, and atstep 1668, thewindow processing mechanism 1550 resumes intercepting and modifyingmessages 1540 to windows 1535 based on thesecond display layout 1520′. - In further detail, at
step 1662, thedisplay layout 1520 may be changed at any time and for any reason. In one embodiment, the display environment for theclient machine 10 may change and thedisplay layout 1520 may be updated to reflect the changed display environment. For example, anotherdisplay device 124 may be connected to theclient machine 10. In another embodiment, a user of theclient machine 10 may be making adjustments, updating or otherwise changing thedisplay layout 1520 to suit the user's desire for a behavior and appearance ofapplications 1530 and the display of windows 1535 of theapplication 1530 on theclient machine 10. In yet a further embodiment, a first session may be on afirst client machine 10 with afirst display layout 1520, and the user switches to a second session or maintains the first session on asecond client machine 10′ with a second or updateddisplay layout 1520′. - At step 1665, the method suspends intercepting and modifying
messages 1540 for windows 1535 of anapplication 1530 upon notification of a change to thedisplay layout 1520. In one embodiment, thewindow processing mechanism 1550 intercepts amessage 1540, such as the WM_DISPLAYCHANGE message, indicating a change in any attribute or characteristic, for example, the resolution, of the display environment. In another embodiment, theclient machine 10 communicates a notice to theremote machine 30, thewindow processing mechanism 1550 or thesession login mechanism 1545 indicating a change has occurred or is about to occur to thedisplay layout 1520. In yet another embodiment, theapplication 1530 may comprise a user interface mechanism for a user to indicate a change to the display environment, or to have theapplication 1530 suspend processing of window messages according to thedisplay layout 1520. - The
window processing mechanism 1550 may suspend the processing of messages 240 for all applications 230, a portion of applications 230, or for a portion of windows 235 of one, some, or all of the application 230. In one embodiment, thewindow processing mechanism 1550 queues any messages 240 received until thewindow processing mechanism 1550 obtains anotherdisplay layout 1520. In another embodiment, thewindow processing mechanism 1550 only suspends processing of window messages to be modified according to thedisplay layout 1520, and continues passing the messages 240 not to be modified to the original or replaced window procedure. - At
step 1666 of the method, an updated or asecond display layout 1520′ is obtained to use for window message processing. The updated orsecond display layout 1520′ may be provided by any suitable means and/or mechanisms. In one embodiment, the updated orsecond display layout 1520′ is stored with thefirst display layout 1520 in the storage element 225. In another embodiment, the updated orsecond display layout 1520′ is stored as an updated version of thefirst display layout 1520, and in further embodiments, thesecond display layout 1520′ may replace thefirst display layout 1520 in the storage element 225. In one embodiment, theclient machine 10 communicates the updated orsecond display layout 1520′ to theremote machine 30 or stores thesecond display layout 1520′ to the storage element 225 on theremote machine 30. In some embodiments, theclient machine 10 via a reconnection or re-establishment to theremote machine 30 may provide an updateddisplay layout 1520. In one embodiment, theclient machine 10 communicates anunchanged display layout 1520 or adisplay layout 1520 to theremote machine 30 that theremote machine 30 already has stored in the storage element 225. In yet other embodiments, theremote machine 30 orclient machine 10 may obtain thesecond display layout 1520′ from anotherclient machine 10 on the network 204, such as downloading thesecond display layout 1520′ form aremote machine 30. As described above in connection with illustrative method 300, the window processing mechanism 350 may obtain thedisplay layout 1520 from the storage element 225 by a variety of means and/or mechanisms. - At
step 1668 ofmethod 360, thewindow processing mechanism 1550 resumes intercepting and modifying messages 240 to windows 235 based on thesecond display layout 1520. In one embodiment, if thewindow processing mechanism 1550 queued any messages 240, thewindow processing mechanism 1550 analyzes and modifies the queued messages 240 based on thesecond display layout 1520′. Otherwise, thewindow processing mechanism 1550 uses thesecond display layout 1520′ to modify any messages 240 intercepted after obtaining thesecond display layout 1520′. Using the techniques described herein, a client display environment and a client's display layout can be dynamically changed during the course of executing one or more applications, and the display of windows for the application appear and behave according to the changes to the display layout. For example, another display device may be added to the client, and an application may be minimized during a change in the display layout. When the display layout is updated, the user can maximize the application and have the application appear in the appropriate display even though the display environment changed when the application was minimized. - In view of the functions, structures, and operations described above, systems and methods are provided to control and direct the appearance, behavior and attributes of windows of an application in a flexible manner for virtualizing, simulating or providing a multiple display environment without restricting or limiting the client side display configuration. For example, the display layout of the client may not be limited to configure the physical monitor of the client as the primary display, i.e. as the top left most monitor in the display layout configuration. The systems and methods described may be practiced in a server-based or thin-client based computing environment, with clients having multiple display devices, or with clients having a single display device. Additionally, the configuration of a display layout that is not restricted or limited to the physical display environment of the client is provided. The display environment of the client may extend to include additional virtual displays, so if the client has two display devices, three or more displays may be virtualized or simulated for the client. A single display configuration for a single display device may be implemented while still changing the appearance and behavior of windows based on a desired or customized display layout. A client or user may gain the functionality, benefits, and advantages of a multiple display environment without having multiple display devices, or having all the display devices desired.
- In one embodiment, multi-monitor support provides maximizing of windows to fill a single monitor rather than the full screen and centering of dialogs on a monitor rather than on a screen. In another embodiment the session management component, the virtual machine service component, and a multi-monitor hook component executing in a computing environment provided by a virtual machine together provide multi-monitor support in a virtual machine environment. In still another embodiment, a multi-monitor hook component and a component acquiring client geometry data provide multi-monitor support in a virtual machine environment.
- In one embodiment, the
session management component 1300 reads the monitor configuration for theclient machine 10 from a multi-monitor hook file mapping. In some embodiments where a user of theclient machine 10 establishes a connection to a presentation server executing on an execution machine in which the virtual machine provides access to a computing environment, the presentation server generates the multi-monitor hook file mapping upon establishment of the connection by the user. - In one embodiment, the
session management component 1300 sends a message to the virtual machine service component containing the monitor layout for the user. In some embodiments, the message is sent when thesession management component 1300 detects a user reconnection, so that the monitor layout remains synchronized with theclient machine 10. - The virtual machine service component receives the monitor layout messages provided by the session management component 900. In some embodiments, the virtual machine service component creates a file mapping in the computing environment and updates the file to include monitor layout data.
- In other embodiments, the virtual machine service component also creates a checksum for the data that is used by the multi-monitor hook component to ensure that it has correctly read the layout data. In one of these embodiments, a checksum is used rather than a locking scheme to synchronize access to the layout data. In this embodiment, the checksum does not cause any blocking between the processes reading the data. The layout data is updated infrequently and may be small in size, so the checksum calculation may complete quickly. In another of these embodiments, the reader processes save the checksum, read the data and recalculate the checksum. If the calculated checksum does not match the saved checksum it indicates that the data was updated while it was being read and the process is repeated. As the data is usually only updated when the user reconnects to another client and given the short time required to read the data, it is unlikely that a reader would have to reread the data more than once for a particular change. In some embodiments, the virtual machine service component uses a stored default display setting for the
client machine 10, the stored default selected to ensure that the computing environment has valid display settings upon initialization of the session. - In some environments, a multi-monitor hook component executes in a computing environment provided by a virtual machine. In one of these embodiments, the multi-monitor hook component receives an event for each window created just before the window is created, including a window handle for the window being created. The multi-monitor hook component may identify a window type of the window and determine to hook window messages for the window. In some embodiments, windows having window types indicating that the window can be maximized or that the window is a dialog will be hooked. Hooked windows may be added to an array that contains the window handle and an original window procedure. In other embodiments, the multi-monitor hook component receives an event indicating that a window is about to be destroyed. In one of these embodiments, the multi-monitor hook component removes the entry in the hook array associated with the window.
- In some embodiments, the multi-monitor hook component receives an identification of a window after the window is created and before the window is displayed. In one of these embodiments, the multi-monitor hook component checks the position of the dialog and if it spans multiple monitors, the multi-monitor hook component repositions the window to the centre of the monitor that contains most of the dialog, or the first monitor containing the dialog if the dialogs area is equally split between two monitors. In other embodiments, the multi-monitor hook component receives an event when a window is about to be maximized. The multi-monitor hook component ensures that when the window is maximized from the minimized state it will be positioned on the correct monitor.
- In some embodiments, the multi-monitor hook component receives an event when a window is being maximized. The multi-monitor hook component checks the state of the window and, if the window is minimized, the multi-monitor hook component retrieves an identification of a monitor in which the window is minimized from the window hook array. If the window is not minimized, the multi-monitor hook component identifies the monitor that contains most of the window. If no monitor is found, or if the monitor does not exist (as after a reconnection) monitor 0 is used. The multi-monitor hook component then removes the origin and size of the monitor from its saved monitor information and updates the MINMAXINFO structure pointed to by the message. This causes the window to maximize to the specified monitor only.
- In some embodiments, the virtual machine service component receives authentication information associated with a user of the
client machine 10. In one of these embodiments, the virtual machine service component receives the authentication information from a protocol stack component receiving the credentials from theclient machine 10. In another of these embodiments, the virtual machine service component receives authentication information from thesession management component 1300. In still another of these embodiments, the virtual machine service component uses the received authentication information to authenticate the user of theclient machine 10 to the computing environment provided by the virtual machine. - In one embodiment, when the communications channel is established and the initial session related information is passed to the virtual machine service component, the virtual machine service component automatically logs the user into the computing environment. In one embodiment, the virtual machine service component receives credentials from the
session management component 1300. In another embodiment, the virtual machine service component receives credentials previously provided by the user. In some embodiments, the user provides credentials to theclient machine 10 prior to requesting access to a resource. In one of these embodiments, the user provides credentials to a client agent, such as an ICA client. The virtual machine service component automatically reconfigures the display settings of the guest operating system to match those of the ICA client. The virtual machine produces graphics and sound output to the virtual devices that redirect that output to a client agent, such as an ICA client, on the requesting machine. The virtual machine receives audio input, mouse and keyboard device data redirected from the ICA client. When the virtual machine is shutdown or suspended thesession management component 1300 cleans up and shuts down the ICA session. - The
remote machines - In one embodiment, the
remote machine 30′″ is in a different domain than thefarm 38. In another embodiment, theremote machine 30′″ is in the same domain asmachines machines remote machine 30′″ belongs to another machine farm, or all of themachines network 150, the new machine either joins an existing machine farm or starts a new machine farm. - The
machines 10 may be in a domain, or may be unconnected with any domain. In one embodiment, theclient machine 10 is in thedomain 38. In another embodiment, theclient machine 10 is in another domain that does not include any of themachines client machine 10 is not in any domain. - In one embodiment the
client machine 10 is in thedomain 38 and a user of the machine provides user credentials to log onto theclient machine 10. User credentials typically include the name of the user of the machine, the password of the user, and the name of the domain in which the user is recognized. The user credentials can be obtained from smart cards, time-based tokens, social security numbers, user passwords, personal identification (PIN) numbers, digital certificates based on symmetric key or elliptic curve cryptography, biometric characteristics of the user, or any other means by which the identification of the user of the client node can be obtained and submitted for authentication. - From the user-provided credentials, the
client machine 10 generates user authentication data. Theclient machine 10 transmits this user authentication data to theremote machine 30. In this embodiment, the user credentials are not transmitted over a network, only the resulting user authentication data is transmitted by theclient machine 10. - The
remote machine 30 may determine which resources hosted by the machine farm containingremote machine 30 are available for use by the user of theclient machine 10. In one embodiment, theremote machine 30 consults user authentication data to make this determination. In another embodiment, theremote machine 30 consults information associated with a resource requested by the user to make the determination. Theremote machine 30 transmits information representing the available resources to theclient machine 10. - The user authentication performed by the
remote machine 30 can suffice to authorize the use of each hosted resource presented to theclient machine 10, although such resources may reside at another machine. Accordingly, in this embodiment, when theclient machine 10 accesses or launches (i.e., initiates execution of) one of the hosted resources, additional input of user credentials by the user will be unnecessary to authenticate access to that resource. Thus, a single entry of the user credentials can serve to determine the available resources and to authorize the access or launching of such resources without an additional, manual log-on authentication process by the user. -
FIG. 17 depicts in more detail a system for remotely authenticating a client of aclient machine 10 to aremote machine 30. As shown inFIG. 17 , theclient machine 10 includes anauthentication module 1710 in communication with a thin-client program 1720. Theauthentication module 1710 receives user authentication credentials provided for the purposes of authenticating a user to theclient machine 100, theremote machine 30, or both. Received authentication credentials can include username-password combinations, graphical password data, data derived from time-based tokens such as the SecurID line of tokens manufactured by RSA Security Inc. of Bedford, Mass., challenge-response data, information from smart cards, and biometric information such as fingerprints, voiceprints, or facial features. Theauthentication module 1710 may use the provided authentication credentials to authenticate the user to themachine 100. For example, in WINDOWS-based environments, theauthentication module 1710 may be provided by the MSGINA dynamically-linked library. In other embodiments, for example, in Unix-based environments, theauthentication module 1710 may be provided by the Unix Pluggable Authentication Manager, using the pam_krb module. In still other embodiments, theauthentication module 1710 may be provided by the UNIX kinit command program. - In the embodiment shown in
FIG. 17 , themachine 100 also includes asecurity service 1712. In some embodiments, theauthentication module 1710 and thesecurity service 1712 are provided as the same dynamically-linked library. Thesecurity service 1712 provides security services to modules and applications on themachine 100, including theauthentication module 1710 and the thin-client application 1720, such as authentication to themachine 100 and authentication to remote machines or network services. For example, thesecurity service 1712, which may be the GSSAPI specified by the Internet Engineering Task Force (IETF) or the SSPI manufactured by Microsoft Corporation of Redmond, Wash., may obtain a Kerberos ticket in response to receipt of the user authentication credentials and use this ticket to obtain additional Kerberos tickets to authenticate the user to remote machines or network services, at the request of modules or applications on themachine 100. Thesecurity service 1712 may then generate user authentication data using these Kerberos tickets if needed for remote authentication. In one embodiment, thesecurity service 1712 may generate the user authentication data using an external authentication service, such as a Key Distribution Center in a Kerberos environment or Active Directory in a Windows-based environment. - The
security service 1712 provides the generated user authentication data, e.g., Kerberos ticket and associated Kerberos authenticator, to the thin-client application 1720. The thin-client application 1720 transmits the user authentication data to aremote machine 30 for remote authentication of the user. Thus, unlike existing single sign-on mechanisms for server-based computing, user-provided authentication credentials are not transmitted over thenetwork 150 to aremote machine 30. The user authentication data generated by thesecurity service 1712 is independent of the method used by the user to authenticate to themachine 100. Thus, for example, a Kerberos ticket for the user ofmachine 100 is obtained whether the user uses a username-password combination or a biometric to authenticate to themachine 100. - In the embodiment shown in
FIG. 17 , the thin-client application 1720 communicates with theremote machine 30 via a thin-client protocol having one or morevirtual channels 1735. In these embodiments, the thin-client application 1720 loads a virtual channel driver and uses it to send and receive messages on the authentication virtual channel. In some embodiments, the virtual channel driver exposes functions for opening the virtual channel and sending data over it. - The thin-
client application 1720 passes a data structure to theremote machine 30 for thevirtual channel 1735 when the thin-client protocol connection is established, indicating to the server-side thin-client application 1750 that the authentication virtual channel is available. In one embodiment, the virtual channel data structure for the authentication virtual channel contains the virtual channel information and a representation of the size of the largest data packet themachine 100 can accept from or send to theremote machine 30 over thevirtual channel 1735. The data packet size is constrained by the maximum thin-client size and any specific memory restrictions imposed by theclient machine 10. In one particular embodiment, the data structure for the authentication virtual channel is defined as: -
typedef struct_C2H { VD_C2H Header; UINT16 cbMaxDataSize; } C2H, *PC2H; - The server-side thin-
client application 1750 indicates to the thin-client application 1720 its intention to perform authentication using the authenticationvirtual channel 1735 by opening the virtual channel and sending a bind request message onto the channel. Once the virtual channel has been opened, the virtual channel driver in the thin-client application 1720, in one embodiment, reads a message requesting a binding from the virtual channel, sends a message onto the virtual channel responding to the bind request; and reads a “commit” message from the channel. In one embodiment, the message requesting a binding includes data specifying the protocol version that is supported. In other embodiments, the protocol version can be negotiated between the thin-client application 1720 and the server-side thin-client application 1750 using the bind request and bind response messages. - The bind request, bind response, and bind commit initialization messages allow the server-side thin-
client application 1750 and the thin-client application 1720 to conduct a 3-way handshake initiated by the server-side thin-client application 1750, and negotiate capabilities. A 2-way handshake may be initiated by the server-side thin-client application 1750 when the current set of virtual channel capabilities can be negotiated using a 2-way handshake only, but a 3-way handshake is supported to allow more flexibility that might be required by new capabilities or future enhancements to current capabilities. For example, in a 3-way handshake, after receiving a “menu” of capabilities from the server-side thin-client application 1750, the thin-client application 1720 can exhibit a specific preference or could instead acknowledge a whole set of options pertaining to a specific capability thus letting the server-side thin-client application 1750 decide on a specific option. In a 2-way handshake to be initiated by the thin-client application 1720, the thin-client application 1720 could not exhibit a specific preference because it might not be supported by the host. - Following channel setup, the virtual channel driver of both the thin-
client application 1720 and the server-side thin-client application 1750 does the following in a loop until a “stop” message or an “error” message is received: retrieve authentication data from thesecurity service security service security service security service - As long as “stop” or “error” are not signaled, the virtual channel driver of the thin-
client application 1720 and the server-side thin-client application 1750 are free to exchange data messages until thesecurity service client application 1750, or thevirtual channel 1735. In other embodiments, the virtual channel driver of the thin-client application 1720 and the server-side thin-client application 1750 exchange messages sequentially, that is, two messages are not sent in one direction without a reply to the first being sent in the other. In either embodiment, message exchange can stop after a message has been sent in either direction. - In some particular embodiments, the data messages are sent over the virtual channel Least Significant Double Word (LSDW), Least Significant Word (LSW), Least Significant Byte (LSB) first. In other particular embodiments, the data messages are aligned at a byte boundary and fully packed in memory. In these embodiments, data fields will be aligned in memory as written to or read from the virtual channel.
- Some messages transmitted on the authentication virtual channel span multiple virtual channel packets. To support this, every message must be preceded by a message specifying the length of the next transmitted command. An example of a message that may be used to specify the length of the next command is:
-
typedef struct_PKT_CMDLEN { UINT32 Length; UINT8 Command; UINT8 FlagsBitMask; } PKT_CMDLEN, *PPKT_CMDLEN; - In some of these embodiments, PKT_CMDLEN also contains a command number to indicate what type of message is to follow:
-
#define CMD_BIND_REQUEST 0x00 #define CMD_BIND_RESPONSE 0x01 #define CMD_BIND_COMMIT 0x02 #define CMD_SSPI_DATA 0x03 - A PKT_CMDLEN packet containing Length=0 indicates that no more data will follow (i.e. a logical channel close).
- The server-side thin-
client application 1750 passes the authentication data it receives over the authentication virtual channel to itssecurity service 1712′. If the server-side security service 1712′ is able to verify the data, it generates an access token representing a logon session for the user, allowing the user to authenticate to theremote machine 30 without resubmitting authentication credentials. An access token is a data object that includes, among other things, a locally unique identifier (LUID) for the logon session. If the server-side security service 1712′ is not able to verify the data, the user is prompted to resubmit authentication credentials. - In some embodiments, until the server-
side security service 1712′ authenticates the user, the only virtual channel over which the user may communicate with theremote machine 30 is the authentication virtual channel. In some of these embodiments, after authentication, new virtual channels are initiated for communication. In other embodiments, only one virtual channel exists and it may only be used for authentication-related communications until the user is authenticated, and it may be used for other communications after the user is authenticated. - For embodiments in which the
remote machine 30 operates under control of a MICROSOFT WINDOWS operating system, the access token generated by the server-side security service 1712′ is an impersonation token that has only network logon rights. That is, the generated access token is not suitable to use for starting applications to run interactively, as is required in the WINDOWS server-based computing environment. To allow applications to run interactively, a primary access token is needed that has interactive logon rights. In one embodiment, the generated access token is modified to provide the appropriate rights. In another embodiment, a new token is generated for the user. - For embodiments in which the server-
side computing device 140 operates under control of a Unix-based operating system, if the server-side security service 1712′ verifies the authentication data it receives over the authentication virtual channel from the server-side thin-client application 1750, the server-side thin-client application 1750 will grant the user access to the resources. In these embodiments, the server-side security service 1712′ does not generate an access token. - In some embodiments, after the
remote machine 30 has authenticated the user, theremote machine 30 presents an enumeration of resources available to the user. In these embodiments, theremote machine 30 may create a page describing a display of resources, hosted by a plurality of machines, available to themachine 100. Theremote machine 30 may then transmit the created page to themachine 100 for display and receive from themachine 100, a request to access one of the hosted resources. - In some of these embodiments, the selected one of the available resources hosted by one of the plurality of machines is then executed without requiring further receipt of user authentication data from the
machine 100. In some of these embodiments, theremote machine 30 initiates, in response to successful authentication by the user, a connection from theremote machine 30 to a secondremote machine 30′ which is hosting a resource available to the user. In these embodiments, the available resource is executed over the connection. In some embodiments, the connection is a virtual channel. - In other embodiments, the first
remote machine 30 is hosting the selected one of the available resources. In some of these embodiments, theremote machine 30 makes the resource available to the user over the existing connection. In others of these embodiments, theremote machine 30 makes the resource available to the user over a new connection. In some of those embodiments, the new connection comprises a virtual channel. - In some embodiments, a plurality of components are provided for authenticating a user of the
client machine 10 to a virtual machine on aremote machine 30. In one of these embodiments, functionality is provided for a Kerberos-based Single Sign-On process between theclient machine 10 and a guest operating system provided by the virtual machine. - In some embodiments, a user seeking to access a resource provided by a virtual machine provides authentication credentials multiple times to different entities. In one of these embodiments, the user is authenticated by a client agent on the
client machine 10, by aremote machine 30, and by a computing environment provided by a virtual machine in theremote machine 30. In some of these embodiments, single sign-on support would enable authentication of the user to different entities with only one transmission of authentication credentials from the user. - Authentication of the user to the client machine and the
remote machine 30 may be accomplished as described above in connection withFIG. 17 . In some embodiments, an authentication component, a GINA (Graphical Identification and Authentication) component, an authentication module in the session management component and an authentication module for the virtual machine service component are provided. In one embodiment, a bidirectional virtual channel enables communication between a service management component on theremote machine 30 and a virtual machine service component executing in the guest operating system. In one embodiment, theremote machine 30 includes client-side single sign-on functionality and the virtual machine includes server-side single sign-on functionality. In still another embodiment, the service management component implements an authentication module and communicates with an authentication module in the virtual machine service component to authenticate the user. - In one embodiment, the session management component creates a Kerberos SSPI channel between itself and the virtual machine service component. When the channel is established the session management component acquires the credentials of the user and initializes a security context using this data. The initialization data returned is sent to the virtual machine service component which accepts the data and starts an exchange of SSPI messages between the two components until the security context is established in the virtual machine service component. This context is then used to log the user on to the virtual machine using a single sign-on GINA component.
- In some embodiments, the session management component authenticates the user to a host operating system on the
remote machine 30. In one of these embodiments, the host operating system then authenticates the user to the virtual machine. In other embodiments, the session management component authenticates the user to a hypervisor. In one of these embodiments, the hypervisor then authenticates the user to the virtual machine. In still other embodiments, the session management component authenticates the user to a virtual machine providing management functionality for the virtual machine to which the user seeks access. - Referring back to
FIG. 8 , aremote machine 30 may determine to provide access to a resource streaming service capable of transmitting a requested resource to the client machine (step 816). In some embodiments, theremote machine 30 determines to implement a resource streaming service to transmit to theclient machine 10 or to aremote machine 30′ a requested resource. In other embodiments, theremote machine 30 determines to use a resource streaming service to stream the resource to a computing environment provided by a virtual machine. In still other embodiments, the resource is a computing environment and theremote machine 30 determines to use a resource streaming technique to stream the computing environment to a virtual machine. In some embodiments, the plurality of resource files resides on theremote machine 30′. In other embodiments, the plurality of resource files resides on a separate file server orremote machine 30″. In still other embodiments, the plurality of resource files may be transmitted to aclient machine 10. In yet other embodiments, a file in the plurality of resource files may be executed prior to transmission of a second file in the plurality of resource files to theclient machine 10. - In some embodiments, the
remote machine 30 retrieves information about the enumerated resource from aremote machine 30′. In one of these embodiments, theremote machine 30 receives an identification of aremote machine 30″ hosting a plurality of resource files. In another of these embodiments, theremote machine 30 receives identification of a location of a plurality of resource files, the identification conforming to a Universal Naming Convention (UNC). In still another of these embodiments, the identification includes a network location and a socket for a resource streaming protocol. - In one embodiment, the
remote machine 30 retrieves a file containing information about the enumerated resource. The file may include an identification of a location of aremote machine 30′ hosting the enumerated resource. The file may include an identification of a plurality of versions of the enumerated resource. The file may include an enumeration of a plurality of resource files comprising the enumerated resource. The file may include an identification of a compressed file comprising a plurality of resources files comprising the enumerated resource. The file may include an identification of pre-requisites to be satisfied by a machine executing the enumerated resource. The file may include an enumeration of data files associated with the enumerated resource. The file may include an enumeration of scripts to be executed on a machine executing the enumerated resource. The file may include an enumeration of registry data associated with the enumerated resource. The file may include an enumeration of rules for use in an embodiment where the enumerated resource executes within an isolation environment. In one embodiment, the file may be referred to as a “manifest” file. The information that the file may contain is described in further detail below. - The stream of data packets may include resource files comprising the enumerated resource. In some embodiments, resource files include data files associated with an resource. In other embodiments, resource files include executable files required for execution of the resource. In still other embodiments, the resource files include metadata including information about the files, such as location, compatibility requirements, configuration data, registry data, identification of execution scripts rules for use in isolation environments, or authorization requirements.
- In some embodiments, the streamed resource executes prior to the transmission of each resource file in a plurality of resource files comprising the streamed resource. In one of these embodiments, execution of the streamed resource begins upon receipt by a
client machine 10 of one resource file in the plurality of resources. In another of these embodiments, execution of the streamed resource begins upon receipt by aclient machine 10 of an executable resource file in the plurality of resource files. In still another of these embodiments, theclient machine 10 executes a first received resource file in a plurality of resource files and the first received resource file requests access to a second resource file in the plurality of resource files. - In one embodiment, the streamed resource executes on the
client machine 10 without permanently residing on theclient machine 10. In this embodiment, the streamed resource may execute on theclient machine 10 and be removed from theclient machine 10 upon termination of the streamed resource. In another embodiment, the streamed resource executes on theclient machine 10 after a pre-deployed copy of each resource file is stored on theclient machine 10. In still another embodiment, the streamed resource executes on theclient machine 10 after a copy of each resource file is stored in an isolation environment on theclient machine 10. In yet another embodiment, the streamed resource executes on theclient machine 10 after a copy of each resource file is stored in a cache on theclient machine 10. - In some embodiments, the
remote machine 30 streams the enumerated resource to theremote machine 30, executes the enumerated resource on theremote machine 30, and provides to theclient machine 10 resource-output data generated by the execution of the enumerated resource. In other embodiments, a resource is streamed to a virtual machine and resource output data is transmitted to aclient machine 10 using a presentation layer protocol such as X11, VNC, ICA or RDP. - In one embodiment, the
remote machine 30 receives a plurality of resource files comprising the enumerated resource. In another embodiment, theremote machine 30 provides the resource-output data via a presentation level protocol, such as an ICA presentation level protocol or a Remote Desktop Windows presentation level protocol or an X-Windows presentation level protocol. - In some embodiments, the
remote machine 30 also provides access information associated with the enumerated resource, the access information generated responsive to the selected method. In one of these embodiments, the access information provides an indication to theclient machine 10 of the selected method for execution of the enumerated resource. In another of these embodiments, the access information includes an identification of a location of the enumerated resource, the identification conforming to a Universal Naming Convention (UNC). In still another of these embodiments, the access information includes an identification of a session management server. - In some embodiments, the access information includes a launch ticket comprising authentication information. In one of these embodiments, the
client machine 10 may use the launch ticket to authenticate the access information received from theremote machine 30. In another of these embodiments, theclient machine 10 may use the launch ticket to authenticate itself to a secondremote machine 30 hosting the enumerated resource. In still another of these embodiments, theremote machine 30 includes the launch ticket in the access information responsive to a request from theclient machine 10 for the launch ticket. - Referring now to
FIG. 18 , flow diagram depicts one embodiment of the steps taken to access a plurality of files comprising a resource, such as a computing environment or an application program. Aclient machine 10 performs a pre-launch analysis (step 1810). In one embodiment, theclient machine 10 performs the pre-launch analysis prior to retrieving and executing a plurality of resource files comprising a resource. In another embodiment, theclient machine 10 performs the pre-launch analysis responsive to a received indication that the pre-launch analysis is a requirement for authorization to access the plurality of resource files comprising a resource. - In some embodiments, the
client machine 10 receives, from aremote machine 30, access information associated with the plurality of resource files. In one of these embodiments, the access information includes an identification of a location of aremote machine 30′ hosting the plurality of resource files. In another of these embodiments, theclient machine 10 receives an identification of a plurality of resources comprising one or more versions of the resource. In still another of these embodiments, theclient machine 10 receives an identification of a plurality of resource files comprising one or more resources. In other embodiments, theclient machine 10 receives an enumeration of resources available to theclient machine 10 for retrieval and execution. In one of these embodiments, the enumeration results from an evaluation of theclient machine 10. In still other embodiments, theclient machine 10 retrieves at least one characteristic responsive to the retrieved identification of the plurality of resource files comprising a resource. - In some embodiments, the access information includes a launch ticket capable of authorizing the
client machine 10 to access the plurality of resource files. In one of these embodiments, the launch ticket is provided to theclient machine 10 responsive to an evaluation of theclient machine 10. In another of these embodiments, the launch ticket is provided to theclient machine 10 subsequent to a pre-launch analysis of theclient machine 10 by theclient machine 10. - In other embodiments, the
client machine 10 retrieves at least one characteristic required for execution of the plurality of resource files. In one of these embodiments, the access information includes the at least one characteristic. In another of these embodiments, the access information indicates a location of a file for retrieval by theclient machine 10, the file enumerating the at least one characteristic. In still another of these embodiments, the file enumerating the at least one characteristic further comprises an enumeration of the plurality of resource files and an identification of aremote machine 30 hosting the plurality of resource files. - The
client machine 10 determines the existence of the at least one characteristic on theclient machine 10. In one embodiment, theclient machine 10 makes this determination as part of the pre-launch analysis. In another embodiment, theclient machine 10 determines whether theclient machine 10 has the at least one characteristic. - In one embodiment, determining the existence of the at least one characteristic on the
client machine 10 includes determining whether a device driver is installed on theclient machine 10. In another embodiment, determining the existence of the at least one characteristic on theclient machine 10 includes determining whether an operating system is installed on theclient machine 10. In still another embodiment, determining the existence of the at least one characteristic on theclient machine 10 includes determining whether a particular operating system is installed on theclient machine 10. In yet another embodiment, determining the existence of the at least one characteristic on theclient machine 10 includes determining whether a particular revision level of an operating system is installed on theclient machine 10. For embodiments in which aremote machine 30 acts as a client machine 10 (such as, for example, a terminal services session in which the remote machine executes computing resources on behalf of a user of a client machine), determining the existence of at least on characteristic may include determining whether theremote machine 30 executes a hypervisor or, alternatively, whether the remote machine executes a hypervisor which itself executes in the native operating system. - In some embodiments, determining the existence of the at least one characteristic on the
client machine 10 includes determining whether theclient machine 10 has acquired authorization to execute an enumerated resource. In one of these embodiments, a determination is made by theclient machine 10 as to whether theclient machine 10 has received a license to execute the enumerated resource. In another of these embodiments, a determination is made by theclient machine 10 as to whether theclient machine 10 has received a license to receive across a resource streaming session a plurality of resource files comprising the enumerated resource. In other embodiments, determining the existence of the at least one characteristic on theclient machine 10 includes determining whether theclient machine 10 has sufficient bandwidth available to retrieve and execute an enumerated resource. - In some embodiments, determining the existence of the at least one characteristic on the
client machine 10 includes execution of a script on theclient machine 10. In other embodiments, determining the existence of the at least one characteristic on theclient machine 10 includes installation of software on theclient machine 10. In still other embodiments, determining the existence of the at least one characteristic on theclient machine 10 includes modification of a registry on theclient machine 10. In yet other embodiments, determining the existence of the at least one characteristic on theclient machine 10 includes transmission of acollection agent 704 to theclient machine 10 for execution on theclient machine 10 to gather credentials associated with theclient machine 10. - The
client machine 10 requests, from aremote machine 30, authorization for execution of the plurality of resource files, the request including a launch ticket (step 1812). In some embodiments, theclient machine 10 makes the request responsive to a determination that at least one characteristic exists on theclient machine 10. In one of these embodiments, theclient machine 10 determines that a plurality of characteristics exist on theclient machine 10, the plurality of characteristics associated with an enumerated resource and received responsive to a request to execute the enumerated resource. In another of these embodiments, whether theclient machine 10 receives an indication that authorization for execution of the enumerated resource files depends upon existence of the at least one characteristic on theclient machine 10. In one embodiment, theclient machine 10 received an enumeration of resources, requested execution of an enumerated resource, and received access information including the at least one characteristic and a launch ticket authorizing the execution of the enumerated resource upon the determination of the existence of the at least one characteristic on theclient machine 10. In one embodiment, theclient machine 10 receives from the remote machine 30 a license authorizing execution of the plurality of resource files. In some embodiments, the license authorizes execution for a specified time period. In one of these embodiments, the license requires transmission of a heart beat message to maintain authorization for execution of the plurality of resource files. For embodiments in which a virtual machine is streamed or otherwise downloaded to the client machine, a license pool may be provided that authorizes the virtual machine, its guest operating system and all the licensed software installed within that guest operating system. In some of these embodiments, a single license is provided that authorizes those entities. - In another embodiment, the
client machine 10 receives from theremote machine 30 the license and an identifier associated with aremote machine 30 monitoring execution of the plurality of resource files. In some embodiments, theremote machine 30 is a session management server 1962, as described below in connection withFIG. 19 . In one of these embodiments, the session management server 1962 includes asession management subsystem 1910 that monitors the session associated with theclient machine 10. In other embodiments, a separateremote machine 30″″ is the session management server 1962. - Referring back to
FIG. 18 , theclient machine 10 receives and executes the plurality of resource files (step 1814). In one embodiment, theclient machine 10 receives the plurality of resource files across a resource streaming session. In another embodiment, theclient machine 10 stores the plurality of resource files in an isolation environment on theclient machine 10. In still another embodiment, theclient machine 10 executes one of the plurality of resource files prior to receiving a second of the plurality of resource files. In some embodiments, aremote machine 30 transmits the plurality of resource files to a plurality ofclient machines 10, eachclient machine 10 in the plurality having established a separate resource streaming session with theremote machine 30. - In some embodiments, the
client machine 10 stores the plurality of resource files in a cache and delays execution of the resource files. In one of these embodiments, theclient machine 10 receives authorization to execute the resource files during a pre-defined period of time. In another of these embodiments, theclient machine 10 receives authorization to execute the resource files during the pre-defined period of time when theclient machine 10 lacks access to a network. In other embodiments, theclient machine 10 stores the plurality of resource files in a cache. In one of these embodiments, a resource streaming client 1952 (described in further detail below in connection withFIG. 19 ) establishes an internal resource streaming session to retrieve the plurality of resource files from the cache. In another of these embodiments, theclient machine 10 receives authorization to execute the resource files during a pre-defined period of time when theclient machine 10 lacks access to a network. - The
client machine 10 transmits at least one heartbeat message to a remote machine (step 1816). In some embodiments, theclient machine 10 transmits the at least one heartbeat message to retain authorization to execute the plurality of resource files comprising the enumerated resource. In other embodiments, theclient machine 10 transmits the at least one heartbeat message to retain authorization retrieve a resource file in the plurality of resource files. In still other embodiments, theclient machine 10 receives a license authorizing execution of the plurality of resource files during a pre-determined period of time. - In some embodiments, the
client machine 10 transmits the heartbeat message to a secondremote machine 30″″. In one of these embodiments, the secondremote machine 30″″ may comprise a session management server 1962 monitoring the retrieval and execution of the plurality of resource files. In another of these embodiments, the secondremote machine 30″″ may renew a license authorizing execution of the plurality of resource files, responsive to the transmitted heartbeat message. In still another of these embodiments, the secondremote machine 30″″ may transmit to theclient machine 10 a command, responsive to the transmitted heartbeat message. - Referring now to
FIG. 19 , theclient machine 10 may include a resource streaming client 1952, a streaming service 1954 and anisolation environment 1956. - The resource streaming client 1952 may be an executable program. In some embodiments, the resource streaming client 1952 may be able to launch another executable program. In other embodiments, the resource streaming client 1952 may initiate the streaming service 1954. In one of these embodiments, the resource streaming client 1952 may provide the streaming service 1954 with a parameter associated with executing a resource. In another of these embodiments, the resource streaming client 1952 may initiate the streaming service 1954 using a remote procedure call.
- In one embodiment, the
client machine 10 requests execution of a resource and receives access information from aremote machine 30 regarding execution. In another embodiment, the resource streaming client 1952 receives the access information. In still another embodiment, the resource streaming client 1952 provides the access information to the streaming service 1954. In yet another embodiment, the access information includes an identification of a location of a file associated with a plurality of resource files comprising the resource. - In one embodiment, the streaming service 1954 retrieves a file associated with a plurality of resource files. In some embodiments, the retrieved file includes an identification of a location of the plurality of resource files. In one of these embodiments, the streaming service 1954 retrieves the plurality of resource files. In another of these embodiments, the streaming service 1954 executes the retrieved plurality of resource files on the
client machine 10. In other embodiments, the streaming service 1954 transmits heartbeat messages to aremote machine 30 to maintain authorization to retrieve and execute a plurality of resource files. - In some embodiments, the retrieved file includes an identification of a location of more than one plurality of resource files, each plurality of resource files comprising a different resource. In one of these embodiments, the streaming service 1954 retrieves the plurality of resource files comprising the resource compatible with the
client machine 10. In another of these embodiments, the streaming service 1954 receives authorization to retrieve a particular plurality of resource files, responsive to an evaluation of theclient machine 10. - In some embodiments, the plurality of resource files are compressed and stored on a file server within an archive file such as a CAB, ZIP, SIT, TAR, JAR or other archive file. In one embodiment, a plurality of resource files stored in an archive file comprises a resource. In another embodiment, multiple pluralities of resource files stored in an archive file each comprise different versions of a resource. In still another embodiment, multiple pluralities of resource files stored in an archive file each comprise different resources. In some embodiments, an archive file includes metadata associated with each file in the plurality of resource files. In one of these embodiments, the streaming service 1954 generates a directory structure responsive to the included metadata. As will be described in greater detail below, the metadata may be used to satisfy requests by resources for directory enumeration.
- In one embodiment, the streaming service 1954 decompresses an archive file to acquire the plurality of resource files. In another embodiment, the streaming service 1954 determines whether a local copy of a file within the plurality of resource files exists in a cache on the
client machine 10 prior to retrieving the file from the plurality of resource files. In still another embodiment, the filesystem filter driver 1964 determines whether the local copy exists in the cache. In some embodiments, the streaming service 1954 modifies a registry entry prior to retrieving a file within the plurality of resource files. - In some embodiments, the streaming service 1954 stores a plurality of resource files in a cache on the
client machine 10. In one of these embodiments, the streaming service 1954 may provide functionality for caching a plurality of resource files upon receiving a request to cache the plurality of resource files. In another of these embodiments, the streaming service 1954 may provide functionality for securing a cache on theclient machine 10. In another of these embodiments, the streaming service 1954 may use an algorithm to adjust a size and a location of the cache. - In some embodiments, the streaming service 1954 creates an
isolation environment 1956 on theclient machine 10. In one of these embodiments, the streaming service 1954 uses an isolation environment application programming interface to create theisolation environment 1956. In another of these embodiments, the streaming service 1954 stores the plurality of resource files in theisolation environment 1956. In still another of these embodiments, the streaming service 1954 executes a file in the plurality of resource files within the isolation environment. In yet another of these embodiments, the streaming service 1954 executes the resource in the isolation environment. In some embodiments, the streaming service 1954 accesses anisolation environment 1956 provided by a virtual machine. - For embodiments in which authorization is received to execute a resource on the
client machine 10, the execution of the resource may occur within anisolation environment 1956. In some embodiments, a plurality of resource files comprising the resource is stored on theclient machine 10 prior to execution of the resource. In other embodiments, a subset of the plurality of resource files is stored on theclient machine 10 prior to execution of the resource. In still other embodiments, the plurality of resource files does not reside in theisolation environment 1956. In yet other embodiments, a subset of the plurality of resources files do not reside on theclient machine 10. Regardless of whether a subset of the plurality of resource files or each resource file in the plurality of resource files reside on theclient machine 10 or inisolation environment 1956, in some embodiments, a resource file in the plurality of resource files may be executed within anisolation environment 1956. - In some embodiments, isolation environments are used to provide additional functionality to the resource streaming client 1952. In one of these embodiments, a resource is executed within an isolation environment. In another of these embodiments, a retrieved plurality of resource files resides within the isolation environment. In still another of these embodiments, changes to a registry on the
client machine 10 are made within the isolation environment. - In one embodiment, the resource streaming client 1952 includes an
isolation environment 1956. In some embodiments, the resource streaming client 1952 includes a filesystem filter driver 1964 intercepting resource requests for files. In one of these embodiments, the filesystem filter driver 1964 intercepts a resource request to open an existing file and determines that the file does not reside in theisolation environment 1956. In another of these embodiments, the filesystem filter driver 1964 redirects the request to the streaming service 1954 responsive to a determination that the file does not reside in theisolation environment 1956. The streaming service 1954 may extract the file from the plurality of resource files and store the file in theisolation environment 1956. The filesystem filter driver 1964 may then respond to the request for the file with the stored copy of the file. In some embodiments, the filesystem filter driver 1964 may redirect the request for the file to a file server 1940, responsive to an indication that the streaming service 1954 has not retrieved the file or the plurality of resource files and a determination the file does not reside in theisolation environment 1956. - In some embodiments, the file
system filter driver 1964 uses a strict isolation rule to prevent conflicting or inconsistent data from appearing in theisolation environment 1956. In one of these embodiments, the filesystem filter driver 1964 intercepting a request for a resource in a user isolation environment may redirect the request to a resource isolation environment. In another of these embodiments, the filesystem filter driver 1964 does not redirect the request to a system scope. - In one embodiment, the streaming service 1954 uses IOCTL commands to communicate with the filter driver. In another embodiment, communications to the file server 1940 are received with the Microsoft SMB streaming protocol.
- Referring now to
FIG. 20 , a flow diagram depicts one embodiment of steps taken by aclient machine 10 to execute a resource. As described above inFIG. 18 , regardingstep 1814, aclient machine 10 receives and executes the plurality of resource files. In brief overview, theclient machine 10 receives a file including access information for accessing a plurality of resource files and for executing a first client capable of receiving a resource stream (step 2002). Theclient machine 10 retrieves an identification of the plurality of resource files, responsive to the file (step 2004). Theclient machine 10 retrieves at least one characteristic required for execution of the plurality of resource files, responsive to the file (step 2006). Theclient machine 10 determines whether theclient machine 10 includes the at least one characteristic (step 2008). Theclient machine 10 executes a second client, the second client requesting execution of the plurality of resource files on aremote machine 30, responsive to a determination that theclient machine 10 lacks the at least one characteristic (step 2010). - Referring to
FIG. 20 , and in greater detail, theclient machine 10 receives a file including access information for accessing a plurality of resource files and for executing a first client capable of receiving a resource stream (step 2002). In one embodiment, theclient machine 10 receives access information including an identification of a location of a plurality of resource files comprising a resource. In another embodiment, theclient machine 10 receives the file responsive to requesting execution of the resource. In still another embodiment, the access information includes an indication that the plurality of resource files reside on aremote machine 30′ such as a resource server or a file server. In yet another embodiment, the access information indicates that theclient machine 10 may retrieve the plurality of resource files from theremote machine 30 over a resource streaming session. - The
client machine 10 retrieves an identification of the plurality of resource files, responsive to the file (step 2004). In one embodiment, theclient machine 10 identifies aremote machine 30 on which the plurality of resource files resides, responsive to the file including access information. In another embodiment, theclient machine 10 retrieves from the remote machine 30 a file identifying the plurality of resource files. In some embodiments, the plurality of resource files comprises a resource. In other embodiments, the plurality of resource files comprises multiple resources. In still other embodiments, the plurality of resource files comprises multiple versions of a single resource. - Referring ahead to
FIG. 21 , a block diagram depicts one embodiment of a plurality of resource files residing on aremote machine 30′, such as file server 1940. InFIG. 21 , a plurality of resource files, referred to as a package, includes resource files comprising three different versions of one or more resources. - In one embodiment, each subset of resource files comprising a version of one or more resources and stored within the package is referred to as a target.
Target 1, for example, includes a version of a word processing resource and of a spreadsheet program, the version compatible with the English language version of the Microsoft Windows 2000 operating system.Target 2 includes a version of a word processing resource and of a spreadsheet program, the version compatible with the English language version of the Microsoft XP operating system. Target 3 a version of a word processing resource and of a spreadsheet program, the version compatible with the Japanese language version of the Microsoft Windows 2003 operating system withservice pack 3. - Returning back to
FIG. 20 , in some embodiments, the file retrieved from theremote machine 30 hosting the plurality of resource files includes a description of the package and the targets included in the plurality of resource files. In other embodiments, the file retrieved from theremote machine 30 identifies the plurality of resource files comprising a resource requested for execution by theclient machine 10. - The
client machine 10 retrieves at least one characteristic required for execution of the plurality of resource files, responsive to the file (step 2006). In some embodiments, theclient machine 10 may not execute a resource unless theclient machine 10 includes certain characteristics. In one of these embodiments, different resources requireclient machines 10 to include different characteristics from the characteristics required by other resources. In another of these embodiments, theclient machine 10 receives an identification of the at least one characteristic required for execution of the plurality of resource files comprising the resource requested by theclient machine 10. - Still referring to
FIG. 20 , theclient machine 10 determines whether theclient machine 10 includes the at least one characteristic (step 2008). In one embodiment, theclient machine 10 evaluates an operating system on theclient machine 10 to determine whether theclient machine 10 includes the at least one characteristic. In another embodiment, theclient machine 10 identifies a language used by an operating system on theclient machine 10 to determine whether theclient machine 10 includes the at least one characteristic. In still another embodiment, theclient machine 10 identifies a revision level of an operating system on theclient machine 10 to determine whether theclient machine 10 includes the at least one characteristic. In yet another embodiment, theclient machine 10 identifies a resource version of a resource residing on theclient machine 10 to determine whether theclient machine 10 includes the at least one characteristic. In some embodiments, theclient machine 10 determines whether theclient machine 10 includes a device driver to determine whether theclient machine 10 includes the at least one characteristic. In other embodiments, theclient machine 10 determines whether theclient machine 10 includes an operating system to determine whether theclient machine 10 includes the at least one characteristic. In still other embodiments, theclient machine 10 determines whether theclient machine 10 includes a license to execute the plurality of resource files to determine whether theclient machine 10 includes the at least one characteristic. - In one embodiment, the
client machine 10 determines whether theclient machine 10 comprises a required amount of available disk space to access the resource. In another embodiment, theclient machine 10 determines whether a central processing unit of theclient machine 10 provides a required processing speed. In still another embodiment, theclient machine 10 determines whether theclient machine 10 comprises a required amount of available RAM. In yet another embodiment, theclient machine 10 determines whether theclient machine 10 comprises a required level of graphical processing and display capabilities. - The
client machine 10 executes a second client, the second client requesting execution of the plurality of resource files on aremote machine 30, responsive to a determination that theclient machine 10 lacks the at least one characteristic (step 2010). In one embodiment, when theclient machine 10 determines that theclient machine 10 lacks the at least one characteristic, theclient machine 10 does not execute the first client capable of receiving a resource stream. In another embodiment, a policy prohibits theclient machine 10 from receiving the plurality of resource files over a resource stream when theclient machine 10 lacks the at least one characteristic. In some embodiments, theclient machine 10 determines that theclient machine 10 does include the at least one characteristic. In one of these embodiments, theclient machine 10 executes the first client, the first client receiving a resource stream comprising the plurality of resource files from aremote machine 30 for execution on theclient machine 10. - In some embodiments, the
client machine 10 executes the second client requesting execution of the plurality of resource files on aremote machine 30 upon determining that theclient machine 10 lacks the at least one characteristic. In one of these embodiments, the second client transmits the request to aremote machine 30 hosting the plurality of resource files. In another of these embodiments, theremote machine 30 executes the plurality of resource files comprising the resource and generates resource-output data. In still another of these embodiments, the second client receives resource-output data generated by execution of the plurality of resource files on theremote machine 30. In yet another of these embodiments, the second client displays the resource-output on theclient machine 10. In one embodiment, theclient machine 10 requests execution of the plurality of application files on aphysical machine 30. In another embodiment, theclient machine 10 requests execution of the plurality of application files on a virtual machine executing on aremote machine 30. - In some embodiments, the second client receives a file comprising access information for accessing a plurality of resource files and requests, responsive to a determination by the first client that the
client machine 10 lacks the at least one characteristic, execution of the plurality of resource files on a virtual machine providing a computing environment having the least one characteristic. In other embodiments, theclient machine 10 executes the second client requesting execution of the plurality of resource files on aremote machine 30 upon determining that theclient machine 10 lacks the at least one characteristic. In one of these embodiments, the second client transmits the request to aremote machine 30 hosting the plurality of resource files. In another of these embodiments, a virtual machine executing on theremote machine 30 executes the plurality of resource files comprising the resource and generates resource-output data. In still another of these embodiments, the second client receives resource-output data generated by execution of the plurality of resource files on the virtual machine. In yet another of these embodiments, the second client displays the resource-output on theclient machine 10. - In some embodiments, the second client transmits the request to a
remote machine 30 that does not host the plurality of resource files. In one of these embodiments, theremote machine 30 may request the plurality of resource files from a secondremote machine 30 hosting the plurality of resource files. In another of these embodiments, theremote machine 30 may receive the plurality of resource files from the secondremote machine 30 across a resource streaming session. In still another of these embodiments, theremote machine 30 stores the received plurality of resource files in an isolation environment and executes the resource within the isolation environment. In yet another of these embodiments, theremote machine 30 transmits the generated resource-output data to the second client on theclient machine 10. - In some embodiments, the second client transmits the request to a
remote machine 30 that does not host the plurality of resource files. In one of these embodiments, theremote machine 30 may request the plurality of resource files from a secondremote machine 30 hosting the plurality of resource files. In another of these embodiments, theremote machine 30 may receive the plurality of resource files from the secondremote machine 30 across a resource streaming session. - In other embodiments, the
remote machine 30 stores the received plurality of resource files in a computing environment provided by a virtual machine executing on theremote machine 30, the computing environment having the at least one characteristic. In yet another of these embodiments, theremote machine 30 executes the resource within the computing environment provided by the virtual machine and transmits the generated resource-output data to the second client on theclient machine 10. - In some embodiments, a virtual machine on the
remote machine 30 executes the plurality of resource files. In one of these embodiments, the virtual machine receives for execution a resource stream comprising the plurality of resource files. In some embodiments, a virtual machine may receive for execution a resource stream responsive to an application of a policy. In one of these embodiments, the result of the application of the policy depends on an availability of the requested resource in the machine farm 38 (including availability of a suitably configuredphysical machine 30 or virtual machine), the sensitivity of the requested resource (including whether a policy prevents the transmission of the requested resource to an unsecured environment), information associated with the user of the client machine 10 (including authorization to execute or access the requested resource in an unsecured environment). - Referring back to
FIG. 19 , in one embodiment, thefirst client machine 10, capable of receiving the resource stream, is a resource streaming client 1952. The resource streaming client 1952 receiving the file, retrieving an identification of a plurality of resource files and at least one characteristic required for execution of the plurality of resource files, responsive to the file, and determining whether theclient machine 10 includes the at least one characteristic. In another embodiment, the second client is a client agent 1960. In some embodiments, the client agent 1960 receives the file from the resource streaming client 1952 responsive to a determination, by the resource streaming client 1952, that theclient machine 10 lacks the at least one characteristic. - A
remote machine 30 includes functionality for monitoring resource usage by aclient machine 10. Theremote machine 30 may monitor the status of each resource used by theclient machine 10, for example upon execution or termination of a resource. In one embodiment, theremote machine 30 requires theclient machine 10 to transmit messages about the status of a resource executed by theclient machine 10. In another embodiment, when aclient machine 10 connects to a network on which theremote machine 30 resides, theclient machine 10 transmits a message indicating that theclient machine 10 has connected to the network. - In one embodiment, the
client machine 10 is said to have a session when theclient machine 10 interacts with theremote machine 30 and executes one or more resources. In another embodiment, theremote machine 30 requires theclient machine 10 to maintain, for the duration of a session, a license authorizing execution of resources received from aremote machine 30. In still another embodiment, sessions have unique session identifiers assigned by theremote machine 30. - In one embodiment, the
client machine 10 transmits the messages to theremote machine 30 with which it interacted to receive and execute the resource. In another embodiment, theclient machine 10 receives from theremote machine 30 an identifier of a secondremote machine 30, such as a session management server 1962, the secondremote machine 30 receiving and storing all transmitted messages associated with the session on theclient machine 10. - In some embodiments, the session management server 1962 is a
remote machine 30 providing license management and session monitoring services. In one of these embodiments, the session management server 1962 includes a server management subsystem 1908 providing these services. - In one embodiment, the
client machine 10 transmits messages directly to the session management server 1962. In another embodiment, theclient machine 10 transmits messages to aremote machine 30, theremote machine 30 forwarding the messages to the session management server 1962 with an identification of theclient machine 10. - A
client machine 10 may transmit a heartbeat message to theremote machine 30. In one embodiment, the heartbeat message includes a request for a license. In this embodiment, theclient machine 10 may transmit the heartbeat message after receiving access information associated with a resource which theclient machine 10 requested authorization to execute. Theclient machine 10 may transmit the heartbeat message prior to executing the resource. In one embodiment, theclient machine 10 includes with the heartbeat message a launch ticket received with the access information. In this embodiment, theremote machine 30 may grant theclient machine 10 a license upon successful verification of the launch ticket. - In another embodiment, the heartbeat message includes an indication that the
client machine 10 has initiated execution of a resource. In still another embodiment, the heartbeat message includes an indication that theclient machine 10 has terminated execution of a resource. In yet another embodiment, the heartbeat message includes an indication of a failure to execute a resource. - In one embodiment, the heartbeat message includes a request for an identification of a second session management server, such as a session management server 1962. In another embodiment, the heartbeat message includes an indication that the
client machine 10 has connected to a network on which theremote machine 30 resides. - In some embodiments, the heartbeat message includes a request to reset a resource streaming session. In one of these embodiments, the
client machine 10 transmits this heartbeat message when an error has occurred and a connection is terminated between a network on which theremote machine 30 resides and theclient machine 10. In another of these embodiments, theclient machine 10 transmits with the heartbeat message information associated with the session. In still another of these embodiments, theremote machine 30 may transmit to theclient machine 10 session-related data if the session has not expired. - In another of these embodiments, if a
remote machine 30 disconnects from a network on which it replies, theclient machine 10 may not receive a reply to a heartbeat message transmitted to theremote machine 30. In one embodiment, theclient machine 10 may re-establish a session by transmitting a message requesting a session reset to theremote machine 30. In another embodiment, theclient machine 10 may re-establish a session by transmitting a message requesting a session reset to a secondremote machine 30. In some embodiments, when theremote machine 30 reconnects to the network, it will create a new session for each session reset request received while theremote machine 30 was disconnected. In one of these embodiments, the new session will be associated with the reconnected and unlicensed state. In another of these embodiments, no new license will be acquired for the new session. In still another of these embodiments, when theclient machine 10 executes a resource, a new license will be acquired and all sessions associated with theclient machine 10 will be associated with an active and licensed state. - In some embodiments, a resource streaming client 1952 on the
client machine 10 generates the heartbeat message. In one of these embodiments, the resource streaming client 1952 forwards the heartbeat message to a web interface 1958 for transmission to theclient machine 10 for transmission to theremote machine 30. In other embodiments, the management service 1904 on theremote machine 30 receives the heartbeat message from theclient machine 10 via the web interface 1958. In still other embodiments, aremote machine 30 comprising a collector point 240 (described above) receives and stores the heartbeat messages. - In some embodiments, the resource streaming client 1952 requests a license from the
remote machine 30. In one of these embodiments, the license authorizes execution of a resource on theclient machine 10. In another of these embodiments, theremote machine 30 may access a secondremote machine 30 to provide the license. In still another of these embodiments, theremote machine 30 may provide the license to theclient machine 10. In yet another of these embodiments, theremote machine 30 may provide a license acceptable for authorization purposes to a secondremote machine 30. In some embodiments, the license is revoked upon termination of execution of a resource. - Referring back to
FIG. 8 , a request for access to a resource is received (step 802). In some embodiments, the resource is a file. In one of these embodiments, an application program is selected and executed to provide access to the file. In another of these embodiments, a type of file associated with the requested file is identified to select an application program for execution. In still another of these embodiments, prior to the request for access to the file, an application program is associated with a type of file, enabling automatic selection of the application program upon identification of a type of file associated with the requested file. In some embodiments, file type association (FTA) functionality permits users to automatically initiate the execution of application programs associated with a data file, even though the data file and the executable program are hosted on different computing nodes. - Typically, file type association functionality permits users to transparently execute executable programs by selecting data files located on a computing machine that differs from the machine(s) where the executable programs are located. In one embodiment, a user of a
client machine 10 can transparently invoke the execution of an executable program on aremote machine 30 by selecting a data file located on theclient machine 10. In another embodiment, a user can transparently invoke the execution of an application program on theirclient machine 10 by selecting a data file located on aremote machine 30. In still another embodiment, a user can select a data file stored on aremote machine 30′, such as a web server, and transparently invoke the execution of an associated executable program on aremote machine 30, such as an application execution server. Typically, execution permits processing of the contents of the selected data file, the output of which is then provided to the user at theclient machine 10. - It is to be understood that examples using filename extensions necessarily reflect the idiosyncrasies of embodiments utilizing the WINDOWS family of operating systems. Other embodiments implement methods and apparatus in accord using special parameters stored in the data file itself, the data contained in the data file, the file system records associated with the data file, or a separate data file or database. For example, embodiments using the MacOS family of operating systems utilize file and application creator types and store file-type association data in the Desktop file associated with each storage device. Embodiments using a UNIX-variant operating system utilize file extensions, embedded parameters, or other mechanisms as appropriate. Accordingly, the scope of the claims should not be read to be limited to embodiments relying on filename extensions or embodiments utilizing WINDOWS operating systems.
- Referring to
FIG. 22A , a flow diagram depicts one embodiment of the steps taken in a method of enabling transparent distributed program execution on aremote machine 30 through the selection of graphical indicia representative of a data file located on theclient machine 10. Theclient machine 10 receives, from one of a plurality ofremote machines 30, a mapping specifying an association between a type of data file and an executable program for execution on one of a plurality of remote machines 30 (Step 2206). In some embodiments, the mapping specifies an association between a type of data file and an executable program for execution on a virtual machine located on one of a plurality ofremote machines 30. - The
client machine 10 presents a graphical depiction of a data file stored on the client machine 10 (Step 2214) and receives a selection of the graphical depiction of the data file (Step 2218). Theclient machine 10 identifies an executable program associated with the type of the selected data file using the received mapping (Step 2222) and sends a request to aremote machine 30 for execution of the identified executable program (Step 2226). In one embodiment, theclient machine 10 initiates the execution of a local display application (Step 2230) to receive application output data from the executing program (Step 2234), which it displays to the end user (Step 2238). - Still referring to
FIG. 22A , when the client,machine 10 receives the mapping (Step 106), the mapping may be received by itself, with several other mappings, or with other messages or data such as software updates. Table 3 illustrates an exemplary mapping provided in one embodiment of the invention: -
TABLE 3 File type: Executable program: “.DOC”, “.RTF” MSWORD.EXE “.PDF” ACROBAT.EXE - In one embodiment, the mapping identifies an association between a particular executable program for use with a particular data file or type of data file stored on the user's
client machine 10. In another embodiment, the mapping specifies the relationship between an executable program and a data file in terms of aclient machine 10 application that launches the executable program on aremote machine 30 and displays the output from execution at theclient machine 10. For example, as described in connection withFIG. 8A (step 2206), the mapping could specify that when a “.DOC” file is selected, theclient machine 10 is to execute METAFRAME from Citrix Software of Ft. Lauderdale, Fla., which in turn sends a request to one of a plurality ofremote machines 30 to execute WORD, receiving the output data from execution for display to the user at theclient machine 10. In some embodiments, aremote machine 30 receiving the request to execute the application program chooses a method for providing access to the application program, as described above in connection withFIG. 8 (step 804). In one of these embodiments, theremote machine 30 determines to execute the application and provide the application output data to theclient machine 10. In another of these embodiments, theremote machine 30 identifies aremote machine 30 that executes the application and provides the application output data to theclient machine 10. In still another of these embodiments, theremote machine 30 identifies an application streaming service that transmits the application program to theclient machine 10 for local execution. In yet another of these embodiments, theremote machine 30 identifies aremote machine 30′ on which a virtual machine provides a computing environment capable of executing the application program and transmitting the application output data to theclient machine 10. - In still another embodiment, mapping specifies the relationship between an executable program and a data file in terms of a
client machine 10 application that requests transmission of the executable program to theclient machine 10 from an application streaming service provided by aremote machine 30. In other embodiments, the mapping could specify that when a file is selected, theclient machine 10 is to establish a connection to a virtual machine provided by one of a plurality ofremote machines 30 to initiate execution of an application program on the virtual machine and to receive application output data from the execution for display to the user atclient machine 10. In some of these embodiments, as described in connection withFIG. 8 (step 808), a virtual machine and an execution machine onto which the virtual machine is launched are identified, configured, and provide the user of theclient machine 10 with access to the file. - In some embodiments, the
client machine 10 displays a list of file names associated with data files stored on theclient machine 10. In still another embodiment, indicia representative of files stored on theclient machine 10 are intermingled with indicia representative of files stored on one or moreremote machines 30, or on virtual machines executing onremote machines 30. In this embodiment, client-based FTA is operative when indicia representative of a file stored on theclient machine 10 is selected. In another embodiment, multiple forms of FTA (see below) are operative, with the appropriate form of FTA activated based on the location of the file associated with the selected indicia. -
FIG. 22B illustrates one embodiment of the steps taken by aremote machine 30 in the client-based file-type association process. A mapping is provided specifying an association between a type of data file stored on aclient machine 10 and an executable program for execution on one of a plurality of remote machines 30 (Step 2254). A request to execute the executable program is received (Step 2262) and the executable program is executed on one of a plurality of remote machines 30 (Step 2266). In one embodiment, theremote machine 30 receiving the request to execute the executable program chooses to provide the requested access as describe above in connection withFIG. 8 (step 2204 and step 2206). In some embodiments, theremote machine 30 receives a request for transmission of the identified executable program to theclient machine 10 for local execution. In one of these embodiments, theremote machine 30 chooses to provide theclient machine 10 with the executable program via an application streaming service as described above. In another of these embodiments, theremote machine 30 chooses to stream the executable program to aremote machine 30 or to a virtual machine executing on aremote machine 30′. - Referring now to
FIG. 23 , a flow diagram depicts another embodiment of the steps taken in a method for enabling transparent distributed program execution on aclient machine 10 through the selection of graphical indicia representative of a data file located on aremote machine 30. Theclient machine 10 presents a graphical depiction of a data file stored on one of a plurality of remote machines 30 (Step 2300). Theclient machine 10 receives a selection of the graphical depiction of the data file (Step 2304) and transmits the selection to one of the plurality of remote machines 30 (Step 2308). Theclient machine 10 receives a request from one of the plurality ofremote machines 30 to execute an executable program associated with the selected data file (Step 2312) and executes the associated executable program (Step 2316). - Still referring to
FIG. 23 , theclient machine 10 presents a user with a graphical depiction of at least one data file stored on at least one remote machine 30 (Step 2300). In one embodiment, indicia representative of files stored on one or moreremote machines 30, and on virtual machines executing on the one or moreremote machines 30, are intermingled with indicia representative of files stored on theclient machine 10. In this embodiment, server-based FTA is operative when indicia representative of a file stored on aremote machine 30 is selected. In another embodiment, multiple forms of FTA (see above, below) are operative, with the appropriate form of FTA activated based on the location of the file associated with the selected graphical indicia. - As described above in connection with
FIG. 8 (step 804), aremote machine 30 receiving a request to access a selected data file chooses a method for providing access to the data file. In one embodiment, the data file resides on theremote machine 30. In another embodiment, the data file resides on aremote machine 30′, such as a web server. In some embodiments, theremote machine 30 consults a mapping to identify an application program associated with the requested data file. - In some embodiments, the
remote machine 30 chooses to provide theclient machine 10 with access to the file via execution of the associated application program in a computing environment provided by a virtual machine (step 806). In one of these embodiments, theremote machine 30 may identify aremote machine 30′ to execute the application program and transmit application output data to theclient machine 10. In another of these embodiments, theremote machine 30 identifies aremote machine 30′ to execute the application program in a computing environment provided by a virtual machine executing on theremote machine 30′, as described in connection withFIG. 8 (step 808). - In other embodiments, the
remote machine 30 identifies aremote machine 30′ providing an application streaming service capable of transmitting the application program to theclient machine 10 for execution on theclient machine 10 as described in connection withFIG. 8 (step 816). In one of these embodiments, the application streaming service transmits the application program to aremote machine 30′ for execution and theremote machine 30 transmits application output data resulting from the execution to theclient machine 10. - In some embodiments, the
remote machine 30 selects one of a predetermined number of methods for executing a requested application program, responsive to a policy, the predetermined number of methods including a method for executing the requested application in a computing environment provided by a virtual machine. In one of these embodiments, the application streaming service transmits the application program to aremote machine 30′ for executing in a computing environment provided by a virtual machine executing in theremote machine 30′. In another of these embodiments, theremote machine 30 selects a method for streaming the requested application program to a virtual machine and executing the enumerated application in the virtual machine environment. In still another of these embodiments, the virtual machine is evaluated and, a determination to stream the requested application is made responsive to the evaluation. In other embodiments, the determination to stream one of a plurality of files comprising an enumerated application program to a virtual machine is made responsive to credentials gathered from aclient machine 10. - Having received data associated with the selected data file, the
client machine 10 typically processes the received data using the executing program and displays the result of the processing to the end user. - As described above, a
client machine 10 connects to one or more of theremote machines 30 in themachine farm 38. In some of these embodiments, theclient machine 10 may communicate withremote machines 30 to receive application-output data generated by an execution of an application program on aremote machine 30, or on a virtual machine executing on theremote machine 30. In some embodiments, protocol stacks are implemented to enable communications between theclient machine 10 andremote machines 30. -
FIG. 24 is a flow diagram depicting one particular embodiment of a method for establishing an extensible and dynamicallybindable protocol stack 20. In one embodiment, the method allows aclient machine 10 to specify the contents of a protocol stack dynamically without requiring that aremote machine 30 have a prior protocol stack description for a particular client machine and a particular application requirement. - In one embodiment, a
remote machine 30 is on-line and monitoring activity on a specific transport system (e.g. LAN or WAN) and has initialized its protocol stack with the minimal necessary protocol modules to support a “TTY” communication mode. This mode is a raw ASCII stream mode with no protocol assumptions above the transport layer (i.e. there are no protocol layers for compression, encryption, reliability, framing, or modem). Similarly, aclient machine 10 seeking access to theremote machine 30 establishes a connection to the common transport system with the minimum protocol set needed to support a TTY communication mode. - Upon detecting that a
client machine 10 has established transport system connection (step 2401), the application server broadcasts a TTY data stream, “DETECT.sub.--STRING”, instep 2402 that indicates service is available. The method used for detecting a client machine connection is transport system dependent (e.g. in the case of the TCP transport, when a client machine connects to a known port). If theclient machine 10 does not respond within a prescribed time period,step 2403, a re-broadcast of mission of the message occurs instep 2402. Otherwise the process proceeds to step 2405 where theclient machine 10 sends the TTY string “DETECT-STRING”. Instep 2406, theclient machine 10 waits for theremote machine 30 to respond and, if the response is within a prescribed time interval, the process proceeds tosteps 2407 where theclient machine 10 enables the required protocol for supporting its application. Otherwise, theclient machine 10 repeats the transmission of the message instep 2405. The server responds in step 4108 by enabling the required set of protocols. Atstep 2409, the TTY mode of communication ends because the next message sent by the server is a presentation layer protocol packet, “PACKET.sub.--INIT.sub.—REQUEST”, which indicates that the client's required “DETECT.sub.--STRING” has been received and accepted. In response to step 2409, the client, at step 2410, sends a set of presentation layer protocol packets, “PACKET.sub.--INIT.sub.--RESPONSE”, each of which is used to specify a required or optional protocol module that is being negotiated with the server. Atstep 2411, the server sends a set of “PACKET.sub.--INIT.sub.--CONNECT” packets. The number of packets is variable: one for each client packet sent in step 2410, thus giving theremote machine 30 the opportunity to negotiate the parameters under which communications will take place by overriding the parameters of theclient machine 10; or, theremote machine 30 may indicate that all of the parameters of theclient machine 10 are acceptable by sending the parameters unchanged. Atstep 2412 theremote machine 30 enables the negotiated protocols (including any optional protocols) ofstep 2411. After theclient machine 10 receives the packets fromstep 2411, theclient machine 10 enables the negotiated protocols in step 2413. - Still referring to
FIG. 24 , in some embodiments, a virtual machine host server communicates with theclient machine 10 to enable negotiated protocols. As described above, a request is received from aclient machine 10 for access to a computing environment or for application execution, the request including an identification of a user of theclient machine 10. In some embodiments, a virtual machine is launched in communication with a hypervisor. In other embodiments, a virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications. In still other embodiments, a virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism. - A virtual machine host server creates a first portion of a protocol stack. In one embodiment, a hypervisor creates the first portion of the protocol stack. In another embodiment, the hypervisor transmits a request protocol message to the
client machine 10. In still another embodiment, the hypervisor receives from theclient machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by theclient machine 10. In yet another embodiment, the virtual machine host server generates, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters. - The virtual machine host server transmits a request protocol message to the
client machine 10. The virtual machine host server receives from theclient machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by theclient machine 10. The virtual machine host server transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters. In one embodiment, the virtual machine host server sends an acknowledgment message to theclient machine 10 indicating that at least one of the protocols specified by theclient machine 10 has been enabled. In another embodiment, the virtual machine host server responds to each received protocol packet transmitted by theclient machine 10 with a virtual machine host server protocol packet, at least one of the virtual machine host server protocol packets modifying at least one of the associated protocol parameters. The virtual machine host server creates on the virtual machine host server a second portion of a protocol stack, the first portion and the second portion of the protocol stack establishing a communication channel for communicating with theclient machine 10 having the negotiated protocol parameters. - Still referring to
FIG. 24 , in some embodiments, a virtual machine communicates with theclient machine 10 to enable negotiated protocols as described above. As described above, a request is received from aclient machine 10 for access to a computing environment or for application execution, the request including an identification of a user of theclient machine 10. A virtual machine in communication with a hypervisor is identified. In one embodiment, a virtual machine is launched in communication with a hypervisor. In another embodiment, a virtual machine in communication with a hypervisor is allocated. In one embodiment, a second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism. In another embodiment, the second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications. - The second virtual machine creates a first portion of a protocol stack. The second virtual machine transmits a request protocol message to the
client machine 10. The second virtual machine receives from theclient machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by theclient machine 10. The second virtual machine transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters. In one embodiment, the second virtual machine sends an acknowledgement message to theclient machine 10 indicating that at least one of the protocols specified by theclient machine 10 has been enabled. In another embodiment, the second virtual machine responds to each received protocol packet transmitted by theclient machine 10 with a response protocol packet, at least one of the response protocol packets modifying at least one of the associated protocol parameters. The first virtual machine creates a second portion of a protocol stack, the first portion and the second portion of the protocol stack establishing a communication channel for communicating with theclient machine 10 having the negotiated protocol parameters. In one embodiment, the first virtual machine sends an acknowledgment message to theclient machine 10 indicating that at least one of the protocols specified by theclient machine 10 has been enabled. In another embodiment, the first virtual machine responds to each received protocol packet transmitted by theclient machine 10 with a response protocol packet, at least one of the response protocol packets modifying at least one of the associated protocol parameters. - Still referring to
FIG. 24 , in some embodiments, a virtual machine host server communicates with theclient machine 10 to enable negotiated protocols as described above. As described above, a request is received from aclient machine 10 for access to a computing environment or for application execution, the request including an identification of a user of theclient machine 10. In one embodiment, a virtual machine is launched in communication with a hypervisor. In another embodiment, a virtual machine in communication with a hypervisor is allocated. In one embodiment, the virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism. In another embodiment, the virtual machine host server is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications. - The virtual machine host server transmits a request protocol message to the
client machine 10. The virtual machine host server receives from theclient machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by theclient machine 10. The virtual machine host server transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters. In one embodiment, the virtual machine host server sends an acknowledgement message to theclient machine 10 indicating that at least one of the protocols specified by theclient machine 10 has been enabled. In another embodiment, the virtual machine host server responds to each received protocol packet transmitted by theclient machine 10 with a virtual machine host server protocol packet, at least one of the virtual machine host server protocol packets modifying at least one of the associated protocol parameters. The virtual machine host server generates a data structure representing the connection and associated with an initial protocol stack. The virtual machine host server identifies a virtual machine in communication with a hypervisor and generates a client space in the identified virtual machine. The virtual machine host server generates a second protocol stack associated with the generated client space and transfers the established connection between the virtual machine host server and theclient machine 10 from the initial protocol stack to the second protocol stack by associating the data structure with the second protocol stack. - Still referring to
FIG. 24 , in some embodiments, a virtual machine communicates with theclient machine 10 to enable negotiated protocols as described above. As described above, a request is received from aclient machine 10 for access to a computing environment or for application execution, the request including an identification of a user of theclient machine 10. A first virtual machine in communication with a hypervisor is identified. In one embodiment, a second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism. In another embodiment, a second virtual machine is initialized with a prescribed set of protocols and associated protocol parameters providing a common transport mechanism, wherein the common transport mechanism is for raw ASCII stream mode communications. - The second virtual machine transmits a request protocol message to the
client machine 10. The second virtual machine receives from theclient machine 10 a plurality of protocol packets specifying one or more protocol parameters desired by theclient machine 10. The second virtual machine transmits, in response to each received protocol packet, a packet counter-specifying one or more protocol parameters. In one embodiment, the second virtual machine sends an acknowledgement message to theclient machine 10 indicating that at least one of the protocols specified by theclient machine 10 has been enabled. In another embodiment, the second virtual machine responds to each received protocol packet transmitted by theclient machine 10 with a response protocol packet, at least one of the response protocol packets modifying at least one of the associated protocol parameters. The second virtual machine generates a data structure representing the connection and associated with an initial protocol stack. The second virtual machine generates a client space in the identified first virtual machine. The second virtual machine generates a second protocol stack associated with the generated client space and transfers the established connection between the second virtual machine and theclient machine 10 from the initial protocol stack to the second protocol stack by associating the data structure with the second protocol stack. - Referring now to
FIG. 25 , a block diagram depicts one embodiment of aclient machine 10 in communication with aremote machine 30. When aclient machine 10 wishes to access a resource provided by aremote machine 30, theclient machine 10 may transmit a request to the general communications port previously defined by the communications protocol or to the “well-known” communications port on theremote machine 30. In one embodiment, the communication takes place by way of a datagram service. Theremote machine 30 accesses the table of server addresses and returns a message containing the address of theremote machine 30′ providing access to the requested resource and having the least load. In some embodiments, an address of a virtual machine executing on aremote machine 30′ having the least load is provided. For embodiments in which the message identifies the execution machine having the lightest load, the operating system or hypervisor may forward the communication request, and all subsequent traffic, to the appropriate virtual machine. - Subsequent communications are automatically addressed by the
client machine 10 also to a “well-known” or predefined general communications port on theremote machine 30′. In one embodiment, the type of protocol with which the initial query was made to theremote machine 30 determines the protocol of the information returned by theremote machine 30 to theclient machine 10. Thus, if the request were made using a TCP/IP datagram, theremote machine 30 would return the TCP/IP address of theremote machine 30′ to theclient machine 10 and theclient machine 10 would subsequently establish contact with theremote machine 30′ using that protocol. In another embodiment, the datagram requesting an application address by aclient machine 10 includes a request for a different type of protocol than the one used to send the request to theremote machine 30. For example, theclient machine 10 may make a request to theremote machine 30 using the IPX protocol and request the address of theremote machine 30′ as a TCP/IP protocol address. - As described above, in connection with
FIG. 8 , (steps 802-804), aremote machine 30 receives a request for access to a resource and chooses a method for providing access to the requested resource. In some embodiments, theremote machine 30 returns the network address of aremote machine 30′ having the desired resource to theclient machine 10. Theclient machine 10 then uses the information received from theremote machine 30 to request connection to the specifiedremote machine 30′. As is described above, such a connection is first established to a “well-known” communications port and is later transferred to a specific communications port under control of a connection manager. The specific communications port is associated with the resource executing on theremote machine 30′ which then communicates with theclient machine 10 through the specific communications port. - In more detail, and referring to
FIG. 25 , in some embodiments, aclient process 2502 onclient machine 10 makes arequest 2504 to theremote machine 30 to obtain the address of aremote machine 30′ which includes the desiredresource 2506. Theremote machine 30 returns to theclient machine 10 amessage 2508 containing the address of theremote machine 30′ which includes theresource 2506. In one embodiment, the protocol used at this point of the connection is a datagram service. - The
client machine 10 uses the returned address to establish acommunication channel 2510 with theremote machine 30′. The port number used by theclient machine 10 corresponds to the “well-known port” in theremote machine 30′ which has been defined by the network protocol as the port by which theremote machine 30′ establishes communication connections withclient machines 10. The well-known port 2512 has a rudimentary protocol stack 2514 which includes primarily an endpoint data structure 2516. - The endpoint data structure 2516 points to the communication protocol stack 76 and client connection thereby establishing a unique representation or “handle” for the
client machine 10. The endpoint data structure 2516 permits the connection between theremote machine 30′ and theclient machine 10 to be moved at will between theconnection manager 2518 and thevarious resources 2506 on themachine 30′. In some embodiments, the endpoint data structure 2516 permits the connection between theremote machine 30′ and theclient machine 10 to be moved at will to or from a virtual machine providing management functionality for a virtual machine on theremote machine 30′. - The endpoint data structure 2516, in one embodiment, not only contains the handle to the
client machine 10 but may also contain other information relating to the client connection. In the embodiment shown, themachine 30′ monitors activity on a specific communications system (e.g. LAN or WAN) and has initialized this minimum protocol stack 76 with only the necessary protocol modules needed to support a “TTY” communication mode. The “TTY” communication mode is a simple ASCII stream with no protocol assumptions above the transport layer. That is, there are no protocol layers for compression, encryption, reliability, framing, or presentation of transmitted data. Thus aclient machine 10 seeking aresource 2506 running on theclient machine 10′ establishes a connection to the well-known communications port 2512 with the minimum protocol set needed to support a TTY communication mode. - A
connection manager 2518 executing on themachine 30′ is “listening” to the well-known communications port 2512 for aconnection request 2510. When aconnection request 2510 is received from theclient machine 10, theconnection manager 2518 is notified 2520. Theconnection manager 2518 knows which protocol is being used based on the notification 2520. - With this information the
connection manager 2518 creates a new minimum protocol communications stack 2522, starts a computing environment 2524 (referred to throughout this discussion as an execution environment 2524) and binds the newminimum protocol stack 2522 to theexecution environment 2524. In some embodiments, theconnection manager 2518 creates a newminimum protocol stack 2522 in a virtual machine on theremote machine 30′. In other embodiments, theconnection manager 2518 creates a newminimum protocol stack 2522 in a virtual machine providing administrative or management functionality for a virtual machine executing on theremote machine 30′. In still other embodiments, theconnection manager 2518 creates a plurality ofminimum protocol stacks 2522, each of which may be located on theremote machine 30′, in a computing environment provided by a virtual machine executing on theremote machine 30′, or on a virtual machine providing administrative or management functionality for a virtual machine executing on theremote machine 30′. - In one embodiment, the
remote machine 30′ includes a number ofexecution environments 2524 which have been previously been started, but which have not been associated with a communications port. In this embodiment, the pre-connection starting of the execution environments permits a faster response time than if eachexecution environment 2524 is started when the connection request is received from theclient machine 10. When theexecution environment 2524 is started, theresource 2506 requested by theclient machine 10 is also started. In another embodiment, if theclient machine 10 does not specify a resource, either a default application is started or theexecution environment 2524 with no resource started. In some embodiments, theexecution environment 2524 is the requested resource. - The
connection manager 2518 then moves the client connection, including the unique client identifier or handle, from the well-known port 2512 to the newminimum protocol stack 2522. In some embodiments, theconnection manager 2518 moves the client connection to the newminimum protocol stack 2522 in a virtual machine on theremote machine 30′. In other embodiments, theconnection manager 2518 moves the client connection to the newminimum protocol stack 2522 in a virtual machine providing administrative or management functionality for a virtual machine executing on theremote machine 30′. In still other embodiments, theconnection manager 2518 moves portions of the client connection to a plurality ofminimum protocol stacks 2522, each of which may be located on theremote machine 30′, in a computing environment provided by a virtual machine executing on theremote machine 30′, or on a virtual machine providing administrative or management functionality for a virtual machine executing on theremote machine 30′. - The
connection manager 2518, using theminimum protocol stack 2522 sends a TTY data stream that indicates service is available. Thus, this method for detecting a client connection is independent of the port to which the connection is first established. If theclient machine 10 does not respond within a prescribed time period (e.g. 5 seconds) to the service available message, a resend of the “service available” message is performed by themachine 30′. - If the
client machine 10 receives the message, theclient machine 10 sends a TTY string indicating that the “service available” message was detected. Theclient machine 10 waits for themachine 30′ to respond and if the response is not within a prescribed time interval (e.g. 5 seconds) theclient machine 10 resends the message. Theconnection manager 2518 then queries 90 theclient machine 10 asking for the client's default communication parameters. This query 90 takes the form of a message which is passed back to theclient machine 10 and which indicates that theclient machine 10 should respond with details regarding what protocols theclient machine 10 would like to use in the connection. - In response, the
client machine 10 sends a set ofprotocol packets 2526; each packet of which is used to specify a required or optional protocol module that is being requested from theremote machine 30′. In one embodiment, the number of packets in the set is variable with one packet being sent for each protocol requested. In another embodiment, the number of packets that is being sent is included in the header of the first packet. In a third embodiment, the remaining number of packets being sent is included in the header of each packet and is decremented with each succeeding packet sent. Thus, theclient machine 10 may respond to the query 2528 by indicating that, for example, encryption and data compression will be used. In such a case, two protocol packets will be sent from themachine client 10 to theremote machine 30′ and, in one embodiment, the header of the first packet will indicate the number of packets as two. - Once the responses to the query 90 have been received, the
connection manager 2518 builds a protocol stack using protocol drivers 2530, 2530′, 2530″ which correspond to the protocols requested by theclient machine 10. In one embodiment, theconnections manager 2518 places each of the required protocol drivers 2530, 2530′, 2530″, corresponding to the requested client protocols (e.g. an encryption driver if encryption is desired by the client) into the protocol stack “container” 2532 and links them together. In some embodiments the connections manager 80 places protocol drivers 2530, 2530′, 2530″ into a plurality of protocol stack “containers” 2532 residing in different locations and links the plurality of protocol stack “containers” 2532. This dynamic process allows aclient machine 10 to specify the contents of a protocol stack dynamically without requiring that themachine 30′ have a prior protocol stack description for aparticular client machine 10. Using this method,multiple client machines 10 may be served by asingle machine 30, even if theseparate client machines 10 have vastly differing requirements for the associated communications channel. In the embodiment shown, eachclient machine communications protocol stack - In the embodiment just discussed, the “container” 2532 is a user level or kernel level device driver, such as an NT device driver. This container driver provides ancillary support for the inner protocol modules or “drivers” (generally 2530) which correspond to the protocol requirements of the
client machine 10. This ancillary support is in the form of helper routines that, for example, aid one protocol driver to transfer data to the next driver. Alternatively, in another embodiment each protocol driver is a complete user-level or kernel-level driver in itself. - Referring now to
FIG. 26 , the viewing user uses a so-called “browser” program to display anHTML page 2602 having aresource window 2604 on thescreen 2606 of the user'sclient machine 10. Once the viewing user has indicated that execution of theresource 2506 should commence, thebrowser application 2706 instantiates aparameter handler 2708 and passes the instantiation parameters associated with theresource window 2604 by the generic embedded window tag 2704. Theparameter handler 2708 instance spawns a network executive 2710 and passes to it the parameters of theresource window 2604. The network executive 2710 determines whichresource 2506 is to be invoked, and on whatmachine 30′ thatresource 2506 resides. Generally this information is passed to it by theparameter handler 2708 instance which gets it from thebrowser application 2706 in the form of the generic embedded window tag 2704, but the network executive 2710 may need to query anotherremote machine 30, in order to determine which servers, if any, host the desiredresource 2506. The network executive 2710 then begins execution of the resource and displays the output of theresource 2506 in theresource window 2604 as described in detail above. - The network executive 2710 continues to directly display resource output in the
resource output window 2604′ until the viewing user indicates that execution of theresource 2506 should stop, e.g. by closing theresource window 2604, or until the viewing user clicks on a tag indicating that a different HTML page should be displayed. When this occurs, execution of theresource 2506 can be terminated. It is preferred, however, is to “cache” the connection. In effect, thefirst parameter handler 2708 instance is not immediately terminated. However, theresource 2506 continues executing with a reduced priority level, i.e. in “background” mode, because thefirst parameter handler 2708 no longer has “focus”. - In general, it is desirable to accomplish connection caching by providing the
parameter handler 2708 source code with a globally accessible data structure for registering instances. For example, theparameter handler 2708 may be provided with a globally accessible linked list data structure, data array, data table, or other data structure. Because the data structure is globally available, each instance of theparameter handler 2708 is able to read and write the data structure. This allows each instance of theparameter handler 2708 to “register” with every other instance by writing to the data structure to signal its existence. - For embodiments in which no other connection information is stored, a predetermined limit on the number of connections that may be cached at any one time can be set. In these embodiments if registration of an instance would result in an excess number of cached connections, one of the “cached” connections is removed, i.e. the
parameter handler 2708 instantiation associated with that connection is notified that it should terminate. Before termination, theparameter handler 2708 notifies its associated network executive 2710 that it should terminate. In turn, the network executive 2710 closes its session with the server hosting theresource 2506 and then terminates. - In embodiments in which other information is stored, the additional information may be used to more effectively manage the cached connections. For example, if a user has not actively viewed an
HTML page 2602 in a predetermined number of minutes, e.g. ten minutes, theparameter handler 2708 instantiation is instructed to terminate, the session with the hosting server is terminated, and theparameter handler 2708 instance removes its entry in the registry. - Cached connection information may be managed using any known cache management scheme. Connection entries may be discarded on a “first in, first out” basis, i.e. the oldest entry is discarded each time a new entry must be added. Alternatively, cached connection information entries may be discarded on a “least recently used” basis, which discards information relating to connections which have been used the least amount by the user. Other cache management techniques, such as random replacement, may also be used.
- If the viewing user returns to a
previous HTML page 2602 having a cached connection, the network executive 2710 associated with theHTML page 2602 is returned to the foreground, i.e., it regains “focus”, and processing of the associated resource resumes at a normal priority level. If necessary, the network executive 2710 re-establishes the connection with theresource 2506. Although no output data is stored by the network executive 2710 for cached connections, as soon as a connection is re-established for aresource window 2604 the connection to theresource 2506 is re-established and theresource 2506 again writes directly to theresource window 2604. - Referring to
FIG. 27 , anHTML file 2602 located on amachine 30′ and constructed in accordance with an embodiment of the invention includes a generic embedded window tag 2704. The generic embedded window tag 2704 is any data construct which indicates to a browser 60 displaying theHTML file 2602 that a generic embeddedwindow 2604 should be displayed at a particular location in theHTML page 2602 described by theHTML file 2602. The generic embedded window tag 2704 may include additional information, such as height of the window, width of the window, border style of the window, background color or pattern in the window, which resources may be displayed in the window, how often the output display should be updated, or any other additional information that is useful to enhance display of the resource output. - Some examples of generic embedded window tags that can be embedded in an HTML file follow.
-
ActiveX tag <object classid=“clsid:238f6f83-b8b4-11cf-8771-00a024541ee3” data=“/ica/direct.ica” CODEBASE=“/cab/wfica.cab” width=436 height=295> <param name=“Start” value=“Auto”> <param name=“Border” value=“On”> </object> Netscape Plugin tag <embed src=“http://www.citrix.com/ica/direct.ica” pluginspage=“http://www.citrix.com/plugin.html” height=295 width=436 Start=Auto Border=On> <embed> JAVA tag <applet code=JICA.class width=436 height=295> <param name=Address value=“128.4.1.2602”> <param name=InitialProgram value=Microsoft Word 7.0> <param name=Start value=Auto> <param name=Border value=On> </applet> - In each case above, the tag indicates that a window having a height of 295 pixels and a width of 436 pixels should be drawn to receive resource output. Each tag also specifies that the resource should automatically start execution and that the window in which the resource output is displayed should be drawn with a border. The ActiveX and Netscape Plugin tags have the remote resource parameters specified in the file “direct.ica” located in the directory “/ica.” The JAVA tag specifies the remote resource parameters directly. In the example above, the address of the
machine 30 hosting the resource is specified as well as the name of the resource to be executed. - The
browser application 2706 accesses theHTML file 2602 by issuing a request to a specific Uniform Resource Locator (URL) address. Themachine 30′ hosting theHTML file 2602 transmits theHTML file 2602 data to thebrowser application 2706, which displays text and translates any tags that are included in theHTML file 2602. Thebrowser application 2706 displays theHTML file 2602 data as anHTML page 2602. If a generic embedded window tag 2704 is present in theHTML file 2602, such as one of the tags described above, the browser 60 draws ablank window 2604 in the displayedHTML page 2602. - Execution of the desired
resource 2506 may commence immediately upon display of theHTML page 2602 or execution may await some signal, e.g. a specified user input which indicates execution of theresource 2506 should begin. Once execution of theresource 2506 is commenced, thebrowser application 2706 instantiates aparameter handler 2708 associated with theresource window 2604. Theparameter handler 2708 instance may be spawned as a child process of thebrowser application 2706, as a peer process of thebrowser application 2706, a statically-linked thread of execution, a dynamically-link thread of execution, or as a Dynamically Linked Library (“DLL”) associated with thebrowser application 2706. - The
browser application 2706 passes any specific parameters associated with theresource window 2604 that were provided by the generic embedded window 66 tag to theparameter handler 2708 instance. Additionally, thebrowser application 2706 may pass the handle for theresource window 2604 to theparameter handler 2708 instance or theparameter handler 2708 instance may query thebrowser application 2706 to retrieve the handle for theresource window 2604. Theparameter handler 2708 instance also spawns a network executive 2710. The network executive 2710 may be spawned as a child process of theparameter handler 2708 instance, a statically-linked thread of execution, a dynamically-link thread of execution, or as a peer process of theparameter handler 2708 instance. - The
parameter handler 2708 instance forwards any specifiedresource window 2604 parameters to the network executive 2710. Parameters which are not specified by theparameter handler 2708 instance or the embedded generic window tag 2704 may be set to default values. The network executive 2710 may have certain parameter defaults hard-coded, or the network executive 2710 may access a file which contains parameter defaults. - The network executive 2710 creates its own
resource output window 2604′. The network executive 2710 creates itsresource output window 2604′ as a child of the displayedresource window 2604 and displays itsresource output window 2604′ directly over theparent window 2604 drawn by thebrowser application 2706. Since theresource output window 2604′ drawn by the network executive 2710 is a child of theresource window 2604 drawn by thebrowser application 2706, theresource output window 2604′ inherits various properties of its parent including position information. Accordingly, theresource output window 2604′ will follow theresource window 2604 as the viewing user scrolls the screen of thebrowser application 2706 or performs other actions which vary the position of theresource window 2604. - The network executive 2710 also establishes a communications channel with the
machine 30′ and invokes execution of the desiredresource 2506 by themachine 30′ using the connection methodology described above. The network executive 2710, which acts as theclient machine 10 in the above description, passes any parameters it received from theparameter handler 2708 instantiation to themachine 30′, along with any necessary default values. If a parameter is not passed to themachine 30′, themachine 30′ may request the parameter if it is a necessary parameter which has no default value, e.g. “user id,” or it may provide a default value for the parameter, e.g. execution priority. Themachine 30′ begins execution of the desiredresource 2506 and directs the output to the network executive 2710. The network executive 2710 receives data from theresource 2506 and displays the output data in itsresource output window 2604′. Since theresource output window 2604′ is drawn on top of theresource window 2604 drawn by thebrowser application 2706, the resource output data is displayed in theHTML page 2602. As noted above, theresource output window 2604′ drawn by the network executive 2710 is a child of theresource window 2604 drawn by thebrowser application 2706. This allows theresource output window 2604′ to scroll as theHTML page 2602 is scrolled - The
resource output window 2604′ also receives input from the viewing user. Raw input data, e.g. a mouse click, is received into theresource output window 2604′ by the network executive 2710. The network executive 2710 forwards the raw input data to theresource 2506 executing on themachine 30″ In this manner, the viewing user is able to interact with theresource 2506 via theHTML page 2602. - Referring now to
FIG. 28 , and in brief overview, an embodiment of an interactive hypermedium system of the invention includes aclient machine 10, a networkremote machine 30 and an executionremote machine 30′ interconnected by acommunications link 150, herein referred to without any loss of generality as a network or web. The networkremote machine 30 may be provided by aremote machine 30. Theexecution machine 30′ may be provided by a physical machine or a virtual machine. - A user on a
client machine 10 wishing to access the resource 2802 which is located on theexecution machine 30′ on theweb 150 does so through a graphical user interface 2804, which is herein referred to without any loss of generality as a hypermedium, located on theclient machine 10. The graphical interface is displayed on agraphical display device 124. Data is entered by amouse 16 and a keyboard 17 located on theclient machine 10. The graphical display orpage 2806 which the user first views on the hypermedium 2804 is referred to herein without any loss of generality as the home page or web page of the resource 2802. Apage 2806 or home page of the hypermedium 2804 includes a graphic link 2808 or textual link 2810 herein referred to without any loss of generality as a hyperlink. The web page is displayed by aprocess 2602 referred to herein without any loss of generality as anetwork browser 2602 executing on theclient machine 10. - The
network browser 2602 obtains the first page orweb page 2806 from a networkremote machine 30 and displays theweb page 2806 on the hypermedium 2804 for the user to view on thegraphical display device 124. When the user selects a resource 2802 to access (by selecting a graphical 2808 or textual 2810 hyperlink using themouse 16 or keyboard 17) thenetwork browser 2602 obtains anetwork configuration file 2812 corresponding to the selected resource 2802 from apredetermined network server 2606 and starts aclient agent 2814 which will communicate with the selected resource 2802. This will be discussed in more detail below. - The
client agent 2814 reads theconfiguration file 2812 and establishes a communications link to aserver agent 2816 on the execution server 24 specified by theconfiguration file 2812. In one embodiment, theconfiguration file 2812 includes the name of the resource and the node location of the resource 2802 corresponding to the hyperlink 2808, 2810. The configuration file may also contain optional information such as authentication or authorized user information.Server agent 2816 performs the operations necessary (such as authentication) to permit theclient agent 2814 access to the resource 2802, and once access is permitted, allows access to the resource 2802 requested by the user. Theserver agent 2816 may execute in a hypervisor, a virtual machine, or on an operating system. In some embodiments, the functionality provided by theserver agent 2816 is split between a hypervisor and a virtual machine or between two virtual machines. In still other embodiments, the functionality provided by the server agent is split between a hypervisor and a guest operating system executing in a virtual machine. In some embodiments, a connection to a computing environment including the resource 2802 is established, as described in further detail below. - Once the resource 2802 is available on the
execution server 30′, theclient machine 10 may access the resource 2802 through theserver agent 2816 directly with theclient agent 2814 without intervention by thenetwork browser 2602. Theclient agent 2814 is then responsible for receiving data from the user through themouse 16 and keyboard 17 and transmitting it to the resource 2802 on theexecution machine 30′. Similarly, theclient agent 2814 is responsible for receiving data from the resource 2802 on theexecution machine 30′ and displaying the data in a display window 2818 on thegraphical display device 124 on theclient machine 10. It should be noted that the display window 2818 may be located within the boundaries or outside the boundaries of the hypermedium 2804. When the resource 2802 is completed theserver agent 2816 instructs theclient agent 2814 to disconnect thecommunication link 150 between theclient agent 2814 and theserver agent 2816. In some embodiments, theserver agent 2816 may reside outside of theexecution machine 30′. In other embodiments, theclient agent 2814 may reside outside of theclient machine 10. -
FIG. 29 depicts the operation of the system in more detail. Initially, theclient agent 2814 is registered (step 2901) with thenetwork browser 2602 of theclient machine 10 and an entry is made in the network browser's registration file 2820 (FIG. 28 ). This entry permits thenetwork browser 2602 to start theclient agent 2814 whenever a given file type (including types such as a MIME type) is requested by the hyperlink 2808,2810 of the hypermedium 2804. In this case theclient agent 2814 is designed to permit a user on theclient machine 10 to execute and interact with a remote resource 2802 on anexecution machine 30′. Theclient agent 2814 would be registered with thenetwork browser 2602 such that whenever a hyperlink 2808, 2810 requested the given file type (for example .RMT for remote execution) from thenetwork browser 2602, thenetwork browser 2602 would start theclient agent 2814 which would permit remote execution and interaction with a resource 2802 resident on anexecution machine 30′. The invoking of theclient agent 2814 is discussed in more detail below. - When a user wishes to access a resource from a hypermedium environment, for example a database program, the hypermedium 2804 is displayed in a manner that is well known to those skilled in the art. When the user selects a hyperlink 2808, 2810 on the
page 2806 of the hypermedium (step 2902) by using themouse 16 or keyboard 17 on theclient machine 10, a request is made to thenetwork browser 2602 for the corresponding data file (step 2903). In this example, the file type (.RMT) is requested. - The
network browser 2602 obtains the correspondingconfiguration file 2812 from thenetwork server 2606 which is specified in the file request made by the hyperlink 2808, 2810 to the network browser 2602 (step 2904). Thenetwork browser 2602 then compares the obtainedconfiguration file 2812 with theregistration file 2820 of client agent names which it maintains (step 2905). In one embodiment, thenetwork browser 2602 compares a file type of the obtainedconfiguration file 2812 with theregistration file 2820. In another embodiment, thenetwork browser 2602 compares an entry in the obtained configuration file 2802 with theregistration file 2820. If theclient agent 2814 specified by theconfiguration file 2812 is found in theregistration file 2820, theclient agent 2814 is started (step 2906). - The invoked
client agent 2814 reads the configuration file 2812 (step 2907), and based upon the information in theconfiguration file 2812, begins to establish a communication link with theserver agent 2816 on the execution server 24 (step 2908), in this case the sales database application execution server (generally 30′). - Considering the process of beginning the communications link of step 2908 (
FIG. 29 ) in more detail, communication begins with theserver agent 2816 monitoring communication activity on thenetwork 150. At this point, no protocol assumptions are made by theserver agent 2816 beyond those necessary for the transport layer. Similarly, theclient agent 2814 also makes no assumption of the communications protocol beyond that required by the transport layer. Once theserver agent 2816 determines that aclient agent 2814 is attempting to communicate with it, theserver agent 2816 transmits a message to theclient agent 2814 indicating that service is available. - Once the
client agent 2814 determines that service is available on the executionremote machine 30′, theclient agent 2814 transmits a message to theserver agent 2816 indicating that it is ready to proceed with the communication protocol. Once theserver agent 2816 has responded that it is ready to continue the communication protocol, theclient agent 2814 enables the protocol necessary for it to run theapplication 36. In response to the message from theclient agent 2814, theserver agent 2816 also enables the required protocol. Theserver agent 2816 then transmits a message using the required protocol indicating that the client agent's request has been received and accepted. - In response the
client agent 2814 and theserver agent 2816 exchange a set of messages which negotiate the parameters under which communications will occur. Once negotiations are complete, theclient agent 2814 and theserver agent 2816 are able to communicate as necessary for the resource 2802 to be run by the user. - Once the communications protocol has been established and the
server agent 2816 has authenticated the client agent 2814 (step 2909) (for example determining that the user has permission to read and write to the database) access to the resource 2802 (step 2910) is provided by the application execution server 24. At this point resource 2802 on theexecution server 30′ is communicating via theserver agent 2816 with theclient agent 2814 on theclient machine 10. Theclient agent 2814 is now responsible for transmitting data input by the user using themouse 16 and keyboard 17 to the resource 2802 on theexecution machine 30′. Further, theclient agent 2814 is responsible for receiving data for display from the resource 2802 and displaying that data in the application window 2818 on thegraphical display device 124 of theclient machine 10. - It should be noted that the underlying presentation protocol which passes data to a transport layer such as TCP/IP must be capable of transferring graphical information. Examples of such protocols which may be used for interactive hypermedia communication include public domain X11 protocol, the proprietary Independent Computing Architecture (ICA) protocol of Citrix Systems Inc., or the proprietary Remote Desktop Protocol (RDP) of Microsoft Corporation.
- Thus the above described system permits a user on a
client machine 10, which may have very limited resources, to start and interact with a resource 2802 located on anexecution machine 30′. The resource 2802 then runs on theexecution machine 30′ and the data is input and the results displayed on theclient machine 10. In some embodiments, the accessed resource 2802 executes in a virtual machine provided by theremote machine 30′. - Referring now to
FIG. 30 , a flow diagram depicts an embodiment of method of making a hypermedium page interactive, the hypermedium page displayed by a network browser. As described above, a hyperlink on a hypermedium page displayed on aclient machine 10 is selected, the hyperlink identifying a desired computing resource (step 3002). A hyperlink configuration file is retrieved, the hyperlink configuration file corresponding to the hyperlink and identifying aremote machine 30′ (step 3004). A client agent is started on a client machine 10 (step 3006). The client agent creates a communication link to a virtual machine executing on theremote machine 30′ identified by the hyperlink configuration file (step 3008). The client agent receives data from the virtual machine and displays on theclient machine 10 the received data without intervention by the network browser (step 3010). - A hyperlink on a hypermedium page displayed on a
client machine 10 is selected, the hyperlink identifying a desired computing resource (step 3002). In one embodiment, the hypermedium page is obtained from aremote machine 30 prior to selection of the hyperlink on the hypermedium page. In another embodiment, the hypermedium page is received responsive to a request for an enumeration of available resources. - A hyperlink configuration file is retrieved, the hyperlink configuration file corresponding to the hyperlink and identifying a
remote machine 30′ (step 3004). In one embodiment, aremote machine 30, functioning as a brokering machine, identifies theremote machine 30′. In another embodiment, theremote machine 30′ functions as an execution machine. In still another embodiment, a hypervisor executes on theremote machine 30′. In yet another embodiment, a virtual machine is launched into a hypervisor executing on theremote machine 30. In some embodiments, a server agent starts on a virtual machine in theremote machine 30′. - A client agent is started on the client machine 10 (step 3006). In one embodiment, the client agent is started by the network browser upon a successful match of an entry in the hyperlink configuration file with an identifier associated with the client agent in a registration file accessible by the network browser. In another embodiment, the client agent is registered with the network browser.
- The client agent creates a communication link to a virtual machine executing on the
remote machine 30′ identified by the hyperlink configuration file (step 3008). In one embodiment, execution of an identified application program begins on the virtual machine in response to the created communication link. In another embodiment, the client agent creates the communication link without intervention by the network browser. - The client agent receives data from the virtual machine and displays on the
client machine 10 the received data without intervention by the network browser (step 3010). In one embodiment, the data received from the virtual machine is displayed in a display window on theclient machine 10. In some embodiments, a presentation layer protocol is employed for communication over the communication link. - Referring back to
FIG. 28 , in some embodiments of a system for making a hypermedium page interactive, access to a requested computing environment is provided through the interactive hypermedium page. Theclient machine 10 executes abrowser application 2602. Aremote machine 30 functions as anetwork server 2606 and transmits a network configuration file to theclient machine 10. Aclient agent 2814 executing on theclient machine 10 establishes a communications link with aremote machine 30′, functioning as anexecution machine 30′. - As described above, the
client machine 10 executes abrowser application 2602, which displays a hypermedium page including a hyperlink identifying a resource 2802. Aremote machine 30 functions as anetwork server 30 and transmits, in response to selection of said hyperlink, a network configuration file to theclient machine 10, the network configuration file corresponding to said identified computing resource 2802. In some embodiments, a process obtains the hypermedium page from thenetwork server 30 and provides the hypermedium page to theclient machine 10. - In one embodiment, the network configuration file comprises a resource identifier corresponding to said hyperlink and a virtual machine address corresponding to said hyperlink. In some embodiments, the virtual machine address is a virtual IP address provided by a hyperlink in which the virtual machine executes. In other embodiments, the virtual machine address is an IP address associated with an
execution machine 30′ on which the virtual machine executes. - A
client agent 2814 executing on theclient machine 10 establishes a communications link with aremote machine 30′, functioning as anexecution machine 30′. Theclient agent 2814 establishes the link responsive to data in the network configuration file. In one embodiment, a hypervisor executes on theexecution machine 30′ and a virtual machine providing the resource 2802 executes in the hypervisor. In some embodiments, the virtual machine transmits data to theclient agent 2814 for display without intervention by thebrowser application 2602. In one of these embodiments, the virtual machine provides access to the requested resource 2802 and the data is output from an execution of the requested resource 2802. - In some embodiments, the client agent establishes, responsive to data in the configuration file, a communications link with a management program executing on a remote machine. In one of these embodiments, the management program executes on the
network server 2606. In another of these embodiments, the management program executes on theexecution machine 30′. In still another of these embodiments, the management program executes on a virtual machine in theexecution machine 30′. In yet another of these embodiments, the management program executes on a virtual machine having management privileges on theexecution machine 30′ or on aremote machine 30″. In other embodiments, the management program launches the virtual machine providing the desired computing resource into a hyperlink on theexecution machine 30′. - In some embodiments, the
client agent 2814 displays data received from said virtual machine in a display window located at theclient machine 10. In one of these embodiments, the display window is located within the boundaries of the hypermedium page. In another of these embodiments, the display window is located outside the boundaries of the hypermedium page. - Referring to
FIG. 31 , in some embodiments of the methods described above, data transmitted by theresource 2506 is sent to otherremote machines 30 prior to being sent toclient machines 10. In this manner, data transmitted by theresource 2506 is transmitted to an increasing number ofclient machines 10 as the network fans out. - When each
client machine 10 terminates its connection with themachine 30′, each client protocol stack (generally 2522) and its associated minimal stack (generally 3102) is destroyed. Similarly, the minimal protocol stack (generally 3104) associated with the firstclient protocol stack 2522 is also destroyed. When the last of the minimal 3102 and second (and subsequent) client protocol stacks 2522 has terminated, the configuration is as it was initially with only a first clientcommunications protocol stack 2522 associated with theexecution environment 2524. Note that until all the second and subsequent client protocol stacks 2522 are terminated, the firstclient protocol stack 2522 may not be destroyed, even if theclient machine 10 is no longer present. - As shown in
FIG. 25 above, eachexecution environment 2524 communicates with eachprotocol stack 2522 through amultiplexer FIG. 31 , it is possible for more than onemachine 10 to receive data being transmitted to theclient machine 10, for example, in order to shadow or monitor the transmission of data from amachine 30′ or to broadcast data from a specialized broadcast application, such as a stock quotation application, from which the same data is broadcast or transmitted substantially simultaneously to a number of clients (generally 10). - In such a case, the
client machine 10 causes thespecialized resource 2506 to execute and transmit its data to theclient machine 10 as discussed previously. When aclient machine 10′ requests access to thebroadcast resource 2506, theconnection manager 2518 begins to construct theprotocol stack 2522′ for thesecond client machine 10′ as previously discussed with regard to thefirst client machine 10. However, because theresource 2506 is a broadcast application, theconnection manager 2518 recognizes that it need not start anadditional execution environment 2524 and instead takes the steps necessary to send the data from thebroadcast resource 2506 to theclient machine 10 and anyadditional machine 10″. - First, the
connection manager 2518 creates a first minimalcommunications protocol stack 3104 which it associates with acommunications protocol stack 2522 of thefirst client machine 10. Theconnection manager 2518 next creates a secondminimal protocol stack 3102 and associates it with thecommunications protocol stack 2522′ of thesecond client machine 10′. As eachadditional client machine 10″ requests access to thebroadcast resource 2506, anotherminimal protocol stack 3104′ is created and associated with the firstclient protocol stack 2522 and anotherminimal protocol stack 3102′ andclient protocol stack 2522″ is created for eachnew client machine 10″. The firstclient protocol stack 2522 and all theminimal protocol stacks client protocol stack 2522, and each pair of client protocol stacks 2522′, 2522″ andminimal protocol stacks additional machine 10′, 10″ are in communication by way of amultiplexer 2534. - In some embodiments, the
connection manager 2518 resides outside of a virtual machine executing on aremote machine 30′ and createsminimal protocol stacks 3102 within the virtual machine executing on theremote machine 30′. In other embodiments, theconnection manager 2518 resides outside of a virtual machine executing on aremote machine 30′ and createsminimal protocol stacks 3102 within a second virtual machine providing management and administrative functionality for the virtual machine executing on theremote machine 30′. In still other embodiments, theconnection manager 2518 resides outside of a virtual machine executing on aremote machine 30′ and createsminimal protocol stacks 3102 within a hypervisor providing management and administrative functionality for the virtual machine executing on theremote machine 30′. In yet other embodiments, theconnection manager 2518 resides outside of a virtual machine executing on aremote machine 30′ and createsminimal protocol stacks 3102 within a host operating system on theremote machine 30′ providing management and administrative functionality for the virtual machine executing on theremote machine 30′. In some embodiments, theconnection manager 2518 resides inside a virtual machine executing on aremote machine 30′ and createsminimal protocol stacks 3102 within the virtual machine executing on theremote machine 30′. - When a
multiplexer 2534 is directing data to or receiving data from only onemachine 10, themultiplexer 2534 is acting as a simple pass-through device. However, when there is more than oneclient machine single resource 2506, each multiplexer (generally 2534) takes on two additional configurations. In one configuration, themultiplexer 2534 is configured to send resource data to or receive data from both the firstclient protocol stack 2522 and each of the minimalcommunications protocol stacks multiplexer 2534 is configured to send data received by theminimal protocol stack client protocol stack 2522′, 2522″, respectively, associated with it. In this embodiment, themultiplexer 2534 may receive input data directly from eachclient protocol stack - The
connection manager 2518 connects theminimal protocol stacks client machine 10 with theminimal protocol stacks second client machine 10′ andsubsequent client machines 10″ and instructs themultiplexer 2534 to direct output from theresource 2506 to thecommunications protocol stack 2522 of theclient machine 10 and its associatedminimal protocol stacks multiplexer 2534 is also instructed by theconnection manager 2518 to connect each second and subsequent clientminimal protocol stack client protocol stack client machine 10 by way of the firstclient protocol stack 2522 is therefore also transmitted to theminimal protocol stacks client machine 10 and hence to theclient machine 10′ andsubsequent client machines 10″ by way of their associatedprotocol stacks 2522′, 2522″, respectively, and associatedminimal protocol stacks resource 2506. - Referring to
FIG. 32 , as discussed above, it is possible that the “clients” of onemachine 30′ be otherremote machines 30′ and 30″ (only two being shown for simplicity). Theremote machines 30′ and 30″ then transmit the data toclient machines 10 or to additionalremote machines 30′. In this embodiment the output of the server protocol stack (generally 2522) is connected to the protocol stacks 107′ of the secondaryremote machines 30′ and 30″. Then as described previously, the data is transmitted between the protocol stacks and out to theclient machines 10. In this manner the data may fan out and be distributed to many more clients than may reasonably be supported by one server. In some embodiments, the output of the server protocol stack may be connected toprotocol stacks 3102′ created in virtual machines executing onremote machines 30. - In brief overview, in one embodiment of the methods described above, a user of a
client machine 10 requests access to one or more resources from aremote machine 30, which may provide web server functionality. After authenticating the user's credentials, the web server accesses user-specific and resource-specific parameters from a memory coupled to the web server. The web server subsequently communicates these parameters to one or moreremote machines 30 hosting the requested resources, and software processes operating on the resource servers execute and initialize the requested resources using the communicated parameters. In this manner, each instance of the resources is personalized for a particular requesting user. The particular network addresses of the resource servers hosting these personalized application programs are then forwarded to the user'sclient machine 10, which establishes a communications link and client-server session therewith. - Commands, events, graphical data, and window attribute information associated with the executing resources are communicated between the user device and the resource servers during the client-server session to ensure that the resource-output data is displayed seamlessly on the desktop of the user device. Seamless display of the resource-output data refers to the presentation of the data on the user desktop in a manner that is consistent with how locally-executing resources are presented and manipulated in the local desktop of the user device. A user may therefore view and interact with the resource-output data generated by the remote resources as if the resources were being executed locally.
- In one embodiment, the output of the resources is displayed in one or more resource-output windows positioned within a web page displayed by a web browser of the user's device. The resource may be executing on a
remote machine 30 or on a virtual machine executing on theremote machine 30. In a further embodiment, the attributes of the resource-output windows can be modified so that the resource-output windows are moveable and resizeable within the boundaries of the web page. In another embodiment, the resource-output windows initially appear within the boundaries of the web page and are subsequently moveable so that they are positioned outside the boundaries of the web page and thus give the appearance that the application-output windows correspond to locally-executing applications rather than to remotely-executing applications. In yet another embodiment, the application-output windows initially appear outside the boundaries of the web page and thus also appear to correspond to locally-executing applications. In one embodiment, the application output displayed in the application-output windows and the attributes of the application-output windows themselves are communicated and manipulated by software processes on the user's device and on the resource servers, without involvement of the web server or web browser that initially provided access to the resources. - In more detail and with reference to
FIG. 33 , a server-basedcomputing architecture 3300, capable of providing remote users with web-access to the full functionality of web and legacy applications (e.g., unmodified application programs that are not designed for web-based delivery), includes a client machine 10 (e.g., any digital data processing device), aweb server 3304, one or moreremote machines 30 that are either standalone or clustered within amachine farm 38 and which are preferably protected by a firewall 3302, and a data communications network 150 (e.g., Internet, Intranet, etc.) that provides the necessary connectivity to enable each of these elements to communicate with each other. - In other embodiments, the
web server 3304 is aremote machine 30. In some of these embodiments, virtual machines may be executing on one or more of theremote machines 30, the virtual machines providing computing environments in which a requested resource resides and generates resource-output data. - In operation and also with reference to
FIG. 28 , a user of theclient machine 10 directs a browser 2822 executing on theclient machine 10 to submit a request for access to particularweb page content 3306 accessible via theweb server 3304. In one embodiment, the user enters a universal resource locator (“URL”) address into the browser 2822. The URL is associated with theweb page content 3306 hosted by theweb server 3304 and the browser 2822 responds by transmitting the request for access to the appropriate URL address. Theweb server 3304 receives the request for access, which typically includes user credential information (e.g., user ID, password, group/project membership identifier, etc.), and authenticates the user to themachine farm 38 or to the individual servers 114 that provide at least some of theweb page content 3306. - The
web server 3304 authenticates the user by accessing an authentication process that compares the credentials entered by the user with previously-assigned credentials. In one embodiment, the authentication process and database of previously-assigned credentials are stored and maintained on theweb server 3304. In other embodiments, the previously-assigned credentials can be stored in themachine farm 38, on individual applicationremote machines 30, and/or on an administrative server (not shown) that is coupled to theweb server 3304 via the Internet or other data communication network. - In the scenario where the
web page content 3306 corresponds to an enterprise portal, which provides access to a resource set 3308 (e.g., the set of resources that have been personalized for the user by a portal administrator), theweb server 3304 accesses one or more resource objects 3310 (e.g., COM-compliant Java objects, ActiveX objects, HTML tags, etc.) that call web server-side scripts to authenticate the user and/or to obtain theresource set 3308 information associated with the portal and user from themachine farm 38. The resource objects 3310 also include properties that are associated with the user and/or theparticular resources 3312 in theresource set 3308 that are provided via the portal. The user properties include, for example, group/project information that identifies theparticular resources 3312 and data that the user needs to access in order to allow the user to collaborate with other members of the group/project. The resource properties include, for example, the user's preferences for each of theresources 3312 in theresource set 3308. - The scripts called by the resource objects 3310 establish a network session between the
web server 3304 and themachine farm 38 via, for example, a central administrative process (not shown), which monitors and controls eachresource machine 30 in themachine farm 38. The administrative process selects one or more resource servers, which host theresources 3312 in theresource set 3308 specified by the resource objects 3310, based, for example, on a server and/or network performance basis. The desiredresource set 3308 can be provided entirely by asingle server 30 by selecting/allocating eachresource 3312 in the resource set 3308 from a plurality ofresources server 30. Alternatively, theresource set 3308′ can be provided by a plurality ofremote machines 30 with eachmachine 30 hosting at least one of the resources in theresource set 3308′. - The administrative process launches one or
more server agents 3316 on the selected/allocatedremote machines 30 in response to the scripts called by the resource objects 3310.Server agents 3316 are software processes that execute, initialize, and interact with each of theresources 3312 in theresource set 3308 in accordance with the properties specified by the resource objects 3310. In one embodiment, there is aserver agent 3316 for eachresource 3312 in theresource set 3308. In other embodiments, there is asingle server agent 3316 for theresource set 3308, to the extent that all of theresources 3312 are hosted on thesame server 30. In yet another embodiment, there is asingle server agent 3316 for eachserver 30. Theserver agents 3316 then provide the output of theresources 3312 in theresource set 3308 as well as any other information relating to the resource set 3308 to theweb server 3304, which subsequently formats the resource set information into theweb page content 3306. Theweb page content 3306 can include application icons corresponding to one or more of theresources 3312 in theresource set 3308 as well as resource-output data from one or more of theresources 3312. In one embodiment, the resource-output data provided by theresources 3312 corresponds to graphical data that is formatted to fit into a window, which exhibits attributes (e.g., window position on the web page, size, style, z-order, etc.) as initially specified by the properties of the resource objects 3310. - In one embodiment and with reference to
FIG. 34 , the browser 2822 receives and displays theweb page content 3306 within abrowser window 3402, which includes many possible graphical user interface (“GUI”) elements (e.g.,menu 3406,local window 3408, etc.) that form the client desktop 3410 displayed on a display device coupled to theclient machine 10. In this embodiment, theweb page content 3306 is displayed within aweb page 3412 displayed in thebrowser window 3402 and includes one or more resource icons 3414 and/or one or more resource-output windows 3416, which are associated with theresource set 3308. In one embodiment, one or more of the resource objects 3310 also form part of theweb page content 3306 of theweb page 3412 and can therefore set the initial attributes (size, z-order, position) of the resource-output windows 3416. The initial orientation, size, position, and z-order of each of the resource-output windows 3416 displayed on theweb page 3412 can be modified, as described below, so that the resource-output windows 3416 exhibit different orientations, sizes, positions, and z-orders relative to theweb page 3412 and/or relative to the client desktop 3410. - The resource objects 3310 can be any data constructs which indicate to the browser 2822 displaying the
web page content 3306 that a resource-output window 3416 should be displayed at a particular location in theweb page 3412. The resource objects 3310 may include additional information, such as the height, width, border style, background color or pattern in the resource-output window 3416, along with indicia of whichresources 3312 may be displayed in thewindow 3416, how often the output display should be updated, or any other additional information that is useful to enhance the display of the resource output. - In one embodiment, the resource objects 3310 are window tags that are embedded in an HTML file, examples of such tags are delineated below.
-
ActiveX tag <object classid=“clsid:238f6f83-b8b4-11cf-8771-00a024541ee3” data=“/ica/direct.ica” CODEBASE=“/cab/wfica.cab” width=436 height=295> <param name=“Start” value=“Auto”> <param name=“Border” value=“On”> </object> Netscape Plugin tag <embed src=“http://www.citrix.com/ica/direct.ica” pluginspage=“http://www.citrix.com/plugin.html” height=295 width=436 Start=Auto Border=On> <embed> JAVA tag <applet code=JICA.class width=436 height=295> <param name=Address value=“128.4.1.2602”> <param name=InitialProgram value=Microsoft Word 7.0> <param name=Start value=Auto> <param name=Border value=On> </applet> - In each case above, the tag indicates that a resource-
output window 3416 having a height of 295 pixels and a width of 436 pixels should be drawn to receive output data from theresource 3312. Each tag also specifies that theresource 3312 should automatically start execution and that the resource-output window 3416 in which the resource output is displayed should be drawn with a border. The ActiveX and Netscape Plugin tags have the properties of theremote resource 3312 specified in the file “direct.ica” located in the directory “/ica.” The JAVA tag specifies the properties of theremote resource 3312 directly. In the example above, the address of theserver 30 hosting theresource 3312 is specified as well as the name of theresource 3312 to be executed. - In one embodiment, the
resource 3312 executes substantially at the same time as the display of theweb page 3412. In another embodiment, theresource 3312 executes when instructed to do so by theserver 30 as part of providingweb page content 3306 to theweb server 3304. In yet another embodiment, the resource executes in response to a signal, such as a user-specified input (e.g., selecting a resource icon 3414 on theweb page 3412. Once execution of theresource 3312 is commenced, the browser 2822 instantiates aclient agent 2814 on theclient machine 10. Alternatively, theclient agent 2814 is instantiated substantially at the same time as the display of theweb page 3412 or in response to user-specified inputs. - The
client agent 2814 comprises one or more software processes, which execute on theclient machine 10 and which are configured to interact with theserver agent 3316, browser 2822, resource-output window 3416, and/orweb server 3304. In one embodiment, theclient agent 2814 is spawned as a child process of the browser 2822. In other embodiments, theclient agent 2814 is a peer process of the browser 2822 or a dynamically linked library associated with the browser 2822. In one embodiment, aclient agent 2814 is instantiated for each resource-output window 3416 displayed in theweb page 3412. In another embodiment, asingle client agent 2814 is instantiated for one or more resource-output windows 3416 associated with a particular one of theresources 3312 in theresource set 3308. In yet another embodiment, asingle client agent 2814 is instantiated for eachserver agent 3316, which contributed to theweb page content 3306. In yet another embodiment, asingle client agent 2814 is instantiated for theentire resource set 3308. - The browser 2822 passes the properties of the resource objects 3310 relating to
particular resources 3312 in the resource set 3308 to theclient agent 2814 associated with thosesame resources 3308. Additionally, the browser 2822 may pass a handle for a resource-output window 3416 to theclient agent 2814 or theclient agent 2814 may query the browser 2822 to retrieve the handle for the resource-output window 3416. Resource properties, which are not specified by either the browser 2822 or the resource objects 3310, may be set to default values. Theclient agent 2814 may also have certain property defaults hard-coded, or theclient agent 2814 may access a file which contains property defaults. - The
client agent 2814 uses the name of theresource 3312 and the address of theresource server 30, which are both provided as part of the properties of the resource objects 3310, to establish a communications link and initiate a client-server session with theserver agent 3316 associated with theresource server 30 andresource 3312. Theclient agent 2814 passes some or all of the properties of the resource objects 3310 to theserver agent 3316 along with any necessary default values. Alternatively, theserver agent 3316 may have already received some or all of the properties of the resource objects 3310 from theweb server 3304 prior to contributing to theweb page content 3306, which was subsequently displayed in theweb page 3412. If a particular property is not passed to theserver agent 3316, theserver agent 3316 may request it from theclient agent 2814 if it is a necessary property to which it has no default value (e.g., user ID) or theserver agent 3316 may provide its own default value for the property (e.g., execution priority). - The
server agent 3316 uses the properties received from theclient agent 2814 to authenticate theclient agent 2814 and to execute the desiredresource 3312 if it has not previously been started. Once theresource 3312 is executing and theclient agent 2814 has been authenticated, theresource 3312 communicates through the server agent 130 directly with theclient agent 2814, without intervention of the browser 2822 orweb server 3304. Theclient agent 2814 receives output data from theresource 3312 and displays the output data in the appropriate resource-output window 3416 in theweb page 3412. Theclient agent 2814 also detects input events, such as mouse clicks and keyboard inputs, associated with the resource-output window 130 and forwards any such input events to theresource 3312 via theserver agent 3316. This type of client-server session is repeated for eachresource 3312 in the application set 126 that is selected by the user and thus enables the user to interact with all of the resources in theresource set 3308. - The data exchanged between the
client agent 2814 andserver agent 3316 during the client-server session includes not only input events and the graphical output data of theresource 3312, but also window attribute information (e.g., window position, z-order, size, style, color, etc.). The window attribute information of the resource-output windows 3416 is initially specified by the resource objects 3310 embedded in theweb page 3412. For example, the resource objects 3310 can include an ActiveX control, which specifies and controls the window attributes of the resource-output windows 3416 during the client-server session. In one embodiment, the resource-output windows 3416 exhibit the same dimensions as the corresponding ActiveX controls. - The
client agent 2814 communicates the initial window attributes of the local application-output windows to theserver agent 3316 along with information relating to the client desktop 3410 (e.g., size, resolution, etc.). Theserver agent 3316 responds by conforming the size of its server desktop to that of the client desktop 3410 and by conforming the window attributes of local server windows to those of the resource-output windows 3416 on the client desktop 3410. The resource-output windows 3416 on the client desktop 3410 and the server windows on the server desktop thus exhibit the same window attributes and display the same graphical output data that is generated by theresource 3312. Note that the server desktop can correspond to either an offscreen surface contained within the server's video memory or to an onscreen surface displayed on a display device coupled to theserver 30. - The user of the
client machine 10 can move, resize, and/or alter the z-order or other initial window attributes of the resource-output windows 3416 during the client-server session, by entering an input event that is detected by theclient agent 2814 and then communicated to theserver agent 3316. Theserver agent 3316 conforms its desktop and/or windows to be consistent with the input event and then transmits updated graphical output data and window attribute information, corresponding to the input event, to theclient agent 2814 with instructions to update the resource-output windows 3416 so that they match the windows on theserver 30. - For example, if the user of the
client machine 10 resizes one of the resource-output windows 3416 from that originally specified by the resource objects 3310 (such as by clicking with the mouse and dragging the border of the application-output window 3416 to the desired location/size), theclient agent 2814 detects the input event generated by the mouse action and communicates it to theserver agent 3316, which effects the same resize event in the on or offscreen surfaces of theserver 30. Theserver agent 3316 then sends repaint and resizes command messages to theclient agent 2814 along with updated graphical output data and window attribute information. In response, theclient agent 2814 modifies the appropriate resource object 3310 affected by the resize event (e.g., the ActiveX control discussed above) so that the corresponding resource-output window 3416 is resized and the updated graphical output data is painted within the borders of the -output window 3416. - These embodiments thus enable the window attributes of the resource-
output window 3416 to be modified so that the resource-output window 3416 can be moved, resized, etc., within the boundaries of thebrowser window 3402. With reference toFIG. 35 and by way of nonlimiting example, resource-output window B′ 3502 can be resized using the methodology described above to form resource-output window B″ 3504, which overlaps (thus exhibiting a different z-order from) resource-output window F 3506. Alternatively, the resource-output window 3416 can be moved or resized to extend beyond or be entirely outside of thebrowser window 3402. By way of nonlimiting example and with reference toFIG. 36 , resource-output window J 3602 lies within the boundaries of thebrowser window 3402, while resource-output window K 3604 extends beyond the boundaries of thebrowser window 3402 and resource-output window L 3606 is entirely outside thebrowser window 3402. Note that the resource-output windows can exhibit varying z-orders with respect to other elements in the client desktop 3410. For example, local window 3608 exhibits a z-order between that of thebrowser window 3402 and resource-output window L 3606. In this embodiment, theclient agent 2814 instructs the operating system of theclient machine 10 to draw the desired resource-output window 3416 in response to command messages received from theserver agent 3316, without having to first modify the properties of the resource objects 3310 embedded in theweb page 3412, which initially established the window attributes of the resource-output window 3416. - In one embodiment, each input event affecting the resource-
output window 3416 is transferred to and processed by theserver agent 3316, which then instructs theclient agent 2814 to effect corresponding changes in the resource-output window 3416. In another embodiment, one or more input event types (e.g., click and drag mouse actions directed at moving the resource-output window 3416 to another grid location on the web page 3412) are processed entirely by theclient agent 2814 and not reported to theserver agent 3316, where the graphical output data displayed within the resource-output window 3416 remains unchanged. - In more detail and with reference to
FIG. 37 , theclient agent 2814 comprises amonitor process 3702, a command process 3704, a message receiving process 3706, and a message transmission process 3708. In one embodiment, eachprocess 3702, 3704, 3706, 3708 is a separately functioning code segment that operates independently of the other processes. For example, the message receiving process 3706 and the command process 3704 can be implemented as separate threads, which communicate with each other via a named pipe or shared memory. Use of a common data set allows the message receiving process 3706 and the message transmission process 3708 to be synchronized. - The message receiving process 3706 receives graphical data, window attribute information, and commands from the
server agent 3316 via the communications link that provides the connectivity between theclient agent 2814 andserver agent 3316 during the client-server session. The communications link preferably includes a first virtual channel 3710 and a second virtual channel 3712. Command, event, and window attribute information is passed between theclient agent 2814 and theserver agent 3316 via the first virtual channel 3710, while graphical data corresponding to the graphical contents of the resource-output windows 3416 is passed via the second virtual channel 3712. The message receiving process 3706 informs the command process 3704 of the commands, window attributes, and graphical data received from theserver agent 3316 and the command process 3704 further processes this data. - In one embodiment, the command process 3704 processes the commands received from the
server agent 3316 by instructing the client operating system 3714 to form and/or modify affected resource-output windows 3416 in accordance with the window attributes specified by theserver agent 3316. The command process 3704 also instructs the client operating system 3714 to display the graphical data provided by theserver agent 3316 in the appropriate resource-output windows 3416. In one embodiment, the command process 3704 implements changes to the resource-output windows 3416 in the client desktop 3410 by issuing GDI commands. In other embodiments, the command process 3704 issues commands directly to an associated graphics subsystem or via graphics API commands. - The command process 3704 also instructs the
monitor process 3702 to periodically monitor the client desktop 3410 in order to detect changes affecting the resource-output windows 3416. In one embodiment, themonitor process 3702 instructs the client operating system 3714 to return information relating to the client desktop 3410 at predetermined polling intervals. In other embodiments, themonitor process 3702 monitors the message queue maintained by the client operating system 3714 in order to detect changes affecting the resource-output windows. Themonitor process 3702 communicates some or all of the detected desktop changes to the command process 3704 for further processing. - In one embodiment, the command process 3704 instructs the message transmission process 3708 to transmit all of the changes detected by the
monitor process 3702 to theserver agent 3316 via the first virtual channel. In another embodiment, the command process 3704 instructs the message transmission process 3708 to transmit a subset of the detected changes, such as changes which only affect the graphical data and/or window attributes of the resource-output windows 3416. Theserver agent 3316 receives the detected changes along with any commands from the command process 3704 and any input events made by the user of theclient machine 10 that triggered the detected changes. Theserver agent 3316 then modifies its local desktop to accommodate the detected changes and transmits associated commands, window attributes, and graphical data back to the client's message receiving process 3706. In this manner, desktop elements, such as the resource-output windows 3416, that are common in the client and server desktops remain in lock step. - The command process 3704 of the
client agent 2814 ensures that analogous/common elements in the client and server desktops remain in lock step by maintaining a common window list. The common window list includes the window attribute information for each window in the client desktop 3410 and for each corresponding window in the resource server desktop. In embodiments, in which a plurality of client agents is executing on theclient machine 10, the command process 3704 of asingle client agent 2814 has primary responsibility for maintaining the common window list. If thesingle client agent 2814 terminates, while other client agents remain in operation, the remaining client agents will elect another primary client agent to maintain the common window list. -
FIG. 38 depicts a system in which aclient machine 10 is connected to more than oneremote machine FIG. 38 ,client machine 10 has an associateddisplay 3802. Thedisplay 3802 may be used to display one or more components of a graphical user interface, such as windows and pull-down menus. The collection of graphical user interface components displayed to a user by thedisplay 3802 is generally referred to as the “desktop.” As shown inFIG. 38 , theclient machine 10 displays alocal desktop environment 3804 to a user.Client machine 10 may provide at least a part of thelocal desktop environment 3804 orclient machine 10 may simply display various desktop components received from other sources such asremote machines 30. As shown inFIG. 38 , eachremote machine display desktop environment display display FIG. 38 depicts an embodiment of a system in which eachmachine 30displays user interface window - Each
remote machine agent remote machine agent client machine 10 connected to theremote machine Client machine 10 may also host anagent 3816. In some embodiments, aclient machine 10 hosts a separatelocal agent 3816 for eachremote machine 30 to which theclient machine 10 is connected. In other embodiments, theclient machine 10 hosts asingle agent 3816 that manages connections to multipleremote machines 30. Each of theagents desktop environment agent desktop local agent 3816 may receive messages transmitted fromserver node agents local agent 3816 commands theclient machine 10 to modify thelocal desktop environment 3804 in response to the messages received fromserver agents local agent 3816 issues commands to theclient machine 10 to conform thelocal desktop environment 3804 to thedesktop environment 3804 In other embodiments,agents remote machine local agent 3816 and command themachine desktop environment local agent 3816. - In one embodiment, the
agents desktop environment agents agents agents agent agent - Information determined and stored by the
agent desktop environment desktop environment agent Server agents local agent 3816 monitors an intraclient message queue. In this embodiment, changes to thedesktop environment remote machine server server desktop environment agents agents - Referring now to
FIG. 39 , the steps taken during a server-initiated event are shown. Theagent 3814 forremote machine 30 senses a change in its associated desktop (step 3902). Theagent 3814 may do this by intercepting a window event on the server message queue, or theagent 3814 may determine a change in the desktop by comparing the results returned from serially issued operating system commands, as described above. Theagent 3814 sends a message to aclient agent 3816 indicating the change in the server desktop 3810 (step 3904). For example, if a new window has been given focus, theagent 3814 can transmit a message to aclient agent 3816 indicating the identity of the new “top” window. In one embodiment, theagent 3814 broadcasts its message to allclient agents 3816 that exist in the system. Alternatively, theagent 3814 may transmit its message only to a predetermined subset ofclient agents 3816. For example, when aclient machine 10 makes a connection to aremote machine 30, theclient agent 3816 may register with theagent 3814. In this embodiment, theagent 3814 would transmit change messages only to those client agents that have registered with theremote machine 30. - The
client agent 3816 receives the transmitted message (step 3906). In embodiments in which theremote machine 30 broadcasts commands, theclient agent 3816 must have some mechanism for determining whether a transmitted command affects its associated desktop. For example, theclient agent 3816 may maintain a list ofremote machines 30 to which it is connected. In these embodiments, theclient agent 3816 responds to messages broadcast by anyremote machine 30 present in its list. For embodiments in which theagent 3814 does not broadcast messages, no such mechanism is necessary. - The
client agent 3816 implements a change to its associateddesktop 14 responsively to the received message (step 3908). Theclient agent 3816 may accomplish this by directly issuing graphics Application Programming Interface commands that cause theclient machine 10 to change the display of its associated desktop. Alternatively, theclient agent 3816 may issue GDI commands to change its associated desktop. In still other embodiments, theclient agent 3816 issues commands directly to the system, whether implemented in hardware or software, responsible for displaying graphics on theclient machine 10. - Referring now to
FIG. 40 , the steps taken when aclient machine 10 initiates a desktop change are shown. Theclient agent 3816 senses a change in its associated desktop 14 (step 4002). As noted above, this may be done on an event-driven basis or by polling the operating system operating on theclient machine 10. Theclient agent 3816 determines to whichremote machine 30 the affected window belongs (step 4004). To facilitate this process, theclient agent 3816 may maintain a list that associates remote windows with a particularremote machine 30. Theclient agent 3816 then sends a message to the identifiedremote machine 30 indicating the change in its desktop 14 (step 4006). Alternatively, theclient agent 3816 may skip step 404 entirely and broadcast its change message to allremote machines 30. The server agent receives the transmitted message (step 4008) and implements the change in its associated desktop (step 4010), as described above. - In one particular embodiment, a
client machine 10 and aremote machine 30 communicate using the ICA protocol and theclient machine 10 and theremote machine 30 execute a version of the WINDOWS operating system.Client machine 10 hosts alocal agent 3816 that may be provided as a dynamically linked library module. Theremote machine 30 hosts anagent 3814 that may be provided as a separate thread. - In this embodiment, the
local agent 3816 and theagent 3814 exchange graphical data, i.e., the data actually displayed in each window on the desktop, via a first ICA virtual channel. Information about window positioning, window size, z-access ordering of window and other such information is communicated between theclient machine 10 and theremote machine 30 via a second ICA virtual channel. Throughout the description, when theclient machine 10 and theremote machine 30 are actively exchanging information via the second ICA virtual channel, theclient machine 10 will be referred to as being in “seamless windowing mode.” - Referring now to
FIG. 41 , the process for enabling seamless windowing mode between thelocal agent 3816 andagent 3814 is shown. In this embodiment, all communication between a server agent and a client agent is packet-oriented and takes place over a dedicated ICA virtual channel, making the functioning of theagents Agents - The
client agent 3816 waits for an initial packet from theserver agent 3814. After user logon to the server, aserver agent 3814 will be invoked (step 4104). - The
server agent 3814 sends a TWI_PACKET_START packet to theclient agent 3816, which includes some essential information about theremote machine 30 desktop environment (desktop resolution, desktop size, version number of ICA protocol supported by the server, etc.) (step 4106). This packet is sent by theserver agent 3814 on initial connection or on reconnect, and is used to: (1) detect seamless windowing capabilities of theclient machine 10; and (2) requestsbasic machine 10 information. - The client agent receives the TWI_PACKET_START packet (step 4107) and responds with a TWI_PACKET_C2H_START_ACK packet, confirming TWI_PACKET_START and supplying
machine 10 version/capabilities information (step 4108). This packet is sent by theclient agent 3816 to confirm reception of TWI_PACKET_START packet and to send the requestedbasic machine 10 information to theserver agent 3814. - If there is no response from the client agent 3816 (step 4109), the
server agent 3814 assumes that theclient machine 10 is unable to enter seamless windowing mode, and the seamless windowing virtual channel is not used by theremote machine 30 to communicate window information. In this case, theremote machine 30 continues to communicate graphical data to theclient machine 10 via another virtual channel, and theclient machine 10 desktop displays the server desktop without incorporating windows from other nodes. - The
client agent 3816 uses the information sent by theserver agent 3814 in step 4106 to determine if a seamless windowing session can be established between theserver agent 3814 and theclient agent 3816. In one embodiment, theclient agent 3816 compares information relating to the version of the virtual channel protocol supported by theserver agent 3814 to makes the determination If theclient agent 3816 determines that it is possible to enable seamless windowing mode (step 4110), theclient agent 3816 sends a TWI_PACKET_C2H_OPEN packet to the server agent 3814 (step 4111). This packet requests that theserver agent 3814 enable seamless windowing mode. - On reception of a TWI_PACKET_C2H_OPEN packet (step 4112) the server agent 3816 (I) resets its internal data structures, (ii) sends a TWI_PACKET_SYSINFO packet to the
client agent 3816 to communicate some general information regarding the window settings on theremote machine 30 to theclient agent 3816, (iii) sends a TWI_PACKET_OPEN packet to the client agent 3816 (step 4114) indicating the establishment of seamless windowing mode, and (iv) enables its main polling loop (step 4116) that will poll the operating system on the server node for desktop changes. If theclient agent 3816 and theserver agent 3814 do not support the same version of the seamless window protocol, theserver agent 3814 ignores the TWI_PACKET_C2H_OPEN packet. - On reception of TWI_PACKET_OPEN packet (step 4120), the
client agent 3816 resets its internal data structures (step 4122) and seamless windowing mode between theclient agent 3816 and theserver agent 3814 is established. - During a seamless windowing mode session, the
server agent 3814 will send window information such as window position, size, styles, window text, etc. for all top-level windows on the server node. Also, foreground window information is sent, i.e., which window on the server node desktop is the foreground window. In accordance with this information, theclient agent 3816 creates windows with the same size/position as the server node windows on the machine desktop. In some embodiments, window elements are transmitted as bitmaps from theserver node 20. Examples of packets sent by theserver agent 3814 include: TWI_PACKET_CLOSE, which is sent to switch theclient agent 3816 out of seamless windowing mode and back to regular, or full screen, mode; that is, theclient machine 10 is switched back to displaying the server node desktop environment without incorporating windows from other desktop environments; TWI_PACKET_CREATEW, which is sent to create new windows on theclient machine 10; TWI_PACKET_DELETEW, which is sent to destroy a window on theclient machine 10; TWI_PACKET_CHANGEW, which is sent to change a window displayed by thelocal node 10; TWI_PACKET_SYSINFO, which is sent to reportremote machine 30 system settings—normally it is sent only once, but the packet can be sent multiple times; TWI_PACKET_FOREGROUNDW, which is sent during normal seamless windowing mode operation to change the foreground window; TWI_PACKET_SETTOPW, which is sent during normal seamless windowing mode operation to change the top window, that is, to bring a new window to top; TWI_PACKET_SETFOCUS, which is sent during normal seamless windowing mode operation to change the focus window; - TWI_PACKET_FOCUSACK, which is sent in response to TWI_PACKET_C2H_SETFOCUS (see below), and reports the result of a SetFocus attempt; and TWI_PACKET_SPA_STATUS, which is sent in response to TWI_PACKET_C2H_START_PUBLICAPP (see below), and is used to report the result of the requested operation.
- Examples of packets that can be sent by the
client agent 3816 to theserver agent 3814 include: TWI_PACKET_C2H_PAUSE, which is sent to suspend theserver agent 3814, that is, theserver agent 3814 will stop sending window information, clear its internal data structure and send a TWI_PACKET_CLOSE packet (see above); TWI_PACKET_C2H_RESUME, which is sent to resume theserver agent 3814—theserver agent 3814 will clear its internal data structure, and send a TWI_PACKET_OPEN packet (see above); TWI_PACKET_C2H_SETPOS, which is sent to report window size/position change on the machine; TWI_PACKET_C2H_SETFOCUS, which is sent to report a change in the focus window on the machine; TWI_PACKET_C2H_RESTORE, which is sent to request restoration of a minimized window; TWI_PACKET_C2H_TERMINATE, which is sent to request termination of a program executing on theremote machine 30; TWI_PACKET_C2H_STARTAPP, which is sent to start a new resource on theremote machine 30; TWI_PACKET_C2H_LOGOUT, which is sent to end the current session; TWI_PACKET_C2H_START_PUBLICAPP, which is sent to start a new published resource on theremote machine 30; and TWI_PACKET_C2H_CLIENTINFO, which is sent to report client desktop settings to theserver agent 3814—this packet is generally sent on startup, but can also be used during seamless windowing session. - The
client agent 3816 will try to perform some operations (such as window move and resize) locally, sending update information back to theremote machine 30 afterwards. Proper window behavior is emulated by intercepting the WM_NCHITTEST message for the client-created windows. - Foreground window changes can happen on both the
client machine 10 and theremote machine 30, so theclient machine 10 andremote machine 30 will negotiate and balance actual foreground window changes. For example, if theremote machine 30 changes its foreground window, that change should be properly represented on theclient machine 10 desktop. Theserver agent 3814 sends information regarding the new foreground window to theclient agent 3816 using the TWI_PACKET_FOREGROUNDW packet. Similarly, if theclient agent 3816 detects a foreground window change on theclient machine 10 desktop, theclient agent 3816 sends information regarding the change to theserver agent 3814 and theserver agent 3814 implements the change on theremote machine 30 desktop. - When focus is taken away from a window representing a server window and is given to a
local machine 10 window, theclient machine 10 notifies theremote machine 30 of the change and theremote machine 30 gives focus to an invisible window. For embodiments in which theclient machine 10 is connected to twoserver nodes 30, and focus is shifted from a window representing a window from the firstremote machine 30 and is given to a window representing a window from the secondremote machine 30′, theclient machine 10 sends a packet informing the currentremote machine remote machine client agent 3816 instructs the otherremote machine 30 that its window now has focus on theclient machine 10 desktop. - In some embodiments, it is desirable to add some complexity to the agent's main polling loop to reduce network traffic. In these embodiments, the main polling loop includes a comparison between the current foreground window and the identity of the window last requested to be moved to the foreground. If the current foreground window matches the window identified in the most recent request, the agent does not need to send information acknowledging the change. This technique is useful in both
server agent 3814 andclient agents 3816. - Window z-ordering on the
client machine 10 is a superset of the server node z-ordering (machine 10 will always have more windows than the host). Server node Bordering is reproduced on theclient machine 10 by reproducing owner/owned relationship among windows and the TOP_MOST flag in the window style. Owner/owned relationships refer to windows which are children of other windows, such as dialog boxes associated with resource windows. The dialog box is said to be owned by the resource window, and the dialog box will always appear on top of its owner. The TOP_MOST flag indicates that a particular window should appear on “top” of the desktop, for example, the status bar in WINDOWS 95. - When a user disconnects, the
server agent 3814 switches itself to suspended mode, and will not send information to theclient agent 3816. On a reconnect, theserver agent 3814 sends a TWI_PACKET_START packet, reporting HostAgentState as “already running, reconnect.” - Based on the version number of the protocol supported by the server the
client machine 10 will decide whether it is possible to enable seamless windowing mode (from theclient machine 10 point of view). If it is possible to switch to seamless windowing mode, theclient agent 3816 will send a TWI_PACKET_C2H_OPEN packet, asking theserver agent 3814 to enable seamless windowing mode. - Each agent responsible for monitoring an associated desktop may be implemented as a stand-alone software routine (such as an executable file on DOS-based systems), a dynamically linked library routine (DLL), or as an integral piece of the operating system. Referring now to
FIG. 42 , and in brief overview, each agent includes amessage receiving facility 4202, a command facility 4204, amonitor facility 4206, and amessage transmission facility 4208. Agent-agent communication is full-duplex, i.e., agents can transmit and receive messages simultaneously. Thus, each facility can be implemented as a separately functioning code segment that operates independently of the other facilities. For example,message receiving facility 4202 and command facility 4204 can be implemented as separate threads which communicate with each other via a named pipe or shared memory. Use of a common data allows themessage receiving facility 4202 and themessage transmitting facility 4208 to be synchronized. -
Message receiving facility 4202 receives messages transmitted from other agents indicating changes in the desktop environments associated with those agents.Message receiving facility 4202 may connect directly with the physical layer of the communications protocol the agents use to communicate, or themessage receiving facility 4202 may operate at a higher layer of the protocol by cooperating with one or more communications subsystems. For embodiments in which messages are broadcast by agents, themessage receiving facility 4202 has some mechanism for determining whether a broadcast message is intended for it. For example, themessage receiving facility 4202 may store a list of the windows which its associated desktop displays. Themessage receiving facility 4202 would compare the target of any received message to its list of windows to determine whether or not to take action on the received message. The message receiving facility may be implemented as a blocking function. Alternatively, the message receiving facility can be implemented a call-back function invoked by the ICA virtual channel transport. - Once the
message receiving facility 4202 has determined that a received message is intended for its desktop, the command facility is invoked to effect the change indicated by the message to the associated desktop environment. The command facility 4204 may be passed the received message facility, or themessage receiving facility 4202 may process the received message before communicating with the command facility 4204. The command facility 4204 may implement the desktop change indicated by the received message by issuing GDI commands. In other embodiments, the command facility 4204 may issue commands directly to an associated graphics subsystem or may issue other graphics API commands. - During a seamless windowing session, a number of desktops are associated with a
single machine 10—one desktop on theclient machine 10 itself and one desktop perremote machine 30 to which theclient machine 10 is connected. Theclient agent 3816, in conjunction with theserver agent server agents - In one embodiment, each
remote machine 30 has knowledge only of its own graphical desktop representation and theremote machine 30 desktops are individually represented within theclient machine 10. Theclient machine 10 display is updated by combining allremote machine 30 andmachine 10 desktop images into a single display image based on the window information that has been obtained from eachserver node 30 30′ by theclient agent 3816. The resulting image is displayed at theclient machine 10. - The combining process involves building a common window list based on the windows information exchanged by all agents. Using the combined window list, the graphical desktop data is clipped and merged for representation by the
client machine 10. The node takes care of “clipping” displayed windows resulting from the commands issued by the command facility 4204. Such “clipping” functions are well-known to those of ordinary skill in the art. In some embodiments, however, the command facility 4204 maintains a shadow bitmap of clipped windows. That is, the command facility 4204 maintains a bit image of windows that are obscured by other windows. This allows the agent to change its associated desktop without requiring it to reload the window image of an obscured window from the appropriate source. In other embodiments, the node determines whether graphical data is obscured at the time it is received. If it is, the node ignores the received graphical data. If it is not, the node displays the data. The node makes a determination as to whether the graphical data is obscured by applying clipping functions. -
Monitoring facility 4206 monitors the desktop associated with the agent.Monitoring facility 4206 may monitor the desktop by periodically issuing commands provided by the operating system executing on the node which return information about the node's desktop. Alternatively, the monitoring facility 506 may watch for messages posted to an intranode message queue. As noted above, in one particular embodiment themonitoring facility 4206 monitors the Windows Message Queue. Once a desktop change occurred, themessage transmission facility 4208 transmits a message indicating the change that has occurred. In some embodiments, themessage transmission facility 4208 broadcasts notification of the change. - In one embodiment,
message transmission facility 4208 can be implemented in the form of non-blocking function that can be called from any window procedure. If the function can not send a data packet immediately (for example, the communication subsystem has no buffer space), a timer will be set and retry attempts will be done until the send succeeds. - Referring now to
FIG. 43 , an embodiment of a system for enabling seamless windowing mode between aclient machine 10 and remote computing environments is shown. In brief overview, the system includes a firstvirtual channel 4302, a firstremote desktop environment 4304, anative operating system 4306, aremote window 4308, a secondvirtual channel 4310, a thirdvirtual channel 4312, a secondremote desktop environment 4314, avirtualized operating system 4316, aremote window 4318, a fourthvirtual channel 4320, alocal agent 4330, and alocal desktop environment 4340. - In some embodiments the methods and systems described above in connection with
FIGS. 24-37 may be implemented in systems including virtual machines. In some embodiments, thelocal agent 4330 resides on aclient machine 10. In one of these embodiments, theclient machine 10 establishes a connection to a physical machine providing access to a resource requested by theclient machine 10. In this embodiment, thelocal agent 4330 on theclient machine 10 may receive window attribute data and graphical data associated with aremote window 4308 from an agent on aremote machine 30 as described above. - In other embodiments, the
client machine 10 has established a connection to a virtual machine providing access to a resource. In one of these embodiments, an agent for theremote machine 30 may reside in the virtual machine. In another of these embodiments, the agent for theremote machine 30 may reside in a hypervisor into which the virtual machine is launched. In still another of these embodiments, the agent for theremote machine 30 may reside in a second virtual machine providing management functionality for the virtual machine on theremote machine 30. In these embodiments, theclient machine 10 may receive window attribute data and graphical data associated with aremote window 4308 through the implementation of the methods and systems described above in connection withFIGS. 24-37 . - The
client machine 10 may access multiple resources from differentremote machines 30. In some embodiments, theclient machine 10 may access resources on different machines substantially simultaneously over multiple established connections to, for example, both physical machines onremote machines 30 and to virtual machines executing in a hypervisor onremote machines 30′. - Referring still to
FIG. 43 , and in greater detail, a block diagram depicts one embodiment of a system for receiving window attribute data and graphical data associated with remote windows from virtualized operating systems and from native operating systems. The firstvirtual channel 4302 is coupled to the firstremote desktop environment 4304, which is provided by thenative operating system 4306. The firstvirtual channel 4302 conveys graphical data associated with theremote window 4308 provided by the firstremote desktop environment 4304. The secondvirtual channel 4310 coupled to the firstremote desktop environment 4304 conveys window attribute data associated with theremote window 4308 provided by the firstremote desktop environment 4304. - The third
virtual channel 4312 is coupled to the secondremote desktop environment 4314 provided by avirtualized operating system 4316, the thirdvirtual channel 4312 conveying graphical data associated with the secondremote window 4318 provided by the thirdremote desktop environment 4314. The fourthvirtual channel 4320 coupled to the secondremote desktop environment 4314 and conveying window attribute data associated with the secondremote window 4318 provided by the secondremote desktop environment 4314. In one embodiment, the window attribute data associated with theremote windows 708 and 718 and conveyed by the secondvirtual channel 4310 and the fourthvirtual channel 4320 includes the size and z-order of the remote windows. - The
local agent 3814, coupled to the firstremote desktop 4304 and the secondremote desktop 4314 via the first, second, third and fourth virtual channels directs the formation of a first window in thelocal desktop environment 4340 corresponding to theremote window 4308 provided by the firstremote desktop environment 4304 and the formation of a second window in thelocal desktop environment 4340 corresponding to the secondremote window 4318 provided by the secondremote desktop environment 4314. The first local window displays the graphical data conveyed by the firstvirtual channel 4302 in accordance with the window attribute data conveyed by the secondvirtual channel 4310 and the second local window displaying the graphical data conveyed by the thirdvirtual channel 4312 in accordance with the window attribute data conveyed by the fourthvirtual channel 4320. In one embodiment, thelocal agent 4330 forms and maintains a combined windows list representing a modifiable z-order of a corresponding window in thelocal desktop environment 4340. - In some embodiments, a local operating system forms the
local desktop environment 4340. In one of these embodiments, thelocal agent 4330 periodically polls the local operating system to detect an attribute change in one of the first local window and the second local window. In another of these embodiments, upon detection of attribute change, thelocal agent 4330 transmits a message to one of the first remote desktop environment and the second remote desktop environment indicative of the attribute change. In some embodiments, corresponding windows on thelocal desktop environment 4340 and on theremote desktop environments - Referring now to
FIG. 44 , a flow diagram depicts one embodiment of the steps taken in a method of receiving window attribute data and graphical data associated with remote windows from virtualized operating systems and from native operating systems. In brief overview, graphical data associated with a remote window provided by a first remote desktop environment provided by a native operating system is received via a first virtual channel coupled to the remote desktop (step 4302). Window attribute data associated with the remote window provided by the first remote desktop environment is received via a second virtual channel coupled to the first remote desktop environment (step 4304). Graphical data associated with a remote window provided by a second remote desktop environment provided by a virtualized operating system is received via a third virtual channel coupled to the remote desktop environment (step 4306). Window attribute data associated with the remote window provided by the second remote desktop environment is received via a fourth virtual channel coupled to the second remote desktop environment (step 4308). A first window is formed in the local desktop environment, the first window displaying the graphical data received from the first virtual channel in accordance with the window attribute data received from the second virtual channel (step 4310). A second window is formed in the local desktop environment, the second window displaying the graphical data received from the third virtual channel in accordance with the window attribute data received from the fourth virtual channel (step 4312). - In some embodiments, a combined windows list is formed and stores at least some of the window attribute data. In other embodiments, a local operating system associated with the local desktop environment is polled to detect an attribute change in one of the first local window and the second local window and transmitting a message to one of the first remote desktop environment and the second remote desktop environment indicative of the detected attribute change. In still other embodiments, the local windows exhibit window attribute data substantially similar relative to the local desktop environment as the window attribute data of the remote windows relative to the remote desktop environments.
- Referring to
FIG. 45 , one embodiment of a system for providing a client with a reliable connection to a host service is shown. In a broad overview, asystem 4500 for network communications includes a client machine 10 (e.g., a first computing device) in communication with a first protocol service 4502 (e.g., a second computing device) over anetwork 150. Also included in thesystem 4500 are a plurality ofhost services 4516 a-4516 n (e.g., third computing devices) that are in communication, over anetwork 150′, with thefirst protocol service 4502 and, through thefirst protocol service 4502 and over thenetwork 150, with theclient machine 10. Alternatively, in another embodiment, and with reference now toFIG. 46 , thefirst protocol service 4502 and thehost services 4516 a-4516 n are not implemented as separate computing devices, as shown inFIG. 45 , but, rather, they are incorporated into the same computing device, such as, for example, aremote machine 30. Thesystem 4500 can include one, two, or any number ofremote machines protocol service 4502 may also be provided as aremote machine 30. - In one embodiment, the
networks FIG. 45 . Thenetworks same network 150, as shown inFIG. 46 . - Referring still to the embodiments of
FIGS. 45 and 46 , theclient machine 10 is configured to establish aconnection 4504 between theclient machine 10 and afirst protocol service 4502 over thenetwork 150 using a first protocol. For its part, thefirst protocol service 4502 is configured to accept theconnection 4504. Theclient machine 10 and thefirst protocol service 4502 can, therefore, communicate with one another using the first protocol as described below in reference toFIGS. 47-48 andFIG. 49 . - In some embodiments, as shown in
FIGS. 45 and 46 , aclient agent 4506 is included within theclient machine 10. Theclient agent 4506 can be, for example, implemented as a software program and/or as a hardware device, such as, for example, an ASIC or an FPGA. Theclient agent 4506 can use any type of protocol and it can be, for example, an HTTP client agent, an FTP client agent, an Oscar client agent, a Telnet client agent, an Independent Computing Architecture (ICA) client agent from Citrix Systems, Inc. of Fort Lauderdale, Fla., or a Remote Desktop Procedure (RDP) client agent from Microsoft Corporation of Redmond, Wash. In some embodiments, theclient agent 4506 is itself configured to communicate using the first protocol. In some embodiments (not shown), theclient machine 10 includes a plurality ofclient agents 4506 a-4506 n, each of which communicates with ahost service 4516 a-4516 n, respectively. - In another embodiment, a standalone client agent is configured to enable the
client machine 10 to communicate using the first protocol. The standalone client agent can be incorporated within theclient machine 10 or, alternatively, the standalone client agent can be separate from theclient machine 10. The standalone client agent is, for example, a local host proxy. In general, the standalone client agent can implement any of the functions described herein with respect to theclient agent 4506. - As also described further below, the
first protocol service 4502 is, in one embodiment, itself configured to communicate using the first protocol. Thefirst protocol service 4502 is configured to establish aconnection 4508 a-4508 n between thefirst protocol service 4502 and thehost service 4516 a-4516 n, respectively. For example, thefirst protocol service 4502 can establish aconnection 4508 a between thefirst protocol service 4502 and onehost service 4516 a and aconnection 4508 b between thefirst protocol service 4502 and anotherhost service 4516 b. In one embodiment, thefirst protocol service 108 separately establishessuch connections 4508 a-4508 n (i.e., thefirst protocol service 4502 establishes one connection at a time). In another embodiment, thefirst protocol service 4502 simultaneously establishes two or more ofsuch connections 4508 a-4508 n. - In yet another embodiment, the
first protocol service 4502 can concurrently establish and maintainmultiple connections 4508 a-4508 n. Thefirst protocol service 4502 is configured to provide two ormore connections 4508 a-4508 n without interrupting theconnection 4504 with theclient machine 10. For example, thefirst protocol service 4502 can be configured to establish theconnection 4508 a between thefirst protocol service 4502 and thehost service 4516 a when a user of theclient machine 10 requests execution of a first application program residing on thehost service 4516 a. When the user ends execution of the first application program and initiates execution of a second application program residing, for example, on thehost service 4516 b, thefirst protocol service 4502 is, in one embodiment, configured to interrupt theconnection 4508 a and establish theconnection 4508 b between thefirst protocol service 4502 and thehost service 4516 b, without disrupting theconnection 4504 between thefirst protocol service 4502 and theclient machine 10. - The
first protocol service 4502 and thehost services 4516 a-4516 n can communicate over theconnections 4508 a-4508 n, respectively, using any one of a variety of secondary protocols, including, but not limited to, HTTP, FTP, Oscar, Telnet, the ICA remote display protocol from Citrix Systems, Inc. of Fort Lauderdale, Fla., and/or the RDP remote display protocol from Microsoft Corporation of Redmond, Wash. For example, thefirst protocol service 4502 and thehost service 4516 a can communicate over theconnection 4508 a using the ICA remote display protocol, while thefirst protocol service 4502 and thehost service 4516 b can communicate over theconnection 4508 b using the RDP remote display protocol. - In one embodiment, the secondary protocol used for communicating between the
first protocol service 4502 and ahost service 4516, such as, for example, the ICA remote display protocol, includes a plurality of virtual channels. A virtual channel is a session-oriented transmission connection that is used by application-layer code to issue commands for exchanging data. For example, each of the plurality of virtual channels can include a plurality of protocol packets that enable functionality at theremote client machine 10. In one embodiment, one of the plurality of virtual channels includes protocol packets for transmitting graphical screen commands from ahost service 4516, through thefirst protocol service 4502, to theclient machine 10, for causing theclient machine 10 to display a graphical user interface. In another embodiment, one of the plurality of virtual channels includes protocol packets for transmitting printer commands from ahost service 4516, through thefirst protocol service 4502, to theclient machine 10, for causing a document to be printed at theclient machine 10. - In another embodiment, the first protocol is a tunneling protocol. The
first protocol service 4502 encapsulates a plurality of secondary protocols, each used for communication between one of thehost services 4516 a-4516 n and thefirst protocol service 4502, within the first protocol. As such, thehost services 4516 a-4516 n and thefirst protocol service 4502 communicate with theclient machine 10 via the plurality of secondary protocols. In one embodiment, the first protocol is, for example, an application-level transport protocol, capable of tunneling the multiple secondary protocols over a TCP/IP connection. - Referring to
FIG. 47 , communications between theclient machine 10 and thefirst protocol service 4502 via theconnection 4504 take the form of a plurality of secondary protocols 4702 a-4702 n (e.g., HTTP, FTP, Oscar, Telnet, ICA, and/or RDP) encapsulated within afirst protocol 4704. This is indicated by the location of secondary protocols 4702 a-4702 n inside thefirst protocol 4704. Where secure communication is not called for, thefirst protocol 4704 can be, as illustrated inFIG. 47 , communicated over an unsecured TCP/IP connection 4706. - Referring now to
FIG. 48 , if secure communication is used, thefirst protocol 4704 is communicated over an encrypted connection, such as, for example, a TCP/IP connection 4802 secured by using asecure protocol 4804 such as the Secure Socket Layer (SSL). SSL is a secure protocol first developed by Netscape Communication Corporation of Mountain View, Calif., and is now a standard promulgated by the Internet Engineering Task Force (IETF) as the Transport Layer Security (TLS) protocol and described in IETF RFC-2246. - Thus, the plurality of secondary protocols 4702 a-4702 n are communicated within the
first protocol 4704 with (FIG. 48 ) or without (FIG. 47 ) asecure protocol 4804 over theconnection 4504. The secondary protocols that can be used to communicate over theconnections 4508 a-4508 n include, but are not limited to, HTTP, FTP, Oscar, Telnet, ICA, and RDP. Moreover, in one embodiment, at least one of the secondary protocols, as described above, includes a plurality of virtual channels, each of which can include a plurality of protocol packets enabling functionality at theremote client machine 10. For example, in one embodiment, onehost service 4516 a is a web server, communicating with thefirst protocol service 4502 over theconnection 4508 a using the HTTP protocol, and anotherhost service 4516 b is an application server, communicating with thefirst protocol service 4502 over theconnection 4508 b using the ICA protocol. Thehost service 4516 b generates both protocol packets for transmitting graphical screen commands to theclient machine 10, for causing theclient machine 10 to display a graphical user interface, and protocol packets for transmitting printer commands to theclient machine 10, for causing a document to be printed at theclient machine 10. - In another embodiment, the method and systems described herein reduce the number of times network connections are opened and closed. In one embodiment, the
first protocol 4704 allows the secondary protocol connections 4702 a-4702 n tunneled therein, such as, for example, anHTTP connection 4702 n, to be opened and/or closed, repetitively, without also requiring the transport connection over which thefirst protocol 4704 is communicated (e.g.,TCP connection 4706 and/or 4802), thesecure protocol connection 4804, or thefirst protocol connection 4704 itself to similarly be repetitively opened and/or closed. Without the encapsulation of thefirst protocol 4704, the secondary protocol 4702 a-4702 n may frequently open and close network connections, such as TCP connections. This would add significant delays and overhead to the system. These delays and overhead would be further increased by the use of asecure encapsulation protocol 4806, such as SSL, which have significant overhead in establishing network connections. By encapsulating the secondary protocol 4702 a-4702 n within thefirst protocol 4704 and maintaining the connection of the transport connection (4706, 4802), the secondary protocols 4702 a-4702 n, as part of the payload of thefirst protocol 4704, do not need to perform frequent and costly open and closes of thenetwork connection 4504. Furthermore, since the secondary protocols 4702 a-4702 n can be communicated within thefirst protocol 4704 with asecure protocol 4804, the secondary protocols 4702 a-4702 n also do not need to open and close secured connections such as with SSL. The transport connection (4706, 4802) establishes and maintains thenetwork connection 4504 so that the encapsulated second protocols 4702 a-4702 n can be communicated without repetitively opening and closing the secured orunsecured network connection 4504. This significantly increases the speed of operation in communicating the secondary protocols 4702 a-4702 n. - As described above, the secondary protocols 4702 a-4702 n carry protocol packets related to applications using such protocols as HTTP, FTP, Oscar, Telnet, RDA or ICA. The secondary protocol packets 4902 a-4902 n transport data related to the application functionality transacted between the
client machine 10 and thehost service 4516 a-4516 n. For example, a user on theclient machine 10 may interact with a web page provided by ahost service 4516 a-4516 n. In transactions between theclient machine 10 and thehost service 4516 a-4516 n, the secondary protocol 4702 a-4702 n encapsulated in thefirst protocol 4704 may have http protocol packets related to displaying the web page and receiving any user interaction to communicate to thehost service 4516 a-4516 n. Since the transport connection (4706, 4802) is not maintained by the secondary protocols 4702 a-4702 n, the secondary protocols 4702 a-4702 n do not need to handle any network-level connection interruptions. As such, the secondary protocols 4702 a-4702 n may not provide any network-level connection interruption information in their payloads. In the above example, the http related secondary protocol packets 4902 a-4902 n of the secondary protocol 4702 a-4702 n transmitted to theclient machine 10 would not provide a notification that a network interruption occurred, e.g., an error message on a web page. Therefore, the user on theclient machine 10 will not be notified of any network-level connection interrupts through the secondary protocol 4702 a-4702 n. This effectively hides the network connection interruptions from the user during the use of the applications related to the secondary protocols 4702 a-4702 n. - Referring to
FIG. 49 , anexample process 4900 used by thefirst protocol service 4502 and theclient agent 4506 of theclient machine 10 encapsulates the plurality of secondary protocols 4702 (e.g., HTTP, FTP, Oscar, Telnet, ICA, and/or RDP) within thefirst protocol 4704 for communication via theconnection 4504. Optionally, as described below, theexample process 4900 used by thefirst protocol service 4502 and theclient agent 4506 of theclient machine 10 also compresses and/or encrypts the communications at the level of the first protocol prior to communications via theconnection 4504. From the point of view of thefirst protocol service 4502, secondary protocol packets 4902 a-4902 n are received via theconnections 4508 a-4508 n at thefirst protocol service 4502. For example, twosecondary protocol packets first protocol service 4502. One, two, or any number of secondary protocol packets 4902 a-4902 n can be received. In one embodiment, the secondary protocol packets 4902 a-4902 n are transmitted by thehost services 4516 to thefirst protocol service 4502 over theconnection 4508. The secondary protocol packets 4902 a-4902 n include a header 4904 and a data packet 4906, also referred to as a data payload. - Following receipt of the secondary protocol packets 4902 a-4902 n, the
first protocol service 4502 encapsulates one or more of the secondary protocol packets 4902 within afirst protocol packet 4908. In one embodiment, thefirst protocol service 4502 generates a firstprotocol packet header 4910 and encapsulates within thedata payload 4912 of thefirst protocol packet 4908 one or more secondary protocol packets 4902 a-4902 n, such as, for example, twosecondary protocol packets secondary protocol packet 4902 a is encapsulated in eachfirst protocol packet 4908. - In one embodiment, the
first protocol packets 4908 are then transmitted over theconnection 4504, for example over theconnection 4706 described with reference toFIG. 47 , to theclient agent 4506 of theclient machine 10. Alternatively, in another embodiment, thefirst protocol service 4502 is further configured to encrypt, prior to the transmission of anyfirst protocol packets 4908, communications at the level of thefirst protocol 4704. In one such embodiment, thefirst protocol packets 4908 are encrypted by using, for example, the SSL protocol described with reference toFIG. 48 . As a result, asecure packet 4914, including aheader 4916 and an encryptedfirst protocol packet 4908′ as adata payload 4918, is generated. Thesecure packet 4914 can then be transmitted over theconnection 4504, for example over the secure TCP/IP connection 4802 illustrated inFIG. 48 , to theclient agent 4506 of theclient machine 10. - In another embodiment, the
first protocol service 4502 is further configured to compress, prior to the transmission of anyfirst protocol packets 4908, communications at the level of thefirst protocol 4704. In one embodiment, prior to encrypting thefirst protocol packet 4908, thefirst protocol service 4502 compresses, using a standard compression technique, thefirst protocol packet 4908. As such, the efficiency of thesystem 4502 is improved. - Referring again to
FIGS. 45-46 , in one embodiment, thesystem 4500 provides theremote client machine 10 with a persistent connection to aremote machine 30, such as, for example, theremote machine 30′. For example, if theclient machine 10 establishes aconnection 4504 between theclient machine 10 and thefirst protocol service 4502 and thefirst protocol service 4502 establishes aconnection 4508 a between thefirst protocol service 4502 and theremote machine 30′, then either theclient agent 4506, thefirst protocol service 4502, or both are configured to maintain a queue of the first protocol data packets most recently transmitted via theconnection 4504. For example, the queued data packets can be maintained by theclient agent 4506 and/or thefirst protocol service 4502 both before and upon a failure of theconnection 4504. Moreover, upon a failure of theconnection 4504, thefirst protocol service 4502 and, likewise, theremote machine 30 are configured to maintain theconnection 4508 a. - Following a failure of the
connection 4504, theclient machine 10 establishes anew connection 4504 with thefirst protocol service 4502, without losing any data. More specifically, because theconnection 4508 a is maintained upon a failure of theconnection 4504, a newly establishedconnection 4504 can be linked to the maintainedconnection 4508 a. Further, because the most recently transmitted first protocol data packets are queued, they can again be transmitted by theclient machine 10 to thefirst protocol service 4502 and/or by thefirst protocol service 4502 to theclient machine 10 over the newly establishedconnection 4504. As such, the communication session between theremote machine 30′ and theclient machine 10, through thefirst protocol service 4502, is persistent and proceeds without any loss of data. - In one embodiment, the
client agent 4506 of theclient machine 10 and/or thefirst protocol service 4502 number the data packets that they transmit over theconnection 4504. For example, each of theclient agent 4506 and thefirst protocol service 4502 separately numbers its own transmitted data packets, without regard to how the other is numbering its data packets. Moreover, the numbering of the data packets can be absolute, without any re-numbering of the data packets, i.e., the first data packet transmitted by theclient agent 4506 and/or thefirst protocol service 4502 can be numbered as No.1, with each data packet transmitted over theconnection 4504 by theclient agent 4506 and/or thefirst protocol service 4502, respectively, consecutively numbered thereafter. - In one such embodiment, following a disrupted and re-established
connection 4504, theclient agent 4506 and/or thefirst protocol service 4502 informs the other of the next data packet that it requires. For example, where theclient agent 4506 had received data packets Nos. 1-10 prior to the disruption ofconnection 4504, theclient agent 4506, upon re-establishment of theconnection 4504, informs thefirst protocol service 4502 that it now requires data packet No. 11. Similarly, thefirst protocol service 4502 can also operate as such. Alternatively, in another such embodiment, theclient agent 4506 and/or thefirst protocol service 4502 informs the other of the last data packet received. For example, where theclient agent 4506 had received data packets Nos. 1-10 prior to the disruption ofconnection 4504, theclient agent 4506, upon re-establishment of theconnection 4504, informs thefirst protocol service 4502 that it last received data packet No. 10. Again, thefirst protocol service 4502 can also operate as such. In yet another embodiment, theclient agent 4506 and/or thefirst protocol service 4502 informs the other, upon re-establishment of theconnection 4504, of both the last data packet received and the next data packet it requires. - In such embodiments, upon re-establishment of the
connection 4504, theclient agent 4506 and/or thefirst protocol service 4502 can retransmit the buffered data packets not received by the other, allowing the communication session between ahost service 4516 and theclient machine 10, through thefirst protocol service 4502, to proceed without any loss of data. Moreover, upon re-establishment of theconnection 4504, theclient agent 4506 and/or thefirst protocol service 4502 can flush from each of their respective buffers the buffered data packets now known to be received by the other. - By providing the
client machine 10 with a reliable and persistent connection to aremote machine 30, the process of opening a new user session with theremote machine 30 is avoided by maintaining the user session through network connection interruptions. For each user session with aremote machine 30, theclient machine 10 and theremote machine 30 may maintain session specific context and caches, and other application specific mechanisms related to that instance of the user session. For each new user session established, these session-specific context and caches need to be re-populated or re-established to reflect the new user session. For example, a user on theclient machine 10 may have an http session with aremote machine 30. Theremote machine 30 may keep context-specific information of this instance of the http session with theclient machine 10. The context may be stored in the memory of the server, in files of the server, a database or other component related to providing the functionality of theremote machine 30. Also, theclient machine 10 may have local context specific to the instance of the http session, such as a mechanism for keeping track of an outstanding request to theremote machine 30. This context may be stored in memory of theclient machine 10, in files on theclient machine 10, or other software component interfaced with theclient machine 10. If the connection between theclient machine 10 and theremote machine 30 is not persistent, then a new user session needs to be established with new session specific context on theremote machine 30 and theclient machine 10. The session is maintained so that a new session, and therefore new specific session context, does not need to be re-established. - In some embodiments, the user session is maintained through network level connection interruptions and without notification to the user of the client that the session was interrupted. In operation of these embodiments, the
first protocol service 4502 establishes and maintains a first connection with aclient machine 10 and a second connection with ahost service 4516 a-4516 n. Via the first connection and the second connection, a session between theclient machine 10 and theremote machine 30 is established. Thefirst protocol service 4502 can store and maintain any session-related information such as authentication credentials, andclient machine 10 andremote machine 30 context for the established session. A user on theclient machine 10 will exercise the functionality provided by theremote machine 30 through the established session. As such, related secondary protocol packets 4902 a-4902 n will contain data related to the transaction of such functionality. These secondary protocol packets 4902 a-4902 n as part of the secondary protocol 4702 a-4702 n are encapsulated and communicated in afirst protocol 4704. Upon detection of a disruption in either the first connection or the second connection, thefirst protocol service 4502 can re-establish the disrupted connection while maintaining the other connection that may have not been disrupted. The network connection disruption may cause an interruption to the session between theclient machine 10 and theremote machine 30. However, since the transport mechanism is not maintained by the secondary protocols 4702 a-4702 n, the session can be re-established after the network connection is re-established without the user on theclient machine 10 having notification that the session was interrupted. The secondary protocol 4702 a-4702 n does not need to contain any interruption related information to transmit to theclient machine 10. Thus, the interruption of the session caused by the network connection disruption is effectively hidden from the user because of the encapsulation of thefirst protocol 4704. - The
first protocol service 4502 maintaining session related information can re-establish the session between theclient machine 10 and theremote machines 30. For example, if the first connection between theclient machine 10 and thefirst protocol service 4516 is disrupted, thefirst protocol service 4502 can keep theclient machine 10's session active or open between thefirst protocol service 4502 and theremote machine 30. After the first connection is re-established, thefirst protocol service 4502 can link the session of theclient machine 10 to the maintained session between thefirst protocol service 4502 and thehost service 4516. Thefirst protocol service 4502 can send to theclient machine 10 any data that was queued prior to the disruption in the first connection. As such, theclient machine 10 will be using the same session prior to the disruption, and theremote machine 30 andclient machine 10 can continue to use any session specific context that may have in memory or stored elsewhere. Furthermore, because of the intermediary of thefirst protocol service 4502, theremote machine 30 may not be aware of the network disruption between thefirst protocol service 4502 and theclient machine 10. - In another example, if the second connection between the
first protocol service 4502 and theremote machine 30 is disrupted, the first protocol service can maintain the first connection with theclient machine 10 while re-establishing the second connection with theremote machine 30. After re-establishing the second connection, thefirst protocol service 4502 can re-establish the client's session, on behalf of the client, with theremote machine 30. Since thefirst protocol service 4502 was maintaining any session relation information, the first protocol service may re-establish the same session or a similar session so that theclient machine 10 is not aware of the disruption in the second network connection and the resulting disruption to the session between thefirst protocol service 4502 and theremote machine 30. During re-establishing the second network connection and the session, thefirst protocol service 4502 can queue any session transactions sent by theclient machine 10 during the disruption. Then, after re-establishing the session with theremote machine 30, thefirst protocol service 4502 can transmit the queued transactions to theremote machine 30 and the session can continue normally. In this manner, theclient machine 10 continues to operate as if there was not an interruption to the session. - Additionally, by providing a reliable and persistent connection, some embodiments also avoid interruptions to transactions, commands or operations as part of the functionality exercised between the
client machine 10 and aremote machine 30, or aremote machine 30. For example, a file copy operation using Windows Explorer has not been designed to continue working after there is a disruption in a network connection. A user on theclient machine 10 may use the file copy feature of Windows Explorer to copy a file from theclient machine 10 to aremote machine 30. Because of the size of the file or files, this operation may take a relatively extended period of time to complete. If during the middle of the operation of the copy of the file to theremote machine 30, there is an interruption in the network connection between theclient machine 10 and theremote machine 30, the file copy will fail. Once the network connection is re-established, the user will need to start another file copy operation from Windows Explorer to copy the file from theclient machine 10 to theremote machine 30. Under some embodiments of the methods described above, the user would not need to start another file copy operation. The network connection would be re-established as part of thefirst protocol 4704 connection. The file copy operations would be encapsulated in the payload of the secondary protocols 4702 a-4702 n. As such, the file copy of Windows Explorer would not get notified of the interruption in the network connection and therefore, would not fail. Thefirst protocol service 4502 would re-establish any connections and transmits any queued data so that operation can continue without failure. Thefirst protocol service 4502 would maintain a queue of the data related to the file copy operations that has not been transferred to theremote machine 30 because of the interruption in the network connection. Once the network connection is re-established, thefirst protocol service 4502 can transmit the queued data and then continue on with transferring the data related to the file copy operation in due course. - Although these embodiments are described in terms of a file copy operation example, one ordinarily skilled in the art will recognize that any operation, transaction, command, function call, etc. transacted between the
client machine 10 and theremote machine 30, orremote machines 30, can be maintained and continued without failure from the network connection disruption, and, furthermore, without theclient machine 10 recognizing there was a disruption or having notice of the disruption. - Furthermore, by providing a reliable and persistent connection, a
client machine 10 is able to traverse through different network topologies without re-starting a session or an application on theclient machine 10. For example, theclient machine 10 may be a computer notebook with a wireless network connection. As theclient machine 10 moves from a first wireless network to a second wireless network, the client'snetwork connection 4504 may be temporarily disrupted from the first wireless network as a network connection is established with the second wireless network. The second wireless network may assign a new network identifier, such as a host name or internet protocol address, to theclient machine 10. This new network identifier may be different than the network identifier assigned to theclient machine 10 by the first wireless network. In another example, theclient machine 10 may be physically connected through an Ethernet cable to a port on the network. The physical connection may be unplugged and theclient machine 10 moved to another location to plug into a different port on the network. This would cause a disruption into thenetwork connection 102 and possible a change in the assigned network identifier. By the method and systems described herein, the network connection is maintained for the client and automatically re-established the network connection of theclient machine 10, including handling changes in the network topology and network identifier. Theclient machine 10, and any applications or sessions on theclient machine 10, can continue to operate as if there was not a network connection disruption or a change in the network identifier. Furthermore, the user on theclient machine 10 may not recognize there were any interruptions or changes, and theclient machine 10 may not receive any notice of such interruptions. - Even with a reliable and persistent communication session as described above, network connections are still disrupted. When re-establishing the client's connection to the host service, the
client machine 10 also needs to be re-authenticated to theremote machine 30. In one embodiment, systems and methods authenticate aclient machine 10 to ahost service 4516 and re-authenticate theclient machine 10 to theremote machine 30 without re-entering authentication credentials. - In another embodiment, securely establishing a communication session between the
client machine 10 and thehost service 4516 is enabled via multiple connections or “hops” that traverse multiple network components, such as a proxy, security gateway, firewall or router. The establishment of the multiple hop secure communication session may further be initiated via a secure client-web server communication channel, for example, between theweb browser 6302 and a firstremote machine 30 using SSL. Theticket authority 6102 can provide tickets for each of the hops such as the client-firstprotocol service connection 4504 and the first protocol service to hostservice connections 4508 a-4508 n. In this manner, theclient machine 10 is authenticated through all the connections between theclient machine 10 and thehost service 4516 a-45116 n. - In some embodiments, a first
remote machine 30, functioning as a web server, receives a request from theclient machine 10 for an application and the firstremote machine 30 validates the request with theticket authority 6102. Theticket authority 6102 then generates an N part ticket (e.g., T1 to TN). In one embodiment, theticket authority 6102 then transmits a portion Ti of the N part ticket (e.g., the first part of the ticket, or first ticket T1) to the firstremote machine 30. The firstremote machine 30 then transmits the ticket T1 to theclient machine 10. In one embodiment, theticket authority 6102 also transmits the address of the next “hop” (e.g., thefirst protocol service 4502 to the firstremote machine 30, which then transmits the address to theclient machine 10. This address is the address of the next hop (e.g., first protocol service 4502) that this hop (e.g., client machine 10) needs to communicate with for theclient machine 10 to eventually be authenticated to theremote machine 30. - The
client machine 10 uses the address to then contact the next “hop” (e.g., first protocol service 4502) and initiates a communication session with thefirst protocol service 4502 a by transmitting a proxy connection request over the client-first protocolservice communication channel 4504. Thefirst protocol service 4502 a then extracts the first ticket T1 from the proxy connection request and forwards this ticket to theticket authority 6102 for validation. Theticket authority 6102 then validates the first ticket T1. - Upon proper verification of the first ticket T1, the
ticket authority 6102 transmits the next ticket Ti from the N part ticket (e.g., T2) to the next first protocol service 4502 (e.g.,first protocol service 4502 a). In some embodiments, theticket authority 6102 also transmits the address of the next hop (e.g., the secondfirst protocol service 4502 b) to this hop (e.g., thefirst protocol service 4502 a). Thefirst protocol service 4502 a transmits this ticket to the next hop (e.g., the secondfirst protocol service 4502 b). In one embodiment, the secondfirst protocol service 4502 b verifies T2 by transmitting the ticket to theticket authority 6102. Theticket authority 6102 validates the second ticket T2 and the process continues. Once the last part of the N part ticket has been validated the application is launched on theclient machine 10. - In one embodiment, each first protocol service 4502 (i.e., each hop) validates Ti (e.g., T2) with a
ticket authority 6102 associated with the first protocol service 4502 (i.e., hop). In this embodiment, after eachfirst protocol service 4502 validates the ticket Ti (e.g., T2) with aticket authority 6102, theticket authority 6102 at which the validation took place transmits the next ticket Ti+1 (e.g., T3) and the address of the next first protocol service 4502 (i.e., the next “hop” destination) to thefirst protocol service 4502 that had validated the ticket Ti. Thus, eachfirst protocol service 4502 is associated with aticket authority 6102 that has been configured with the current and next hop tickets (i.e., validating Ti and transmitting Ti+1 for the next hop). Consequently, the nextfirst protocol service 4502 acts as the client for that hop. This process is repeated until reaching theremote machine 30. Thus, each hop has been validated individually without revealing all of the ticket to any one hop. - In other embodiments, the
ticket authority 6102 may issue more than one ticket rather than issuing one ticket having many parts. For example, theticket authority 6102 generates a first hop ticket and a second hop ticket, where the first hop ticket has no association with the second hop ticket. Theticket authority 6102 subsequently transmits the first hop ticket to the firstremote machine 30 and the firstremote machine 30 transmits the first hop ticket to theclient machine 10. Theclient machine 10 transmits this first hop ticket to the first protocol service 4502 (e.g.,first protocol service 4502 a) for validation by theticket authority 6102. Upon validation, theticket authority 6102 transmits the second hop ticket to the next first protocol service 4502 (e.g., secondfirst protocol service 4502 b) while the first hop ticket is independent from the second hop ticket. - In a further embodiment, one or more of the
ticket authorities 6102 provides proxies, either as part of thefirst protocol service 4502 or separated from thefirst protocol service 4502, with any necessary information needed to connect to the next hop, such as, but without limitation, encryption keys, SSL method configuration information, and authentication information to connect to a SOCKS server (e.g., SOCKS5 server, developed by NEC Corporation of Tokyo, Japan). - In yet another embodiment, a
ticket authority 6102 only generates a single ticket. Theticket authority 6102 transmits the single ticket to the firstremote machine 30. The firstremote machine 30 forwards the single ticket to theclient machine 10. Thefirst protocol service 4502 subsequently receives the ticket from theclient machine 10 and “consumes” the single ticket upon validation. As a result, a single ticket can provide the ability to use arbitrary communication protocols over the client-proxy communication channel 4504 and the client-web server communication channel. Additionally, because theremote machine 30 does not receive or verify the single ticket, the ticket is transparent to theremote machine 30 and, consequently, theremote machine 30 is not “aware” of the use of the ticket. - By exploiting the security of the secure communications between the
client machine 10 and the firstremote machine 30 over the secure client-web server communication channel, the system establishes a secure communication link over the non-secure client-proxy communication channel 4504 to remotely display desktop applications securely on theclient machine 10. - In yet another embodiment, the
ticket authority 6102 transmits a disabled version of the first protocol service ticket with the client ticket to the firstremote machine 30 for transmission to theclient machine 10. Theclient machine 10 subsequently transmits the first protocol service ticket along with the client ticket to thefirst protocol service 4502 as part of the proxy connection request. Thefirst protocol service 4502 then forwards both tickets to theticket authority 6102. Upon receiving a disabled first protocol service ticket, theticket authority 6102 enables the first protocol service ticket after validating the client ticket. Theticket authority 6102 then transmits the enabled first protocol service ticket to thefirst protocol service 4502 for authentication to thehost node 118. - Alternatively, in another embodiment the first
remote machine 30 receives a disabled first protocol service ticket and an enabled client ticket from theticket authority 6102 and only transmits the client ticket to theclient machine 10. Theclient machine 10 transmits the client ticket to thefirst protocol service 4502 as part of the proxy connection request. Thefirst protocol service 4502 then forwards the client ticket to theticket authority 6102. Theticket authority 6102 validates the client ticket and, upon validation, enables the first protocol service ticket previously transmitted to the firstremote machine 30. In yet another embodiment, theticket authority 6102 transmits an enabled first protocol service ticket to the firstremote machine 30 upon validation of the client ticket for authentication to theremote machine 30. - Thus, at any given time, the
ticket authority 6102 provides only one ticket that is enabled to theclient machine 10 orfirst protocol service 4502 that theticket authority 6102 can validate. Theticket authority 6102 may provide another ticket that can't be validated (i.e., a disabled ticket) until the enabled ticket is validated. Alternatively, theticket authority 6102 may not transmit the first protocol service ticket to thefirst protocol service 4502 until theticket authority 6102 validates the enabled ticket. As discussed in further detail below, this enforces network routing of communications using embodiments of this system because theclient machine 10 cannot traverse the firstremote machine 30 or thefirst protocol service 4502 without having theticket authority 6102 validate the enabled ticket and transmit the ticket needed to communicate with theremote machine 30. - In another embodiment, instead of transmitting the first protocol service ticket to the
first protocol service 4502, theticket authority 6102 transmits the first protocol service ticket to the firstremote machine 30 directly over a web server-authority communication channel. The firstremote machine 30 then automatically transmits the first protocol service ticket to theremote machine 30. In other words, the firstremote machine 30 “pushes” the first protocol service ticket to theremote machine 30. Theticket authority 6102 can also push the first protocol service ticket to theremote machine 30 without transmission of the first protocol service ticket to thefirst protocol service 4502 or the firstremote machine 30. - In yet another embodiment, the
remote machine 30 retrieves the first protocol service ticket from theticket authority 6102 over the ticket-content server communication channel 157. In other words, theremote machine 30 “pulls” the first protocol service ticket from theticket authority 6102. - Moreover, the system enforces the routing of the
client machine 10 through thefirst protocol service 4502. As stated above, theclient machine 10 has to possess the first protocol service ticket to establish a communication session with theremote machine 30. More specifically, to establish a connection with theremote machine 30, the firstremote machine 30 first has to validate the request of theclient machine 10 with theticket authority 6102. Once validated, theclient machine 10 obtains the first ticket and transmits this first ticket to theticket authority 6102 for validation. However, upon validation, theticket authority 6102 transmits the first protocol service ticket back to thefirst protocol service 4502 rather than theclient machine 10. The communication session between theclient machine 10 and thehost service 4516 is established when thehost service 4516 receives the first protocol service ticket. Thus, theclient machine 10 has to communicate with thefirst protocol service 4502 in order to have the first protocol service ticket transmitted to thehost service 4516, thereby enforcing the routing of theclient machine 10 through thefirst protocol service 4502. Thus, the invention can ensure the proper traversal of a security device (e.g., the first protocol service 4502) before granting access to theremote machine 30. - For example, a
remote machine 30 executes several applications, such as MICROSOFT WORD and MICROSOFT EXCEL, both developed by Microsoft Corporation of Redmond, Wash. In one embodiment, theclient machine 10 uses NFUSE, developed by Citrix Systems, Inc. of Fort Lauderdale, Fla., to obtain information from themachine farm 38 in which applications can be accessed by theclient machine 10. If a client user wants to access and use MICROSOFT WORD, theclient machine 10 requests the application from the firstremote machine 30. However, only users who pay an application fee for MICROSOFT WORD can become authorized to access the application. - To ensure the payment of the application fee, the system includes the
first protocol service 4502 and theticket authority 6102 to enforce the routing of theclient machine 10 through thefirst protocol service 4502. The routing of theclient machine 10 through thefirst protocol service 4502 is valuable to the application provider if thefirst protocol service 4502 is used to collect the application fee and authorize the user for access to the application. - The
ticket authority 6102 subsequently generates a ticket associated with the request for the application. An enabled first ticket is then transmitted to theclient machine 10. Because theclient machine 10 does not have the address of thehost node 118, theclient machine 10 cannot access the application. Further, theclient machine 10 has not been authorized by thefirst protocol service 4502 yet (i.e., has not yet paid). Thus, theclient machine 10 has to communicate with thefirst protocol service 4502 to become authorized. Thefirst protocol service 4502 can then transmit the enabled first ticket to theticket authority 6102 upon payment of the application fee. - The ticket authority then validates the client ticket and subsequently transmits (or enables) a first protocol service ticket to the proxy. The
first protocol service 4502 then transmits the first protocol service ticket to the remote machine 30 (e.g., assuming the client user has paid the application fee), which enables theremote machine 30 to transmit the application to theclient machine 10. -
FIG. 50 depicts one embodiment of asystem 5000 that is capable of reconnecting theclient machine 10 to ahost service 4516 using an automatic client reconnect service referred to as auto client reconnect service orACR Service 5002. In brief overview, aclient machine 10 communicates with aremote machine 30, also referred to as a server, over acommunication channel 5004. Thecommunication channel 5004 may include anetwork 150. For example, thecommunication channel 5004 can be over a local-area network (LAN), such as a company Intranet, or a wide area network (WAN) such as the Internet or the World Wide Web. Theremote machine 30 provides auto client reconnect services through anACR Service 5002. Theclient machine 10 accesses theremote machine 30 through thecommunication channel 5004. TheACR Service 5002 of theremote machine 30 provides authentication services to authenticate theclient machine 10 to theremote machine 30. When there is a disruption in a network connection, theACR Service 5002 further provides re-authentication services to re-authenticate theclient machine 10 to theremote machine 30. Although described with asingle client machine 10 and onecommunication channel 5004, any number of clients (e.g. 10, 10′) and number of communication channels (e.g. 5004, 5004′) can be part of thesystem 4500. - The
ACR Service 5002 running on theremote machine 30 includes akey generator 5006, a session identifier (SID)generator 5008, anencryptor 5010, akey destroyer 5012, and adecryptor 5014. Thekey generator 5006 generates a key when theremote machine 30 or theACR Service 5002 receives authentication credentials from theclient machine 10. In one embodiment, thekey generator 5006 derives the key from a characteristic of theremote machine 30. Particular examples include thekey generator 5006 deriving the key from the temperature of the processor 5016, the time thatremote machine 30 received the authentication credentials, and the number of keys stored inmemory 5018. In a further embodiment, the key and the authentication credentials are the same size (e.g. eight bits). In one embodiment, the key generator is a software module. In another embodiment, thekey generator 5006 is a random number generator. - The
SID generator 5008 generates the unique SID to enable theremote machine 30 to identify a particular communication session. In one embodiment, theSID generator 5008 is a software module. In another embodiment, theSID generator 5008 is a random number generator. In another embodiment, the SID generator transmits the SID to thehost service 4516. In one embodiment, theSID generator 5008 obtains the SID from ahost service 4516 running on the server. In yet another embodiment, the SID generator generates the SID by receiving a session identifier from the host service116 establishing a user session. - The
encryptor 5010 encrypts the key with the authentication credentials to create encrypted authentication credentials. In one embodiment, theencryptor 5010 encrypts the key with the authentication credentials by performing an exclusive OR operation (i.e. XOR) on the key and the authentication credentials. In another embodiment, theencryptor 5010 adds the authentication credentials to the key to encrypt the authentication credentials; that is, theencryptor 5010 performs a “Caesar Cipher” on the authentication credentials using the key as the shift value. In another embodiment, theencryptor 5010 performs a hash function, such as MD4, MD5, or SHA-1, on the authentication credentials. It should be clear that theencryptor 5010 can perform any type of manipulation on the authentication credentials as long as theACR Service 5002 can decrypt the encrypted authentication credentials with the key. - In one embodiment, the
encryptor 5010 is a software module that executes mathematical algorithms on the key and the authentication credentials to create the encrypted authentication credentials. In another embodiment, theencryptor 5010 is a logic gate of theremote machine 30, such as an exclusive OR (XOR) gate. - In one embodiment, the
encryptor 5010 stores the encrypted authentication credentials with the SID in a table 5020 inmemory 5018. In another embodiment, theencryptor 5010 stores the encrypted authentication credentials in the table 5020 and theSID generator 5008 stores the SID in the table 5020. In one embodiment, the table 5020 is an area inmemory 5018 allocated by the processor 5016 for us by theencryptor 5010. In another embodiment, theencryptor 5010 stores the encrypted authentication credentials with the SID in a database (not shown inFIG. 50 ) separate frommemory 5018. - In one embodiment, the
ACR Service 5002 uses the SID as a vector to the location of the encrypted authentication credentials in the table 5020. In another embodiment, theACR Service 5002 uses the SID as a database key to locate and retrieve the encrypted authentication credentials in a database (not shown inFIG. 50 ). Each encrypted authentication credential created by theencryptor 5010 is associated with only one unique SID. Thus, theACR Service 5002 can locate and retrieve the encrypted authentication credentials by using a particular SID. - The
key destroyer 5012 deletes the key once theACR Service 5002 determines that the key is no longer needed. In one embodiment, thekey destroyer 5012 is a delete function of a software program such as the operating system of theremote machine 30. - The
decryptor 5014 decrypts the encrypted authentication credentials once theACR Service 5002 receives the key and the SID from theclient machine 10. In one embodiment, thedecryptor 5014 is a software module that performs the inverse function or algorithm that theencryptor 5010 performed to create the encrypted credentials. In another embodiment, thedecryptor 5014 is a hardware component (e.g. a logic gate) to perform the inverse operation of theencryptor 5010. - In one embodiment, one or more of the
key generator 5006, theSID generator 5008, theencryptor 5010, thekey destroyer 5012 and thedecryptor 5014 are joined into one software module representing theACR Service 5002. In another embodiment, these components can be hardware components such as logic gates. In a further embodiment, these components are included in a single integrated circuit. In yet another embodiment, some of the components, for example thekey generator 5006 and theSID generator 5008, can be hardware components, and other components, for example theencryptor 5010, thekey destroyer 5012 and thedecryptor 5014, can be software components. - In another embodiment, methods for reconnecting a
client machine 10 to aremote machine 30 when there is a disruption in the client's connection to the network are provided. The methods include re-establishing the client's connection to theremote machine 30 and using theACR Service 5002 to re-authenticate the client to the host service. - Referring to
FIG. 51 , theclient machine 10 establishes a first communication session with theremote machine 30 over thecommunication channel 5004. Theclient machine 10 obtains (step 54100) authentication credentials from a user of theclient machine 10. In asystem 4500 not using an Open System Interconnection (OSI) protocol as the transmission protocol for communications between theclient machine 10 and theremote machine 30, the authentication credentials may be a login password that is needed to establish the first communication session. In this embodiment, the obtaining of the authentication credentials from the user precedes the establishment of the communication session. In another embodiment, the authentication credential is personal information of the user that theclient machine 10 obtains after the first communication session has been established. Examples of authentication credentials include a login password, a social security number, a telephone number, an address, biometric information, a time-varying pass code and a digital certification. Theclient machine 10 then transmits (step 5405) the authentication credentials to theremote machine 30 over thecommunication channel 5004 so that theremote machine 30 can authenticate theclient machine 10 or the user of theclient machine 10. - After the
remote machine 30 receives the authentication credentials, theACR Service 5002 provides its auto client reconnect services. Thekey generator 5006 creates (step 5410) a first encryption key for use with the authentication credentials. In one embodiment, the encryption key is a random number. In another embodiment, the encryption key is any standard cryptographic key. Theencryptor 5010 then encrypts (step 5415) the authentication credentials with the first key to generate encrypted authentication credentials. This prevents an attacker who gains access to theremote machine 30 from accessing the authentication credentials without the key. TheSID generator 5008 then creates (step 5120) a first SID to identify the first communication session between aclient machine 10 and theremote machine 30. In one embodiment, the first communication session is with ahost service 4516 hosted by theremote machine 30. Theencryptor 5010 then stores (step 5425) the encrypted authentication credentials with the first SID in the table 5020 described above. - In one embodiment, the
encryptor 5010 stores the encrypted authentication credentials with the first SID in a certain location for more efficient retrieval at a later time. For instance, theencryptor 5010 stores all encrypted authentication credentials and SIDs that have been created within a predetermined amount of time in RAM. TheACR service 5002 transfers all encrypted authentication credentials and SIDS created before a predetermined time to a second, external memory (not shown). In another embodiment, theencryptor 5010 stores the encrypted authentication credentials with the SID in a database (not shown). - The SID and the encrypted authentication credentials stored in the
memory 5018 can be arranged in any particular order and/or format. For example, the SID and encrypted authentication credentials can be stored in chronological order with respect to the creation time of the encrypted authentication credentials. - The
remote machine 30 then transmits (step 5430) the first key and associated first SID to theclient machine 10 over thenetwork 150. Theclient machine 10 stores (step 5435) the first key and the first SID in memory (not shown). Then thekey destroyer 5012 of theACR Service 5002 deletes (step 5440) the key stored inmemory 5018. - In another embodiment, the
ACR Service 5002 does not delete the first key frommemory 5018 until theACR Service 5002 has notification that theclient machine 10 has received the key. For example, theclient machine 10 transmits an acknowledgment message to theremote machine 30 after theclient machine 10 successfully received the key. Once theACR Service 5002 receives notification, thekey destroyer 5012 then deletes (step 5440) the key from thememory 5018. This prevents theACR Service 5002 from deleting the key before theclient machine 10 successfully received the key. By not deleting the key until the acknowledgment message, theACR Service 5002 can retransmit the key and the SID to theclient machine 10 upon a failure in the transmission. - By deleting the key in
step 5440, theACR Service 5002 does not have the mechanism needed to decrypt the encrypted authentication credentials stored in the table 5020. Thus, if an attacker accesses thememory 5018 of theremote machine 30, the attacker can retrieve the encrypted authentication credentials but cannot decrypt the encrypted authentication credentials. Therefore, the attacker cannot read the authentication credentials. In short, the encrypted authentication credentials stored on theremote machine 30 do not provide any information that the attacker can interpret or understand. As such, theremote machine 30 does not possess any information to decrypt the encrypted authentication credentials. - In addition, the
client machine 10 is the only device that can provide the key to the encrypted authentication credentials. With the possibility ofmany client machines 10 as part of thenetwork 150, an attacker may have to attempt to gain access to each client (e.g. 10, 10′) individually to find theclient machine 10 that possesses the correct key. This can be time consuming and tedious and, as a result, may deter an attacker from an attempt to decrypt the encrypted authentication credentials. - In another embodiment, the
remote machine 30 has a timeout feature with respect to accessing the encrypted authentication credentials. For instance, theremote machine 30 starts a timer after the first communication is abnormally terminated. If the timer reached a predetermined value before theclient machine 10 re-establishes the second communication session and transmits the key to theremote machine 30 for decryption, theACR Service 5002 deletes the encrypted authentication credentials from the table 5020. If no timer is used, the key acts as a de facto password for future sessions. - Once the
client machine 10 receives the first key and the first SID from theremote machine 30 as described above in reference toFIG. 51 , the session can be re-established, as shown inFIG. 52 , without requiring the user to reenter his or her authentication credentials. When a disruption or break occurs in the first communication session (step 54100) between theclient machine 10 and theremote machine 30, thefirst communication session 5004 needs to be re-established and theclient machine 10 re-authenticated to theremote machine 30. TheACR Service 5002 provides a system and method for re-establishing and re-authenticating theclient machine 10 to theremote machine 30. - When the
client machine 10 and theremote machine 30 re-establish a second communication session, theclient machine 10 transmits the first key and the first SID (step 5405) to theremote machine 30. TheACR Service 5002 uses the SID (step 5210) to locate and retrieve the encrypted authentication credentials in the server'smemory 5018 and uses the key (step 5215) to decrypt the retrieved authentication credentials. Theremote machine 30 then re-authenticates theclient machine 10 to the remote machine 30 (step 5220) by validating the authentication credentials from theclient machine 10. In one embodiment, the authentication and re-authentication is facilitated through the security services provided by the operating system of the computing device of theremote machine 30. For example, the authentication credentials are a login and password to theremote machine 30. In another embodiment, the authentication and re-authentication is facilitated through application level security services of an application or software program on theremote machine 30. For example, the authentication credentials are an application login and password to aspecific host service 4516. - To illustrate, upon an abnormal termination of a first communication session (step 54100) in which the user's login password was the authentication credential, the
client machine 10 attempts to establish a second communication session with theremote machine 30. As part of the request to theremote machine 30 to establish a second communication session with theremote machine 30, theclient machine 10 transmits the key and the SID (step 5405) of the first terminated communication session to theremote machine 30. Instead of prompting the user to enter the user's login password again, theremote machine 30, through theACR Service 5002, uses the SID (step 5210) to locate and retrieve the encrypted authentication credentials associated with the user, uses the key (step 5215) to decrypt the retrieved authentication credentials, and reauthenticates the client using the decrypted authentication information (step 5220). In one embodiment, during the second communication session, theACR Service 5002 creates (step 5225) a second key for the authentication credentials and then encrypts (step 5230) the authentication credentials using the second key. A second SID is created (step 5235) to identify the second communication session and associate the session with theclient machine 10. The second encrypted authentication credentials are stored (step 5425) with the second SID in the table 5020. - In this embodiment, the server then transmits (step 5240) the second key and the second SID to the
client machine 10. Theclient machine 10 then stores (step 5245) the second key and the second SID in memory (not shown) for future retrieval. TheACR Service 5002 then deletes (Step 54150) the second key from thememory 5018. Thus, theACR Service 5002 can only decrypt the second encrypted authentication upon obtaining the second key and the second SID from theclient machine 10. TheACR Service 5002 has created a new key and a new SID for the second communication session that is used with the same authentication credentials that the user had transmitted during the first communication session. Therefore, a user's authentication credentials do not have to be retransmitted upon a second communication channel after an abnormal termination of the first communication session. - Although the invention is discussed in terms of authentication credentials, any confidential information which can be maintained across sessions if there is a communication failure can be used. Thus if credit card information is required by an application and the credit card information is sent to the server, the subsequent disconnect between the client and the server does not require the credit card information to be reentered if this invention is issued. Further, although a session identifier, or SID, is discussed as providing a pointer to the stored authentication credentials, any number or value which is suitable as a pointer may be used.
-
FIG. 53 depicts another embodiment of asystem 5300 that is capable of reconnecting aclient machine 10 to aremote machine 30 using anACR Service 5002 executing on anintermediary machine 30′. Theintermediary machine 30′ is a computing device different from theremote machine 30 and can be anyremote machine 30 that is capable of communication and that has sufficient processor power and memory capacity to perform the operations described herein. In brief overview, theclient machine 10 is in communication with anintermediary machine 30′ over acommunication channel 5004. Thecommunication channel 5004 may include anetwork 150. Theintermediary machine 30′ provides auto client reconnect services, via anACR Service 5002, to theclient machine 10 for the connection of theclient machine 10 to theremote machine 30. Theintermediary machine 30′ is in communications with theremote machine 30 over acommunication channel 5004′. Thecommunication channel 5004′ may include anetwork 150′. Theclient machine 10 accesses the services of theremote machine 30 through theintermediary machine 30′. TheACR Service 5002 on theintermediary machine 30′ provides auto client reconnect services for the connection of theclient machine 10 to theremote machine 30. Although illustrated with asingle client machine 10 over acommunication channel 5004, any number of clients and number of communication channels can be part of thesystem 5300. - In a further embodiment (not shown), the
system 5300 includes multipleintermediary machines 30′ that are in communication with one ormore client machines 10 through anetwork 150 overadditional communication channels FIG. 53 with a singleintermediary machine 30′ over acommunication channel 5004, any number of intermediary nodes and number of communication channels can part of thesystem 5300. - In another embodiment, the invention relates to methods to facilitate establishing and authenticating a client machine's 10 connection to a
remote machine 30 using one or moreintermediary machines 30′. As shown inFIG. 54 , anintermediary machine 30′ establishes a session with theremote machine 30. - The
client machine 10 establishes a first communication session with theintermediary machine 30′ over thecommunication channel 5004. Theclient machine 10 obtains (step 5400) authentication credentials from a user of theclient machine 10. Theclient machine 10 then transmits (step 5405) the authentication credentials to theintermediary machine 30′ over thecommunication channel 5004 so that theintermediary machine 30′ can authenticate the user with theremote machine 30. - After the
intermediary machine 30′ receives the authentication credentials, theACR Service 5002 provides its auto client reconnect services. TheACR Service 5002 creates (step 5410) a first encryption key for use with the authentication credentials and then encrypts (step 5415) the authentication credentials with the first key to generate encrypted authentication credentials. This prevents an attacker who gains access to theremote machine 30 from accessing the authentication credentials without the key. Then a session is established with the remote machine 30 (step 5420A) and theclient machine 10 is authenticated to theremote machine 30 using the authentication credentials. Thereby, theACR Service 5002 creates a first SID to identify the first communication session. The encrypted authentication credentials are stored (step 5425) with the first SID in the table 5020 described above. Theintermediary machine 30′ then transmits (step 5430) the first key and the first SID to theclient machine 10 over thenetwork 150. Theclient machine 10 stores (step 5435) the first key and the first SID in the client machine's memory (not shown). TheACR Service 5002 then deletes (step 5440) the key stored inmemory 5018. - Once the
client machine 10 receives the first key and the first SID from theintermediary machine 30′ as described above in reference toFIG. 54 , the communication session can be re-established and re-authenticated, as shown inFIG. 55 , without requiring the user to reenter his or her authentication credentials. For example, there may be a disruption in the first communication session (step 5505) between theclient machine 10 and theintermediary machine 30′ from an abnormal termination. - When the
client machine 10 and theintermediary machine 30′ re-establish a second communication session, theclient machine 10 transmits the first key and the first SID (step 5505) to theintermediary machine 30′. TheACR Service 5002 of theintermediary machine 30′ uses the SID (step 5510) to locate and retrieve the encrypted authentication credentials in the server'smemory 5018 and uses the key (step 5515) to decrypt the retrieved authentication credentials. The key generator creates (step 5520) a second key for the authentication credentials and thekey encryptor 5010 then encrypts (step 5525) the authentication credentials using the second key. TheSID generator 5008 also creates (step 5530) a second SID to identify the second communication session and associates it with the maintained session between theintermediary machine 30′ and theremote machine 30. Theencryptor 5010 stores the second encrypted authentication credentials with the second SID in the table 5020. - In this embodiment, the
remote machine 30 then transmits (step 5535) the second key and the second SID to theclient machine 10. Theclient machine 10 then stores (step 5540) the second key and the second SID for future retrieval. Thekey destroyer 5012 then deletes (Step 5545) the second key from thememory 5018. Thus, theACR Service 5002 can only decrypt the second encrypted authentication upon obtaining the second key and the second SID from theclient machine 10. TheACR Service 5002 has created a new key and a new SID for the second communication session that is used with the same authentication credentials that the user had transmitted during the first communication session. Therefore, a user's authentication credentials do not have to be retransmitted upon a second communication channel after an abnormal termination of the first communication session. - In another embodiment, there may be a disruption or abnormal termination in the second communication session (step 5600) between the
intermediary machine 30′ and theremote machine 30. As described inFIG. 56 , the second communication session can be re-established and re-authenticated without requiring the user to reenter his or her authentication credentials. - When the
intermediary machine 30′ and theremote machine 30 re-establish a second communication session, theintermediary machine 30′ requests (step 5605) the first key and first SID from theclient machine 10 to re-establish a session with theremote machine 30 on the client's behalf. In response, theclient machine 10 transmits the first key and the first SID (step 5610) to theintermediary machine 30′. TheACR Service 5002 of theintermediary machine 30′ uses the SID (step 5615) to locate and retrieve the encrypted authentication credentials in the server'smemory 5018 and uses the key (step 5620) to decrypt the retrieved authentication credentials. The ACR Service 500 then re-establishes the client's session with the server (step 5625) using the decrypted authentication credentials to re-authenticate theclient machine 10 to theremote machine 30. - In another embodiment, after re-establishing and re-authenticating the client over the second communication session, the
ACR Service 5002 of theintermediary machine 30′ creates a replacement second SID and second key as previously described inFIG. 55 . In reference to the embodiment of the ACR Service illustrated inFIG. 50 , the key generator creates (step 5520) a second key for the authentication credentials and thekey encryptor 5010 then encrypts (step 5525) the authentication credentials using the second key. TheSID generator 5008 also creates (step 5530) a second SID to identify the second communication session and associates it with the re-established session between theintermediary machine 30′ and theremote machine 30. Theencryptor 5010 stores the second encrypted authentication credentials with the second SID in the table 5020. In this embodiment, the server then transmits (step 5535) the second key and the second SID to theclient machine 10. Theclient machine 10 then stores (step 5540) the second key and the second SID for future retrieval. Thekey destroyer 5012 then deletes (Step 5545) the second key from thememory 5018. - In other embodiments, one or more of the
first protocol service 4502 andACR Service 5002 can be distributed across any of the host service nodes. As such, the functionality of re-establishing and re-authenticating, or automatically reconnecting, aclient machine 10 connect to ahost service 4516 can be flexibly distributed in different system and deployment architectures acrosshost services 4516 and/orremote machines 30. - In one embodiment, an
ACR Service 5002 can be associated with each of thehost services 4516a-4516n insystem 4500 to provide auto client reconnect services dedicated to eachhost service 4516, respectively. A singlefirst protocol service 4502 can be deployed to handle all of thehost services 4516 a-4516 n. As shown inFIG. 57 , each of themultiple ACR Services 5002 a-5002 n is associated with each of thehost services 4516 a-4516 n, respectively. By way of example, aclient machine 10 establishes a communication session with thehost service 4516 a using thefirst protocol service 4502. TheACR Service 5002 a associated withhost service 4516 a provides auto client reconnect services for the connection of theclient machine 10 to thehost service 4516 a. If there is a disruption in a network connection, thefirst protocol service 4502 will re-establish the connection with theclient machine 10 and theACR Service 5002 a will re-authenticate theclient machine 10 to thehost service 4516 a. Asecond client machine 10′ may concurrently, with thefirst client machine 10, establish a communication session with thehost service 4516 b using thefirst protocol service 4502. TheACR Service 5002 b provides auto client reconnect services for the client's connection to thehost service 4516 b. If there is a network disruption, thefirst protocol service 4502 in conjunction with theACR Service 5002 b will reconnect theclient machine 10′ to thehost service 4516 b. - In another embodiment of these methods, an ACR service can be associated with each of the
multiple host services 4516 a-4516 n running on each of theremote machines 30 of thesystem 4500. Afirst protocol service 4502 can be deployed on eachremote machine 30 to service each of the multipleremote machines 30 running on thathost node 118. As shown inFIG. 57 , eachACR service 5002 a-5002 n is associated with eachhost service 4516 a-4516 n, respectively. Eachremote machine 30 has a dedicatedfirst protocol service 4502 servicing each of itshost services 4516 and eachACR Service 5002. For example, aclient machine 10 establishes a communication session withhost service 4516 a onremote machine 30 by using thefirst protocol service 4502. TheACR Service 5002 a onremote machine 30 provides auto client reconnect services for the connection of theclient machine 10 to thehost service 4516 a onremote machine 30. - If a network disruption is detected, the
first protocol service 4502 re-establishes the client's connection to thehost service 4516 a onremote machine 30 and theACR service 5002 a onremote machine 30 re-authenticates theclient machine 10 to thehost service 4516 a onremote machine 30. Concurrently with thefirst client machine 10, asecond client machine 10′ establishes a communication session withhost service 4516 b onremote machine 30 using thefirst protocol service 4502 andACR Service 5002 a. If there is a network disruption, thefirst protocol service 4502 in conjunction with theACR Service 5002 a reconnect theclient machine 10′ withhost service 4516 b onremote machine 30. Concurrently with thefirst client machine 10 and thesecond client machine 10′, athird client machine 10″establishes a communication session withhost service 4516 n onremote machine 30′ using thefirst protocol service 4502 andACR Service 5002 n onremote machine 30′. In a similar manner, thefirst protocol service 4502 andACR Service 5002 n can reconnect theclient machine 10″ to the host service 451 6 n ofremote machine 30′. - In other embodiments, one or more of the
ACR Services 5002 can be distributed with thefirst protocol services 4502 across any of the intermediary or first protocol services nodes. As such, the functionality of reconnecting aclient machine 10 to ahost service 4516 can be flexibly distributed in different system and deployment architectures associated with thefirst protocol service 4502. - In one embodiment of this aspect of the invention, the
ACR Service 5002 can be associated with eachfirst protocol service 4502 to provide auto client reconnect services dedicated to thefirst protocol service 4502. A singlefirst protocol service 4502 andACR Service 5002 can be deployed to handle all of thehost services 4516 a-4516 n. As shown inFIG. 59 , theACR Service 5002 resides with thefirst protocol service 4502 on the same computing device to provide auto client reconnect services tohost services 4516 a-4516 n. For example, aclient machine 10 establishes a communication session with any of thehost services 4516 a-4516 n by using thefirst protocol service 4502 andACR Service 5002. Thefirst protocol service 4502 andACR Service 5002 provide reconnecting functionality from aclient machine 10 to any of thehost services 4516 a-4516 n. - In another embodiment of this aspect of the invention, each of the
ACR Services 5002 a-5002 n can be associated with each of the multiple offirst protocol services 4516 a-4516 n. For example as shown inFIG. 60 , afirst protocol service 4502 and anACR Service 5002 a can be deployed on aremote machine 30 to service each of themultiple host services 4516 a-4516 n running on thatremote machine 30. As further shown inFIG. 60 , eachACR service 5002 a-405 n is associated with each first protocol service 4502-112 n to provide dedicated auto client reconnect services to themultiple host services 4516 a-4516 n of each remote machine 30-118 n. By way of example,client machine 10 establishes a communication session withhost service 4516 a onremote machine 30 by using thefirst protocol service 4502 andACR Service 5002 a on the sameremote machine 30. If there is a network disruption, thefirst protocol service 4502 in conjunction with theACR Service 5002 a reconnects theclient machine 10 to thehost service 4516 a on theremote machine 30. - Although the invention is discussed above in terms of various system and deployment architectures in
FIGS. 57-60 , any other system and/or deployment architecture that combines and/or distributes one or more of the first protocol service(s) 4502, ACR Service(s) 5002, and host service(s) 4516 across any of theremote machines 30,intermediary machines 30′ or other computing devices can be used. - Furthermore, instead of using an
ACR Service 5002 to provide authentication and re-authentication services, aticket authority 6102 service can be used. Aticket authority 6102 generates and validates tickets for connection and authentication purposes. A ticket can comprise a session identifier and key. It can also comprise a random number, an application server certificate, a nonce, a constant or null value or any other type of identification, confidential or security based information that may be used for such purposes. - In an embodiment of a network communication system for reconnecting a
client machine 10 to ahost service 4516 as shown inFIG. 61 , aticket authority 6102 can run on a node separate from theintermediary machine 30,first protocol service 4502 or any of thehost services 4516 a-4516 n.FIG. 61 depicts anintermediary machine 30 andticket authority 6102, which could be a single computing device, as part of thesystem 4500. In addition to thenetworks system 4500 includes aclient machine 10,first protocol service 4502, and thehost services 4516 a-4516 n, all of which are described above. In one embodiment, theintermediary machine 30 is a security gateway, such as, for example, a firewall and/or a router, through which messages between theclient machine 10 and thefirst protocol service 4502 must pass due to the configuration of thenetwork 150. Theticket authority 6102 can be, for example, a stand-alone network component that is capable of communication and that has sufficient processor power and memory capacity to perform the operations described herein. Theticket authority 6102 also can be aspecific host service 4516 dedicated to providing ticket related services on aremote machine 30. - As shown in an embodiment of
FIG. 61 , theintermediary machine 30 is configured to accept aconnection 4504 a initiated by theclient machine 10 and to establish asecond connection 4504 b with thefirst protocol service 4502. Together, theconnection 4504 a and thesecond connection 4504 b constitute theconnection 4504, described above, over which theclient machine 10 and thefirst protocol service 4502 communicate using the first protocol. - The
intermediary machine 30, as shown, is also configured to communicate with theticket authority 6102. In one embodiment, theticket authority 6102 is configured to receive a request for a first reconnection ticket from theintermediate node 30′ and to thereafter generate the first reconnection ticket. The first reconnection ticket can include, for example, a large random number. The first reconnection ticket allows theclient machine 10 to automatically re-establish a connection with the host service after an abnormal disruption of service without requiring theclient machine 10 to provide authentication credentials again. - In another embodiment, the
ticket authority 6102 is configured to receive a request for a first re-connection ticket for each of the “hops” between theclient machine 10 andhost service 4516. For example, theintermediary machine 30 may request re-connection tickets for the connection between theclient machine 10 and theintermediary machine 30, between theintermediary machine 30 and thefirst protocol service 4502, and between thefirst protocol service 4502 and thehost service 4516. These re-connection tickets may only be valid for each of the “hops”. For example, a first re-connection ticket for thefirst protocol service 4502 tohost service 4516 connection is valid only for authenticating thefirst protocol service 4502 to thehost service 4516 on behalf of theclient machine 10. - After generation of the first reconnection ticket, the
ticket authority 6102 encrypts the authentication credentials supplied by theclient machine 10 using the first reconnection ticket so that an attacker who gains access to theintermediary machine 30 or theticket authority 6102 cannot access the authentication credentials without the first reconnection ticket. Theticket authority 6102 may also generate a SID to identify the communication session that is established between theclient machine 10 and theintermediary machine 30. Theticket authority 6102 then stores the encrypted authentication credentials with the SID in memory and transmits the SID and the first reconnection ticket to theclient machine 10 over thenetwork 150. Upon the client's receipt of the SID and the first reconnection ticket, theticket authority 6102 destroys (i.e., deletes) the ticket from its memory (not shown). - In another embodiment, the
ticket authority 6102 is configured to generate a handle. The handle can be, for example, a random number that is associated with (e.g., mapped to) the first reconnection ticket. In one embodiment, the handle is a smaller random number than the random number forming the first reconnection ticket. For example, the handle may be a 32-bit random number. In a further embodiment, the handle associated with a ticket or a re-connection ticket is an address of or pointer to the next “hop” in the multiple-hop connection between theclient machine 10 and thehost service 4516. In this case, a ticket or re-connection ticket is validated for a single “hop” with a pointer to the next “hop”. The next “hop” will need to obtain and validate a different ticket or re-connection ticket and so forth until the last “hop” is validated and connected to thehost service 4516 on behalf of theclient machine 10. - The
ticket authority 6102 transmits the first reconnection ticket and the handle to theintermediary machine 30, while keeping a copy of the first reconnection ticket and a copy of the handle. The copy of the first reconnection ticket can later be used by theticket authority 6102 to validate the first reconnection ticket originally transmitted to theclient machine 10 when it is later presented to theticket authority 6102 during the process of reconnecting theclient machine 10. In one embodiment, theticket authority 6102 also keeps an address for thefirst protocol service 4502, which, as explained below, is associated with the first reconnection ticket and, upon validation of the first reconnection ticket, is transmitted to theintermediary machine 30. - In one embodiment, the
intermediary machine 30 is further configured to use the handle transmitted to it by theticket authority 6102 to delete the copy of the first reconnection ticket kept at theticket authority 6102. In another embodiment, as described below, theticket authority 6102 is further configured to delete, during the process of reconnecting theclient machine 10 to ahost service 4516, the first reconnection ticket and thereafter generate a replacement first reconnection ticket. Additionally, in another embodiment, the first reconnection ticket is configured for automatic deletion after a pre-determined period of time. In the embodiment of re-connection tickets for each of the “hops” between the client and thehost service 4516, one, some or all of the re-connection tickets may be configured for automatic deletion after a pre-determined period of time. In other embodiments, theticket authority 6102 or theintermediary machine 30 is configured to delete each of the multiple-hop tickets and generate replacement tickets. - In another embodiment, the
first protocol service 4502 is configured to generate a second reconnection ticket, which, as in the case of the first reconnection ticket, can include, for example, a large random number. In one embodiment, thefirst protocol service 4502 generates second re-connection tickets for each of the “hops” between theclient machine 10 and thehost service 4516. Thefirst protocol service 4502 can also be configured to transmit the second reconnection ticket to theclient machine 10, while keeping a copy of the second reconnection ticket and a session number. The copy of the second reconnection ticket can later be used by thefirst protocol service 4502 to validate the second reconnection ticket originally transmitted to theclient machine 10 when it is later presented to thefirst protocol service 4502 during the process of reconnecting theclient machine 10. In one embodiment, thefirst protocol service 4502 transmits the second reconnection ticket to theclient machine 10 via theintermediary machine 30. In another embodiment, thefirst protocol service 4502 transmits the second reconnection ticket to theclient machine 10 directly. In a further embodiment, thefirst protocol service 4502 may transmit second re-connection tickets to otherfirst protocol services 4502 orintermediary machines 30 that may comprise the multiple-hop connection between theclient machine 10 and thehost service 4516. - Moreover, as described in greater detail below, the
first protocol service 4502 can be further configured to delete, during the process of reconnecting theclient machine 10 to ahost service 4516, the second reconnection ticket, and thereafter generate a replacement second reconnection ticket. Additionally, in another embodiment, the second reconnection ticket is configured for automatic deletion after a pre-determined period of time. In further embodiments, afirst protocol service 4502 of one or morefirst protocol services 4502 in a multiple-hop connection is configured to delete the second re-connection tickets for each of the “hops”, and thereafter generate replacement second re-connection tickets for one, some or all of the “hops.” - In one embodiment, the
intermediary machine 30 serves as an intermediary for the first and second reconnection tickets. Theintermediary machine 30 receives, for example, the first reconnection ticket generated by theticket authority 6102 and the second reconnection ticket generated by thefirst protocol service 4502. Theintermediary machine 30 can then transmit the first reconnection ticket and the second reconnection ticket to theclient machine 10. Moreover, during the process of reconnecting theclient machine 10 to ahost service 4516, theintermediary machine 30 can accept the first reconnection ticket and the second reconnection ticket from theclient machine 10 and thereafter transmit the first reconnection ticket to theticket authority 6102 and, if appropriate, the second reconnection ticket to thefirst protocol service 4502. - In another embodiment, the intermediary node 632 serves as an intermediary for the re-connection tickets for the multiple-hops between the
client machine 10 and thehost service 4516. Theintermediary machine 30 receives, for example, the first re-connection ticket for theclient machine 10 tofirst protocol service 4502 connection and the first re-connection ticket for thefirst protocol service 4502 to thehost service 4516. In a further embodiment, theintermediary machine 30 receives a first re-connection ticket for the connection between theintermediary machine 30 and thefirst protocol service 4502. Theintermediary machine 30 can then transmit the first re-connection ticket for the client to theclient machine 10 and the first re-connection ticket for thefirst protocol service 4502 to thefirst protocol service 4502. Moreover, during the process of re-connecting theclient machine 10 to ahost service 4516, theintermediary machine 30 can accept the first re-connection ticket from theclient machine 10 to validate the ticket to re-establish the client's connection to theintermediary machine 30 or thefirst protocol service 4502. - If the first communication session between the
client machine 10 and thehost service 4516 terminates, for example abnormally, the new session can be re-established without requiring the user to reenter his or her authentication credentials. When theclient machine 10 and thehost service 4516 re-establish a second communication session, theclient machine 10 retransmits the first and second reconnection tickets and the SID to theintermediary machine 30. Theintermediary machine 30 transmits the first and second reconnection tickets and the SID to theticket authority 6102, which uses the SID to locate and retrieve the encrypted authentication credentials for the first connection and uses the first reconnection ticket to decrypt the retrieved authentication credentials. Theticket authority 6102 then authenticates the client by validating the decrypted authentication credentials. After re-authentication, the second reconnection ticket is forwarded to thefirst protocol service 4502 to re-establish thesecond connection 4508 with thehost service 4516. - In another embodiment of a
network communications system 6100 as shown inFIG. 62 and 63 , theclient machine 10 uses theweb browser 6302 to request access to a resource and a firstremote machine 30 authenticates the user. After receiving the request, the firstremote machine 30 validates the request with the ticket authority 136. Theticket authority 6102 then generates a ticket, which includes a first ticket, or client ticket, and a second ticket, or first protocol service ticket. The first and second tickets are “one-time use” tickets having no further value after their first use. In still another embodiment, the first and second tickets must be used within a predetermined time period. - In one embodiment, the
ticket authority 6102 stores the first and second tickets in memory (e.g., RAM) until the ticket is used. Alternatively, theticket authority 6102 stores the first and second tickets in a storage device (not shown) until the ticket is used. The storage device may include, for example, a database or a persistent memory (e.g., on a floppy disk or hard disk drive). Theticket authority 6102 subsequently transmits the client ticket to the firstremote machine 30 and the firstremote machine 30 then forwards the client ticket to theclient machine 10. - The
client machine 10 then initiates a communication session with thefirst protocol service 4502 by transmitting a proxy connection request over the client-first protocolservice communication channel 4504. The proxy connection request includes the client ticket. In one embodiment, the proxy connection request also includes a dummy password that can be replaced by thefirst protocol service 4502 when establishing a communication session with aremote machine 30. In another embodiment, the firstremote machine 30 transmits the dummy password to theclient machine 10 for future generation of a proxy connection request having a format acceptable to thefirst protocol service 4502. Thefirst protocol service 4502 then extricates the client ticket from the proxy connection request and forwards the client ticket to theticket authority 6102 for validation. Theticket authority 6102 then validates the first ticket. In one embodiment, theticket authority 6102 verifies the first ticket by searching its storage device (e.g., database) for the first expected ticket. - If the
ticket authority 6102 does not find the first ticket in the storage device (such as if the first ticket has been used already), theticket authority 6102 ends the communication session. If the received ticket matches the client ticket that theticket authority 6102 expects, the client ticket is validated. Theticket authority 6102 then transmits the second or first protocol service ticket to thefirst protocol service 4502. Additionally, theticket authority 6102 deletes the client ticket from the storage device, as the client ticket has now been used once. In another embodiment, theticket authority 6102 also transmits the Internet protocol (IP) address of theremote machine 30 to thefirst protocol service 4502. In yet another embodiment, theticket authority 6102 transmits the domain name of theremote machine 30 to thefirst protocol service 4502 for future conversion into the IP address. - The
first protocol service 4502 receives the second ticket, or the first protocol service ticket, and subsequently opens communications across the proxy-server communication channel 145 by transmitting the second ticket to theremote machine 30. Theremote machine 30 receives the first protocol service ticket and then transmits the ticket over a ticket-server communication channel to theticket authority 6102 for validation. In one embodiment, if theticket authority 6102 determines that the first protocol service ticket received from theremote machine 30 has been used previously or does not have the correct value (i.e., the same value as the value stored in the associated storage device), theticket authority 6102 transmits an error message to the first protocol service 4502 (or the first remote machine 30) to terminate the established communication session with theclient machine 10. If theticket authority 6102 validates the first protocol service ticket, theremote machine 30 then launches the ICA published application. Theremote machine 30 then transmits application information to thefirst protocol service 4502 for remote displaying of the application on theclient machine 10 using theclient agent 4506. - In one embodiment, the
client machine 10 launches theclient agent 4506 when initiating communications with thefirst protocol service 4502. In other embodiments, theclient machine 10 launches theclient agent 4506 when theclient machine 10 receives the application information from thefirst protocol service 4502. - Thus, the
client machine 10 is not aware of the first protocol service ticket but only the client ticket. Moreover, theclient agent 4506 cannot access theremote machine 30 without communicating with thefirst protocol service 4502 and presenting the client ticket. - The
ticket authority 6102 could also transmit the first protocol service ticket to thefirst protocol service 4502 as the user password for the user of theclient machine 10. This allows thefirst protocol service 4502 to use the first protocol service ticket as the login password to gain access to theremote machine 30 without exposing the user's login password over the untrusted part of the web (i.e., the non-secure client-first protocol service communication channel 4504). Thus, in one embodiment, thecommunications system 6100 could include a centralized password mapping database managed by theticket authority 6102 and co-located with theremote machine 30 to map the first protocol service ticket with a user's password. - Therefore, the password can accompany both tickets (i.e., the first protocol service ticket and the client ticket) or the password can accompany one of the two tickets. As described above, if the password accompanies one of the two tickets, such as the client ticket, then the first protocol service ticket is the password. In one embodiment, the password can be a system password that does not change in value or may be a one-time use password, such as those generated by SecurID tokens developed by RSA Security Inc. of Bedford, Mass.
- Additionally, the methods described above can be expanded to a communications system having any number of
first protocol services 4502, or “hops” with which theclient machine 10 has to communicate before establishing a communication session with theremote machine 30. Although described in relation to afirst protocol service 4502, a hop can comprise any network component, such as a proxy, firewall, router, and relay. - For instance, a four-hop example is a communication system having a
first protocol service 4502 a, afirst protocol service 4502 b, and afirst protocol service 4502 n, each protocol service including a proxy and located within the demilitarizedzone 6308. Theprotocol services 4502 a-n may communicate with each other over a proxy-proxy communication channel. Theclient machine 10 communicates with thefirst protocol service 4502 a which communicates with the secondfirst protocol service 4502 b. In turn, the secondfirst protocol service 4502 b communicates with the thirdfirst protocol service 4502 n and then the thirdfirst protocol service 4502 n communicates with the remote machine over a proxy-server communication channel 4508 to establish the communication session with the remote machine. Furthermore, although the embodiment described above includes a ticket having a client ticket and a first protocol service ticket, another embodiment includes the ticket comprising numerous tickets. - In still another embodiment of a
network communications system 6100 as shown inFIG. 62 , anACR Service 5002 can be used instead of theticket authority 6102 for reconnecting theclient machine 10 to any of thehost services 4516 a-4516 n. In this embodiment, theACR Service 5002 can provide similar services as described above with regards to theticket authority 6102. As previously described, theACR Service 5002 generates, validates and manages a SID and a key for connecting and reconnecting a client communication session. A SID and a key can form a ticket as in the type of ticket generated, validated and managed by theticket authority 6102 as described above. As such, in another embodiment, a ticket may be used interchangeably for the combination of a session identifier and a key. - The
intermediary machine 30, as shown inFIG. 62 , is configured to communicate with theACR Service 5002. In one embodiment, theACR Service 5002 is configured to receive a request for a first SID and a first key from theintermediary machine 30 and to thereafter generate the first SID and first key. TheACR Service 5002 uses the first SID to identify the communication session that is established between theclient machine 10 and ahost service 4516. The first SID and the first key allow theclient machine 10 to automatically reconnect with thehost service 4516 after an abnormal disruption of service without requiring theclient machine 10 to provide authentication credentials again. - After generation of the first SID and the first key, the
ACR Service 5002 encrypts the authentication credentials supplied by theclient machine 10 using the first key so that an attacker who gains access to theintermediary machine 30 or theACR Service 5002 cannot access the authentication credentials without the first key. TheACR Service 5002 then stores the encrypted authentication credentials with the SID inmemory 5018 and transmits the first SID and the first key to theclient machine 10 over thenetwork 150. Upon the client's receipt of the SID and the key, theACR Service 5002 destroys (i.e., deletes) the key from itsmemory 5018. - In another embodiment, the
first protocol service 4502 is configured to generate a second SID and second key. Thefirst protocol service 4502 can also be configured to transmit the second SID and second key to theclient machine 10, while keeping a copy of the second SID and second key. The copy of the second SID and second key can later be used by thefirst protocol service 4502 to validate the second SID and second key originally transmitted to theclient machine 10 when it is later presented to thefirst protocol service 4502 during the process of reconnecting theclient machine 10. In one embodiment, thefirst protocol service 4502 transmits the second SID and second key to theclient machine 10 via theintermediary machine 30. In another embodiment, thefirst protocol service 4502 transmits the second SID and second key to theclient machine 10 directly. Moreover, as described in greater detail below, thefirst protocol service 4502 can be further configured to delete, during the process of reconnecting theclient machine 10 to ahost service 4516, the second SID and second key, and thereafter generate a replacement second SID and second key. Additionally, in another embodiment, the second SID and second key is configured for automatic deletion after a pre-determined period of time. - In one embodiment, the
intermediary machine 30 serves as an intermediary for the first and second SIDs and keys. Theintermediary machine 30 receives, for example, the first SID and first key generated by theACR Service 5002 and the second SID and second key generated by thefirst protocol service 4502. Theintermediary machine 30 can then transmit the first SID and first key and the SID and second key to theclient machine 10. Moreover, during the process of reconnecting theclient machine 10 to ahost service 4516, theintermediary machine 30 can accept the first SID and first key and the second SID and second key from theclient machine 10 and thereafter transmit the first SID and first key to theACR Service 5002 and, if appropriate, the second SID and second key t to thefirst protocol service 4502. - If the first communication session between the
client machine 10 and thehost service 4516 terminates, for example abnormally, the new session can be re-established without requiring the user to reenter his or her authentication credentials. When theclient machine 10 and thehost service 4516 re-establish a second communication session, theclient machine 10 transmits the first and second SIDs and keys to theintermediary machine 30. Theintermediary machine 30 transmits the first SID and first key to theACR Service 5002, which uses the SID to locate and retrieve the encrypted authentication credentials for the first connection and uses the first key to decrypt the retrieved authentication credentials. TheACR Service 5002 then authenticates the client by validating the decrypted authentication credentials. After re-authentication, the second SID and second key is forwarded to thefirst protocol service 4502 to re-establish thesecond connection 4508 with thehost service 4516. - Referring to
FIG. 63 , another embodiment of asystem 4500 for network communications includes thenetworks client machine 10, thefirst protocol service 4502, thehost services 4516, theintermediary machine 30, and theticket authority 6102, as described above, and further depicts a firstremote machine 30 and a secondremote machine 30, both of which are used, in one embodiment, for initially connecting theclient machine 10 to ahost service 4516. Moreover, in the embodiment ofFIG. 63 , theclient machine 10 further includes aweb browser 6302, such as, for example, the INTERNET EXPLORER program from Microsoft Corporation of Redmond, Wash., to connect to the World Wide Web. - In one embodiment (not shown), the
system 4500 includes two or moreintermediary machines 30 and/or two or morefirst protocol services 4502. Theintermediary machine 30, through which messages between theclient machine 10 and thefirst protocol service 4502 must pass, and/or thefirst protocol service 4502 can, as explained below, each be chosen based on, for example, a load balancing equation. - Each of the first
remote machine 30 and the secondremote machine 30 can be any computing device that is capable of communication and that has sufficient processor power and memory capacity to perform the operations described herein. For example, in one embodiment, the firstremote machine 30 is a web server, providing one or more websites or web based applications. In another embodiment, the secondremote machine 30 provides an XML service or web service. - In one embodiment, the
client machine 10 and thenetwork 150 form anexternal network 6304, separated from the rest of thesystem 6100 by afirst firewall 6306, depicted as a dashed line. Theintermediary machine 30 and the firstremote machine 30 can be located in a “demilitarized zone” 6308 (i.e., a network region placed between a company's private network and the public network), separated from the rest of thesystem 4500 by thefirst firewall 6306 and asecond firewall 6310, also depicted by a dashed line. In some embodiments, thefirst firewall 6306 and thesecond firewall 6310 prohibit unauthorized communications to or from theremote machines 30. Then, as shown, thenetwork 150′, thefirst protocol service 4502, thehost services 4516 a-4516 n, theticket authority 6102, and the secondremote machine 30, form aninternal network 6312, separated from the rest of thesystem 4500 by thesecond firewall 6310. - In some embodiments, the demilitarized
zone 6308 includes a ticket protocol service 6314 (shown in shadow inFIG. 63 ), comprising a proxy (not shown), and the firstremote machine 30, which may be a web server. The proxy may comprise a security gateway through which messages over the client-first protocolservice communication channel 4504 pass. In one embodiment, thenetwork firewall 6306 repudiates any incoming message from the client-first protocolservice communication channel 4504 that does not have thefirst protocol service 4502 as its destination. Likewise, thenetwork firewall 6306 repudiates any outgoing message for the client-first protocolservice communication channel 4504 unless its source is thefirst protocol service 4502. The security gateway can alternatively be a router, firewall, relay, or any network component that can provide the necessary security. The proxy may also be a network component separate from thefirst protocol service 4502 that may run on the same computing device of thefirst protocol service 4502 or on a different computing device. In some embodiments, the proxy is an intermediary for securely passing communications between theclient machine 10 and thefirst protocol service 4502. - Alternatively, in another embodiment not shown in
FIG. 63 , thesystem 4500 further includes a thirdremote machine 30 positioned, in the demilitarizedzone 6308, between thenetwork 150 and theintermediary machine 30. The thirdremote machine 30 can be any computing device that is capable of networked communication and that has sufficient processor power and memory capacity to perform the operations described herein. As described below, the thirdremote machine 30 is used, in some embodiments, during the process of initially connecting theclient machine 10 to ahost service 4516 and/or during the process of reconnecting theclient machine 10 to ahost service 4516. More specifically, as described below, where thesystem 4500 includes two or moreintermediary machines 30, the thirdremote machine 30 can, based on a load balancing equation for example, choose theintermediary machine 30 through with communications between theclient agent 4506 of theclient machine 10 and thefirst protocol service 4502 must pass. - Moreover, referring to
FIG. 63 , theintermediary machine 30, in an alternative embodiment, can be replaced by two or more levels “a”-“n” ofintermediary machines 30. As illustrated, each level “a”-“n” can include two or moreintermediary machines 30′. As described below, theclient agent 4506 of theclient machine 10 can be routed through any combination of theintermediary machines 30 based on, for example, load balancing equations. For example, as illustrated, theclient agent 4506 can be routed through theintermediary machines 30 viaconnection 4504. For additional security, each of the “hops” viaconnection 4504 may require a ticket or re-connection ticket for validating and authenticating the multiple-hop connection between theclient machine 10 and thehost service 4516. Other configurations of thesystem 4500, as would be readily apparent to one skilled in the art, are also possible. - Referring again to
FIG. 63 , in one embodiment, theweb browser 6302 communicates over thenetwork 150 with the firstremote machine 30, which itself interfaces with the secondremote machine 30 and theticket authority 6102. More specifically, the firstremote machine 30 is configured with the address of the secondremote machine 30 and theticket authority 6102. In one embodiment, as explained further below, the firstremote machine 30 is configured to relay information between, and thereby prevent direct communication between, theweb browser 6302 of theclient machine 10, the secondremote machine 30, and theticket authority 6102. By preventing such direct communication, the firstremote machine 30 adds an additional level of security to thesystem 4500. The firstremote machine 30 can also be configured with the address of theintermediary machine 30, or, alternatively, with the address of two or moreintermediary machines 30. - For its part, the second
remote machine 30 is configured to determine which of the application programs running on thehost services 4516 are available to a user of theclient machine 10. In other words, the secondremote machine 30 is configured to determine which of the application programs the user is authorized to access. In one embodiment, after the user selects his desired application program, as described further below, the secondremote machine 30 is further configured to determine which of thehost services 4516 will be used to run the user's desired application for purposes of load balancing. The secondremote machine 30 returns the address of thathost service 4516 to the firstremote machine 30. The secondremote machine 30 also returns the address of thefirst protocol service 4502, which can also be selected from amongst a plurality offirst protocol services 4502 through the use of a load balancing equation, to the firstremote machine 30. In turn, the firstremote machine 30 transmits the address of the chosenfirst protocol service 4502 and the chosenhost service 4516 to theticket authority 6102. - For its part, the
ticket authority 6102 generates connection tickets. In one embodiment, theticket authority 6102 transmits an initial connection ticket to the firstremote machine 30 for transmission to theclient machine 10. In another embodiment, the ticket authority transmits a first reconnection ticket to theintermediary machine 30. - In one embodiment, the
ticket authority 6102 issues one or more tickets to authenticate theclient machine 10. In particular, theticket authority 6102 enables authentication of theclient machine 10 over one communication channel (i.e., a client-web server communication channel) based on authentication credentials. Theticket authority 6102 further enables theclient machine 10 to be authenticated to another communication channel (i.e., the client-first protocol service communication channel 4504) without having theclient machine 10 repeatedly provide authentication credentials on the other communication channel. - In one embodiment, the
ticket authority 6102 is a stand-alone network component. In other embodiments, a modular ticket authority 136 is a software module residing on one or moreremote machines 30. For example, there may be aticket authority 6102 for each of theremote machines 30. In some embodiments, a firstremote machine 30, such as a web server in the demilitarizedzone 6308, may communicate with theticket authority 6102 and/or theremote machine 30 over an agent-server communication channel. In another embodiment, theticket authority 6102 may reside on an intermediaryremote machine 30 separate from otherremote machines 30. - In one embodiment, the
ticket authority 6102 generates a first ticket and a second ticket. In some embodiments, the tickets are both nonces. In further embodiments, the tickets are generated using a cryptographic random number generator that has been suitably seeded with randomness. The first ticket is transmitted to theclient machine 10 and is used to establish a first communication session between theclient machine 10 and thefirst protocol service 4502. The second ticket is transmitted to thefirst protocol service 4502 and is used to establish a second communication session between thefirst protocol service 4502 and aremote machine 30. - In some embodiments, the first
remote machine 30 is a web server. In one of these embodiments, the firstremote machine 30 delivers web pages to theclient machine 10. In another of these embodiments, the firstremote machine 30 is capable of establishing a secure client-web server communication channel with theclient machine 10. - In other embodiments, the first
remote machine 30 is a web server providing a corporate portal, also referred to as an enterprise information portal, to theclient machine 10. In one of these embodiments, enterprise portals are company web sites that aggregate, personalize and serve applications, data and content to users, while offering management tools for organizing and using information more efficiently. In other embodiments, the firstremote machine 30 provides a web portal, or Internet portal, to theclient machine 10. A web portal is similar to a corporate portal but typically does not include business-specific information. - In one embodiment, a user of the
client machine 10 employs theweb browser 6302 to authenticate the user to the firstremote machine 30. In one embodiment, theclient machine 10 transmits user credentials, such as log in and password information, to the firstremote machine 30. The firstremote machine 30 verifies that the user has access to themachine farm 38. - In a further embodiment, the
web browser 6302 uses SSL to establish a secure client-web server communication channel. Theweb browser 6302 can alternatively connect to the firstremote machine 30 over a client-web server communication channel using other security protocols, such as, but not limited to, Secure Hypertext Transfer Protocol (SHTTP) developed by Terisa Systems of Los Altos, Calif., HTTP over SSL (HTTPS), Private Communication Technology (PCT) developed by Microsoft Corporation of Redmond, Wash., and the Transport Level Security (TLS) standard promulgated by the Internet Engineering Task Force (IETF). In one embodiment, the firstremote machine 30 transmits a web portal or enterprise portal, as described above, to theclient machine 10 upon validation of the user to enable theclient machine 10 to request a resource, such as, for example, an application or a server desktop to be remotely displayed on theclient machine 10. - The client-web server communication channel may be any secure communication channel. In some embodiments, communications over the channel are encrypted. In certain of these embodiments, the
client machine 10 and the firstremote machine 30 may communicate using the Secure Socket Layer (SSL) of the HyperText Transfer Protocol (HTTPS). Alternatively, theclient machine 10 and the firstremote machine 30 may use other encryption techniques, such as symmetric encryption techniques, to protect communications. - Further, in one embodiment the client-first protocol
service communication channel 4502 can be established by using, for example, a presentation services protocol such as ICA, X11 protocol, VNC, or RDP. Although described as establishing a first communication session between theclient machine 10 and thefirst protocol service 4502 and a second communication session between thefirst protocol service 4502 and theremote machine 30, the communication session can be viewed as a single, logical communication session between theclient machine 10 and thehost service 4516. - In another embodiment of a
network communication system 4500 as shown inFIG. 64 , theACR Service 5002 can be used instead of theticket authority 6102 to reconnect aclient machine 10 to ahost service 4516. Instead of using tickets as with theticket authority 6102, theACR Service 5002 generates, validates and manages SIDs and keys for connecting and reconnecting client communication sessions. TheACR Service 5002 authenticates and re-authenticates the client to ahost service 4516 orremote machine 30 using a SID and key, or a ticket, associated with theclient machine 10. As previously mentioned, a ticket can be used to refer to the combination of a SID and key or a ticket can comprise a SID and a key. - The
system 4500 ofFIG. 64 includes thenetworks client machine 10, thefirst protocol service 4502, thehost services 4516, theintermediary machine 30, and theACR Service 5002, as described above, and further depicts a firstremote machine 30 and a secondremote machine 30, both of which are used, in one embodiment, for initially connecting theclient machine 10 to ahost service 4516. Moreover, theclient machine 10 further includes aweb browser 6302 to connect to the World Wide Web. - In one embodiment (not shown), the
system 4500 includes two or moreintermediary machines 30 and/or two or morefirst protocol services 4502 or two ormore ACR Services 5002. Theintermediary machine 30, through which messages between theclient machine 10 and thefirst protocol service 4502 must pass, and/or thefirst protocol service 4502 can and/or theACR Service 5002, as explained below, each be chosen based on, for example, a load balancing equation. - In another embodiment, the
system 4500 ofFIG. 64 can include anexternal network 6304, separated from a “demilitarized zone” 6308 by afirst firewall 6306 which in turn is separated from aninternal network 6312 by asecond firewall 6310. Although the invention is discussed above in terms of various network topologies inFIGS. 63 and 64 , any other network topologies can be used, such as for example, a topology including combinations of internal networks, external networks, sub-networks, intranets, firewalls, security zones, single servers, a server network or server farms. - Alternatively, in another embodiment not shown in
FIG. 64 , thesystem 4500 further includes a thirdremote machine 30 positioned, in the demilitarizedzone 6308, between thenetwork 150 and theintermediary machine 30. The thirdremote machine 30 is used, in some embodiments, during the process of initially connecting theclient machine 10 to ahost service 4516 and/or during the process of reconnecting theclient machine 10 to ahost service 4516. - In another embodiment of the
system 4500 inFIG. 64 , theintermediary machine 30, can be replaced by two or more levels “a”-“n” ofintermediary machines 30′. Theclient agent 4506 of theclient machine 10 can be routed through any combination of theintermediary machines 30 based on, for example, load balancing equations. - In one embodiment, the
web browser 6302 communicates over thenetwork 150 with the firstremote machine 30, which itself interfaces with the secondremote machine 30 and theACR Service 5002. The firstremote machine 30 is configured with the address of the secondremote machine 30 and theACR Service 5002. In another embodiment to provide an additional level of security in thesystem 4500, the firstremote machine 30 is configured to relay information between, and thereby prevent direct communication between, theweb browser 6302 of theclient machine 10, the secondremote machine 30, and theACR Service 5002. The firstremote machine 30 can also be configured with the address of any of theintermediary machines 30′. - For its part, the second
remote machine 30 is configured to determine which of the application programs running on thehost services 4516 are available to a user of theclient machine 10 and to provide the address of thehost service 4516 selected by the user to the firstremote machine 30. The secondremote machine 30 also provides the address of one of the multiplefirst protocol service 4502, through the use of a load balancing equation, to the firstremote machine 30. In turn, the firstremote machine 30 transmits the address of the chosenfirst protocol service 4502 and the chosenhost service 4516 to theACR Service 5002. - For its part, the
ACR Service 5002 generates, validates and manages connection SIDs and key to provide authentication and re-authentications services to re-establish a client's communication session with ahost service 4516 orremote machine 30, as described herein. In one embodiment, theACR Service 5002 transmits a first SID and first key to the firstremote machine 30 for transmission to theclient machine 10. In another embodiment, theACR Service 5002 transmits a first SID and first key to one of theintermediary machines 30. - In other embodiments, methods for network communications enable reconnecting a
client machine 10 to ahost service 4516 using a plurality of secondary protocols encapsulated within a first protocol. The method includes establishing a first connection between aclient machine 10 and afirst protocol service 4502 using a first protocol and communicating between theclient machine 10 and thefirst protocol service 4502 via a plurality of second protocols encapsulated within the first protocol. Moreover, at least one of the second protocols includes a plurality of virtual channels. - In one embodiment of this aspect of the invention, a second connection is established between the
first protocol service 4502 and ahost service 4516 using one of the secondary protocols. Communication between thefirst protocol service 4502 and thehost service 4516 occurs via one of the secondary protocols. Specifically, each of the plurality of second connections is established between thefirst protocol service 4502 and adifferent host service 4516 and each of the plurality of second connections is established using one of the plurality of secondary protocols. In yet another embodiment, the first connection between theclient machine 10 and thefirst protocol service 4516 is established through one or moreintermediary machines 30. - Referring now to
FIG. 65 , one embodiment of amethod 6500 for reconnecting a client to a host service after a network failure is illustrated. Atstep 6502, theclient machine 10 initially connects to one of a plurality ofhost services 4516. Generally, theclient machine 10 is required to transmit authentication credentials to thehost service 4516 to initiate the communication session. After theclient machine 10 is connected to thehost service 4516, theclient machine 10 and thehost service 4516 communicate, through thefirst protocol service 4502, and atstep 6504, via a plurality of secondary protocols encapsulated within the first protocol as discussed above in reference toFIGS. 47-48 andFIG. 49 . In one embodiment, thefirst protocol service 4502 encrypts, prior to the transmission of any first protocol packets, communications at the level of thefirst protocol 4704, thereby securing the communications. In another embodiment, thefirst protocol service 4502 compresses, prior to the transmission of any first protocol packets, the communications at the level of the first protocol, thereby improving communication efficiency. - At
step 6506, theclient agent 4506 determines whether theconnection 4504 between theclient agent 4506 and thefirst protocol service 4502 has failed. For example, theconnection 4504 a between theclient agent 4506 and theintermediary machine 30 may have failed, theconnection 4504 b between theintermediary machine 30 and thefirst protocol service 4502 may have failed, or both theconnection 4504 a and theconnection 4504 b may have failed. If theclient agent 4506 determines that theconnection 4504 has not failed, themethod 6500 proceeds to step 6508. If, on the other hand, theclient agent 4506 determines that theconnection 4504 has failed, theclient machine 10 is, atstep 6510, reconnected to thehost service 4516. - The step of reconnecting in
step 6510 after a first communication session ends abnormally, can comprise in asystem 4500 deploying aticket authority 6102 and theclient machine 10 transmitting the SID and the first and second reconnection tickets to theintermediary machine 30. Theintermediary machine 30 uses the first reconnection ticket to authenticate theclient machine 10 and re-establish theconnection 4504 between theclient machine 10 and theintermediate node 30′. Theintermediary machine 30 then transmits the second reconnection ticket to thefirst protocol service 4502, which uses the second reconnection ticket to authenticate re-establish theconnection 4508 to thehost service 4516. The reconnection tickets thus allow theclient machine 10 to automatically establish a second communication session to thehost service 4516 without retransmitting the authentication credentials a second time. - In another embodiment, the step of reconnecting, in
step 6510, can also comprise asystem 4500 deploying anACR Service 5002. In such an embodiment, theclient machine 10 transmits a first SID and first key to theintermediary machine 30 to authenticate theclient machine 10 and reestablish the connection of theclient machine 10 to thehost service 4516. - It is determined, at
step 6508, whether theclient machine 10 wishes to cleanly terminate itsconnection 4504 with thefirst protocol service 4502 and, consequently, itsconnections 4508 a-4508 n with thehost services 4516 a-4516 n. If not, communication between theclient machine 10 and thefirst protocol service 4502, via the plurality of secondary protocols encapsulated within the first protocol, continues atstep 6504. If so, then, atstep 6512, allconnections ACR Service 5002, atstep 6512, allconnections intermediary machine 30 uses a handle it receives from theticket authority 6102 to delete a copy of a first reconnection ticket kept at theticket authority 6102. In another embodiment deploying aticket authority 6102, thefirst protocol service 4502 deletes a copy of a second reconnection ticket kept at thefirst protocol service 4502. In yet another embodiment deploying theACR Service 5002, thefirst protocol service 4502 deletes a copy of a second SID and second key kept at thefirst protocol service 4502. - In a further embodiment using a
ticket authority 6102, if for some reason asecondary protocol connection 4508 fails, a copy of the second reconnection ticket associated therewith and kept at thefirst protocol service 4502 is deleted by thefirst protocol service 4502. In yet another embodiment, a first reconnection ticket and/or a second reconnection ticket is automatically deleted after a pre-determined period of time following a failure in theconnection 4504, as atstep 6506, and/or following a clean termination of theconnection 4504, as atstep 6508. - In another aspect, this invention relates to methods for reconnecting the
client machine 10 to thehost service 4516 using theACR Service 5002. Referring now toFIG. 66 , one embodiment ofstep 6510 inFIG. 65 is illustrated. Theclient machine 10 transmits the first SID and the first key to theACR Service 5002 to reconnect to the host service (step 6602). TheACR Service 5002 uses the SID (step 6604) to locate and retrieve the encrypted authentication credentials and uses the key (step 6606) to decrypt the retrieved authentication credentials. In one embodiment (not shown), theACR Service 5002 uses the decrypted authentication credentials to re-authenticate theclient machine 10 to the maintained session between thefirst protocol service 4502 and thehost service 4516. After re-authenticating, the reestablished connection of theclient machine 10 to thefirst protocol service 4516 is re-linked to the maintained session between thefirst protocol service 4502 and thehost service 4516. - In another embodiment, during the second communication session, the
ACR Service 5002 generates (step 6608) a second key for the authentication credentials and then encrypts (step 6610) the authentication credentials using the second key. TheACR Service 5002 creates a second SID (step 6612). Then the decrypted authentication credentials are re-authenticated with thehost service 4516 and the second SID is associated with the maintained communication session with the host service 4516 (step 6612a). TheACR Service 5002 then transmits the second SID and second key to the client machine 10 (step 6614). In one embodiment, theACR Service 5002 may transmit the second SID and second key through anintermediary machine 30. Theclient machine 10 stores the second SID and second key (step 6616). TheACR Service 5002 then deletes the second key (step 6618). - Referring to
FIGS. 67-68 , one embodiment of amethod 6700 for initially connecting theclient machine 10 to thehost service 4516 using anACR Service 5002 is illustrated. Atstep 6702, theclient machine 10, using thebrowser 6302, sends a request, such as, for example, an HTTP request, to the firstremote machine 30. The firstremote machine 30 returns a web page, such as, for example, an HTML form requesting authentication information (e.g., a username and a password). A user of theclient machine 10 enters his authentication credentials and transmits the completed form to the firstremote machine 30. - The first
remote machine 30, atstep 6704, then informs the user of theclient machine 10 of applications available for execution. In one embodiment, the firstremote machine 30 extracts the user's credentials from the login page and transmits them to the secondremote machine 30, together with a request for the secondremote machine 30 to enumerate the applications available to the user. Based on the user's credentials, the secondremote machine 30 returns a list of specific applications available to the firstremote machine 30, which then forwards the list, in the form of a web page for example, to the user of theclient machine 10. - At
step 6706, the user selects the desired application and a request for that application is sent to the firstremote machine 30. For example, in one embodiment, the user clicks on a desired application listed in the web page presented to him by the firstremote machine 30 and an HTTP request for that application is forwarded to the firstremote machine 30. The request is processed by thefirst computing node 140 and forwarded to the secondremote machine 30. - At
step 6708, the secondremote machine 30 determines thehost service 4516 on which the desired application will be executed. The secondremote machine 30 can make that determination based, for example, on a load balancing equation. In one embodiment, the secondremote machine 30 also determines afirst protocol service 4502 from amongst a plurality offirst protocol services 4502 that will be used to communicate with thehost service 4516 via aconnection 4508. Again, the secondremote machine 30 can make that determination based, for example, on a load balancing equation. The secondremote machine 30 returns the address of the chosenhost service 4516 and the chosenfirst protocol service 4502 to the firstremote machine 30. - The
client machine 10, atstep 6710, is then provided with an initial connection session id and key, a first SID and first key, and an address for the intermediary machine 30 (which is either its actual address or its virtual address, as described below). In one embodiment, the firstremote machine 30 provides the address for the chosenhost service 4516 and the chosenfirst protocol service 4502 to theACR Service 5002, together with a request for the initial connection session id and key. TheACR Service 5002 generates the initial session id and key, and transmits the session id and key to the firstremote machine 30, while keeping a copy for itself. - In some embodiments, the
ticket authority 6102 generates an initial connection ticket. In one of these embodiments, theticket authority 6102 keeps the address of the chosenhost service 4516 and the chosenfirst protocol service 4502, generates the initial connection ticket, and transmits the initial connection ticket to the firstremote machine 30, while keeping a copy for itself. In one embodiment, theticket authority 6102, in response to the request for the initial connection ticket by the firstremote machine 30, generates connection tickets for each of the “hops” between theclient machine 10 and thehost service 4516. In another embodiment, the firstremote machine 30 requests initial connection tickets for each of the “hops” either in a single request or in multiple requests. - The first
remote machine 30, configured, in one embodiment, with the actual address of theintermediary machine 30, then transmits the actual address of theintermediary machine 30 and the initial connection session id and key to thebrowser 6302 of theclient machine 10. In some embodiments, an initial connection ticket is transmitted. The firstremote machine 30 can, for example, first create a file containing both the actual address of theintermediary machine 30 and the initial connection ticket and then transmitting the file to thebrowser 6302 of theclient machine 10. Optionally, in another embodiment, the firstremote machine 30 is configured with the actual address of two or moreintermediary machines 30. In such an embodiment, the firstremote machine 30 first determines theintermediary machine 30 through which messages between theclient machine 10 and thefirst protocol service 4502 will have to pass. The firstremote machine 30 then transmits the actual address of that chosenintermediary machine 30 and the initial connection ticket to thebrowser 6302 of theclient machine 10 using, for example, the file described above. In one embodiment, the firstremote machine 30 chooses theintermediary machine 30 using a load balancing equation. Theclient agent 4506 of theclient machine 10 is then launched and uses the address of theintermediary machine 30, to establish, atstep 6712, afirst protocol connection 4504 a between theclient agent 4506 of theclient machine 10 and theintermediary machine 30. - Alternatively, in another embodiment, the first
remote machine 30 is configured with an actual address of the thirdremote machine 30, which serves as a virtual address of anintermediary machine 30. In such an embodiment, the firstremote machine 30 transmits, atstep 6710, the actual address of the thirdremote machine 30 and the initial connection session id and key to thebrowser 6302 of theclient machine 10 using, for example, the file described above. Theclient agent 4506 of theclient machine 10 is then launched and uses the actual address of the thirdremote machine 30 to establish, atstep 6712, a first protocol connection between theclient agent 4506 of theclient machine 10 and the thirdremote machine 30. The thirdremote machine 30 then determines theintermediary machine 30 through which messages between theclient machine 10 and thefirst protocol service 4502 will have to pass. In one embodiment, the thirdremote machine 30 chooses theintermediary machine 30 using a load balancing equation. Having chosen theintermediary machine 30, the thirdremote machine 30 establishes a first protocol connection to theintermediary machine 30. Afirst protocol connection 4504 a therefore exists, through the thirdremote machine 30, between theclient agent 4506 of theclient machine 10 and theintermediary machine 30. The actual address of the thirdremote machine 30 is therefore mapped to the actual address of theintermediary machine 30. To theclient agent 4506 of theclient machine 10, the actual address of the thirdremote machine 30 therefore serves as a virtual address of theintermediary machine 30. - In one embodiment, where more than one level of
intermediary machines 30′ exist, as described above, the firstremote machine 30 or the thirdremote machine 30, respectively, only choose theintermediary machine 30 to which theclient agent 4506 will connect at level “a.” In such an embodiment, at each of the levels “a”-“n-1”, theintermediary machine 30 through which theclient agent 4506 is routed at that level thereafter determines, based on a load balancing equation for example, theintermediary machine 30 to which it will connect at the next level. Alternatively, in other embodiments, the firstremote machine 30 or the thirdremote machine 30, respectively, determine, for more than one or all of the levels “a”-“n”, theintermediary machines 30 through which theclient agent 4506 will be routed. - Having established the
first protocol connection 4504 a between theclient agent 4506 of theclient machine 10 and theintermediary machine 30, for example theintermediate node 30′ at level “n” (hereinafter referred to inmethod 6700 as the intermediary machine 30), theclient agent 4506 then transmits the initial connection ticket to theintermediary machine 30. - It is then determined, at
step 6714, whether the initial connection SID and key is valid. In one embodiment, theintermediary machine 30 transmits the initial connection SID and key to theACR Service 5002 for validation. In one embodiment, theACR Service 5002 validates the SID and key by comparing it to the copy of the SID and encrypted authentication credentials it kept atstep 6710. If theACR Service 5002 determines the SID and key to be valid, theACR Service 5002 transmits, at step 6802 (FIG. 68 ), the address of thefirst protocol service 4502 and the address of the chosenhost service 4516 to theintermediary machine 30. Thefirst protocol service 4502 can also delete the SID and key and any copy thereof. If, on the other hand, theACR Service 5002 determines the SID and key to be invalid, theclient machine 10 is, at step 6716, refused connection to thefirst protocol service 4502 and, consequently, connection to thehost service 4516. In some embodiments, theticket authority 6102 receives an initial connection ticket from theintermediary machine 30 for validation and validates the ticket as described above. - Following
step 6802, theintermediary machine 30 uses the address of the chosenfirst protocol service 4502 to establish, atstep 6804, afirst protocol connection 4504 b between theintermediary machine 30 and thefirst protocol service 4502. In one embodiment, theintermediary machine 30 uses an initial connection ticket to establish thefirst protocol connection 4504 b between theintermediary machine 30 and thefirst protocol service 4502. In one case, theintermediary machine 30 uses the same initial connection ticket received from theclient machine 10 to validate theconnection 4504 b. In another case, theintermediary machine 30 uses an initial connection ticket generated for and valid for thefirst protocol connection 4504 b. Afirst protocol connection 4504 therefore now exists, through theintermediary machine 30, between theclient agent 4506 of theclient machine 10 and thefirst protocol service 4502. Theintermediary machine 30 can also pass the address of the chosenhost service 4516 to thefirst protocol service 4502. - In one embodiment, at
step 6806, thefirst protocol service 4502 uses the address of the chosenhost service 4516 to establish asecondary protocol connection 4508 between thefirst protocol service 4502 and the chosenhost service 4516. For example, the chosenhost service 4516 is in fact thehost service 4516 a and asecondary protocol connection 4508 a is established between thefirst protocol service 4502 and thehost service 4516 a. - In one embodiment, following
step 6806, the user chooses, atstep 6808, a second application to be executed and the secondremote machine 30 determines, atstep 6810, thehost service 4516 on which the second application is to be executed. For example, by calculating a load balancing equation, the secondremote machine 30 may choose thehost service 4516 b to execute the second application program. The secondremote machine 30 then transmits the address of the chosenhost service 4516 b to thefirst protocol service 4502. In one embodiment, the secondremote machine 30 is in direct communication with thefirst protocol service 4502 and directly transmits the address thereto. In another embodiment, the address of the chosenhost service 4516 b is indirectly transmitted to thefirst protocol service 4502. For example, the address can be transmitted to thefirst protocol service 4502 through any combination of the firstremote machine 30, theACR Service 5002, theintermediary machine 30, and thefirst protocol service 4502. Having received the address of the chosenhost service 4516 b, thefirst protocol service 4502 establishes, atstep 6812, asecondary protocol connection 4508 b between thefirst protocol service 4502 and the chosenhost service 4516 b. - The secondary protocols that can be used to communicate over the
connections client machine 10. For example, in one embodiment, onehost service 4516 a is a web server, communicating with thefirst protocol service 4502 over theconnection 4508 a using the HTTP protocol, and anotherhost service 4516 b is an application server, communicating with thefirst protocol service 4502 over theconnection 4508 b using the ICA protocol. Thehost service 4516 b generates both protocol packets for transmitting graphical screen commands to theclient machine 10, for causing theclient machine 10 to display a graphical user interface, and protocol packets for transmitting printer commands to theclient machine 10, for causing a document to be printed at theclient machine 10.Steps host services 4516 a-4516 n, the outputs of which can be communicated to thefirst protocol service 4502 over theconnections 4508 a-4508 n using any number of secondary protocols. - Turning now to step 6814, the
first protocol service 4502 can, as described above, encapsulate the plurality of secondary protocols within the first protocol. As such, theclient machine 10 is connected to, and simultaneously communicates with, a plurality ofhost services 4516. - In another embodiment, prior to performing
steps host service 4516, such as, for example, thehost service 4516 b, a user of theclient machine 10 ends execution of another application program, such as, for example, an application program executing onhost service 4516 a. In such a case, thefirst protocol service 4502 disrupts theconnection 4508 a between thefirst protocol service 4502 and thehost service 4516 a. Thefirst protocol service 4502 then establishes, by implementingsteps connection 4508 b between thefirst protocol service 4502 and thehost service 4516 b, without interrupting theconnection 4504 between theclient machine 10 and thefirst protocol service 4502. - In one embodiment, a first SID and key is generated at
step 6816. In some embodiments, a first re-connection ticket is generated. For example, theintermediary machine 30 requests a first SID and key from theACR Service 5002. Upon receiving the request, theACR Service 5002 generates the first SID and key, and can also generate a handle, which is, for example, a random number. TheACR Service 5002 can then transmit, atstep 6902, the first SID and key and the handle to theintermediary machine 30, while keeping a copy of the first SID and key and a copy of the handle. TheACR Service 5002 continues to maintain the address of thefirst protocol service 4502 that was transmitted to it by the firstremote machine 30 atstep 6710. Theintermediary machine 30 then transmits, atstep 6904, the first reconnection ticket to theclient machine 10. - In some embodiments,, the
intermediary machine 30 requests a first re-connection ticket from theticket authority 6102 or requests a first re-connection ticket for each of the “hops” between theclient machine 10 and thehost service 4516. Upon receiving the request, theticket authority 6102 generates the one or more first re-connection tickets. A re-connection ticket is, for example, a large random number, and can also generate a handle, which is, for example, a smaller random number. Theticket authority 6102 can then transmit, atstep 6902, the first re-connection tickets and the handles to the intermediary node 632, while keeping a copy of the first re-connection tickets and a copy of the handles. Theticket authority 6102 continues to maintain the address of thefirst protocol service 4502 that was transmitted to it by the firstremote machine 30 atstep 6710. The intermediary node 632 then transmits, atstep 6904, the client's first re-connection ticket to theclient machine 10. - At
step 6906, a second SID and key is then generated. In one embodiment, thefirst protocol service 4502 generates the second SID and key. Thefirst protocol service 4502, atstep 6908, then transmits the second SID and key, through theintermediary machine 30, to theclient machine 10. In doing so, thefirst protocol service 4502 keeps a copy of the key and a session number associated therewith for identifying the session to be reconnected following a disruption of theconnection 4504. In one embodiment, for example, thefirst protocol service 4502 maintains, for a particular session number, a table listing thesecondary protocol connections 4508 a-4508 n associated with that session number. - At
step 6906, one or more second re-connection tickets are then generated. In one embodiment, thefirst protocol service 4502 generates the second re-connection ticket for theclient machine 10, which can be, for example, a large random number. In another embodiment, thefirst protocol service 4502 generates second re-connection tickets for one or more of the “hops” between theclient machine 10 and thehost service 4516. Thefirst protocol service 4502, atstep 6908, then transmits the client's second re-connection ticket, through theintermediary machine 30, to theclient machine 10. In doing so, thefirst protocol service 4502 keeps a copy of the second re-connection ticket and a session number associated therewith for identifying the session to be re-connected following a disruption of theconnection 4504. In one embodiment, for example, thefirst protocol service 4502 maintains, for a particular session number, a table listing thesecondary protocol connections 4508 a-4508 n associated with that session number. In a like manner, thefirst protocol service 4502 may maintain the first and/or second re-connection tickets for each of the “hops” being validated to reconnect theclient machine 10 to thehost service 4516. - Accordingly, following re-establishment of the
first protocol connection 4504 and validation of the second SID and key at thefirst protocol service 4502, or second re-connection ticket, as described below, thefirst protocol service 4502 can identify thesecondary protocol connections 4508 to be encapsulated within the re-establishedfirst protocol connection 4504 for communication to theclient machine 10. - In an embodiment not shown in
FIGS. 67-69 , aticket authority 6102 can be used instead of theACR Service 5002 to provide for reconnecting aclient machine 10 to ahost service 4516. In themethod 6700, theticket authority 6102 would generate and transmit reconnection tickets instead of SIDs and keys as with theACR Service 5002. For example, atstep 6710, aticket authority 6102 would provide theclient machine 10 with an initial connection ticket and an address for theintermediary machine 30. Also, instep 6714, theticket authority 6102 would determine if the initial connection ticket is valid and atstep 6816, would generate a first reconnection ticket. Additionally, atsteps method 6700. As such, theticket authority 6102 facilitated the reconnecting of theclient machine 10 to thehost service 4516. - Referring now to
FIG. 70 , one embodiment of amethod 7000 for providing aclient machine 10 with a persistent and reliable connection to one ormore host services 4516 and for reconnecting theclient machine 10 to the host services 4516 (for example atstep 6510 ofFIG. 65 ) is illustrated. In particular, atstep 7002, thesecondary protocol connection 4508 between thefirst protocol service 4502 and each of the one ormore host services 4516 is maintained. Moreover, atstep 7004, a queue of data packets most recently transmitted between theclient agent 4506 of theclient machine 10 and thefirst protocol service 4502, via theconnection 4504 that was determined to have broken, for example, atstep 6510 ofFIG. 65 , is maintained. In one embodiment, the data packets are queued and maintained both before and upon failure of theconnection 4504. The queued data packets can be maintained, for example, in a buffer by theclient agent 4506. Alternatively, thefirst protocol service 4502 can maintain in a buffer the queued data packets. In yet another embodiment, both theclient agent 4506 and thefirst protocol service 4502 maintain the queued data packets in a buffer. - At
step 7006, a newfirst protocol connection 4504 is established between theclient agent 4506 of theclient machine 10 and thefirst protocol service 4502 and linked to the maintainedsecondary protocol connection 4508 between thefirst protocol service 4502 and each of the one ormore host services 4516, thereby reconnecting theclient machine 10 to thehost services 4516. After theclient machine 10 is reconnected, the queued data packets maintained atstep 7004 can be transmitted, atstep 7008, via the newly establishedfirst protocol connection 4504. As such, the communication session between thehost services 4516 and theclient machine 10, through thefirst protocol service 4502, is persistent and proceeds without any loss of data. In one embodiment, theACR Service 5002 authenticates theclient machine 10 to thehost service 4516 before reconnecting theclient machine 10 to ahost service 4516. In another embodiment, thefirst protocol service 4502 validates a reconnection ticket with theticket authority 6102 before reconnecting theclient machine 10 to ahost service 4516. - In an embodiment with multiple “hops” traversing multiple
first protocol services 4502, a portion or all of the data packets may be maintained at one or more of thefirst protocol services 4502 so that each “hop” may be re-established. After theclient machine 10 is re-connected and re-linked to the first of the one or morefirst protocol services 4502 as described above, each of the remaining connections may be re-established and re-linked to the previously re-linked “hop” until the final “hop” to thehost service 4516 is re-established. Either after the final “hop” is re-established and re-linked, or as each “hop” is re-established and re-linked, the queued data packets maintained can be transmitted. -
FIGS. 71-72 , illustrate one embodiment of amethod 7100 for reconnecting theclient machine 10 to the one ormore host services 4516 using anACR Service 5002 as in the embodiment of thesystem 4500 depicted inFIG. 64 . - At
step 7102, any remaining connections between theclient machine 10 and thefirst protocol service 4502 are broken. For example, where theconnection 4504 a has failed, but theconnection 4504 b has not, theconnection 4504 b is broken. Alternatively, where theconnection 4504 b has failed, but theconnection 4504 a has not, theconnection 4504 a is broken. - In one embodiment, using the actual address of the
intermediary machine 30 provided to theclient machine 10, theclient agent 4506 of theclient machine 10 then re-establishes, atstep 7104, thefirst protocol connection 4504 a between theclient agent 4506 and theintermediary machine 30. Alternatively, in another embodiment, using the actual address of the thirdremote machine 30 provided to theclient machine 10, theclient agent 4506 of theclient machine 10 then re-establishes, atstep 7104, a first protocol connection between theclient agent 4506 and the thirdremote machine 30. The thirdremote machine 30 then determines theintermediary machine 30 through which messages between theclient machine 10 and thefirst protocol service 4502 will have to pass. In one embodiment, the thirdremote machine 30 chooses theintermediary machine 30 using a load balancing equation. Theintermediary machine 30 chosen by the thirdremote machine 30 in reconnecting theclient machine 10 to the one ormore host services 4516 can be different from that chosen to initially connect theclient machine 10 to the one ormore host services 4516. In one embodiment, an initial connection ticket for the chosenintermediary machine 30 is generated when re-connecting theclient machine 10 to ahost service 4516. - Having chosen the
intermediary machine 30, the thirdremote machine 30 re-establishes a first protocol connection to theintermediary machine 30. Afirst protocol connection 4504 a is therefore re-established, through the thirdremote machine 30, between theclient agent 4506 of theclient machine 10 and theintermediary machine 30. In one embodiment, when thefirst protocol connection 4504 to theintermediary machine 30 is re-established, thefirst protocol connection 4504 is validated by validating a first or second re-connection ticket for this “hop” with theticket authority 6102. - In one embodiment, where more than one level of
intermediary machines 30 exist, theintermediary machine 30 through which theclient agent 4506 is routed at each of the levels “a”-“n-1” thereafter determines, based on a load balancing equation for example, theintermediary machine 30 to which it will connect at the next level. Alternatively, in another embodiment, the thirdremote machine 30 determines, for more than one or all of the levels “a”-“n”, theintermediary machines 30 through which theclient agent 4506 will be routed. In other embodiments, either theintermediary machine 30 or one of the remote machines 30 (e.g., the third remote machine 30) generates first or second re-connection tickets for one or more of the connections or “hops” through which theclient agent 4506 is routed. - Having re-established the
first protocol connection 4504 a between theclient agent 4506 of theclient machine 10 and theintermediary machine 30, for example theintermediate node 30′ at level “n” (hereinafter referred to inmethod 7100 as the intermediary machine 30), theclient agent 4506 then transmits, atstep 7106, the first SID and key and the second SID and key to theintermediary machine 30. In one embodiment, theclient agent 4506 transmits, atstep 7106, the first re-connection ticket and the second re-connection ticket for theclient machine 10 to theintermediary machine 30. - It is then determined, at
step 7108, whether the first SID and key is valid. In one embodiment, the validity of the first SID and key is determined by using theACR Service 5002. For example, theintermediary machine 30 transmits the first SID and key to theACR Service 5002. In one embodiment, theACR Service 5002 determines the validity of the first SID and key by comparing it to a copy of the first SID stored inmemory 5018. If theACR Service 5002 determines the first SID and key to be valid, theACR Service 5002 re-authenticates theclient machine 10 to thehost service 4516 and transmits, atstep 7110, the address of thefirst protocol service 4502 to theintermediary machine 30. Otherwise, if theACR Service 5002 determines the first SID and key to be invalid, theclient machine 10 is, atstep 7112, refused reconnection to thefirst protocol service 4502 and, consequently, reconnection to thehost services 4516. - In one embodiment, the validity of a first re-connection ticket is determined by using the
ticket authority 6102. For example, theintermediary machine 30 transmits the first re-connection ticket to theticket authority 6102. In one embodiment, theticket authority 6102 determines the validity of the first re-connection ticket by comparing it to a previously kept copy of the first re-connection ticket. If theticket authority 6102 determines the first re-connection ticket to be valid, theticket authority 6102 transmits, atstep 7110, the address of thefirst protocol service 4502 to theintermediary machine 30. Otherwise, if theticket authority 6102 determines the first re-connection ticket to be invalid, theclient machine 10 is, atstep 7112, refused re-connection to thefirst protocol service 4502 and, consequently, re-connection to thehost services 4516. - At
step 7114, the first SID and key is deleted by, for example, theACR Service 5002 and a replacement second SID and key is generated by theACR Service 5002. In some such embodiments, theACR Service 5002 transmits the second SID and key to theintermediary machine 30. In some embodiments, theACR Service 5002 waits for theclient machine 10 to acknowledge that it has received the second SID and key before it proceeds to delete the first SID and key. - In other embodiments, at
step 7114, a first re-connection ticket is deleted by, for example, theticket authority 6102 and a replacement first re-connection ticket is generated by, for example, theticket authority 6102. Moreover, a replacement handle can be generated by, for example, theticket authority 6102. In some such embodiments, theticket authority 6102 transmits the replacement first re-connection ticket and the replacement handle to theintermediary machine 30. Moreover, in some such embodiments, theticket authority 6102 keeps a copy of the replacement first re-connection ticket. In some embodiments, theticket authority 6102 waits for theclient machine 10 to acknowledge that it has received the replacement first re-connection ticket before it proceeds to delete the first re-connection ticket. - After the first SID and key (or, in some embodiments, the first re-connection ticket) is validated, the
intermediary machine 30, using the address of thefirst protocol service 4502, re-establishes, atstep 7116, thefirst protocol connection 4504 b between theintermediary machine 30 and thefirst protocol service 4502. Having re-established thefirst protocol connection 4504 b between theintermediary machine 30 and thefirst protocol service 4502, it is then determined whether the second SID and key, or re-connection ticket, is valid. - In one embodiment, the validity of the second SID and key is determined by using the
first protocol service 4502. For example, theintermediary machine 30 transmits the second SID and key to thefirst protocol service 4502. In one embodiment, thefirst protocol service 4502 determines the validity of the second SID and key by comparing it to a previously kept copy of the second SID and encrypted authentication credentials. If thefirst protocol service 4502 determines the second SID and key to be valid, the re-establishedfirst protocol connection 4504 b between the firstintermediary machine 30 and thefirst protocol service 4502 is linked, atstep 7202, to the maintainedsecondary protocol connection 4508 between thefirst protocol service 4502 and each of the one ormore host services 4516. Otherwise, if thefirst protocol service 4502 determines the second SID and key to be invalid, the re-establishedfirst protocol connection 4504 b is not linked to the one or more maintainedsecondary protocol connections 4508 and theclient machine 10 is refused reconnection to the one ormore host services 4516. - In embodiments using re-connection tickets, the validity of the second re-connection ticket is determined by using the
first protocol service 4502. For example, theintermediary machine 30 transmits the second re-connection ticket to thefirst protocol service 4502. In one embodiment, thefirst protocol service 4502 determines the validity of the second re-connection ticket by comparing it to a previously kept copy of the second re-connection ticket. In another embodiment, the first protocol service 112 validates a first re-connection ticket for the connection between thefirst protocol service 4502 and thehost service 4516, or in another embodiment, between thefirst protocol service 4502 and anotherfirst protocol service 4502 or anintermediary machine 30. In a similar manner, each “hop” thereafter between thefirst protocol service 4502 and thehost service 4516 may be validated with one or more tickets, either initial or re-connection tickets, to validate the continued use of the “hop” on behalf of theclient machine 10. - If the
first protocol service 4502 determines the second re-connection ticket to be valid, the re-establishedfirst protocol connection 4504 b between the firstintermediary machine 30 and thefirst protocol service 4502 is linked to the maintainedsecondary protocol connection 4508 between thefirst protocol service 4502 and each of the one ormore host services 4516. Otherwise, if thefirst protocol service 4502 determines the second re-connection ticket to be invalid, the re-establishedfirst protocol connection 4504 b is not linked to the one or more maintainedsecondary protocol connections 4508 and theclient machine 10 is refused re-connection to the one ormore host services 4516. In the case of a multiple-hop connection between thefirst protocol service 4502 and thehost service 4516, each “hop” may be validated for re-connection and be linked to the previous “hop” until the final “hop” to thehost service 4516 is validated, or until one of the “hops” is refused re-connection. - At
step 7204, the second SID and key is deleted by, for example, thefirst protocol service 4502 and a replacement second SID and key is generated by, for example, thefirst protocol service 4502 for transmission to theclient machine 10. In such an embodiment, thefirst protocol service 4502 keeps a copy of the replacement second SID and key. In some embodiments, thefirst protocol service 4502 waits for theclient machine 10 to acknowledge that it has received the replacement second SID and key before it proceeds to delete the second session id and key. - In some embodiments, the second re-connection ticket is deleted by, for example, the
first protocol service 4502 and a replacement second re-connection ticket is generated by, for example, thefirst protocol service 4502 for transmission to theclient machine 10. In such an embodiment, thefirst protocol service 4502 keeps a copy of the replacement second re-connection ticket. In some embodiments, thefirst protocol service 4502 waits for theclient machine 10 to acknowledge that it has received the replacement second re-connection ticket before it proceeds to delete the second re-connection ticket. In the case of validating one or more of the “hops” for re-connecting aclient 108, one or more replacement re-connection tickets, at step 948, may be generated and/or a copy saved by the ticket authority 136, intermediary nodes 632, any of the computing nodes, or one or more of the first protocol services 112. - At
step 7206, the replacement second SID and key are transmitted to theclient machine 10. For example, theACR Service 5002 can transmit, through theintermediary machine 30, the replacement second SID and key to theclient machine 10. Moreover, in one embodiment, thefirst protocol service 4502 transmits, through theintermediary machine 30, the replacement second SID and key to theclient machine 10. - In some embodiments, the replacement first re-connection ticket and the replacement second re-connection ticket are transmitted to the
client machine 10. For example, theticket authority 6102 can transmit, through theintermediary machine 30, the replacement first re-connection ticket to theclient machine 10. Moreover, in one embodiment, thefirst protocol service 4502 transmits, through theintermediary machine 30, the replacement second re-connection ticket to theclient machine 10. In other embodiments, the replacement re-connection tickets for one or more “hops” may be transmitted to one or more of theintermediary machine 30, any of the computing nodes, or one or more of thefirst protocol services 4502. - Alternatively, in other embodiments, the methods described above provide for only a single re-connection ticket for the
client machine 10 and/or a single re-connection for each of the “hops” between theclient machine 10 and ahost service 4516. As such, rather than using both first and second re-connection tickets, in these embodiments, only the aforementioned single re-connection ticket is used. In one such embodiment, theclient agent 4506 of theclient machine 10 is also provided with the address of thefirst protocol service 4502. To re-connect to thehost services 4516, theclient agent 4506 transmits the single re-connection ticket directly to thefirst protocol service 4502. Thefirst protocol service 4502 then determines whether the single re-connection ticket is valid. In one embodiment, thefirst protocol service 4502 determines the validity of the single re-connection ticket by comparing it to a previously kept copy of the single re-connection ticket. If thefirst protocol service 4502 determines the single re-connection ticket to be valid, the re-establishedfirst protocol connection 4504 between theclient machine 10 and thefirst protocol service 4502 is linked to the maintainedsecondary protocol connection 4508 between thefirst protocol service 4502 and each of the one ormore host services 4516. Otherwise, if thefirst protocol service 4502 determines the single re-connection ticket to be invalid, the re-establishedfirst protocol connection 4504 is not linked to the one or more maintainedsecondary protocol connections 4508 and theclient machine 10 is refused re-connection to the one ormore host services 4516. - After the single re-connection ticket is validated, the single re-connection ticket is deleted by, for example, the
first protocol service 4502 and a replacement single re-connection ticket is generated by, for example, thefirst protocol service 4502 for transmission to theclient machine 10. In transmitting the replacement single re-connection ticket to theclient machine 10, thefirst protocol service 4502 keeps a copy of the replacement single re-connection ticket. In some embodiments, thefirst protocol service 4502 waits for theclient machine 10 to acknowledge that it has received the replacement single re-connection ticket before it proceeds to delete the single re-connection ticket. - In yet another embodiment, like the first and second re-connection tickets, the single re-connection ticket is configured for automatic deletion after a pre-determined period of time following a failure in the
connection 4504, and/or following a clean termination of theconnection 4504. - In an embodiment not shown in
FIGS. 71-72 , aticket authority 6102 could also be used instead of theACR Service 5002 for reconnecting aclient machine 10 to ahost service 4516. In themethod 7100, theticket authority 6102 would generate and transmit reconnection tickets instead of SIDs and keys as with theACR Service 5002. For example, atstep 7106, aticket authority 6102 would determine instep 7108 if a first reconnect ticket received from theintermediary machine 30 instep 7106 is valid. Atstep 7114 theticket authority 6102 would delete the first reconnection ticket and generates a second reconnection ticket with a handle. As such, theticket authority 6102 facilitates re-establishing and re-authenticating the communication session of theclient machine 10 to thehost service 4516. - Performance of the
network 150 can be monitored to increase performance perceived by the user of aclient machine 10. The bandwidth and latency of thenetwork 150 is a factor that affects the interaction experience of the end-user of theclient machine 10. Other factors include the number of virtual machines executing on aremote machine 30 or the number of applications executing within a virtual machine on theremote machine 30, the amount of data being executed (or load) of the applications, the amount of processing (or load) being done by theclient machine 10. During operation, each of these factors fluctuates. As data is transmitted through thenetwork 150 the amount of available bandwidth of the network is reduced. The number of requests to aremote machine 30 increases and decrease thereby varying the load of theremote machine 30. One aspect of the invention features systems and method for determining whether and how these independent changes affect the interaction experience of the end-user. -
FIG. 73 is a conceptual block diagram of an embodiment of a system that includesclient software 7302 andremote machine software 7306 which monitor the status of the connection between theclient machine 10 and theremote machine 30. It should be understood the various modules are not necessarily individual applications. Instead, the modules can be provided as a single software application or grouped as any combination of individual applications. Additionally, certain modules may be physical hardware. - The
client software 7302 is in communication with atransceiver module 7304 of theclient machine 10. Theclient software 7302 includes atrigger module 7308 in communication with thetransceiver module 7304. Thetrigger module 7308 generates amessage 7310 that is transmitted to theremote machine software 7306. Themessage 7310 is configured to generate a response from theremote machine software 7306 when the message is processed by theremote machine 30. For example, the message can include a user input event that results in a graphical response from the remote machine. In one embodiment, thetrigger module 7308 generates themessage 7310 on a periodic basis. The length of the period can be configurable by the user of theclient machine 10 or another user such as a system administrator. In another embodiment, the trigger module generates themessage 7310 in response to a specific end-user input usinginput device 7312. - The
transceiver module 7304 is in communication withnetwork 150 and is configured to transmit themessage 7310 from theclient machine 10 to theremote machine 30 via thenetwork 150 and receive a response from theremote machine 30. If necessary, thetransceiver module 7304 formats themessage 7310 for transmission via thenetwork 150 and formats the response for execution by theclient software 7302. - Optionally, the
client software 7302 can include atimer module 7316 and acalculation module 7314. Thetimer module 7316 is in communication with thetrigger module 7308 and thecalculation module 7314. Thetimer module 7316 is configured to measure the elapsed time from the generation of themessage 7310 until theclient machine 10 completes the instructions included in the response from the remote machine. In one embodiment, thetimer module 7316 generates a start timestamp and a completion timestamp and determines the elapsed time therebetween. In another embodiment, the timer module acts as a stopwatch and generates the elapsed time without performing calculations. In one embodiment, the elapsed time is sent to anotherremote machine 30′ for further processing, such a calculation of an expected elapsed time, trending analysis, and storage. In another embodiment, the elapsed time is forwarded to the calculation module from comparison against an expected value to determine if theenvironment 7300 is operating within specification. In still another embodiment, the elapsed time is forwarded to theremote machine 30 that the client is communicating with. - The
remote machine software 7306 is in communication with atransceiver module 7326 of theremote machine 30. Theremote machine software 7306 includes anecho application 7318, anoptional initiation module 7320, and anoptional confirmation module 7328. In one embodiment, theremote machine software 7306 is in communication with theapplication programs 7322 and theoperating system 7324 that are executing on theremote machine 30. In another embodiment, theremote machine software 7306 is in communication with a computing environment and a hypervisor executing on theremote machine 30. In still other embodiments, theremote machine software 7306 executes in a virtual machine provided by a hypervisor and, in these embodiments, communicates with application programs provided by the computing environment and the virtualized operating system of the virtual machine. Theecho application 7318 is in communication with thetransceiver module 7326 and if present each of theinitiation module 7320 and theconfirmation module 7328. In one embodiment, theecho application 7318 is invisible to the end-user of theclient machine 10. For example, theecho application 7318 can be a windowless (e.g., stealth application). The end-user does not interact directly with theecho application 7318. - The echo application generates a
graphical response 7330 to themessage 7310 from theclient software 7302. Thegraphical response message 7330 includes instructions to manipulate, modify, update, alter, or change the display of theclient machine 10 in a manner that is not perceivable by the end-user of theclient machine 10, but is perceivable byclient software 7302 of theclient machine 10. In one embodiment, theecho application 7318 executes invisibly alongside theapplication programs 7322. In such an embodiment, theecho application 7318 is subject to the same environmental effects and changes as theapplication programs 7322. - The
transceiver module 7326 is in communication withnetwork 150 and is configured to transmit theresponse 7330 from theremote machine 30 to theclient machine 10 via thenetwork 150 and receive themessage 7310 from theclient machine 10. If necessary, thetransceiver module 7304 formats theresponse 7330 for transmission via thenetwork 150 and formats themessage 7310 for execution by theremote machine 30. The transceiver module forwards the receivedmessage 7310 to theoperating system 7324 of theremote machine 30. - The
operating system 7324 is configured to read and process themessage 7310 to generate aninput event 7332 for theecho application 7318. Theinput event 7332 can be a known WINDOWS input event or a custom input event. Conceptually, theinput event 7332 is configured to cause theecho application 7318 generate thegraphic response 7330. - The
initiation module 7320 is in communication with theapplication programs 7322 and theoperating system 7324. In one embodiment, theinitiation module 7320 monitors theapplication programs 7322 and automatically initiates theecho application 7318 when a specific one of the application of theapplication programs 7322 begins executing on theremote machine 30. In another embodiment, theinitiation module 7320 initiates the echo application when theremote machine 30 receives themessage 7310. In another embodiment, theecho application 7318 is initiated when a client/remote machine session begins and remains quiescent until themessage 7310 is received. It should be understood that the initiation module can initiate one or more instances of theecho application 7318. For example, theinitiation module 7320 may start arespective echo application 7318 for eachclient machine 10 that connects to theremote machine 30 or that connects to a virtual machine provided by theremote machine 30. - The
confirmation module 7328 is in communication with theecho application 7318. In one embodiment, a function performed by theconfirmation module 7328 includes monitoring theecho application 7318 to ensure an instance of theecho application 7318 is executing for each connection between aclient machine 10 and aremote machine 30 that is of interest. Theconfirmation module 7328 may report whether theecho application 7318 is running and functioning properly to anotherremote machine 30′, such as a management server described above, or theconfirmation module 7328 may report whether theecho application 7318 is running and functioning properly to theoperating system 7324 of theremote machine 30 or to a virtual machine provided by a hypervisor. - With reference to
FIG. 74 , an embodiment of amethod 7400 of operation and interaction between theclient machine 10 andremote machine 30 is described. As a general overview, the method can be conceptualized as a generating a measurement for use in calculating an end-user experience metric in the remote machine basedcomputing environment 7300. The operation of theclient software 7302 and theremote machine software 7306 includes transmitting themessage 7310 to the application 7318 (step 77410), receiving a graphic response (step 77420) from theapplication 7318, and determining an elapsed time (step 77430) that represents the end-user's interaction experience. - In one embodiment, the
trigger module 7308 on theclient software 7302 transmits themessage 7310 via thetransceiver 7304 on a periodic basis. In another embodiment, thetrigger module 7308 generates themessage 7310 in response to end-user input. Themessage 7310 can include instructions to generate a WINDOWS message that is forwarded to theapplication 7318. Alternatively, themessage 7310 can be the WINDOWS message and represent an input event to theapplication 7318. In one embodiment, themessage 7310 is transferred over a separate virtual channel within the ICA protocol stream, and a WINDOWS message generated by theremote machine software 7306 when themessage 7310 is received. - When the
remote machine software 7306 receives themessage 7310, theecho application 7318 processes the instructions of themessage 7310 and generates thegraphic response 7330. In one embodiment, thegraphic response 7330 generates a change on the display of the client that is undetectable by the end-user. In various embodiments, thegraphic response 7330 can include instructions to change a small number of pixels on the client display, instructions to change single pixel at the origin (i.e., top left corner) of the client display, instructions to cycle a pixel of the display through a range of values, or instructions to cycle a change through a range of pixel locations of the display. - When the
client software 7302 processes thegraphic response 7330, the elapsed time between the transmission of the transmission of themessage 7310 and the completion of the processing of thegraphic response 7330 is determined. In one embodiment, theclient software 7302 determines the elapsed time and forwards the elapsed time to a managementremote machine 30′ for storage and trending analysis. In another embodiment, a start timestamp and an end timestamp are forwarded from thetimer module 7316 the managementremote machine 30′. In such an embodiment the managementremote machine 30′ determines the elapsed time. It should be understood that the elapsed time measurement is equivalent to the interaction experience as used herein. - The management
remote machine 30′ can store multiple interaction experience measurements. The stored measurements can be used to isolate which portion of aclient machine 10 connection is not performing as expected. For example, network timing measurement for the same time period can be compared to the interaction experience to isolate application, virtual machine, and execution machine load trends. Also, the stored interaction experience measurements can be analyzed using known methods to determine an expected interaction experience value. The expected value can be compared to the measured value, either by thecalculation module 7314 of theclient software 7302 or the managementremote machine 30′. - With reference to
FIG. 75 , an embodiment of the operational method 7500 of theremote machine 30 andremote machine software 7306 is described. After theclient machine 10 initiates (step 77505) established a session with aremote machine 30, the remote machine software initiates (step 77510) theecho application 7318. Theremote machine 30 receives (step 77520) themessage 7310 from theclient machine 10. Once themessage 7310 is received, theconfirmation module 7328 confirms (step 77530) that theecho application 7318 is executing. From themessage 7310, theoperating system 7324, or the hypervisor, generates (step 77540) theinput event 7332 that is processed by the echo application to generate (step 77550) thegraphic response 7330. - The
remote machine software 7306initiation module 7320 initiates (step 77510) theecho application 7318 when theclient machine 10 starts the session. In one embodiment, asingle echo application 7318 is initiated. In other embodiments, anecho application 7318 is started for each of theapplications programs 7322 executing on theremote machine 30. In such embodiments, the interaction experience can be measured on an application by application basis. In other embodiments, anecho application 7318 is started for each of the virtual machines executing on theremote machine 30. In these embodiments, the interaction experience can be measured on a virtual machine basis. In another embodiment, asingle echo application 7318 is started for an execution machine executing multipleprogram application programs 7322. For example, a remote machine may communicate withmultiple client machines 10. Each of theclient machines 10 connects to theremote machine 30 through a different network path and thus has a different interaction experience. Theecho application 7318 is not visible to the user. That is, the user does not interact directly with theecho application 7318 and theecho application 7318 is not show on the display of the client. In one embodiment, theecho application 7318 is a windowless application. - The
transceiver module 7326 receives (step 77520) themessage 7310 from theclient machine 10. In one embodiment, thetransceiver module 7326 includes a network interface card that communicates with thenetwork 150. The transceiver module can format the receivedmessage 7310 so that themessage 7310 is readable by theoperating system 7324. - Prior to generating the
graphic response 7330, theconfirmation module 7328 confirms (step 77530) that theecho application 7318 is executing in user space assigned by the operating system. In some embodiments, the user space is assigned by the native operating system, that is, the operating system of the execution machine. In other embodiments, the user space is assigned by a virtualized operating system, that is, an operating system of a virtual machine provided by a hypervisor. In one embodiment, theconfirmation module 7328 communicates an indication that theecho application 7318 is executing to the operating system. In one embodiment, theremote machine 30 creates a log even on theremote machine 30 to indicate thatecho application 7318 was not running when themessage 7310 was received or when the session was initiated. - Once confirmation of the execution of the
echo application 7318 is received, the operating system processes themessage 7310 thereby generating (step 77540) theinput event 7332. In one embodiment, the input event is a WINDOWS message that is forwarded to theecho application 7318 to model a normal input event WINDOWS message. The input event is designed to cause theecho application 7318 to generate agraphic response 7330. Exemplary input events can include, but are not limited to, mouse movements, keyboard strokes, window generation, window destruction, or any other event that generates a graphic response from theecho application 7318. In another embodiment, the input event is a custom “user-defined” application specific WINDOWS message. - The
echo application 7318 processes theinput event 7332 and generates (step 77550) thegraphic response 7330, which is in turn forwarded to theclient machine 10. In various embodiments, thegraphic response 7330 is generated once theecho application 7318 has performed a set of tasks such as: calculations, memory usage, disk access, and network resource access. Theecho application 7318 can be configured by an administrator to perform specified tasks. In another embodiment, theecho application 7318 can perform execution tasks that mirror an application program 158 executing on theremote machine 30 and generate thegraphic response 7330. - In one embodiment, the
graphic response 7330 includes instructions that cause a change on the display of theclient machine 10 that is not detectable by the end-user. For example, thegraphic response 7330 includes instructions to change a single pixel at the origin of the display. More complex graphic responses can be used to differentiate from graphic generated by theapplication programs 7322 or to detect any response indicators lost from graphic protocol optimizations. For example, the pixel value can cycle through an expected range of values. In another embodiment, the graphic response causes a pixel location to cycle through an expected range of pixel locations. Another example of a graphic response is a BitBIt with an unexpected Raster-Operation, either to the display or an off-screen surface (e.g., an off-screen buffer). - In addition to measuring the overall end-user interaction experience, in various embodiments, sub-metrics that comprise the overall end-user interaction experience metric can be measured and recorded. Generally, these sub-metrics include the time required by the
client machine 10 to generate and send thetrigger message 7310, thenetwork 150 latency, the time required by theremote machine 30 to process themessage 7310 and generate and transmit thegraphic response 7330, and the time required by theclient machine 10 to process thegraphic response 7330. - With reference to
FIG. 76 andFIG. 77 , embodiments of a method of generatingclient machine 10 sub-metrics are described. From the perspective of theclient machine 10, there are two types of sub-metrics that are generated a) those related to generating and transmitting thetrigger message 7310 as shown inFIG. 76 and b) those related to detecting and processing thegraphic response 7330 as shown inFIG. 77 . - With reference to
FIG. 76 , one embodiment of amethod 7600 for capturing sub-metrics related to generating thetrigger message 7310 is described. Assuming that thetrigger message 7310 is generated in response to use of theinput device 7312, thetrigger module 7304 detects (step 77610) use of the input event and marks (step 77620) the time of detection. The trigger module generates (step 77630) themessage 7310 and marks (step 77640) the time the message generating is completed. Thetrigger module 7308 forwards themessage 7310 to the transceiver 304, which then transmits (step 77650) themessage 7310 to theremote machine 30. Thetrigger module 7308 or thetransceiver module 7304 marks (step 77660) the time themessage 7310 is transmitted to theremote machine 30. - With reference to
FIG. 77 , one embodiment of a method 7700 for capturing sub-metrics related to processing theresponse 7330 is described. The transceiver 304 receives (step 7710) thegraphic response 7330 from theremote machine 30 and marks (step 7720) the time of receipt. Theclient software 7302 process (step 7730) thegraphic response 7330. Upon completion of processing thegraphic response 7330, theclient software 7302 marks (step 7740) the time of completion. Once complete, theclient software 7302 displays the graphic response and detects (step 7750) that thegraphic response 7330 is displayed. Theclient software 7302 also marks (step 7760) the time of detection on the display. - The above-described actions of marking certain times that indicate the occurrence of certain events can occur in different ways. In one embodiment, multiple timers are started and stopped by the
timer module 7316 upon the occurrence of each of the above-described events. In another embodiment, a single timer is used and the split times (i.e., the time elapsed between the occurrence of the events) are saved in a table that is accessible by thecalculation module 7314. In still another embodiment, a time stamp is added to themessage 7310 and thegraphic response 7330 for each of the marking actions. In such an embodiment, prior to transmitting themessage 7310 the time stamps are reported to thecalculation module 7314, where the elapsed time between each time stamp is determined. These elapsed times represent the above-described different sub-metrics. It should be understood that various combinations of the elapsed times can also be used. For example, the time stamp related to the detection of the use of the input device and the time stamp that indicates the transmission of themessage 7310 can be processed to determine the total elapsed used by theclient machine 10 to generate and send themessage 7310 to theremote machine 30. The principles described above with respect to the generation of themessage 7310 are equally applicable to the processing of thegraphic response 7330 by theclient machine 10. - With reference to
FIG. 78 , one embodiment of a method 7800 for capturing sub-metrics related to generating thegraphic response 7330 is described. The transceiver 320 receives (step 7810) themessage 7310 from theclient machine 10 and marks (step 7820) the time of receipt. Theoperating system 7324 then generates (step 7830) theinput event 7332. Theremote machine software 7306 marks (step 7840) the time of completion of the generation of theinput event 7332. Theecho application 7318 receives (step 7850) theinput event 7332 and theremote machine software 7306 marks (step 7860) the time of receipt of theinput event 7332. Once theecho application 7318 receives the input event, theecho application 7318 generates (step 7870) thegraphic response 7330. Theremote machine software 7306 marks (step 7880) the time theecho application 7318 completes generating thegraphic response 7330. In one embodiment, the time required to generate thegraphic response 7330 by theecho application 7318 includes the echo application performing additional executions tasks that similar to those performed by theapplication programs 7322. Thetransceiver module 7326 receives thegraphic response 7330 and transmits (step 7890) thegraphic response 7330 to theclient machine 10. The remote machine software also marks (steps 900) the time thegraphic response 7330 is sent. - Similar to the marking of events described with reference to the
client machine 10, the same methods can be employed with regard to theremote machine 30. In one embodiment, multiple timers are started and stopped by thetimer module 7316 upon the occurrence of each of the above-described events. In another embodiment, a single timer is used and the split times (i.e., the time elapsed between the occurrence of the events) are saved in a table that is accessible by thecalculation module 7314. In still another embodiment, a time stamp is added to thegraphic response 7330 for each of the marking actions. In such an embodiment, upon receipt of thegraphic response 7330 the time stamps are reported to thecalculation module 7314, where the elapsed time between each time stamp is determined. These elapsed times represent the above-described different sub-metrics. It should be understood that various combinations of the elapsed times can also be used. For example, the time stamp related to detecting receipt of themessage 7310 and the time stamp that indicates the transmission of thegraphic response 7330 can be processed to determine the total elapsed used by theremote machine 30 to generate and send the graphic response to theclient machine 10. - Referring now to
FIG. 79 , another system for increasing the convenience and usability of the systems described above is shown. A client-server computer system 7900 includes afirst client machine 10, asecond client machine 10, and aremote machine 30. The depiction of two client machines is for illustrative purposes only. The client-server computer system can include any number of client machines. - In one embodiment, the
first client machine 10 includes aninput module 7908, aclient process 7910, anetwork module 7912, and adisplay module 7914. Theinput module 7908 provides an interface for a user of thefirst client machine 10 to interact with thefirst client machine 10, for example to request the remote execution of anapplication 7916 in anapplication session 7918 from theremote machine 30. - An
application session 7918 is a process, operating on theremote machine 30 that provides access to or supports the execution of one or more resources, such asapplication 7916. Anapplication 7916 can be a software program, for example, or any organized set of software code capable of being executed by a computer, or hardwired into circuitry in the form of an Application Specific Integrated Circuit (ASIC), read only memory (ROM) microchip, and the like. Example applications include, but are not limited to Microsoft Word (available from Microsoft Corporation Redmond, Wash.), Internet Explorer (Microsoft), Acrobat (available from Adobe Systems, Inc. San Jose, Calif.), etc. In one embodiment, anapplication session 7918 includes adesktop application 7916 from which the execution ofother application 7916 can be initiated.Application sessions 7918 can be nested withinother application sessions 7918. In another embodiment, theapplication session 7918 includes an instance of the execution of asingle application 7916. - In one embodiment, the
input module 7908 is, for example, a graphical user interface that provides one or more icons or menu selections for a user to select. Each icon or menu selection represents aspecific application 7916 available for remote execution. Selecting an icon or menu selection initiates the transmittal of a log-on request to theremote machine 30 for access to thatapplication 7916. In another embodiment, an icon or menu selection does not represent anyspecific application 7916, but instead represents a generalremote machine 30 log-on procedure. In another embodiment, theinput module 7908 is non-graphical user interface. In this embodiment, the user can enter a command to send a log-on request toremote machine 30. Entering a command can include typing a predefined set of characters or depressing a specified key sequence on an input device (e.g., a keyboard or keypad). The log-on request at least includes user-provided authentication information. Theinput module 7908 accepts the input of the user-provided authentication information, which can include any type of authentication information, including without limitation any of user name-password/PIN combinations, voice samples, one-time passcodes, biometric data, digital certificates, smart card data, etc. In some embodiments, theinput module 7908 is in communication with additional hardware peripherals (not shown) to facilitate acceptance of user authentication information. In other embodiments, theinput module 7908 can accept authentication information outside of the log-on process. - The
input module 7908 accepts authentication information and provides it to theclient process 7910. Theclient process 7910 then manages the client side functionality of the remotely executing application session. Theclient process 7910 forwards user input including the authentication information and requests for termination or disconnection ofapplication sessions 7918 to theremote machine 30. Theclient process 7910 also handles data incoming from theremote machine 30, for example, by forwarding the graphical output of anapplication session 7918 to thedisplay module 7914. - The
network module 7912 provides for communication between thefirst client machine 10 and theremote machine 30. The network module sends user input, such as authentication information and requests for access to, disconnection from, or termination ofapplication sessions 7918 executing on theremote machine 30. The network module also receives output from theapplication sessions 7918 and forwards the output to theclient process 7910. In one embodiment, thenetwork module 7912 encapsulates user input into, and reconstitutes application session output from, a predetermined protocol for transmission to theremote machine 30. In another embodiment, the network module encrypts outgoing transmissions and decrypts incoming transmissions. - The
display module 7914 displays the output of anapplication 7916 from a remotely-executingapplication session 7918. Thenetwork module 7920 provides communication functionality for theremote machine 30. For example, thenetwork module 7920 receives communications from first andsecond client machines 10 over one or more data networks or links 150. Thenetwork module 7920 also transmits resource output data to the first andsecond client machines 10. In one embodiment, thenetwork module 7920 encrypts outgoing communications and decrypts incoming communications. Likewise, in one embodiment, thenetwork module 7920 encapsulates outgoing communications in a protocol for transmission and retrieves incoming data from transmissions received according to a protocol. Protocols can include, for example and without limitation, HTTP, Independent Computing Architecture (ICA) protocol (used by Citrix, Systems, Inc. Ft. Lauderdale, Fla.), Remote Desktop Protocol (RDP) (Microsoft Corporation), or Common Gateway Protocol (CGP) (Citrix). Thenetwork module 7920 of theremote machine 30 communicates with thenetwork module 7912 of thefirst client machine 10 over anetwork 150. Thenetwork 150 can be implemented with any of a variety of suitable technologies. Incoming communications, once decrypted or retrieved from a protocol (if necessary), are forwarded to anapplication session 7918 or to theserver process 7922, as appropriate. - The
server process 7922 manages the execution, suspension to disk, resumption of execution, suspension without writing state to disk, and termination ofapplication sessions 7918 and the connections and disconnections of thoseapplication sessions 7918 to the first andsecond client machines 10. Theserver process 7922 can initiatenew application sessions 7918, disconnect aclient machine 10 from anapplication session 7918, detect aclient machine 10 disconnection from anapplication session 7918, locate anapplication session 7918 from which a user has disconnected, locate an application to which a user of thefirst client machine 10 is connected to from thesecond client machine 10, and connect a user to adisconnected application session 7918. In some embodiments, theapplication sessions 7918 are provided so as to be configured with the user's personal preferences and access allowances. - The
server process 7922 may execute in the hypervisor, a virtual machine provided by the hypervisor, a guest operating system executing in a virtual machine, an operating system provided by the physical machine or in combinations of those entities. - The
application output transmitter 7924 transmits output from anapplication session 7918 to aclient machine 10 through thenetwork module 7920. Theapplication output transmitter 7924 intercepts the output of anapplication session 7918 and determines whichclient machine 10 is connected to theapplication session 7918. In other embodiments, the identity of theclient machine 10 that is connected to theapplication session 7918 is stored at the time the connection is made. If theapplication session 7918 is connected to a client station, theapplication output transmitter 7924 transmits the application output data to the connectedclient machine 10 via thenetwork module 7920. In one embodiment, if the application session is not connected to aclient machine 10, theapplication output transmitter 7924 discards the application output data and waits to receive future application output data. In another embodiment, if theapplication session 7918 is not connected to aclient machine 10, theapplication output transmitter 7924 disregards all further application output data until theapplication output transmitter 7924 receives notification that theapplication session 7918 has connected to aclient machine 10. In another embodiment, theapplication output transmitter 7924 stores the data until theapplication output transmitter 7924 receives notification that theapplication session 7918 has connected to aclient machine 10. In another embodiment, theapplication output transmitter 7924 attempts to send application output data to aclient machine 10 until theserver process 7922 notifies theapplication output transmitter 7924 that theclient machine 10 is disconnected from theremote machine 30. In one embodiment, theapplication output transmitter 7924 determines whichclient machine 10, if any, theapplication session 7918 is connected to by consulting thedata store 7926. - The
data store 7926 includes information related to application sessions initiated by users. The data store can be stored in volatile or non-volatile memory or, for example, distributed through multiple servers. In some embodiments, the functionality of adata store 7926 is provided by asession server 8620 as described in connection withFIG. 86 . - In one embodiment,
remote machine 30 also includes arules source 7928. The rules source 7928 stores rules governing the reaction of theserver process 7922 to a user transmitting authentication information to theremote machine 30. In one embodiment, the rules stored in the rules source 7928 are specified at least in part by the system administrator. In another embodiment, a user specifies at least some of the rules stored in therules source 7928. The user-specified rule(s) are stored as preferences. The rules source 7928 can be stored in volatile or non-volatile memory or, for example, distributed through multiple servers. - One rule stored in the
rule source 7928, for example, might require or forbid automatic connection to disconnectedapplication sessions 7918. Another rule might require or forbid automatic connection toactive application sessions 7918 currently connected to adifferent client machine 10. Yet another rule might make connection and/or connection contingent on theclient machine 10 that requests access being within a secure network. A further rule might only allow connection toapplication sessions 7918 after receiving user approval. Another rule might only allow connection for a predetermined time after disconnection. Still another rule only allows connection toapplication sessions 7918 that includespecific application 7916. - The
authentication module 7930 is responsible for authenticating a user that attempts to log on to theremote machine 30. Theauthentication module 7930 receives user-provided authentication information transmitted from thefirst client machine 10. Theauthentication module 7930 then authenticates the user based on the user-provided authentication information. In response to a successful authentication, theauthentication module 7930 transmits the results of the authentication process (e.g., allow or deny access, the user's system ID, client computer ID, user access permissions, etc.) to theserver process 7922. - In one embodiment, the above-described modules and processes of the remote machine 30 (i.e., the
network module 7920, theserver process 7922, theapplication output transmitter 7924, and the authentication module 7930) and a client machine 10 (i.e. theinput module 7908, theclient process 7910, thenetwork module 7912 and the display module 7914) are all implemented in software executable on one of several computer operating systems, including without limitation the Windows family of operating systems (Microsoft Corporation), the MacOS family of operating systems (Apple Computer, Inc., Cupertino, Calif.), and Unix based operating systems (e.g., Solaris, Sun Microsystems, Sunnyvale, Calif.). In other embodiments, one or more modules or processes are implemented in hardware as application specific integrated circuits (ASICs), Read Only Memory (ROM) devices, or other digital hardware circuitry. - Unintentional termination of
application sessions 7918 resulting from imperfect network connections and users′ failure to terminate theirapplication sessions 7918 themselves can lead to user difficulties. One embodiment of the invention limits these difficulties by differentiating disconnection (which is treated as if the user is not done working with an application session 7918) from termination (which is assumed to be an intentional end to the application session) and by correlatingapplication sessions 7918 with users as opposed to client machines. When a user is finished using anapplication 7916 operating in anapplication session 7918, the user can terminate anapplication session 7918. Termination generally involves the affirmative input of the user indicating that the server should no longer maintain theapplication session 7918. Such affirmative user input can include selecting an “Exit” option from a menu, clicking on an icon, etc. In response to theserver process 7922 receiving a termination request, the execution of theapplication session 7918 and anyapplication 7916 within thatapplication session 7918 is halted. In one embodiment, data related to theapplication session 7918 is also removed from thedata store 7926. - Disconnection, either intentional or unintentional, on the other hand, does not result in termination of
application sessions 7918. Since the application or applications operating in anapplication session 7918 are executing on theremote machine 30, a connection to thefirst client machine 10 is not usually necessary to continue execution of theapplication 7916, and in one embodiment theapplication 7916 can continue to execute while waiting for the user to connect. In an alternative embodiment, upon disconnection of a user, theserver process 7922 stalls the execution of theapplication 7916 operating in theapplication session 7918. That is, theserver process 7922 halts further execution of theapplication 7916, and theserver process 7922 stores the operational state of theapplication 7916 and any data theapplication 7916 is processing. In a further embodiment, theserver process 7922 can selectively stall execution ofspecific application 7916 after a user disconnects. For example, in one embodiment, the server continues execution of anapplication 7916 for a fixed time period, and if a user fails to connect within that time period, theserver process 7922 stalls theapplication 7916. In another embodiment, the server stalls specifiedapplication sessions 7918 that cannot continue executing without user input. In each of the above-described embodiments, if the user of thefirst client machine 10 disconnects from theremote machine 30 and then connects to theremote machine 30 while operating thefirst client machine 10, thesecond client machine 10, or a third client computer, theserver process 7922 can connect the client computer operated by the user to one or more previously initiated, non-terminated application session(s) 118 associated with the user, and reinitiate execution of any stalledapplication 7916. - In one embodiment, the
server process 7922 detects a disconnection. A user can intentionally and manually instruct the server to disconnect anapplication session 7918 from theclient machine 10 that the user is communicating from. For example, in one embodiment,application sessions 7918 provide a menu option for disconnection (as distinguished from termination above) that a user can select. Theserver process 7922 can also detect an unintentional disconnection. For example, in one embodiment, thenetwork module 7920 of theremote machine 30 informs theserver process 7922 when a predetermined number of data packets transmitted by thenetwork module 7920 to aclient machine 10 have not been acknowledged by theclient machine 10. In another embodiment, theclient machine 10 periodically transmits a signal to theremote machine 30 to confirm that a connection is still intact. If theserver process 7922 detects that a predetermined number of expected confirmation signals from aclient machine 10 have not arrived, theserver process 7922 determines that theclient machine 10 has disconnected. If theserver process 7922 detects that a user has disconnected from anapplication session 7918, either intentionally, or unintentionally, the entry in thedata store 7926 related to the disconnectedapplication session 7918 is modified to reflect the disconnection. - Referring also to
FIG. 80 , amethod 8000 of providing remote access to an application session, in one embodiment, begins with thenetwork module 7920 of theremote machine 30 receiving authentication information associated with a user (step 8002). Authentication information can include a number of types of authentication information, including without limitation user names, client names, client addresses, passwords, PINs, voice samples, one-time passcodes, biometric data, digital certificates, tickets, etc. and combinations thereof. The authentication information could be in the form of a log-on request from a user. As described above, a log-on request can be initiated by a user through theinput module 7908 of aclient machine 10. The client's network module forwards the request to theserver process 7922. - In one embodiment, upon receiving the request, the
server process 7922 forwards the user-provided authentication information to theauthentication module 7930, which authenticates the identity of the user. The server'sauthentication module 7930 can perform the authentication itself and/or in cooperation with one or other modules or computers, such as a domain server, an authentication service, etc. Successful authentication results in the authentication module transmitting identification information for the user (e.g., a username or ID) to theserver process 7922. - In response to receiving authentication information associated with the user the
server process 7922 identifies any disconnectedapplication sessions 7918 associated with the user that are executing, stalled on theremote machine 30, or suspended to disk (step 8004). In one embodiment, theserver process 7922 identifies theapplication sessions 7918 upon receiving the authentication information. In another embodiment, the server process identifies the applications in response to receiving the authentication information after theauthentication module 7930 verifies of the user's identity. In one embodiment,server process 7922 determines whether any suchdisconnected application sessions 7918 exist by consulting thedata store 7926 for sessions, which is some embodiments is a persistent data store, related to the user. For example, the disconnectedapplication session 7918 could have been disconnected by direction of the user of theapplication session 7918, resulting in theserver process 7922 disconnecting theapplication session 7918, for example, by modifying the status ofapplication session 7918 in thedata store 7926 to “disconnected,” and deleting the identification of the connectedclient machine 10 in thedata store 7926 entry for theapplication session 7918. In another embodiment, the disconnection was unintentional. Unintentional disconnection results in theserver process 7922 making the same modifications to thedata store 7926 as would be made as a result of an intentional disconnection. - Upon identifying any disconnected application sessions 7918 (step 8004), in one embodiment, the
server process 7922 prompts the user to indicate whether connection is desired. If connection is not desired, theserver process 7922 prompts the user to indicate whether the disconnectedapplications sessions 7918 should remain disconnected, or whether theapplication sessions 7918 should be suspended to disk, paused, or terminated. In an alternative embodiment, theserver process 7922 consults a rule stored in the rules source 7928 to determine whether connection and/or connection is permitted and/or required. - In an alternative embodiment, the user connects to the
remote machine 30, theserver process 7922, and any disconnected application sessions by utilizing a single user interface element, for example clicking an icon labeled “Log-on.” In this embodiment, activating the single user interface will automatically connect the user to any disconnectedapplications sessions 7918. - In one embodiment, the client can be configured to automatically send authentication information upon such user connection. If connection is permitted, and is either assented to by user or is automatic, the
server process 7922 connects the user to the disconnected application sessions (step 8006). In one embodiment, connection includes modifying the entry in thedata store 7926 to indicate that the user is connected to theapplication session 7918 and to indicate from whichclient machine 10 the user is connected to the server. Upon connection, theremote machine 30 resumes transmitting application output data from theapplication output transmitter 7924 to the client 10 (step 8008). In another embodiment, the application output transmitter consults the rules source 7928 before beginning transmitting application output to ensure such transmission is permitted. - Application sessions are associated primarily with users instead of the
client machine 10 which the user was operating when the user previously had connected to, (and then been disconnected from) the server. As a result, rules permitting, the user can reconnect to anapplication session 7918 from thefirst client machine 10, thesecond client machine 10, or any other client computer. In other embodiments, the user of theclient machine 10 may be given further options, such as “reconnect to all sessions not executing on a virtual machine,” suspend all sessions executing on a virtual machine,” “reconnect all sessions currently hosted,” or “reconnect to all session not suspended,” for example. - Referring to
FIG. 81 , even if a session is not disconnected (i.e., is active) it can be useful to transfer the session from one client to another. For example, it may be that an application session was disconnected, but the server did not yet detect the disconnection. It may be that the user deliberately left a session running, but would now like to access the session from another location. - A
method 8100 for transferringactive application sessions 7918 from afirst client machine 10 to asecond client machine 10 typically begins with thenetwork module 7920 receiving authentication information from a user, for example in the form of a log-on request. In one embodiment, the user submits the authentication information via theinput module 7908. The authentication information can be transmitted by thenetwork module 7912 ofsecond client machine 10 to theremote machine 30. Thenetwork module 7920 of theremote machine 30 can forward the request to theserver process 7922. - The
server process 7922 receives the user-provided authentication information (step 8102). In one embodiment, theserver process 7922 forwards the user-provided authentication information to anauthentication module 7930, which authenticates the identity of the user using, for example, any of the variety of authentication techniques described above. Successful authentication results in the authentication module transmitting for example, identification information for the user to theserver process 7922. - After receiving authentication information (step 8102), the server process consults the
data store 7926 to identify anyactive application sessions 7918 that are associated with the user, but that are connected to a different client computer, such as thefirst client machine 10 as an illustrative example (step 8104). In one embodiment, if theserver process 7922 identifies any suchactive application sessions 7918, the server process automatically disconnects the application session(s) 118 from the first client machine 10 (step 8106) and connects the application session(s) 118 to the current client machine 10 (step 8108). In one embodiment, the user can trigger the automatic consultation of the data store and subsequent connection with the selection of a single user interface element. - In an alternative embodiment, the
server process 7922 prompts the user as to whether the user wants to have the active application session(s) 118 connected to thecurrent client machine 10. If the user declines to transfer one or more of the active application session(s), theserver process 7922 prompts the user to either keep the application session(s) 118 active, suspend the application session to disk, pause the application session, or to terminate the application session(s) 118. In an alternative embodiment, theserver process 7922 consults a rule stored in the rules source 7928 to determine whether transfer of the active application session(s) 118 are permitted before transferring the active application session(s) 118. - If transfer of the application session(s) 118 are permitted and transfer is automatic or requested by the user, in one embodiment the
server process 7922 carries out the disconnection (step 8106) and connection (step 8108) by modifying the entry maintained in thedata store 7926 for theapplication session 7918 to substitute the identity of the storedclient machine 10 with the identity of the current client computer, i.e. theclient machine 10. Upon connection with thecurrent client machine 10, theapplication output transmitter 7924 begins transmitting application output to the current computer (step 8110). In another embodiment, the application output transmitter consults the rules source 7928 before beginning transmitting application output to ensure such transmission is permitted. - It should be understood that the methods of
FIG. 80 andFIG. 81 can be combined to allow a client to be connected to disconnected, suspended, paused, and active sessions associated with a user. In addition, prior to transfer or reconnection, the active and/or disconnected sessions could have been connected to the same or several different client machines. - Referring to
FIG. 82 , as mentioned above, theremote machine 30 can be implemented as amachine farm 38. In one embodiment, themachine farm 38 includes severalremote machines Several client machines machine farm 38 over anetwork 150. Theservers machine farm 38. For example, if a user is accessing threeapplication sessions different server more application 7916 through asingle application session server process 7922 of themachine farm 38 can assign one application to execute on oneserver 30 and another application to execute onserver 30′. In a machine farm configuration, the modules of theserver data store 7926, and the rules source 7928 (FIG. 1 ), can be stored on asingle server servers - With respect to connecting to the
machine farm 38 after a disconnection or after changingclient machines server process 7922 treats theservers application sessions separate servers machine farm 38 or changes theclient computer machine farm 38, theserver process 7922 of themachine farm 38 can automatically connect the user'sclient computer application sessions severs - In one embodiment of the system, a user of a
first client computer 10, which in this example is a mobile handheld computer, logs on to themachine farm 38 via a wireless modem and requests twoapplication sessions 8218 a and 8218 b. Theserver process 7922 of themachine farm 38 launches afirst application session 8218 a on afirst server 30 and a second application session on asecond server 30′. The wireless modem loses its connection with the machine farm when the user of thefirst computer 10 enters an elevator. Theserver process 7922 of themachine farm 38 determines that the user is disconnected, and theserver process 7922 updates thedata store 7926 accordingly. - The user then logs on to the
machine farm 38 from asecond client computer 10′, which in this example is a desktop computer in his office. Theserver process 7922 consults thedata store 7926 and determines that twodisconnected application sessions 8218 a and 8218 b are associated with the user. The server process 7922 (assuming no rules to the contrary) automatically connects thesecond client computer 10′ to bothapplication sessions 8218 a and 8218 b executing onservers - The user then leaves the
second client computer 10′ without disconnecting from themachine farm 38 and logs on to themachine farm 38 from athird client computer 10″, for example a colleague's laptop. Upon logging on from thethird client computer 10″, the server process consults thedata store 7926 and determines that the user is associated with the twoactive application sessions 8218 a and 8218 b connected to thesecond client computer 10′. The server process 7922 (assuming no rules to the contrary) then automatically disconnects both of theapplication sessions 8218 a and 8218 b from thesecond client computer 10′, and connects both of theapplication sessions 8218 a and 8218 b to thethird client computer 10″. - The user next selects a disconnect option for each
application session 8218 a and 8218 b. Theserver process 7922 updates thedata store 7926 to indicate that theapplication sessions 8218 a and 8218 b have been disconnected. The user then logs on to themachine farm 38 from thesecond client computer 10′. Theserver process 7922 consults thedata store 7926 and determines that twodisconnected application sessions 8218 a and 8218 b are associated with the user. The server process 7922 (assuming no rules to the contrary) automatically connects the disconnectedapplication sessions 8218 a and 8218 b to thesecond client computer 10′. - Referring now to
FIG. 83 , a flow diagram depicts one embodiment of the steps taken in a method for providing remote access to a computing environment provided by a virtualized operating system. In brief overview, authentication information associated with a user of aclient machine 10 is received (step 8302). Based on the received authentication information, a computing environment provided by a virtualized operating system and already associated with the user is identified (step 8304). A connection is established between theclient machine 10 and the identified computing environment (step 8306). - In some embodiments the methods and systems described above in connection with
FIGS. 79-82 may be implemented in systems including virtual machines. In some embodiments, theclient machine 10 has established a connection to a physical machine providing access to a resource requested by theclient machine 10. In this embodiment, theclient machine 10 may be connected to a disconnected application session and receive application output as described above in connection withFIGS. 79-82 . - In other embodiments, the
client machine 10 has established a connection to a virtual machine providing access to a resource. In one of these embodiments, theclient machine 10 may be reconnected to an application session executing on the virtual machine. In another of these embodiments, theclient machine 10 may be reconnected to a plurality of application sessions executing within a computing environment provided by a virtual machine. In still another of these embodiments, theclient machine 10 may be reconnected to an application session comprising a plurality of application programs executing within a computing environment provided by a virtual machine. In yet another of these embodiments, theclient machine 10 may be reconnected to an application session comprising a plurality of computing environments provided by a virtual machine. - Referring still to
FIG. 83 , and in greater detail, authentication information associated with a user of aclient machine 10 is received (step 8302). In one embodiment, responsive to the received authentication information, a collection agent gathers information about theclient machine 10. In some embodiments, the user of theclient machine 10 is authenticated responsive to the received authentication information. - Based on the received authentication information, a computing environment provided by a virtualized operating system and already associated with the user is identified (step 8304). In some embodiments, the authentication information includes an access control decision, generated as described above in connection with
FIGS. 7A and 7B . As described above, aclient machine 10 requests access to a resource, a collection agent gathers information about theclient machine 10, and a policy engine makes an access control decision. In one of these embodiments, the identification of the computing environment already associated with the user is made in response to the received authentication information. In another of these embodiments, a connection is established between theclient machine 10 and the identified computing environment. In still another of these embodiments, aremote machine 30, acting as an intermediary server, receives the authentication information including the access control decision, and establishes a connection between theclient machine 10 and aremote machine 30′, acting as an execution machine providing the user of theclient machine 10 with access to the requested resource. - In one embodiment, based on the received authentication information and gathered client machine information, a computing environment provided by a virtualized operating system and already associated with the user is identified. In another embodiment, stored data associated with at least one computing environment is consulted to identify, based on the received authentication information, a computing environment provided by a virtualized operating system and already associated with the user. In still another embodiment, based on the received authentication information, an identification is made of a first computing environment provided by a first virtualized operating system and a second computing environment provided by a second virtualized operating system, the first and second computing environments already associated with the user. In yet another embodiment, based on the received authentication information, an identification is made of a first computing environment provided by a first virtualized operating system executing on a first server and a second computing environment provided by a second virtualized operating system executing on a second server, the first and second computing environments already associated with the user.
- A connection is established between the
client machine 10 and the identified computing environment (step 8306). In one embodiment, the connection is established between theclient machine 10 and the identified computing environment subject to a rule. In another embodiment, a connection is established between theclient machine 10 and the identified computing environment subject to a policy applied to the received authentication information and gathered client machine information. - In some embodiments, a request is received to disconnect the client machine from the identified computing environment. In one of these embodiments, the connection between the client machine and the identified computing environment is terminated. In another of these embodiments, a data record associated with the identified computing environment is updated to indicate that the client machine is disconnected. In still another of these embodiments, an execution of the identified computing environment is continued. The execution may continue although the client is disconnected from the identified computing environment.
- In some embodiments, authentication information associated with the user is received. In one of these embodiments, the user uses a
second client machine 10′. In another of these embodiments, an identification is made, based on the received authentication information of a computing environment provided by a virtualized operating system and already associated with the user. In still another of these embodiments, a connection is established between thesecond client machine 10′ and the identified computing environment. In yet another of these embodiments, the connection between thefirst client machine 10 and the identified computing environment is terminated. - Referring now to
FIG. 84 , a flow diagram depicts an embodiment of the steps taken in a method for providing remote access to a plurality of application sessions. In brief overview, a selection of a single user interface element by a user of aclient machine 10 is received at the client machine 10 (step 8410). In response to the user interface element selection, authentication information associated with the user is transmitted (step 8412). Based on the transmitted authentication information, a computing environment provided by a virtualized operating system and already associated with the user is identified (step 8414). A connection is established between the client machine and the identified computing environment (step 8416). - A selection of a single user interface element by a user of a
client machine 10 is received at the client machine 10 (step 8410). In response to the user interface element selection, authentication information associated with the user is transmitted (step 8412). In one embodiment, a collection agent gathers information about the client machine in response to the received information. In another embodiment, a policy engine makes an access control decision responsive to the gathered information, as described above in connection withFIG. 7A andFIG. 7B . In some embodiments, based on the received authentication information and on gathered client machine information, an identification is made of a computing environment provided by a virtualized operating system and already associated with the user. In other embodiments, the user is authenticated responsive to the received authentication information. - Based on the transmitted authentication information, a computing environment provided by a virtualized operating system and already associated with the user is identified (step 8414). In one embodiment, a connection is established between the client machine and the identified computing environment subject to a rule applied to the received authentication information and to gathered client machine information. In another embodiment, based on the received identification, an identification is made of a first computing environment provided by a first virtualized operating system and a second computing environment provided by a second virtualized operating system, the first and second computing environments already associated with the user. In still another embodiment, based on the received authentication information, an identification is made of a first computing environment provided by a first virtualized operating system executing on a first server and a second computing environment provided by a second virtualized operating system executing on a second server, the first and second computing environments already associated with the user. In some embodiments, stored data associated with at least one computing environment is consulted to identify, based on the received authentication information, a computing environment provided by a virtualized operating system and already associated with the user.
- A connection is established between the client machine and the identified computing environment (step 8416). In one embodiment, the connection between the client machine and the identified computing environment is made subject to a rule. In some embodiments, authentication information associated with the
client machine 10 is received including an access control decision, generated as described above in connection withFIGS. 7A and 7B . In one of these embodiments, the identification of the computing environment already associated with the user is made in response to the received authentication information. In another of these embodiments, aremote machine 30, acting as an intermediary broker server, receives the authentication information including the access control decision, and establishes a connection between theclient machine 10 and aremote machine 30′, acting as an execution machine providing the user of theclient machine 10 with access to the requested resource. - In some embodiments, a request is received to disconnect the client machine from the identified computing environment. In one of these embodiments, the connection between the client machine and the identified computing environment is terminated. In another of these embodiments, a data record associated with the identified computing environment is updated to indicate that the client machine is disconnected. In still another of these embodiments, execution of the identified computing environment is continued. The execution may continue although the user has terminated the connection between the client machine and the identified computing environment.
- In some embodiments, authentication information associated with the user is received, the user using a
second client machine 10′. In one of these embodiments, based on the received authentication information, an identification is made of a computing environment provided by a virtualized operating system and already associated with the user. In another of these embodiments, a connection is established between thesecond client machine 10′ and the identified computing environment. In yet another of these embodiments, a connection between thefirst client machine 10 and the identified computing environment is terminated. - Referring now to
FIG. 85 , a block diagram depicts one embodiment of a server for providing remote access to a computing environment. In brief overview, aremote machine 30 is a server and includes anetwork module 7920, adata store 7926, and abroker process 8532. In some embodiments, theremote machine 30 the components, modules and subsystems described above in connection withFIG. 79 . - The
network module 7920 receives authentication information associated with a user operating a client machine, such asclient machine 10. In some embodiments, thenetwork module 7920 is in communication with an authentication module for authenticating the user in response to the received authentication information. In other embodiments, thenetwork module 7920 includes the authentication module. - The
data store 7926 contains an identifier of a computing environment associated with the user. In one embodiment, thedata store 7926 contains a first identifier of a first computing environment associated with the user and a second identifier of a second computing environment associated with the user. In another embodiment the first computing environment executes on a firstremote machine 30 and the second computing environment executes on a secondremote machine 30′. In some of these embodiments, thebroker process 8532 transmits the enumeration from the data store to theclient machine 10. - The
broker process 8532 connects theclient machine 10 to the identified computing environment enumerated in thedata store 7926, in response to the received information. In one embodiment, thebroker process 8532 connects theclient machine 10 to the identified computing environment subject to a rule. In another embodiment, thebroker process 8532 disconnects theclient machine 10 from the identified computing environment in response to a received disconnect signal. In still another embodiment, thebroker process 8532 updates a data record associated with the identified computing environment to indicate theclient machine 10 is disconnected from the identified computing environment. - In some embodiments, the
remote machine 30 includes a collection agent and a policy engine. In one of these embodiments, the collection agent gathers information about theclient machine 10. In another of these embodiments, the collection agent comprises at least one script. In still another of these embodiments, the collection agent comprises bytecode. In yet another of these embodiments, the collection agent gathers the information by running at least one script on theclient machine 10. In some of these embodiments, the collection agent executes on theclient machine 10. In others of these embodiments, the collection agent is transmitted to theclient machine 10. In one of these embodiments, the policy engine transmits the collection agent to theclient machine 10. - In some of these embodiments, the
remote machine 30 includes a policy engine receiving the gathered information and assigning one of a plurality of levels of access responsive to application of a policy to the received information, thebroker process 8532 connecting the client machine to the identified computing environment enumerated in the data store responsive to the assigned access level. In one embodiment, the policy engine further comprises a database storing configurable policies. In another embodiment, the policy engine transmits instructions to the collection agent determining the type of information the collection agent gathers. - In others of these embodiments, the policy engine further comprises a logon agent. In one of these embodiments, the logon agent receives the gathered information from the collection agent. In another of these embodiments, the logon agent identifies for the policy engine authentication information received from the collection agent. In still another of these embodiments, the policy engine further comprises a plurality of logon agents. In yet another of these embodiments, at least one of the plurality of logon agents resides on each network domain from which a
client machine 10 may transmit a resource request. In some embodiments, theclient machine 10 transmits the resource request to a particular logon agent. In other embodiments, the logon agent identifies for the policy engine the network domain from which the client machine transmits the resource request. - In some embodiments, a virtual machine farm provides functionality for relocating a session from one requesting machine to a second requesting machine. In one of these embodiments, the virtual machine farm provides access to information required for relocating a session. In another of these embodiments, a hypervisor provides functionality for relocating a virtual machine session. In some embodiments, the hypervisor implements well-known techniques, including pre-copying, post-copying, and lazy-copying for moving session information associated with a virtual machine session from one execution machine to a second execution machine.
- In some embodiments, the virtual machine farm is in communication with a system as described in
FIG. 86 andFIG. 87 , and provides functionality for relocation of an application session within a virtual machine session. - Referring to
FIG. 86 , one embodiment of a network constructed in accordance with the invention is depicted, which includes aclient machine 10, acollection agent 704, apolicy engine 706, apolicy database 708, acondition database 710, aclient machine 10′, asession server 8620, a stored application database 8622, aremote machine 30′, a first database 8628, aremote machine 30″, and a second database 8632. In brief overview, when theclient machine 10 transmits to the policy engine 706 arequest 206 for access to an application program, thecollection agent 704 communicates withclient machine 10, retrieves information aboutclient machine 10, and transmitsclient machine information 714 to thepolicy engine 706. Thepolicy engine 706 makes an access control decision, as discussed above inFIG. 7A andFIG. 7B . Theclient machine 10 receives an enumeration of available applications associated with theclient machine 10. - In some embodiments, the
session server 8620 establishes a connection between theclient machine 10 and a plurality of application sessions associated with theclient machine 10. In one of these embodiments, the connection is established to a virtual machine providing access to a computing environment in which the application sessions execute. In other embodiments, thepolicy engine 706 determines that theclient machine 10 has authorization to retrieve a plurality of application files comprising the application and to execute the application program locally. In one of these embodiments, theremote machine 30′ stores application session data and a plurality of application files comprising the application program. In another of these embodiments, theclient machine 10 establishes an application streaming session with aremote machine 30′ storing the application session data and the plurality of application files comprising the application program. - Referring now to
FIG. 87 , a flow diagram depicts one embodiment of the steps taken by thesession server 8620 to provide access for theclient machine 10 to its associated application sessions. Thesession server 8620 receives information about theclient machine 10 from thepolicy engine 706 containing the access control decision thepolicy engine 706 made (step 8780). In one embodiment, the information also includes theclient machine information 714. In another embodiment, the information includes authorization to execute the application program locally. In still another embodiment, the information includes authorization to provide access to computing environment in which the application program executes. - In some embodiments, the
policy engine 706 identifies a plurality of application sessions already associated with theclient machine 10. In other embodiments, thesession server 8620 identifies stored application sessions associated with the client machine 10 (step 8782). In some of these embodiments, thesession server 8620 automatically identifies the stored application sessions upon receiving the information from thepolicy engine 706. In one embodiment, the stored application database 8622 resides on thesession server 8620. In another embodiment, the stored application database 8622 resides on thepolicy engine 706. - The stored application database 8622 contains data associated with a plurality of
machines 30 in themachine farm 38 executing application sessions or providing access to application session data and application files comprising application programs, or providing access to computing environments in which application sessions may execute, including virtual machines which may be active, suspended, paused or disconnected. In some embodiments, identifying the application sessions associated with theclient machine 10 requires consulting stored data associated with one ormore machines 30. In some of these embodiments, thesession server 8620 consults the stored data associated with one ormore machines 30. In others of these embodiments, thepolicy engine 706 consults the stored data associated with one ormore machines 30. In some embodiments, a first application session runs on aremote machine 30′ and a second application session runs on aremote machine 30″. In other embodiments, all application sessions run on a singleremote machine 30 within themachine farm 38. In still other embodiments one or more application sessions run on aremote machine 30 executing a virtual machine providing access to a computing environment in which the application sessions execute. - The
session server 8620 includes information related to application sessions initiated by users. The session server can be stored in volatile or non-volatile memory or, for example, distributed through multiple servers. Table 4 shows the data included in a portion of an illustrative session server 8620: -
TABLE 4 Application Session App Session 1 App Session 2App Session 3User ID User 1 User 2User 1Client ID First Client First Client Client Address 172.16.0.50 172.16.0.50 Status Active Disconnected Active Applications Word Processor Data Base Spreadsheet Process Number 1 3 2 Server Server A Server A Server B Server Address 172.16.2.55 172.16.2.55 172.16.2.56 Executing in a Yes (Instance No no Virtual Machine? ID #) - The
session server 8620 in Table 4 includes data associating each application session with the user that initiated the application session, an identification of theclient machine 10, if any, from which the user is currently connected to theremote machine 30′, and the IP address of thatclient computer 10. Thesession server 8620 also includes the status of each application session. The data may include an identification of a virtual machine providing a computing environment in which the application session executes. An application session status can be, for example, “active” (meaning a user is connected to the application session), or “disconnected” (meaning a user is not connected to the application session). In an alternative embodiment, an application session status can also be set to “executing-disconnected” (meaning the user has disconnected from the application session, but the applications in the application session are still executing), or “stalled-disconnected” (meaning the user is disconnected and the applications in the application session are not executing, but their operational state immediately prior to the disconnection has been stored). Thesession server 8620 further stores information indicating theapplication 7916 that are executing within each application session and data indicating each application's process on the server. For embodiments in which the session is hypervisor-based, thesession server 8620 may store an identification of a hypervisor domain or a virtual machine instance identifier. In embodiments in which theremote machine 30′ is part of themachine farm 38, thesession server 8620 is at least a part of the dynamic store in addition to the data in the last three rows of Table 4 that identify aremote machine 30 in themachine farm 38 on which each application is/was executing, and the IP address of thatremote machine 30. In alternative embodiments, thesession server 8620 includes a status indicator for each application in each application session. - For example, in the example of Table 4, three application sessions exist,
App Session 1,App Session 2, andApp Session 3.App Session 1 is associated withUser 1, who is currently usingterminal 1. Terminal one's IP address is 172.16.2.50. The status ofApp Session 1 is active, and inApp Session 1, a word processing program, is being executed. The word processing program is executing on Server A asprocess number 1. Server A's IP address is 172.16.2.55.App Session 2 in Table 1 is an example of adisconnected application session 7918.App Session 2 is associated withUser 2, butApp Session 2 is not connected to aclient machine App Session 2 includes a database program that is executing on Server A, at IP address 152.16.2.55 asprocess number 3.App Session 3 is an example of how a user can interact with application sessions operating on differentremote machines 30.App Session 3 is associated withUser 1, as isApp Session 1.App Session 3 includes a spreadsheet program that is executing on Server B at IP address 152.16.2.56 asprocess number 2, whereas the application session included inApp Session 1 is executing on Server A. Although only oneApp Session 1 is described in the application session, the application session may comprise a plurality of executing resources, including application sessions executing in computing environments and computing environments executing in a virtual machine. - In another example, a user may access a first application program through an application session executing on a
remote machine 30′, such as Server A, while communicating across an application streaming session with a secondremote machine 30″, such as Server B, to retrieve a second application program from the secondremote machine 30″ for local execution. The user of theclient machine 10 may have acquired authorization to execute the second application program locally while failing to satisfy the local execution pre-requisites of the first application program. - In one embodiment, the
session server 8620 is configured to receive a disconnect request to disconnect the application sessions associated with theclient machine 10 and disconnects the application sessions in response to the request. Thesession server 8620 continues to execute an application session after disconnecting theclient machine 10 from the application session. In this embodiment, thesession server 8620 accesses the stored application database 8622 and updates a data record associated with each disconnected application session so that the record indicates that the application session associated with theclient machine 10 is disconnected. - After receiving authentication information associated with a
client machine 10 connecting to the network, thesession server 8620 consults the stored applications database 8622 to identify any active application sessions that are associated with a user of theclient machine 10, but that are connected to adifferent client machine 10, such as theclient machine 10 if the authentication information is associated withclient machine 10′, for example. In one embodiment, if thesession server 8620 identifies any such active application sessions, thesession server 8620 automatically disconnects the application session(s) from theclient machine 10 and connects the application session(s) to thecurrent client machine 10′ (step 8784). In some embodiments, the received authentication information will restrict the application sessions to which theclient machine 10 may reconnect. In other embodiments, the received authentication information authorizes execution of an application program on theclient machine 10′, where the authorization may have been denied toclient machine 10. In one of these embodiments, thesession server 8620 may provide theclient machine 10 access information for retrieving the application program for second execution. In still other embodiments, the received authentication information authorizes execution of an application program in a computing environment provided by a virtual machine. - Referring now to
FIG. 88 , a block diagram depicts one particular embodiment of a system for providing, by a virtual machine access to a computing environment. Aclient agent 8802 on aclient machine 10 connects to aremote machine 30. In some embodiments, theclient agent 8802 establishes a connection with asession management component 1300. In other embodiments, thesession management component 1300 is executed by theremote machine 30 to which theclient machine 10 connects. In one embodiment, thesession management component 1300 queries a virtualmachine management component 1200, for the location of the configuration and virtual disk files of a virtual machine to run for the current user and a hypervisor in which the virtual machine may execute. In some embodiments, the identified hypervisor and virtual machine execute onremote machine 30. In other embodiments, the identified hypervisor and virtual machine execute on aremote machine 30′. In one embodiment, the session management component launches the virtual machine within the specified hypervisor in full screen mode. In another embodiment, a previously-executing virtual machine is allocated to theclient machine 10. - In some embodiments, a virtual
machine service component 8804 executes within a computing environment provided by a virtual machine on aremote machine 30. In one of these embodiments, the virtualmachine service component 8804 receives an IP address and a port with which to establish a communication channel between thesession management component 1300 and the virtualmachine service component 8804. In one embodiment, this communication channel is used to pass session related configuration information from the client agent session into the virtual machine session. In some embodiments, the configuration information includes display settings and changes, client drive information and authentication data with which to enable single sign-on for a user of theclient machine 10. - In some embodiments, once the communications channel is established and the initial session related information is passed to the virtual
machine service component 8804, the virtualmachine service component 8804 automatically connects the user to a computing environment, such as a guest operating system, using the same credentials as were provided to theclient agent 8802 by the user (if any). In one of these embodiments, the virtualmachine service component 8804 automatically reconfigures the display settings of the guest operating system to match those of theclient 8802. The virtual machine produces graphics and sound output to virtual devices that redirect that output, directly or indirectly, to theclient agent 8802 on theclient machine 10. The virtual machine receives audio input, mouse and keyboard device data redirected from theclient machine 10. When the virtual machine is shutdown or suspended thesession management component 1300 terminates the client agent session. - Referring now to
FIG. 95 , a block diagram depicts one embodiment of a system for providing to a first client agent, via a second client agent on a first remote machine, output data generated by a resource executing in a virtual machine provided by a second remote machine. Aclient agent 8802 on aclient machine 10 connects to aremote machine 30 and requests access to a resource. In one embodiment, theremote machine 30 is an intermediate machine. In another embodiment, theremote machine 30 determines to provide access to the requested resource via a virtual machine. In still another embodiment, theremote machine 30 identifies aremote machine 30′ to provide access to the requested resource via a virtual machine executing on theremote machine 30′. Theremote machine 30′ may be referred to as anexecution machine 30′. - In one embodiment, the
client machine 10 communicates with theremote machine 30 using a presentation layer protocol, such as ICA, RDP, VNC, or X11. In some embodiments, protocol stacks are implemented to enable communications between theclient machine 10 andremote machines 30, as described above in connection withFIG. 8 ,step 816 and withFIG. 24 . - In one embodiment, an
agent 8802′ on theremote machine 30 establishes a connection to theremote machine 30′. In another embodiment, theremote machine 30 communicates with theremote machine 30′ using a presentation layer protocol, such as ICA, RDP, VNC, or X11. In still another embodiment, theremote machine 30 establishes a connection with theremote machine 30′ and communicates with theremote machine 30′ using a presentation layer protocol, such as RDP, from within a terminal services session executing on theremote machine 30. In some embodiments, protocol stacks are implemented to enable communications between theagent 8802′ on theremote machine 30 and theremote machine 30′, as described above in connection withFIG. 8 ,step 816 and withFIG. 24 . - In one embodiment, as depicted by
FIG. 95 , theremote machine 30′ provides access to the requested resource by providing access to a virtualized environment or by providing access to an application streaming service, as described above in connection withFIG. 8 . In another embodiment, theremote machine 30′ executes the resource in a virtual machine executing on theremote machine 30′. In still another embodiment, theremote machine 30′ transmits output data generated by the execution of the resource to theremote machine 30 using a presentation layer protocol. In another embodiment, theremote machine 30 forwards the output data received from theremote machine 30′ to theclient machine 10 using a presentation layer protocol. In some embodiments, the virtual machine executes on theremote machine 30′. In other embodiments, the virtual machines execute on aremote machine 30″. - In one embodiment, the
remote machine 30′ provides access to a published desktop computing environment. In another embodiment, theremote machine 30′ provides access to a published desktop computing environment selected from an enumeration of a plurality of published desktop computing environments available to theclient machine 10. In some embodiments, as described above in connection with the description of the virtualmachine management component 1200, virtual machines may provide access to standard operating environments. - Referring now to
FIG. 96 , a block diagram depicts an embodiment of a system for providing to a first client agent, via a second client agent on a first remote machine, output data generated by a resource executing in a virtual machine provided by a second remote machine. Aclient agent 8802 on aclient machine 10 connects to aremote machine 30 and requests access to a resource. In one embodiment, theremote machine 30 is an intermediate machine. In another embodiment, theremote machine 30 determines to provide access to the requested resource via a virtual machine. In still another embodiment, theremote machine 30 identifies aremote machine 30′ to provide access to the requested resource via a virtual machine executing on theremote machine 30′. Theremote machine 30′ may be referred to as anexecution machine 30′. - In one embodiment, the
client machine 10 communicates with theremote machine 30 using a presentation layer protocol, such as ICA, RDP, VNC, or X11. In some embodiments, protocol stacks are implemented to enable communications between theclient machine 10 andremote machines 30, as described above in connection withFIG. 8 ,step 816 and withFIG. 24 . - In one embodiment, an
agent 8802′ on theremote machine 30 establishes a connection to theremote machine 30′. In another embodiment, theremote machine 30 communicates with theremote machine 30′ using a presentation layer protocol, such as ICA, RDP, VNC, or X11. In still another embodiment, theremote machine 30 establishes a connection with theremote machine 30′ and communicates with theremote machine 30′ using a presentation layer protocol, such as ICA. In some embodiments, protocol stacks are implemented to enable communications between theagent 8802′ on theremote machine 30 and theremote machine 30′, as described above in connection withFIG. 8 ,step 816 and withFIG. 24 . - In one embodiment, as depicted by
FIG. 96 , theremote machine 30′ provides access to the requested resource by providing access to a virtualized environment or by providing access to an application streaming service, as described above in connection withFIG. 8 . In another embodiment, theremote machine 30′ executes the resource in a virtual machine executing on theremote machine 30′. In still another embodiment, theremote machine 30′ transmits output data generated by the execution of the resource to theremote machine 30 using a presentation layer protocol. In another embodiment, theremote machine 30 forwards the output data received from theremote machine 30′ to theclient machine 10 using a presentation layer protocol. In some embodiments, the virtual machine executes on theremote machine 30′. In other embodiments, the virtual machines execute on aremote machine 30″. - Referring now to
FIG. 97 , a block diagram depicts one embodiment of a system for identifying, by a coordinator machine, a worker machine providing, via a virtual machine, access to a computing environment. Aclient agent 8802 on aclient machine 10 connects to aremote machine 30 and requests access to a resource. In one embodiment, theremote machine 30 is a coordinator machine, providing the functionality of an intermediate broker machine. In another embodiment, theremote machine 30 identifies aremote machine 30′ to provide access to the requested resource. - In some embodiments, the
remote machine 30 is a remote machine in a plurality of remote machines functioning as intermediate broker machines. In one of these embodiments, the coordinator machines receive requests and identify otherremote machines 30′ from a second plurality of remote machines, the identified machines responding to the requests. In another of these embodiments, the identifiedremote machines 30′ are referred to as worker machines. In still another of these embodiments, theclient machine 10 communicates with thecoordinator machine 30 using a presentation layer protocol, such as ICA, RDP, VNC, or X11. - In one embodiment, the
coordinator machine 30 identifies a pool ofworker machines 30′ each capable of providing access to the requested resource. In some embodiments, thecoordinator machine 30 identifies aworker machine 30′ from the pool ofworker machines 30′ capable of providing access to the requested resource. In other embodiments, thecoordinator machine 30 identifies aworker machine 30′ and transmits information for accessing theworker machine 30′ to theclient machine 10. In still other embodiments, thecoordinator machine 30 transmits information for accessing theclient machine 10 to theworker machine 30′. In one of these embodiments, thecoordinator machine 30 provides no additional information or communication to theclient machine 10 after transmitting the access information associated with theworker machine 30′. In yet other embodiments, thecoordinator machine 30 establishes a connection between theclient machine 10 and aworker machine 30′. - In one embodiment, the
client agent 8802 of theclient machine 10 establishes a connection to theworker machine 30′. In another embodiment, theclient machine 10 communicates with theworker machine 30′ using a presentation layer protocol, such as ICA, RDP, VNC, or X11. - In some embodiments, the
worker machine 30′ provides access to the requested resource by executing an application on theworker machine 30′ and transmitting application-output data generated by the execution of the application to theclient 10. In other embodiments, as depicted byFIG. 97 , theworker machine 30′ provides access to the requested resource by providing access to a virtualized environment or by providing access to an application streaming service, as described above in connection withFIG. 8 . - In some embodiments, upon identification of a
worker machine 30′, theclient agent 8802 of theclient machine 10 establishes a connection with asession management component 1300 associated with or residing on theworker machine 30′. In other embodiments, theworker machine 30′ executes thesession management component 1300 to which theclient machine 10 connects. In one embodiment, thesession management component 1300 queries a virtualmachine management component 1200, for the location of the configuration and virtual disk files of a virtual machine to run for the current user and a hypervisor in which the virtual machine may execute. In still other embodiments, theclient machine 10 connects directly to theworker machine 30′. - In some embodiments, the identified hypervisor and virtual machine execute on the
worker machine 30′. In other embodiments, the identified hypervisor and virtual machine execute on aremote machine 30″. In one of these embodiments, theworker machine 30′ communicates with theremote machine 30″ using a presentation layer protocol to receive output data generated by a resource executed by the virtual machine. - In one embodiment, the session management component launches the virtual machine within the specified hypervisor in full screen mode. In another embodiment, a previously-executing virtual machine is allocated to the
client machine 10. - In some embodiments, a virtual
machine service component 8804 executes within a computing environment provided by a virtual machine on aworker machine 30′. In one of these embodiments, the virtualmachine service component 8804 receives an IP address and a port with which to establish a communication channel between thesession management component 1300 and the virtualmachine service component 8804. In one embodiment, this communication channel is used to pass session related configuration information from the client agent session into the virtual machine session. In some embodiments, the configuration information includes display settings and changes, client drive information and authentication data with which to enable single sign-on for a user of theclient machine 10. - In some embodiments, once the communications channel is established and the initial session related information is passed to the virtual
machine service component 8804, the virtualmachine service component 8804 automatically connects the user to a computing environment, such as a guest operating system, using the same credentials as were provided to theclient agent 8802 by the user (if any). In one of these embodiments, the virtualmachine service component 8804 automatically reconfigures the display settings of the guest operating system to match those of theclient 10. The virtual machine produces graphics and sound output to virtual devices that redirect that output, directly or indirectly, to theclient agent 8802 on theclient machine 10. The virtual machine receives audio input, mouse and keyboard device data redirected from theclient machine 10. When the virtual machine is shutdown or suspended thesession management component 1300 terminates the client agent session. - In some embodiments, the
coordinator machine 30 provides functionality for managing a pool ofworker machines 30′. In one of these embodiments, for example, thecoordinator machine 30 receives information identifying theworker machines 30′ as physical machines providing access to particular resources, or as virtual machines providing access to particular resources. In another of these embodiments, thecoordinator machine 30 receives information identifying a plurality of types of resources provided by the pool ofworker machines 30′. For example, thecoordinator machine 30 may receive information identifying a pool ofworker machines 30′ as providing access to a type of computing environment, such as a desktop or application. In still another of these embodiments, thecoordinator machine 30 communicates with a virtualmachine management component 1200 to receive information about virtual machines in the pool ofworker machines 30′. - In other embodiments, the
coordinator machine 30 monitors one ormore worker machines 30′ in the pool ofworker machines 30′. In one of these embodiments, thecoordinator machine 30 identifies aworker machine 30′ to provide access to a resource for aclient machine 10 and identifies aworker machine 30″ to provide access to the resource upon a failure of theworker machine 30′. In another of these embodiments, thecoordinator machine 30 identifies aworker machine 30″ to provide access to the resource responsive to a load balancing technique. In still another of these embodiments, thecoordinator machine 30 identifies aworker machine 30″ to provide access to the resource responsive to a change associated with theclient machine 10. For example, thecoordinator machine 30 may identify afirst worker machine 30′ to provide access to the resource for theclient machine 10 and the receive a second request for access by theclient machine 10, after theclient machine 10 has established a connected via a different network, or has lost a first network connection and re-established a second network connection. - In some embodiments, the
coordinator machine 30 identifies aworker machine 30 that provides access to a resource for aclient machine 10 according to a method chosen responsive to an evaluation of theclient machine 10, an application of a policy to theclient machine 10 and to theworker machine 30′, and an evaluation of the capabilities and requirements of the resource, theclient machine 10 and theworker machine 30′. - The previously described embodiments may be implemented as a method, apparatus or article of manufacture using programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof. The term “article of manufacture” as used herein is intended to encompass code or logic accessible from and embedded in one or more computer-readable devices, firmware, programmable logic, memory devices (e.g., EEPROMs, ROMs, PROMs, RAMs, SRAMs, etc.), hardware (e.g., integrated circuit chip, Field Programmable Gate Array (FPGA), Application Specific Integrated Circuit (ASIC), etc.), electronic devices, a computer readable non-volatile storage unit (e.g., CD-ROM, floppy disk, hard disk drive, etc.), a file server providing access to the programs via a network transmission line, wireless transmission media, signals propagating through space, radio waves, infrared signals, etc. The article of manufacture includes hardware logic as well as software or programmable code embedded in a computer readable medium that is executed by a processor. Of course, those skilled in the art will recognize that many modifications may be made to this configuration without departing from the scope of the present invention.
- Having described certain embodiments of methods and systems for providing access to a computing environment, it will now become apparent to one of skill in the art that other embodiments incorporating the concepts of the invention may be used. Therefore, the invention should not be limited to certain embodiments, but rather should be limited only by the spirit and scope of the following claims.
Claims (30)
1. A method for providing access to a computing environment, the method comprising the steps of:
a) receiving a request from a client system for an enumeration of available computing environments;
b) accessing collected data regarding available computing environments;
c) transmitting, to a client system, accessed data that indicates to the client system each computing environment available to a user of the client system;
d) receiving, from the client system, a request to access one of the computing environments; and
e) establishing a connection between the client system and a virtual machine hosting the requested computing environment.
2. The method of claim 1 further comprising determining, for each stored computing environment, whether that computing environment is available to a user of the client system.
3. The method of claim 2 wherein step (c) comprises transmitting the accessed data to a client system, the transmitted data displayable at the client system as icons in a graphical user interface window representing computing environments available to a user of the client system.
4. The method of claim 2 wherein step (c) comprises transmitting the accessed data to a client system, the transmitted data displayable at the client system as icons in a graphical user interface window representing computing environments unavailable to a user of the client system.
5. The method of claim 1 wherein step (d) comprises receiving, from the client system, a request to execute an application, the requested application requiring one of the available computing environments.
6. The method of claim 1 wherein step (e) comprises establishing a connection between the client system and the virtual machine using a presentation layer protocol.
7. The method of claim 1 wherein step (e) comprises establishing a connection between the client system and the virtual machine using the X11 protocol.
8. The method of claim 1 wherein step (e) comprises establishing a connection between the client system and the virtual machine using the Remote Desktop Presentation (RDP) protocol.
9. The method of claim 1 wherein step (e) comprises establishing a connection between the client system and the virtual machine using the Independent Computing Architecture (ICA) protocol.
10. The method of claim 1 further comprising receiving user credentials from the client system.
11. The method of claim 10 wherein step (c) comprises transmitting the accessed data to a client system responsive to receiving the user credentials, the transmitted data displayable at the client system as icons in a graphical user interface window representing computing environments available to the client system.
12. The method of claim 10 wherein step (c) comprises transmitting the accessed data to a client system responsive to receiving the user credentials, the transmitted data displayable at the client system as icons in a graphical user interface window representing computing environments unavailable to the client system.
13. The method of claim 10 further comprising authenticating the user of the client system based on the received user credentials and providing access to a selected one of the available computing environment images without requiring further input of user credentials by a user of the client system.
14. The method of claim 1 further comprising gathering information about the client system and generating a data set from the gathered information.
15. The method of claim 14 wherein step (c) comprises transmitting the accessed data to a client system indicating to the client system, responsive to the generated data set, each computing environment available to the client system.
16. The method of claim 14 wherein step (c) comprises transmitting the accessed data to a client system indicating to the client system, responsive to an application of a policy to the generated data set, each computing environment available to the client system.
17. The method of claim 1 wherein step (a) comprises receiving, by a web server, a request from a client system for an enumeration of available computing environments.
18. The method of claim 17 wherein step (b) further comprises (i) retrieving from a persistent storage a page template, (ii) creating, at the web server, a page describing a display of computing environment images available to the client system responsive to the accessed data and the retrieved page template, and (iii) transmitting the created page to a client system indicating to the client system each computing environment available to the client system.
19. The method of claim 1 further comprising creating an output display indicating each computing environment available to the client system and transmitting the created output display to the client system.
20. The method of claim 1 further comprising creating an output display comprising a page constructed in a markup language, the output display indicating each computing environment available to the client system and transmitting the created output display to the client system.
21. In a network including a client system and a plurality of servers storing computing environments, a server comprising:
a broker module accessing collected data regarding computing environments and determining, for each computing environment, whether that computing environment image is available to a client system;
a transmitter transmitting accessed data to the client system indicating to the client system each computing environment determined to be available to the client system;
a receiver receiving a request to access one of the available computing environments; and
a transceiver providing a connection between the client system and a virtual machine providing the requested computing environment.
22. The server of claim 21 wherein the receiver receives user credentials from the client system.
23. The server of claim 22 further comprising a database storing the collected data, wherein the broker module determines for each computing environment whether that computing environment image is available to a client system based on the user credentials and the collected data.
24. The server of claim 21 further comprising a database storing the collected data.
25. The server of claim 21 further comprising an output display creation engine creating output displays indicating each computing environment available to the client system.
26. The sever of claim 25 wherein the output display creation engine creates a web page describing a display of the computing environments available to a client system, the web page created responsive to the collected information and a web page template.
27. The server of claim 21 wherein the transceiver provides a connection between the client system and a virtual machine providing the requested computing environment, the transceiver establishing a presentation-layer protocol connection.
28. The server of claim 21 wherein the transceiver provides a connection between the client system and a virtual machine providing the requested computing environment, the transceiver establishing an X11 connection.
29. The server of claim 21 wherein the transceiver provides a connection between the client system and a virtual machine providing the requested computing environment, the transceiver establishing an ICA connection.
30. The server of claim 21 wherein the transceiver provides a connection between the client system and a virtual machine providing the requested computing environment, the transceiver establishing an RDP connection.
Priority Applications (10)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/552,315 US20070174429A1 (en) | 2006-01-24 | 2006-10-24 | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
PCT/US2007/060963 WO2007087558A2 (en) | 2006-01-24 | 2007-01-24 | Methods and systems for providing access to a computing environment |
CN2007800104850A CN101410803B (en) | 2006-01-24 | 2007-01-24 | Methods and systems for providing access to a computing environment |
EP11161963A EP2369479A3 (en) | 2006-01-24 | 2007-01-24 | Methods and systems for providing access to a computing environment |
BRPI0707220-1A BRPI0707220A2 (en) | 2006-01-24 | 2007-01-24 | methods and systems for providing access to a computing environment |
CA002637980A CA2637980A1 (en) | 2006-01-24 | 2007-01-24 | Methods and systems for providing access to a computing environment |
AU2007208093A AU2007208093A1 (en) | 2006-01-24 | 2007-01-24 | Methods and systems for providing access to a computing environment |
EP11161966A EP2375328A3 (en) | 2006-01-24 | 2007-01-24 | Methods and Systems for Providing Access to a Computing Environment |
EP07762438A EP1977317A1 (en) | 2006-01-24 | 2007-01-24 | Methods and systems for providing access to a computing environment |
IL192910A IL192910A (en) | 2006-01-24 | 2008-07-20 | System and method for granting levels of access to a resource according to information gathered about client machines |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US76167406P | 2006-01-24 | 2006-01-24 | |
US11/552,315 US20070174429A1 (en) | 2006-01-24 | 2006-10-24 | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
Publications (1)
Publication Number | Publication Date |
---|---|
US20070174429A1 true US20070174429A1 (en) | 2007-07-26 |
Family
ID=40572801
Family Applications (12)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/552,315 Abandoned US20070174429A1 (en) | 2006-01-24 | 2006-10-24 | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
US11/552,787 Active 2028-08-04 US8051180B2 (en) | 2006-01-24 | 2006-10-25 | Methods and servers for establishing a connection between a client system and a virtual machine executing in a terminal services session and hosting a requested computing environment |
US11/559,658 Abandoned US20070180447A1 (en) | 2006-01-24 | 2006-11-14 | Methods and systems for interacting, via a hypermedium page, with a virtual machine |
US11/559,635 Active 2028-02-11 US8355407B2 (en) | 2006-01-24 | 2006-11-14 | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US11/563,958 Abandoned US20070174410A1 (en) | 2006-01-24 | 2006-11-28 | Methods and systems for incorporating remote windows from disparate remote desktop environments into a local desktop environment |
US11/563,927 Active 2028-09-27 US8010679B2 (en) | 2006-01-24 | 2006-11-28 | Methods and systems for providing access to a computing environment provided by a virtual machine executing in a hypervisor executing in a terminal services session |
US11/563,932 Active 2030-02-28 US8341270B2 (en) | 2006-01-24 | 2006-11-28 | Methods and systems for providing access to a computing environment |
US11/624,395 Active 2029-04-05 US8117314B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for providing remote access to a computing environment provided by a virtual machine |
US11/624,402 Active 2027-09-08 US7949677B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for providing authorized remote access to a computing environment provided by a virtual machine |
US11/624,396 Active 2029-08-28 US7954150B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for assigning access control levels in providing access to resources via virtual machines |
US11/624,403 Active 2030-05-07 US8341732B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for selecting a method for execution, by a virtual machine, of an application program |
US11/624,394 Active 2028-01-27 US7870153B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for executing, by a virtual machine, an application program requested by a client machine |
Family Applications After (11)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/552,787 Active 2028-08-04 US8051180B2 (en) | 2006-01-24 | 2006-10-25 | Methods and servers for establishing a connection between a client system and a virtual machine executing in a terminal services session and hosting a requested computing environment |
US11/559,658 Abandoned US20070180447A1 (en) | 2006-01-24 | 2006-11-14 | Methods and systems for interacting, via a hypermedium page, with a virtual machine |
US11/559,635 Active 2028-02-11 US8355407B2 (en) | 2006-01-24 | 2006-11-14 | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US11/563,958 Abandoned US20070174410A1 (en) | 2006-01-24 | 2006-11-28 | Methods and systems for incorporating remote windows from disparate remote desktop environments into a local desktop environment |
US11/563,927 Active 2028-09-27 US8010679B2 (en) | 2006-01-24 | 2006-11-28 | Methods and systems for providing access to a computing environment provided by a virtual machine executing in a hypervisor executing in a terminal services session |
US11/563,932 Active 2030-02-28 US8341270B2 (en) | 2006-01-24 | 2006-11-28 | Methods and systems for providing access to a computing environment |
US11/624,395 Active 2029-04-05 US8117314B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for providing remote access to a computing environment provided by a virtual machine |
US11/624,402 Active 2027-09-08 US7949677B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for providing authorized remote access to a computing environment provided by a virtual machine |
US11/624,396 Active 2029-08-28 US7954150B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for assigning access control levels in providing access to resources via virtual machines |
US11/624,403 Active 2030-05-07 US8341732B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for selecting a method for execution, by a virtual machine, of an application program |
US11/624,394 Active 2028-01-27 US7870153B2 (en) | 2006-01-24 | 2007-01-18 | Methods and systems for executing, by a virtual machine, an application program requested by a client machine |
Country Status (2)
Country | Link |
---|---|
US (12) | US20070174429A1 (en) |
CN (1) | CN101410803B (en) |
Cited By (201)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060075224A1 (en) * | 2004-09-24 | 2006-04-06 | David Tao | System for activating multiple applications for concurrent operation |
US20070061399A1 (en) * | 2005-09-12 | 2007-03-15 | Microsoft Corporation | Filtering obscured data from a remote client display |
US20070143629A1 (en) * | 2004-11-29 | 2007-06-21 | Hardjono Thomas P | Method to verify the integrity of components on a trusted platform using integrity database services |
US20070171921A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US20070180495A1 (en) * | 2004-11-29 | 2007-08-02 | Signacert, Inc. | Method and apparatus to establish routes based on the trust scores of routers within an ip routing domain |
US20070198729A1 (en) * | 2006-02-07 | 2007-08-23 | Yechuri Sitaramarao S | SQL network gadget |
US20070244966A1 (en) * | 2006-03-31 | 2007-10-18 | Microsoft Corporation | Establishing and utilizing terminal server dynamic virtual channels |
US20080039062A1 (en) * | 1997-12-09 | 2008-02-14 | Openwave Systems Inc. | Method and apparatus for accessing a common database from a mobile device and a computing device |
US20080091800A1 (en) * | 2006-10-13 | 2008-04-17 | Xerox Corporation | Local user interface support of remote services |
US20080120372A1 (en) * | 2006-11-21 | 2008-05-22 | General Electric Company | Systems and methods for image sharing in a healthcare setting while maintaining diagnostic image quality |
US20080162579A1 (en) * | 2006-09-28 | 2008-07-03 | Kaminsky David L | Resource-Based Event Typing In A Rules System |
US20080172494A1 (en) * | 2007-01-12 | 2008-07-17 | Samsung Electronics Co., Ltd. | Method and apparatus for determining communication protocol |
US20080183641A1 (en) * | 2007-01-25 | 2008-07-31 | Chang Bin Tang | Generalized application virtualization method for business use on the web and the mini server using this method |
US20080201479A1 (en) * | 2007-02-15 | 2008-08-21 | Husain Syed M Amir | Associating Virtual Machines on a Server Computer with Particular Users on an Exclusive Basis |
US20080235384A1 (en) * | 2007-03-20 | 2008-09-25 | Microsoft Corporation | Web service for coordinating actions of clients |
US20080320295A1 (en) * | 2006-07-10 | 2008-12-25 | Chong Benedict T | Method and apparatus for virtualization of appliances |
US20090003387A1 (en) * | 2007-06-27 | 2009-01-01 | Microsoft Corporation | Synchronization Between Connection Manager and Extension Components |
US20090037496A1 (en) * | 2007-08-01 | 2009-02-05 | Chong Benedict T | Diagnostic Virtual Appliance |
WO2009018366A1 (en) * | 2007-08-01 | 2009-02-05 | Signacert. Inc. | Method and apparatus for lifecycle integrity verification of virtual machines |
US20090064287A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Application protection architecture with triangulated authorization |
US20090083375A1 (en) * | 2006-07-10 | 2009-03-26 | Chong Benedict T | Installation of a Virtualization Environment |
US20090089860A1 (en) * | 2004-11-29 | 2009-04-02 | Signacert, Inc. | Method and apparatus for lifecycle integrity verification of virtual machines |
US20090089260A1 (en) * | 2007-09-27 | 2009-04-02 | Chong Benedict T | Quick Searching UI for a Better User Experience |
US20090102838A1 (en) * | 2007-10-20 | 2009-04-23 | Justin Bullard | Methods and systems for remoting three dimensional graphical data |
US20090144813A1 (en) * | 2004-11-29 | 2009-06-04 | Signacert, Inc. | Method to control access between network endpoints based on trust scores calculated from information system component analysis |
US20090182605A1 (en) * | 2007-08-06 | 2009-07-16 | Paul Lappas | System and Method for Billing for Hosted Services |
US20090199132A1 (en) * | 2006-07-10 | 2009-08-06 | Devicevm, Inc. | Quick access to virtual applications |
US20090210512A1 (en) * | 2008-02-15 | 2009-08-20 | Chanan Steinhart | System, method, and program product for creating and sharing digital image output data across a network |
US20090216975A1 (en) * | 2008-02-26 | 2009-08-27 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US20090219569A1 (en) * | 2008-02-28 | 2009-09-03 | Canon Kabushiki Kaisha | Information processing apparatus, information processing system, and information processing method |
US20090245521A1 (en) * | 2008-03-31 | 2009-10-01 | Balaji Vembu | Method and apparatus for providing a secure display window inside the primary display |
US20090254982A1 (en) * | 2006-10-23 | 2009-10-08 | Real Enterprise Solutions Development B.V. | Methods, programs and a system of providing remote access |
US20100037220A1 (en) * | 2008-08-05 | 2010-02-11 | International Business Machines Corporation | System and Method for Creating and Associating a Virtual Pseudo TTY with a Running Process |
US20100042993A1 (en) * | 2007-12-20 | 2010-02-18 | Virtual Computer, Inc. | Transportation of a Workspace from One Machine to Another in a Virtual Computing Environment without Installing Hardware |
WO2010030610A1 (en) | 2008-09-11 | 2010-03-18 | Ely Tsern | Expandable systems architecture for a handheld device that dynamically generates different user environments for device displays |
US20100070870A1 (en) * | 2008-09-15 | 2010-03-18 | Vmware, Inc. | Unified Secure Virtual Machine Player and Remote Desktop Client |
US20100088360A1 (en) * | 2008-10-03 | 2010-04-08 | Joe Jaudon | Methods for dynamically updating virtual desktops or virtual applications |
US20100088397A1 (en) * | 2008-10-03 | 2010-04-08 | Joe Jaudon | Systems for dynamically updating virtual desktops or virtual applications |
US20100110473A1 (en) * | 2008-10-30 | 2010-05-06 | Xerox Corporation | System and method for managing a print job in a printing system |
US20100110472A1 (en) * | 2008-10-30 | 2010-05-06 | Xerox Corporation | System and method for managing a print job in a printing system |
US20100138744A1 (en) * | 2008-11-30 | 2010-06-03 | Red Hat Israel, Ltd. | Methods for playing multimedia content at remote graphics display client |
US20100146039A1 (en) * | 2008-12-08 | 2010-06-10 | Dell Products L.P. | System and Method for Providing Access to a Shared System Image |
US20100235750A1 (en) * | 2009-03-12 | 2010-09-16 | Bryce Douglas Noland | System, method and program product for a graphical interface |
US20100242038A1 (en) * | 2009-03-19 | 2010-09-23 | Berrange Daniel P | Providing a Trusted Environment for Provisioning a Virtual Machine |
US20100268756A1 (en) * | 2009-04-16 | 2010-10-21 | Dell Products L.P. | System and method for providing access to a shared system image |
US20100274841A1 (en) * | 2009-04-22 | 2010-10-28 | Joe Jaudon | Systems and methods for dynamically updating virtual desktops or virtual applications in a standard computing environment |
WO2010127327A1 (en) * | 2009-05-01 | 2010-11-04 | Kaazing Corporation | Enterprise client-server system and methods of providing web application support through distributed emulation of websocket communications |
US20110082938A1 (en) * | 2009-10-07 | 2011-04-07 | Joe Jaudon | Systems and methods for dynamically updating a user interface within a virtual computing environment |
US20110090528A1 (en) * | 2009-10-16 | 2011-04-21 | Xerox Corporation | System and method for controlling usage of printer resources |
US7937370B2 (en) | 2000-09-22 | 2011-05-03 | Axeda Corporation | Retrieving data from a server |
US7966418B2 (en) | 2003-02-21 | 2011-06-21 | Axeda Corporation | Establishing a virtual tunnel between two computer programs |
US20110154325A1 (en) * | 2007-12-26 | 2011-06-23 | Hiroshi Terasaki | Virtual machine system, system for forcing policy, method for forcing policy, and virtual machine control program |
US20110179477A1 (en) * | 2005-12-09 | 2011-07-21 | Harris Corporation | System including property-based weighted trust score application tokens for access control and related methods |
US20110225578A1 (en) * | 2010-03-09 | 2011-09-15 | Avistar Communications Corporation | Scalable high-performance interactive real-time media architectures for virtual desktop environments |
US8055758B2 (en) | 2000-07-28 | 2011-11-08 | Axeda Corporation | Reporting the state of an apparatus to a remote computer |
US8060886B2 (en) | 2002-04-17 | 2011-11-15 | Axeda Corporation | XML scripting of SOAP commands |
US8065397B2 (en) | 2006-12-26 | 2011-11-22 | Axeda Acquisition Corporation | Managing configurations of distributed devices |
US20110307614A1 (en) * | 2010-06-15 | 2011-12-15 | Microsoft Corporation | Techniques For Efficient Remote Presentation Session Connectivity And Routing |
US20110320633A1 (en) * | 2009-03-10 | 2011-12-29 | Andreas Burmester | System and methods for a managed application server restart |
US8094560B2 (en) | 2008-05-19 | 2012-01-10 | Cisco Technology, Inc. | Multi-stage multi-core processing of network packets |
US20120017210A1 (en) * | 2010-01-08 | 2012-01-19 | Sauce Labs, Inc. | Real Time Verification of Web Applications |
US8108543B2 (en) | 2000-09-22 | 2012-01-31 | Axeda Corporation | Retrieving data from a server |
WO2012054309A1 (en) * | 2010-10-20 | 2012-04-26 | Salesforce.Com, Inc. | Framework for custom actions on an information feed |
WO2012047555A3 (en) * | 2010-10-08 | 2012-05-31 | Microsoft Corporation | Secure deployment of provable identity for dynamic application environments |
US8219653B1 (en) | 2008-09-23 | 2012-07-10 | Gogrid, LLC | System and method for adapting a system configuration of a first computer system for hosting on a second computer system |
US20120180039A1 (en) * | 2011-01-11 | 2012-07-12 | International Business Machines Corporation | Automated Deployment of Applications with Tenant-Isolation Requirements |
US8234332B2 (en) | 2009-04-22 | 2012-07-31 | Aventura Hq, Inc. | Systems and methods for updating computer memory and file locations within virtual computing environments |
WO2012110501A1 (en) * | 2011-02-15 | 2012-08-23 | Prevx Limited | Methods and apparatus for dealing with malware |
US20120246570A1 (en) * | 2011-03-22 | 2012-09-27 | International Business Machines Corporation | Managing a portal application |
WO2012146987A1 (en) * | 2011-04-26 | 2012-11-01 | Azuan Technologies S.A. | Method for internet transactions |
US20120297380A1 (en) * | 2011-05-18 | 2012-11-22 | Vmware, Inc. | Combining profiles based on priorities |
US8327131B1 (en) | 2004-11-29 | 2012-12-04 | Harris Corporation | Method and system to issue trust score certificates for networked devices using a trust scoring service |
US20120324358A1 (en) * | 2011-06-16 | 2012-12-20 | Vmware, Inc. | Delivery of a user interface using hypertext transfer protocol |
US8370479B2 (en) | 2006-10-03 | 2013-02-05 | Axeda Acquisition Corporation | System and method for dynamically grouping devices based on present device conditions |
US20130054426A1 (en) * | 2008-05-20 | 2013-02-28 | Verizon Patent And Licensing Inc. | System and Method for Customer Provisioning in a Utility Computing Platform |
US8406119B2 (en) | 2001-12-20 | 2013-03-26 | Axeda Acquisition Corporation | Adaptive device-initiated polling |
US20130104218A1 (en) * | 2010-09-26 | 2013-04-25 | Zhou Lu | Method and system for securely accessing to protected resource |
US8443077B1 (en) | 2010-05-20 | 2013-05-14 | Gogrid, LLC | System and method for managing disk volumes in a hosting system |
US20130133030A1 (en) * | 2010-07-30 | 2013-05-23 | China Iwncomm Co., Ltd. | Platform authentication strategy management method and device for trusted connection architecture |
US8478722B2 (en) | 2009-11-12 | 2013-07-02 | Salesforce.Com, Inc. | Enterprise level business information networking for changes in a database |
US20130174151A1 (en) * | 2011-12-28 | 2013-07-04 | Hiroshi Nakajima | Information processing apparatus and method of controlling virtual machine |
US20130198349A1 (en) * | 2012-01-31 | 2013-08-01 | Edward Allen Wright | Remote server configuration |
US8505029B1 (en) * | 2007-11-26 | 2013-08-06 | Adobe Systems Incorporated | Virtual machine communication |
US20130238785A1 (en) * | 2012-03-06 | 2013-09-12 | Rackspace Us, Inc. | System and Method for Metadata Discovery and Metadata-Aware Scheduling |
US8538919B1 (en) | 2009-05-16 | 2013-09-17 | Eric H. Nielsen | System, method, and computer program for real time remote recovery of virtual computing machines |
US8555360B1 (en) * | 2009-04-10 | 2013-10-08 | Open Invention Network Llc | System and method for on-line and off-line streaming application isolation |
EP2648127A1 (en) * | 2012-03-29 | 2013-10-09 | Fujitsu Limited | Access control method, server device, and storage device |
US20130268573A1 (en) * | 2012-04-09 | 2013-10-10 | Empire Technology Development Llc | Processing load distribution |
US8572370B1 (en) * | 2007-12-21 | 2013-10-29 | Parallels IP Holdings GmbH | Accessing a remote virtual environment without user authentication |
WO2013163165A1 (en) | 2012-04-25 | 2013-10-31 | Citrix Systems, Inc. | Secure administration of virtual machines |
US20130332587A1 (en) * | 2012-06-11 | 2013-12-12 | International Business Machines Corporation | Method and a system for on-boarding, administration and communication between cloud providers and tenants in a share-all multi-tenancy environment |
EP2677760A1 (en) * | 2012-06-22 | 2013-12-25 | Kabushiki Kaisha Toshiba | Information transmisison between an information processing device and an external device |
WO2014005053A1 (en) * | 2012-06-29 | 2014-01-03 | Avocent Huntsville Corp. | System and method for single kvm client accommodating multiple different video compression technologies |
US20140047095A1 (en) * | 2012-08-07 | 2014-02-13 | Advanced Micro Devices, Inc. | System and method for tuning a cloud computing system |
US8667556B2 (en) | 2008-05-19 | 2014-03-04 | Cisco Technology, Inc. | Method and apparatus for building and managing policies |
US8677453B2 (en) | 2008-05-19 | 2014-03-18 | Cisco Technology, Inc. | Highly parallel evaluation of XACML policies |
US20140101754A1 (en) * | 2009-12-14 | 2014-04-10 | Citrix Systems, Inc. | Methods and systems for allocating a usb device to a trusted virtual machine or a non-trusted virtual machine |
US20140108589A1 (en) * | 2012-10-11 | 2014-04-17 | Sanjeev Dhanda | Testing an executable binary file using an injection proxy |
US20140115175A1 (en) * | 2012-10-23 | 2014-04-24 | Red Hat Israel, Ltd. | Client live migration for a virtual machine |
US20140115587A1 (en) * | 2011-11-14 | 2014-04-24 | Huawei Technologies Co., Ltd. | Exception handling method, apparatus, and client |
WO2014062405A1 (en) * | 2012-10-16 | 2014-04-24 | Citrix Systems, Inc. | Systems and methods for bridging between public and private clouds through multi-level api integration |
US8718070B2 (en) | 2010-07-06 | 2014-05-06 | Nicira, Inc. | Distributed network virtualization apparatus and method |
US20140136593A1 (en) * | 2012-11-09 | 2014-05-15 | Sap Ag | Retry mechanism for data loading from on-premise datasource to cloud |
US8732308B1 (en) * | 2008-10-01 | 2014-05-20 | Hewlett-Packard Development Company, L. P. | Coordinated management in virtualized systems using management brokers and management channels |
US8745601B1 (en) * | 2008-07-17 | 2014-06-03 | Apple Inc. | Methods and systems for using data structures for operating systems |
US20140165051A1 (en) * | 2005-12-22 | 2014-06-12 | Microsoft Corporation | Program execution service windows |
US8756696B1 (en) | 2010-10-30 | 2014-06-17 | Sra International, Inc. | System and method for providing a virtualized secure data containment service with a networked environment |
US8771064B2 (en) | 2010-05-26 | 2014-07-08 | Aristocrat Technologies Australia Pty Limited | Gaming system and a method of gaming |
US20140208194A1 (en) * | 2013-01-22 | 2014-07-24 | Michael O'Leary | Device and system for securely executing electronic documents |
US8880657B1 (en) | 2011-06-28 | 2014-11-04 | Gogrid, LLC | System and method for configuring and managing virtual grids |
US8931087B1 (en) * | 2008-12-03 | 2015-01-06 | Verizon Patent And Licensing Inc. | Reconfigurable virtualized remote computer security system |
US8966035B2 (en) | 2009-04-01 | 2015-02-24 | Nicira, Inc. | Method and apparatus for implementing and managing distributed virtual switches in several hosts and physical forwarding elements |
US8964528B2 (en) | 2010-07-06 | 2015-02-24 | Nicira, Inc. | Method and apparatus for robust packet distribution among hierarchical managed switching elements |
US8966112B1 (en) | 2009-11-30 | 2015-02-24 | Dell Software Inc. | Network protocol proxy |
US9027024B2 (en) | 2012-05-09 | 2015-05-05 | Rackspace Us, Inc. | Market-based virtual machine allocation |
US9032400B1 (en) * | 2012-10-25 | 2015-05-12 | Amazon Technologies, Inc. | Opportunistic initiation of potentially invasive actions |
US20150143469A1 (en) * | 2012-11-20 | 2015-05-21 | Michael Sokoryansky | Secure data transmission |
US9043452B2 (en) | 2011-05-04 | 2015-05-26 | Nicira, Inc. | Network control apparatus and method for port isolation |
US9043391B2 (en) | 2007-02-15 | 2015-05-26 | Citrix Systems, Inc. | Capturing and restoring session state of a machine without using memory images |
US9086907B2 (en) | 2011-12-28 | 2015-07-21 | Kabushiki Kaisha Toshiba | Apparatus and method for managing virtual machine addresses |
US9092767B1 (en) * | 2013-03-04 | 2015-07-28 | Google Inc. | Selecting a preferred payment instrument |
US20150244571A1 (en) * | 2013-09-05 | 2015-08-27 | NCS Technologies, Inc. | Systems and methods providing a mobile zero client |
US9128803B2 (en) | 2010-12-15 | 2015-09-08 | Microsoft Technology Licensing, Llc | Application model for implementing composite applications |
US9152532B2 (en) | 2012-08-07 | 2015-10-06 | Advanced Micro Devices, Inc. | System and method for configuring a cloud computing system with a synthetic test workload |
WO2015175588A1 (en) * | 2014-05-14 | 2015-11-19 | Microsoft Technology Licensing, Llc | Transferring content between graphical user interfaces |
US20150350005A1 (en) * | 2014-05-29 | 2015-12-03 | Blackberry Limited | Coordinating activity views across operating system domains |
EP2958257A1 (en) * | 2010-03-23 | 2015-12-23 | Citrix Systems Inc. | Network policy implementation for a multi-virtual machine appliance |
US9262231B2 (en) | 2012-08-07 | 2016-02-16 | Advanced Micro Devices, Inc. | System and method for modifying a hardware configuration of a cloud computing system |
US9288117B1 (en) | 2011-02-08 | 2016-03-15 | Gogrid, LLC | System and method for managing virtual and dedicated servers |
EP2717161A4 (en) * | 2011-05-24 | 2016-04-06 | Intelligent Willpower Corp | System for providing virtual machines |
US9350493B1 (en) * | 2007-07-19 | 2016-05-24 | American Megatrends, Inc. | Multi-protocol data transfers |
US9363102B1 (en) * | 2010-12-21 | 2016-06-07 | Amazon Technologies, Inc. | Methods and apparatus for implementing anycast flow stickiness in stateful sessions |
US20160173619A1 (en) * | 2014-12-16 | 2016-06-16 | Citrix Systems, Inc. | Methods and systems for connecting devices to applications and desktops that are receiving maintenance |
US9411855B2 (en) | 2010-10-25 | 2016-08-09 | Salesforce.Com, Inc. | Triggering actions in an information feed system |
US9443225B2 (en) | 2011-07-18 | 2016-09-13 | Salesforce.Com, Inc. | Computer implemented methods and apparatus for presentation of feed items in an information feed to be displayed on a display device |
WO2016166183A1 (en) * | 2015-04-13 | 2016-10-20 | Barco N.V. | Browser based display system for displaying image data |
US9479394B2 (en) | 2008-05-20 | 2016-10-25 | Verizon Patent And Licensing Inc. | System and method for customer provisioning in a utility computing platform |
WO2016181423A1 (en) * | 2015-05-11 | 2016-11-17 | Nec Corporation | Communication apparaus, system, method, and program |
US9514242B2 (en) | 2011-08-29 | 2016-12-06 | Vmware, Inc. | Presenting dynamically changing images in a limited rendering environment |
US9516063B2 (en) * | 2015-03-10 | 2016-12-06 | Raytheon Company | System, method, and computer-readable medium for performing automated security validation on a virtual machine |
US9525647B2 (en) | 2010-07-06 | 2016-12-20 | Nicira, Inc. | Network control apparatus and method for creating and modifying logical switching elements |
EP3107052A1 (en) * | 2015-06-15 | 2016-12-21 | Tata Consultancy Services Limited | Method and system for performing secure banking transactions |
US9549045B2 (en) | 2011-08-29 | 2017-01-17 | Vmware, Inc. | Sharing remote sessions of a user interface and/or graphics of a computer |
US9552473B2 (en) | 2014-05-14 | 2017-01-24 | Microsoft Technology Licensing, Llc | Claiming data from a virtual whiteboard |
US9582309B2 (en) | 2014-12-09 | 2017-02-28 | Vmware, Inc. | Allocating cost of disk usage to a linked clone virtual machine based on a parameter of usage |
US9621665B2 (en) | 2012-12-07 | 2017-04-11 | Huawei Technologies Co., Ltd. | Multimedia redirection method, multimedia server, and computer system |
US9658895B2 (en) | 2012-08-07 | 2017-05-23 | Advanced Micro Devices, Inc. | System and method for configuring boot-time parameters of nodes of a cloud computing system |
US9680750B2 (en) | 2010-07-06 | 2017-06-13 | Nicira, Inc. | Use of tunnels to hide network addresses |
US9710296B2 (en) | 2014-12-09 | 2017-07-18 | Vmware, Inc. | Allocating cost of disk usage to a linked clone virtual machine |
US9749333B2 (en) | 2014-05-05 | 2017-08-29 | Oliver Lloyd Pty Ltd | Shared access appliance, device and process |
EP3203700A4 (en) * | 2014-10-31 | 2017-10-18 | Institute of Acoustics, Chinese Academy of Sciences | Rdp data collection apparatus and method |
EP3211520A3 (en) * | 2016-02-24 | 2017-11-01 | Konica Minolta, Inc. | Image processing system, information processing device, image processing device and computer readable program |
US9858572B2 (en) | 2014-02-06 | 2018-01-02 | Google Llc | Dynamic alteration of track data |
JP2018500834A (en) * | 2014-12-23 | 2018-01-11 | 華為技術有限公司Huawei Technologies Co.,Ltd. | Method and apparatus for deploying services in a virtualized network |
US10103939B2 (en) | 2010-07-06 | 2018-10-16 | Nicira, Inc. | Network control apparatus and method for populating logical datapath sets |
US10115174B2 (en) * | 2013-09-24 | 2018-10-30 | 2236008 Ontario Inc. | System and method for forwarding an application user interface |
US10185954B2 (en) | 2012-07-05 | 2019-01-22 | Google Llc | Selecting a preferred payment instrument based on a merchant category |
US10187325B2 (en) | 2015-08-25 | 2019-01-22 | Accenture Global Services Limited | Network proxy for control and normalization of tagging data |
US10270671B2 (en) * | 2015-09-22 | 2019-04-23 | Microsoft Technology Licensing, Llc | External process user interface isolation and monitoring |
US10270819B2 (en) | 2014-05-14 | 2019-04-23 | Microsoft Technology Licensing, Llc | System and method providing collaborative interaction |
AU2017248430B2 (en) * | 2016-10-28 | 2019-05-02 | Caterpillar Inc. | System and method for communicating negotiated groups of parameters |
US20190205147A1 (en) * | 2016-10-25 | 2019-07-04 | Tencent Technology (Shenzhen) Company Limited | Application running method and device |
US10445086B2 (en) | 2017-09-28 | 2019-10-15 | At&T Intellectual Property I, L.P. | Virtualization platform for creating, deploying, modifying, and relocating applications |
EP3640829A1 (en) * | 2012-06-15 | 2020-04-22 | VMware, Inc. | Systems and methods for accessing a virtual desktop |
US10803170B2 (en) | 2005-06-30 | 2020-10-13 | Webroot Inc. | Methods and apparatus for dealing with malware |
US10931641B1 (en) * | 2018-10-29 | 2021-02-23 | Beijing Beyondinfo Technology Co., Ltd. | Hardware control logic based data forwarding control method and system |
US11005914B2 (en) * | 2018-10-12 | 2021-05-11 | Connectwise, Llc. | Hidden desktop session for remote access |
US11012482B1 (en) | 2020-08-28 | 2021-05-18 | Tmrw Foundation Ip S. À R.L. | Spatially aware multimedia router system and method |
US11012239B2 (en) * | 2017-11-29 | 2021-05-18 | Oracle International Corporation | Trusted client security factor-based authorizations |
US20210240768A1 (en) * | 2020-02-05 | 2021-08-05 | EMC IP Holding Company LLC | Reliably maintaining strict consistency in cluster wide state of opened files in a distributed file system cluster exposing a global namespace |
US20210367922A1 (en) * | 2018-05-24 | 2021-11-25 | Texas Instruments Incorporated | System on chip firewall memory architecture |
US11188356B2 (en) | 2017-06-20 | 2021-11-30 | Siemens Aktiengesellschaft | Method and arrangement to access a first computer on a virtual machine of a second computer |
US20210385301A1 (en) * | 2012-09-22 | 2021-12-09 | Google Llc | Subscription-notification mechanisms for synchronization of distributed states |
US20210397730A1 (en) * | 2019-05-30 | 2021-12-23 | Bank Of America Corporation | Controlling Access to Secure Information Resources Using Rotational Datasets and Dynamically Configurable Data Containers |
US11218522B1 (en) | 2020-08-28 | 2022-01-04 | Tmrw Foundation Ip S. À R.L. | Data processing system and method using hybrid system architecture for image processing tasks |
US11227265B2 (en) * | 2014-05-21 | 2022-01-18 | Euronet Usa Llc | Distributed transaction system |
US11245529B2 (en) * | 2017-10-06 | 2022-02-08 | Stealthpath, Inc. | Methods for internet communication security |
US11258848B1 (en) * | 2018-08-09 | 2022-02-22 | Amazon Technologies, Inc. | Load balancing requests such that target resources serve a single client |
US20220058660A1 (en) * | 2020-08-24 | 2022-02-24 | AO Kaspersky Lab | System and method for detecting malicious use of a remote administration tool |
US11308173B2 (en) * | 2014-12-19 | 2022-04-19 | Meta Platforms, Inc. | Searching for ideograms in an online social network |
US11314853B2 (en) * | 2018-01-10 | 2022-04-26 | Feitian Technologies Co., Ltd. | Method and apparatus for implementing logging-on of hardware to windows system with version 10 or higher |
US11368391B2 (en) * | 2014-12-15 | 2022-06-21 | Royal Bank Of Canada | Verification of data processes in a network of computing resources |
US20220206824A1 (en) * | 2020-04-14 | 2022-06-30 | Ncr Corporation | Virtualized transaction terminal platform |
US20220284125A1 (en) * | 2021-03-03 | 2022-09-08 | Bank Of America Corporation | System for electronic data obfuscation and protection using independent destructible data objects |
US20220300464A1 (en) * | 2018-05-15 | 2022-09-22 | Splunk Inc. | Log data extraction from data chunks of an isolated execution environment |
US11456923B1 (en) * | 2021-07-28 | 2022-09-27 | Hewlett Packard Enterprise Development Lp | System and method for facilitating a dynamic policy engine with recursive key selection |
US11477135B2 (en) | 2014-12-15 | 2022-10-18 | Royal Bank Of Canada | Verification of data processes in a network of computing resources |
US11477185B2 (en) * | 2019-02-15 | 2022-10-18 | Xiid Corporation | Method and system for single sign-on authentication |
US20220337576A1 (en) * | 2021-04-15 | 2022-10-20 | Jpmorgan Chase Bank, N.A. | System and method for smart authentication |
US20220377156A1 (en) * | 2019-03-01 | 2022-11-24 | Microsoft Technology Licensing, Llc | User interaction and task management using multiple devices |
US11538078B1 (en) | 2009-04-10 | 2022-12-27 | International Business Machines Corporation | System and method for usage billing of hosted applications |
US20230015697A1 (en) * | 2021-07-13 | 2023-01-19 | Citrix Systems, Inc. | Application programming interface (api) authorization |
US11583768B2 (en) | 2020-10-25 | 2023-02-21 | Meta Platforms, Inc. | Systems and methods for secure concurrent streaming of applications |
US20230080623A1 (en) * | 2021-09-15 | 2023-03-16 | Sam Barhoumeh | Systems and Methods for an Enterprise Computing Platform |
US20230254301A1 (en) * | 2022-02-07 | 2023-08-10 | Elasticsearch B.V. | Auto-Configuration of Security Features in Distributed System with Minimal User Interaction |
US11886455B1 (en) | 2018-09-28 | 2024-01-30 | Splunk Inc. | Networked cloud service monitoring |
US11893145B2 (en) * | 2017-04-18 | 2024-02-06 | Bankvault Pty Ltd | Virtual machines—computer implemented security methods and systems |
US11941421B1 (en) | 2021-07-09 | 2024-03-26 | Splunk Inc. | Evaluating and scaling a collection of isolated execution environments at a particular geographic location |
WO2024065247A1 (en) * | 2022-09-28 | 2024-04-04 | Citrix Systems, Inc. | On-demand virtual secure session |
US12034785B2 (en) | 2020-08-28 | 2024-07-09 | Tmrw Foundation Ip S.Àr.L. | System and method enabling interactions in virtual environments with virtual presence |
US12099620B1 (en) * | 2017-02-03 | 2024-09-24 | Rockloans Marketplace Llc | User authentication |
Families Citing this family (2268)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8352400B2 (en) | 1991-12-23 | 2013-01-08 | Hoffberg Steven M | Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore |
US7966078B2 (en) | 1999-02-01 | 2011-06-21 | Steven Hoffberg | Network media appliance system and method |
US8538843B2 (en) * | 2000-07-17 | 2013-09-17 | Galactic Computing Corporation Bvi/Bc | Method and system for operating an E-commerce service provider |
US9208270B2 (en) * | 2000-08-02 | 2015-12-08 | Comsol Ab | System and method for establishing bidirectional links between multiphysics modeling and design systems |
US20070192863A1 (en) * | 2005-07-01 | 2007-08-16 | Harsh Kapoor | Systems and methods for processing data flows |
US8010469B2 (en) * | 2000-09-25 | 2011-08-30 | Crossbeam Systems, Inc. | Systems and methods for processing data flows |
US9525696B2 (en) | 2000-09-25 | 2016-12-20 | Blue Coat Systems, Inc. | Systems and methods for processing data flows |
US7774492B2 (en) * | 2001-07-26 | 2010-08-10 | Citrix Systems, Inc. | System, method and computer program product to maximize server throughput while avoiding server overload by controlling the rate of establishing server-side net work connections |
US9405459B2 (en) | 2011-08-24 | 2016-08-02 | Z124 | Unified desktop laptop dock software operation |
US9268518B2 (en) | 2011-09-27 | 2016-02-23 | Z124 | Unified desktop docking rules |
US9715252B2 (en) * | 2011-08-24 | 2017-07-25 | Z124 | Unified desktop docking behavior for window stickiness |
US7650576B2 (en) * | 2002-03-07 | 2010-01-19 | Business Objects Americas | Method and system for creating graphical and interactive representations of input and output data |
US7711847B2 (en) | 2002-04-26 | 2010-05-04 | Sony Computer Entertainment America Inc. | Managing users in a multi-user network game environment |
US20030217135A1 (en) | 2002-05-17 | 2003-11-20 | Masayuki Chatani | Dynamic player management |
US20030233580A1 (en) * | 2002-05-29 | 2003-12-18 | Keeler James D. | Authorization and authentication of user access to a distributed network communication system with roaming features |
US8291407B2 (en) | 2002-06-12 | 2012-10-16 | Symantec Corporation | Systems and methods for patching computer programs |
US8843903B1 (en) | 2003-06-11 | 2014-09-23 | Symantec Corporation | Process tracking application layered system |
US8302108B1 (en) | 2002-06-12 | 2012-10-30 | Symantec Corporation | Feature based software virtualization |
US8370420B1 (en) | 2002-07-11 | 2013-02-05 | Citrix Systems, Inc. | Web-integrated display of locally stored content objects |
US8560707B2 (en) | 2007-10-05 | 2013-10-15 | Sony Computer Entertainment America Llc | Seamless host migration based on NAT type |
US8131802B2 (en) | 2007-10-05 | 2012-03-06 | Sony Computer Entertainment America Llc | Systems and methods for seamless host migration |
JP4777651B2 (en) | 2002-08-23 | 2011-09-21 | イグジット−キューブ,インク. | Computer system and data storage method |
US20110113121A1 (en) * | 2003-03-06 | 2011-05-12 | Amit Sarkar | Method And System For Operating A Primary PC From A Remote Pseudo-mobile PC |
US7900240B2 (en) | 2003-05-28 | 2011-03-01 | Citrix Systems, Inc. | Multilayer access control security system |
US20040243852A1 (en) | 2003-05-28 | 2004-12-02 | Rosenstein Adam H. | Method, system and software for state signing of internet resources |
US7571180B2 (en) * | 2003-06-27 | 2009-08-04 | Attachmate Corporation | Utilizing LDAP directories for application access control and personalization |
US7707255B2 (en) | 2003-07-01 | 2010-04-27 | Microsoft Corporation | Automatic grouping of electronic mail |
US8539063B1 (en) | 2003-08-29 | 2013-09-17 | Mcafee, Inc. | Method and system for containment of networked application client software by explicit human input |
US8560671B1 (en) * | 2003-10-23 | 2013-10-15 | Netapp, Inc. | Systems and methods for path-based management of virtual servers in storage network environments |
US7978716B2 (en) | 2003-11-24 | 2011-07-12 | Citrix Systems, Inc. | Systems and methods for providing a VPN solution |
US7840968B1 (en) | 2003-12-17 | 2010-11-23 | Mcafee, Inc. | Method and system for containment of usage of language interfaces |
US9977561B2 (en) * | 2004-04-01 | 2018-05-22 | Sonos, Inc. | Systems, methods, apparatus, and articles of manufacture to provide guest access |
US8850060B1 (en) * | 2004-04-19 | 2014-09-30 | Acronis International Gmbh | Network interface within a designated virtual execution environment (VEE) |
US7757074B2 (en) | 2004-06-30 | 2010-07-13 | Citrix Application Networking, Llc | System and method for establishing a virtual private network |
US8739274B2 (en) | 2004-06-30 | 2014-05-27 | Citrix Systems, Inc. | Method and device for performing integrated caching in a data communication network |
US8495305B2 (en) | 2004-06-30 | 2013-07-23 | Citrix Systems, Inc. | Method and device for performing caching of dynamically generated objects in a data communication network |
US7617501B2 (en) | 2004-07-09 | 2009-11-10 | Quest Software, Inc. | Apparatus, system, and method for managing policies on a computer having a foreign operating system |
US8914522B2 (en) | 2004-07-23 | 2014-12-16 | Citrix Systems, Inc. | Systems and methods for facilitating a peer to peer route via a gateway |
EP1771979B1 (en) | 2004-07-23 | 2011-11-23 | Citrix Systems, Inc. | A method and systems for securing remote access to private networks |
US8255828B2 (en) | 2004-08-16 | 2012-08-28 | Microsoft Corporation | Command user interface for displaying selectable software functionality controls |
US8146016B2 (en) | 2004-08-16 | 2012-03-27 | Microsoft Corporation | User interface for displaying a gallery of formatting options applicable to a selected object |
US7703036B2 (en) | 2004-08-16 | 2010-04-20 | Microsoft Corporation | User interface for displaying selectable software functionality controls that are relevant to a selected object |
US7873955B1 (en) | 2004-09-07 | 2011-01-18 | Mcafee, Inc. | Solidifying the executable software set of a computer |
US8095940B2 (en) | 2005-09-19 | 2012-01-10 | Citrix Systems, Inc. | Method and system for locating and accessing resources |
US7680758B2 (en) * | 2004-09-30 | 2010-03-16 | Citrix Systems, Inc. | Method and apparatus for isolating execution of software applications |
US8171479B2 (en) | 2004-09-30 | 2012-05-01 | Citrix Systems, Inc. | Method and apparatus for providing an aggregate view of enumerated system resources from various isolation layers |
US7620953B1 (en) * | 2004-10-05 | 2009-11-17 | Azul Systems, Inc. | System and method for allocating resources of a core space among a plurality of core virtual machines |
US7310696B1 (en) * | 2004-12-03 | 2007-12-18 | Crossroads Systems, Inc. | Method and system for coordinating interoperability between devices of varying capabilities in a network |
US9390132B1 (en) * | 2009-10-16 | 2016-07-12 | Iqor Holdings, Inc. | Apparatuses, methods and systems for a universal data librarian |
US7810089B2 (en) | 2004-12-30 | 2010-10-05 | Citrix Systems, Inc. | Systems and methods for automatic installation and execution of a client-side acceleration program |
US8140650B2 (en) * | 2004-12-30 | 2012-03-20 | Nokia Corporation | Use of configurations in device with multiple configurations |
US8706877B2 (en) | 2004-12-30 | 2014-04-22 | Citrix Systems, Inc. | Systems and methods for providing client-side dynamic redirection to bypass an intermediary |
US8700695B2 (en) | 2004-12-30 | 2014-04-15 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP pooling |
US8954595B2 (en) | 2004-12-30 | 2015-02-10 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP buffering |
US8549149B2 (en) | 2004-12-30 | 2013-10-01 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing |
US8042165B2 (en) * | 2005-01-14 | 2011-10-18 | Citrix Systems, Inc. | Method and system for requesting and granting membership in a server farm |
US8255456B2 (en) | 2005-12-30 | 2012-08-28 | Citrix Systems, Inc. | System and method for performing flash caching of dynamically generated objects in a data communication network |
US8219823B2 (en) | 2005-03-04 | 2012-07-10 | Carter Ernst B | System for and method of managing access to a system using combinations of user information |
JP4722519B2 (en) * | 2005-03-25 | 2011-07-13 | 株式会社日立製作所 | Computer system, storage server, search server, terminal device, and search method |
WO2006105139A2 (en) * | 2005-03-30 | 2006-10-05 | Welch Allyn, Inc. | Communication of information between a plurality of network elements |
JP4168052B2 (en) * | 2005-04-01 | 2008-10-22 | 株式会社日立製作所 | Management server |
US8453148B1 (en) | 2005-04-06 | 2013-05-28 | Teradici Corporation | Method and system for image sequence transfer scheduling and restricting the image sequence generation |
ES2305938T3 (en) * | 2005-04-22 | 2008-11-01 | Trumpf Laser Gmbh + Co. Kg | SYSTEM AND PROCEDURE FOR SECURE REMOTE ACCESS. |
US7831833B2 (en) * | 2005-04-22 | 2010-11-09 | Citrix Systems, Inc. | System and method for key recovery |
US9621666B2 (en) | 2005-05-26 | 2017-04-11 | Citrix Systems, Inc. | Systems and methods for enhanced delta compression |
US9692725B2 (en) | 2005-05-26 | 2017-06-27 | Citrix Systems, Inc. | Systems and methods for using an HTTP-aware client agent |
US8943304B2 (en) | 2006-08-03 | 2015-01-27 | Citrix Systems, Inc. | Systems and methods for using an HTTP-aware client agent |
US9407608B2 (en) | 2005-05-26 | 2016-08-02 | Citrix Systems, Inc. | Systems and methods for enhanced client side policy |
US7895578B2 (en) * | 2005-06-13 | 2011-02-22 | Business Objects Software Ltd. | Apparatus and method for using connector components to provide connectivity to interactive graphics representative of input and output data |
US20110288976A1 (en) * | 2005-06-28 | 2011-11-24 | Mark Ellery Ogram | Total computer security |
US20070002367A1 (en) * | 2005-06-29 | 2007-01-04 | Eric Yuan | Methods and apparatuses for selectively controlling a remote device |
US7856661B1 (en) | 2005-07-14 | 2010-12-21 | Mcafee, Inc. | Classification of software on networked systems |
EP1911817B1 (en) * | 2005-07-25 | 2014-05-21 | Toyo Ink Mfg. Co., Ltd. | Active energy beam-curable ink for inkjet printing |
US20070088279A1 (en) * | 2005-07-26 | 2007-04-19 | Ming-Jeng Shue | Intravenous catheter introducing device with a tubular outlet member |
DE102005035903A1 (en) * | 2005-07-28 | 2007-02-08 | X-Aitment Gmbh | Generic AI architecture for a multi-agent system |
US9323503B1 (en) | 2009-12-29 | 2016-04-26 | Comsol Ab | System and method for accessing settings in a multiphysics modeling system using a model tree |
GB0517585D0 (en) * | 2005-08-30 | 2005-10-05 | Ramakrishna Madhusudana | Intuitive search which delivers fast results on the mobile phone |
US8627222B2 (en) | 2005-09-12 | 2014-01-07 | Microsoft Corporation | Expanded search and find user interface |
WO2009149416A1 (en) * | 2008-06-05 | 2009-12-10 | 3Tera, Inc. | Automated filer technique for use in virtualized appliances and applications |
US8131825B2 (en) | 2005-10-07 | 2012-03-06 | Citrix Systems, Inc. | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US8171127B2 (en) * | 2005-10-07 | 2012-05-01 | Citrix Systems, Inc. | Systems and methods for response monitoring |
US7813913B2 (en) * | 2005-10-12 | 2010-10-12 | Storage Appliance Corporation | Emulation component for data backup applications |
US8069271B2 (en) * | 2005-10-12 | 2011-11-29 | Storage Appliance Corporation | Systems and methods for converting a media player into a backup device |
US8195444B2 (en) | 2005-10-12 | 2012-06-05 | Storage Appliance Corporation | Systems and methods for automated diagnosis and repair of storage devices |
US20070162271A1 (en) * | 2005-10-12 | 2007-07-12 | Storage Appliance Corporation | Systems and methods for selecting and printing data files from a backup system |
US7899662B2 (en) * | 2005-10-12 | 2011-03-01 | Storage Appliance Corporation | Data backup system including a data protection component |
US7822595B2 (en) | 2005-10-12 | 2010-10-26 | Storage Appliance Corporation | Systems and methods for selectively copying embedded data files |
US7702830B2 (en) * | 2005-10-12 | 2010-04-20 | Storage Appliance Corporation | Methods for selectively copying data files to networked storage and devices for initiating the same |
US7818160B2 (en) * | 2005-10-12 | 2010-10-19 | Storage Appliance Corporation | Data backup devices and methods for backing up data |
US7844445B2 (en) | 2005-10-12 | 2010-11-30 | Storage Appliance Corporation | Automatic connection to an online service provider from a backup system |
JP4806557B2 (en) * | 2005-10-18 | 2011-11-02 | 株式会社日立製作所 | Storage device and computer system for managing logs |
US8112798B2 (en) * | 2005-11-09 | 2012-02-07 | Microsoft Corporation | Hardware-aided software code measurement |
US7756893B2 (en) * | 2005-11-09 | 2010-07-13 | Microsoft Corporation | Independent computation environment and data protection |
CN101310285B (en) * | 2005-11-17 | 2011-09-07 | 皇家飞利浦电子股份有限公司 | System for managing access control |
JP2007165996A (en) * | 2005-12-09 | 2007-06-28 | Hitachi Industrial Equipment Systems Co Ltd | Monitoring apparatus |
US7836303B2 (en) | 2005-12-09 | 2010-11-16 | University Of Washington | Web browser operating system |
US7596756B2 (en) * | 2005-12-14 | 2009-09-29 | Vacava Inc. | Browser session control system and method |
US7904949B2 (en) | 2005-12-19 | 2011-03-08 | Quest Software, Inc. | Apparatus, systems and methods to provide authentication services to a legacy application |
US7924884B2 (en) | 2005-12-20 | 2011-04-12 | Citrix Systems, Inc. | Performance logging using relative differentials and skip recording |
US7921184B2 (en) | 2005-12-30 | 2011-04-05 | Citrix Systems, Inc. | System and method for performing flash crowd caching of dynamically generated objects in a data communication network |
US8301839B2 (en) | 2005-12-30 | 2012-10-30 | Citrix Systems, Inc. | System and method for performing granular invalidation of cached dynamically generated objects in a data communication network |
US20070168872A1 (en) * | 2006-01-19 | 2007-07-19 | Raytheon Company | Multi-monitor, multi-JVM java GUI infrastructure with layout via XML |
US8196205B2 (en) | 2006-01-23 | 2012-06-05 | University Of Washington Through Its Center For Commercialization | Detection of spyware threats within virtual machine |
US7949008B2 (en) * | 2006-01-30 | 2011-05-24 | International Business Machines Corporation | Method, apparatus and computer program product for cell phone security |
US8102864B2 (en) | 2006-01-31 | 2012-01-24 | Roundbox, Inc. | Location specific event broadcasting |
US8149771B2 (en) | 2006-01-31 | 2012-04-03 | Roundbox, Inc. | Reliable event broadcaster with multiplexing and bandwidth control functions |
US7757269B1 (en) | 2006-02-02 | 2010-07-13 | Mcafee, Inc. | Enforcing alignment of approved changes and deployed changes in the software change life-cycle |
US8087075B2 (en) | 2006-02-13 | 2011-12-27 | Quest Software, Inc. | Disconnected credential validation using pre-fetched service tickets |
US9112705B2 (en) * | 2006-02-15 | 2015-08-18 | Nec Corporation | ID system and program, and ID method |
US7512408B2 (en) * | 2006-02-16 | 2009-03-31 | Softwired Ag | Scalable wireless messaging system |
US7739391B2 (en) * | 2006-02-16 | 2010-06-15 | Softwired Ag | Gateway for wireless mobile clients |
JP4801468B2 (en) * | 2006-03-02 | 2011-10-26 | 株式会社リコー | Management apparatus and image forming apparatus management system |
US20090133129A1 (en) | 2006-03-06 | 2009-05-21 | Lg Electronics Inc. | Data transferring method |
US8429300B2 (en) | 2006-03-06 | 2013-04-23 | Lg Electronics Inc. | Data transferring method |
AU2007222400B2 (en) | 2006-03-06 | 2010-01-21 | Lg Electronics Inc. | Data transfer controlling method, content transfer controlling method, content processing information acquisition method and content transfer system |
US20070214233A1 (en) * | 2006-03-07 | 2007-09-13 | Daryl Cromer | System and method for implementing a hypervisor for server emulation |
US7941801B2 (en) * | 2006-03-07 | 2011-05-10 | Oracle America Inc. | Method and system for provisioning a virtual computer and scheduling resources of the provisioned virtual computer |
US7895573B1 (en) | 2006-03-27 | 2011-02-22 | Mcafee, Inc. | Execution environment file inventory |
US20070234412A1 (en) * | 2006-03-29 | 2007-10-04 | Smith Ned M | Using a proxy for endpoint access control |
US8245293B2 (en) * | 2006-03-31 | 2012-08-14 | Huang Evan S | Methods and apparatuses for securely operating shared host computers with portable apparatuses |
US7870387B1 (en) | 2006-04-07 | 2011-01-11 | Mcafee, Inc. | Program-based authorization |
US7967682B2 (en) | 2006-04-12 | 2011-06-28 | Bally Gaming, Inc. | Wireless gaming environment |
US8151323B2 (en) * | 2006-04-12 | 2012-04-03 | Citrix Systems, Inc. | Systems and methods for providing levels of access and action control via an SSL VPN appliance |
US8745503B2 (en) * | 2006-04-20 | 2014-06-03 | Hewlett-Packard Development Company, L.P. | Graphical interface for managing server environment |
US8352930B1 (en) | 2006-04-24 | 2013-01-08 | Mcafee, Inc. | Software modification by group to minimize breakage |
US7716446B1 (en) | 2006-04-27 | 2010-05-11 | Vmware, Inc. | System and method for cooperative virtual machine memory scheduling |
WO2007124768A1 (en) * | 2006-04-28 | 2007-11-08 | Telecom Italia S.P.A. | Ink-jet printhead and manufacturing method thereof |
US8619771B2 (en) | 2009-09-30 | 2013-12-31 | Vmware, Inc. | Private allocated networks over shared communications infrastructure |
US8209408B1 (en) * | 2006-05-01 | 2012-06-26 | Vmware, Inc. | Multiple virtual machine consoles in a single interface |
US8892706B1 (en) | 2010-06-21 | 2014-11-18 | Vmware, Inc. | Private ethernet overlay networks over a shared ethernet in a virtual environment |
US8838756B2 (en) * | 2009-07-27 | 2014-09-16 | Vmware, Inc. | Management and implementation of enclosed local networks in a virtual lab |
US8924524B2 (en) | 2009-07-27 | 2014-12-30 | Vmware, Inc. | Automated network configuration of virtual machines in a virtual lab data environment |
US20070260702A1 (en) * | 2006-05-03 | 2007-11-08 | University Of Washington | Web browser architecture for virtual machine access |
US8141075B1 (en) * | 2006-05-08 | 2012-03-20 | Vmware, Inc. | Rule engine for virtualized desktop allocation system |
US7831786B2 (en) * | 2006-05-08 | 2010-11-09 | Research In Motion Limited | Sharing memory resources of wireless portable electronic devices |
US8555404B1 (en) | 2006-05-18 | 2013-10-08 | Mcafee, Inc. | Connectivity-based authorization |
US7987512B2 (en) * | 2006-05-19 | 2011-07-26 | Microsoft Corporation | BIOS based secure execution environment |
US8671403B2 (en) * | 2006-05-22 | 2014-03-11 | Infosys Limited | Pre-creating virtual machines in a grid environment |
US20140373144A9 (en) | 2006-05-22 | 2014-12-18 | Alen Capalik | System and method for analyzing unauthorized intrusion into a computer network |
US9189603B2 (en) | 2006-05-24 | 2015-11-17 | Confident Technologies, Inc. | Kill switch security method and system |
US20070277224A1 (en) * | 2006-05-24 | 2007-11-29 | Osborn Steven L | Methods and Systems for Graphical Image Authentication |
WO2007138423A2 (en) | 2006-05-25 | 2007-12-06 | Shuki Binyamin | Method and system for providing remote access to applications |
CN101083607B (en) * | 2006-05-30 | 2010-12-08 | 倪海生 | Internet accessing server for inside and outside network isolation and its processing method |
US9727989B2 (en) | 2006-06-01 | 2017-08-08 | Microsoft Technology Licensing, Llc | Modifying and formatting a chart using pictorially provided chart elements |
US8429712B2 (en) | 2006-06-08 | 2013-04-23 | Quest Software, Inc. | Centralized user authentication system apparatus and method |
US20070288645A1 (en) * | 2006-06-08 | 2007-12-13 | International Business Machines Corporation | Method and System for Persistent and Reliable Data Transmission |
JP4787684B2 (en) * | 2006-06-15 | 2011-10-05 | 日本電気株式会社 | Session management system, session management method, and program |
US9106613B2 (en) * | 2006-06-19 | 2015-08-11 | Ncr Corporation | Remote self service facilities administration system |
US9392078B2 (en) * | 2006-06-23 | 2016-07-12 | Microsoft Technology Licensing, Llc | Remote network access via virtual machine |
US20080005560A1 (en) * | 2006-06-29 | 2008-01-03 | Microsoft Corporation | Independent Computation Environment and Provisioning of Computing Device Functionality |
US8868533B2 (en) | 2006-06-30 | 2014-10-21 | International Business Machines Corporation | Method and apparatus for intelligent capture of document object model events |
US8583772B2 (en) * | 2008-08-14 | 2013-11-12 | International Business Machines Corporation | Dynamically configurable session agent |
US8869066B2 (en) | 2006-07-06 | 2014-10-21 | Addthis, Llc | Generic content collection systems |
WO2008006196A2 (en) * | 2006-07-09 | 2008-01-17 | 90 Degree Software Inc. | Systems and methods for managing networks |
WO2008011030A2 (en) * | 2006-07-17 | 2008-01-24 | Xensource, Inc | Tracking current time on multiprocessor hosts and virtual machines |
US8185605B2 (en) * | 2006-07-18 | 2012-05-22 | Cisco Technology, Inc. | Methods and apparatuses for accessing an application on a remote device |
US20080018649A1 (en) * | 2006-07-18 | 2008-01-24 | Zheng Yuan | Methods and apparatuses for utilizing an application on a remote device |
US20080030793A1 (en) * | 2006-07-26 | 2008-02-07 | Microsoft Corporation | Fax Accounts |
US20080034420A1 (en) * | 2006-08-01 | 2008-02-07 | Array Networks, Inc. | System and method of portal customization for a virtual private network device |
WO2008017001A2 (en) * | 2006-08-02 | 2008-02-07 | Moka5, Inc. | Sharing live appliances |
US8244883B2 (en) * | 2006-08-03 | 2012-08-14 | Citrix Systems, Inc. | Systems and methods of for providing multi-mode transport layer compression |
US8495181B2 (en) * | 2006-08-03 | 2013-07-23 | Citrix Systems, Inc | Systems and methods for application based interception SSI/VPN traffic |
US8561155B2 (en) | 2006-08-03 | 2013-10-15 | Citrix Systems, Inc. | Systems and methods for using a client agent to manage HTTP authentication cookies |
US8392977B2 (en) * | 2006-08-03 | 2013-03-05 | Citrix Systems, Inc. | Systems and methods for using a client agent to manage HTTP authentication cookies |
US8869262B2 (en) * | 2006-08-03 | 2014-10-21 | Citrix Systems, Inc. | Systems and methods for application based interception of SSL/VPN traffic |
JP4952125B2 (en) * | 2006-08-04 | 2012-06-13 | 富士通株式会社 | Load balancer |
WO2008019380A2 (en) | 2006-08-07 | 2008-02-14 | Bea Systems, Inc. | System and method for providing hardware virtualization in a virtual machine environment |
US7917963B2 (en) * | 2006-08-09 | 2011-03-29 | Antenna Vaultus, Inc. | System for providing mobile data security |
KR20080022476A (en) | 2006-09-06 | 2008-03-11 | 엘지전자 주식회사 | Method for processing non-compliant contents and drm interoperable system |
US8949295B2 (en) | 2006-09-21 | 2015-02-03 | Vmware, Inc. | Cooperative memory resource management via application-level balloon |
US20080075096A1 (en) * | 2006-09-22 | 2008-03-27 | Enthenergy, Llc | Remote access to secure network devices |
US20080082832A1 (en) * | 2006-09-29 | 2008-04-03 | Mcdougal Monty D | Configurable Data Access Application For Highly Secure Systems |
US20080082976A1 (en) * | 2006-09-29 | 2008-04-03 | Matthias Steinwagner | Usage of virtualization software for shipment of software products |
JP4932413B2 (en) * | 2006-09-29 | 2012-05-16 | 株式会社日立製作所 | Environment migration system, terminal device, information processing device, management server, portable storage medium |
US8014726B1 (en) | 2006-10-02 | 2011-09-06 | The Nielsen Company (U.S.), Llc | Method and system for collecting wireless information transparently and non-intrusively |
US8260252B2 (en) | 2006-10-02 | 2012-09-04 | The Nielsen Company (Us), Llc | Method and apparatus for collecting information about portable device usage |
WO2008045276A2 (en) | 2006-10-04 | 2008-04-17 | Welch Allyn, Inc. | Dynamic medical object information base |
US8468591B2 (en) * | 2006-10-13 | 2013-06-18 | Computer Protection Ip, Llc | Client authentication and data management system |
US8234641B2 (en) | 2006-10-17 | 2012-07-31 | Managelq, Inc. | Compliance-based adaptations in managed virtual systems |
US9697019B1 (en) | 2006-10-17 | 2017-07-04 | Manageiq, Inc. | Adapt a virtual machine to comply with system enforced policies and derive an optimized variant of the adapted virtual machine |
US8949825B1 (en) | 2006-10-17 | 2015-02-03 | Manageiq, Inc. | Enforcement of compliance policies in managed virtual systems |
US9086917B1 (en) | 2006-10-17 | 2015-07-21 | Manageiq, Inc. | Registering and accessing virtual systems for use in a managed system |
US8612971B1 (en) | 2006-10-17 | 2013-12-17 | Manageiq, Inc. | Automatic optimization for virtual systems |
US8949826B2 (en) * | 2006-10-17 | 2015-02-03 | Managelq, Inc. | Control and management of virtual systems |
US8752045B2 (en) * | 2006-10-17 | 2014-06-10 | Manageiq, Inc. | Methods and apparatus for using tags to control and manage assets |
US9038062B2 (en) | 2006-10-17 | 2015-05-19 | Manageiq, Inc. | Registering and accessing virtual systems for use in a managed system |
US9015703B2 (en) | 2006-10-17 | 2015-04-21 | Manageiq, Inc. | Enforcement of compliance policies in managed virtual systems |
US8234640B1 (en) | 2006-10-17 | 2012-07-31 | Manageiq, Inc. | Compliance-based adaptations in managed virtual systems |
US8458695B2 (en) | 2006-10-17 | 2013-06-04 | Manageiq, Inc. | Automatic optimization for virtual systems |
US8296760B2 (en) * | 2006-10-27 | 2012-10-23 | Hewlett-Packard Development Company, L.P. | Migrating a virtual machine from a first physical machine in response to receiving a command to lower a power mode of the first physical machine |
US7861108B2 (en) * | 2006-10-27 | 2010-12-28 | Hewlett-Packard Development Company, L.P. | Restoring user states in dynamic computing environments |
US9092250B1 (en) | 2006-10-27 | 2015-07-28 | Hewlett-Packard Development Company, L.P. | Selecting one of plural layouts of virtual machines on physical machines |
US8185893B2 (en) * | 2006-10-27 | 2012-05-22 | Hewlett-Packard Development Company, L.P. | Starting up at least one virtual machine in a physical machine by a load balancer |
US8732699B1 (en) | 2006-10-27 | 2014-05-20 | Hewlett-Packard Development Company, L.P. | Migrating virtual machines between physical machines in a define group |
US8086710B2 (en) | 2006-10-30 | 2011-12-27 | Quest Software, Inc. | Identity migration apparatus and method |
US9218213B2 (en) | 2006-10-31 | 2015-12-22 | International Business Machines Corporation | Dynamic placement of heterogeneous workloads |
JP4629646B2 (en) * | 2006-11-01 | 2011-02-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | Apparatus, method, and program for generating application program |
US9101820B2 (en) | 2006-11-09 | 2015-08-11 | Bally Gaming, Inc. | System, method and apparatus to produce decks for and operate games played with playing cards |
US8784212B2 (en) | 2006-11-10 | 2014-07-22 | Bally Gaming, Inc. | Networked gaming environment employing different classes of gaming machines |
US9508218B2 (en) | 2006-11-10 | 2016-11-29 | Bally Gaming, Inc. | Gaming system download network architecture |
US9111078B2 (en) | 2006-11-10 | 2015-08-18 | Bally Gaming, Inc. | Package manager service in gaming system |
US8920233B2 (en) | 2006-11-10 | 2014-12-30 | Bally Gaming, Inc. | Assignment template and assignment bundle in a gaming configuration and download system |
US8347280B2 (en) | 2006-11-13 | 2013-01-01 | Bally Gaming, Inc. | System and method for validating download or configuration assignment for an EGM or EGM collection |
US9082258B2 (en) | 2006-11-13 | 2015-07-14 | Bally Gaming, Inc. | Method and system for providing download and configuration job progress tracking and display via host user interface |
US8930461B2 (en) | 2006-11-13 | 2015-01-06 | Bally Gaming, Inc. | Download and configuration management engine for gaming system |
US20080120570A1 (en) * | 2006-11-22 | 2008-05-22 | Bluetie, Inc. | Methods for managing windows within an internet environment and systems thereof |
US20080126446A1 (en) * | 2006-11-27 | 2008-05-29 | Storage Appliance Corporation | Systems and methods for backing up user settings |
US8281370B2 (en) * | 2006-11-27 | 2012-10-02 | Therap Services LLP | Managing secure sharing of private information across security domains |
US9135605B2 (en) * | 2006-11-29 | 2015-09-15 | Adobe Systems Incorporated | Instant electronic meeting from within a current computer application |
US8590002B1 (en) | 2006-11-29 | 2013-11-19 | Mcafee Inc. | System, method and computer program product for maintaining a confidentiality of data on a network |
US7761469B2 (en) * | 2006-11-29 | 2010-07-20 | Red Hat, Inc. | Streamed attributes |
US8621469B2 (en) * | 2006-12-04 | 2013-12-31 | Canon Kabushiki Kaisha | Image processing job control system with access control ticket including function restriction based on user, time of request and upper limit on exceptional output count |
JP4293234B2 (en) * | 2006-12-05 | 2009-07-08 | 日本電気株式会社 | Connection management method and connection management server in thin client |
IL180020A (en) | 2006-12-12 | 2013-03-24 | Waterfall Security Solutions Ltd | Encryption -and decryption-enabled interfaces |
US7765407B2 (en) * | 2006-12-18 | 2010-07-27 | Lenovo (Singapore) Pte. Ltd. | Method and apparatus for providing centralized user authorization to allow secure sign-on to a computer system |
US7991876B2 (en) * | 2006-12-19 | 2011-08-02 | International Business Machines Corporation | Management of monitoring sessions between monitoring clients and monitoring target server |
US8266103B1 (en) * | 2006-12-21 | 2012-09-11 | Emc Corporation | Synchronizing resource type and property structures |
US8826032B1 (en) | 2006-12-27 | 2014-09-02 | Netapp, Inc. | Systems and methods for network change discovery and host name resolution in storage network environments |
US8248636B1 (en) | 2006-12-29 | 2012-08-21 | Google Inc. | WYSIWYG printing for web based applications |
US8612547B1 (en) | 2006-12-29 | 2013-12-17 | Google Inc. | Container interrupt services |
US8539073B1 (en) | 2006-12-29 | 2013-09-17 | Google Inc. | Startup of container applications |
US20080163208A1 (en) * | 2006-12-29 | 2008-07-03 | Jeremy Burr | Virtual machine creation for removable storage devices |
US7673113B2 (en) * | 2006-12-29 | 2010-03-02 | Intel Corporation | Method for dynamic load balancing on partitioned systems |
US7895296B1 (en) | 2006-12-29 | 2011-02-22 | Google, Inc. | Local storage for web based native applications |
US9384346B1 (en) | 2006-12-29 | 2016-07-05 | Google Inc. | Local service access within a web based application framework |
US8335817B1 (en) * | 2006-12-29 | 2012-12-18 | Google Inc. | Message passing within a web based application framework |
US9391826B1 (en) | 2006-12-29 | 2016-07-12 | Google Inc. | Collaborative web based applications |
US8327350B2 (en) * | 2007-01-02 | 2012-12-04 | International Business Machines Corporation | Virtual resource templates |
US8108855B2 (en) * | 2007-01-02 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for deploying a set of virtual software resource templates to a set of nodes |
JP5043953B2 (en) | 2007-01-05 | 2012-10-10 | エルジー エレクトロニクス インコーポレイティド | Resource transmission method and information providing method |
US8100750B2 (en) * | 2007-01-05 | 2012-01-24 | Bally Gaming, Inc. | Gaming machine with virtual user interface |
US8103272B2 (en) * | 2007-01-07 | 2012-01-24 | Apple Inc. | Techniques for database updates |
US7805403B2 (en) | 2007-01-07 | 2010-09-28 | Apple Inc. | Synchronization methods and systems |
US8423612B2 (en) * | 2007-01-08 | 2013-04-16 | Cisco Technology, Inc. | Methods and apparatuses for selectively accessing an application |
US20080168174A1 (en) * | 2007-01-09 | 2008-07-10 | Manuel Jose Acosta | Computer on demand |
US8332929B1 (en) | 2007-01-10 | 2012-12-11 | Mcafee, Inc. | Method and apparatus for process enforced configuration management |
US9424154B2 (en) | 2007-01-10 | 2016-08-23 | Mcafee, Inc. | Method of and system for computer system state checks |
US8527982B1 (en) * | 2007-01-12 | 2013-09-03 | moka5. Inc. | Auto install virtual machine monitor |
IL180748A (en) | 2007-01-16 | 2013-03-24 | Waterfall Security Solutions Ltd | Secure archive |
US8274978B2 (en) * | 2007-01-17 | 2012-09-25 | Panasonic Corporation | Systems and methods for reducing multicast traffic over a network |
US8380880B2 (en) * | 2007-02-02 | 2013-02-19 | The Mathworks, Inc. | Scalable architecture |
US8533291B1 (en) * | 2007-02-07 | 2013-09-10 | Oracle America, Inc. | Method and system for protecting publicly viewable web client reference to server resources and business logic |
WO2008097202A1 (en) * | 2007-02-09 | 2008-08-14 | Agency For Science, Technology And Research | A method and system for tamper proofing a system of interconnected electronic devices |
US7975024B2 (en) * | 2007-02-14 | 2011-07-05 | Yakov Nudler | Virtual personal computer access over multiple network sites |
JP4386926B2 (en) * | 2007-02-16 | 2009-12-16 | 富士通株式会社 | Encryption communication program, encryption communication method, and encryption communication apparatus |
JP2010507864A (en) | 2007-02-16 | 2010-03-11 | エルジー エレクトロニクス インコーポレイティド | Domain management method, domain device, and program |
US8365166B2 (en) * | 2007-02-20 | 2013-01-29 | Novell, Inc. | System and method for automated provisioning of VMware image instances |
US7949741B2 (en) * | 2007-02-20 | 2011-05-24 | Microsoft Corporation | Printer user interface redirection over a terminal services session |
US9661112B2 (en) * | 2007-02-22 | 2017-05-23 | International Business Machines Corporation | System and methods for providing server virtualization assistance |
US9946982B2 (en) * | 2007-02-28 | 2018-04-17 | Red Hat, Inc. | Web-based support subscriptions |
US8201218B2 (en) | 2007-02-28 | 2012-06-12 | Microsoft Corporation | Strategies for securely applying connection policies via a gateway |
JP4337891B2 (en) * | 2007-03-01 | 2009-09-30 | セイコーエプソン株式会社 | Storage terminal and information processing system |
US20090328193A1 (en) * | 2007-07-20 | 2009-12-31 | Hezi Moore | System and Method for Implementing a Virtualized Security Platform |
US8266274B2 (en) | 2007-03-06 | 2012-09-11 | Clearspring Technologies, Inc. | Method and apparatus for data processing |
US9009728B2 (en) | 2007-03-06 | 2015-04-14 | Addthis, Inc. | Method and apparatus for widget and widget-container distribution control based on content rules |
US20080226082A1 (en) * | 2007-03-12 | 2008-09-18 | Storage Appliance Corporation | Systems and methods for secure data backup |
US7619545B2 (en) | 2007-03-12 | 2009-11-17 | Citrix Systems, Inc. | Systems and methods of using application and protocol specific parsing for compression |
US8490148B2 (en) | 2007-03-12 | 2013-07-16 | Citrix Systems, Inc | Systems and methods for managing application security profiles |
US7853678B2 (en) * | 2007-03-12 | 2010-12-14 | Citrix Systems, Inc. | Systems and methods for configuring flow control of policy expressions |
US7532134B2 (en) | 2007-03-12 | 2009-05-12 | Citrix Systems, Inc. | Systems and methods for sharing compression histories between multiple devices |
US8255570B2 (en) | 2007-03-12 | 2012-08-28 | Citrix Systems, Inc. | Systems and methods of compression history expiration and synchronization |
US9021140B2 (en) * | 2007-03-12 | 2015-04-28 | Citrix Systems, Inc. | Systems and methods for error detection |
US7460038B2 (en) | 2007-03-12 | 2008-12-02 | Citrix Systems, Inc. | Systems and methods of clustered sharing of compression histories |
US7865585B2 (en) | 2007-03-12 | 2011-01-04 | Citrix Systems, Inc. | Systems and methods for providing dynamic ad hoc proxy-cache hierarchies |
US8572160B2 (en) * | 2007-03-12 | 2013-10-29 | Citrix Systems, Inc. | Systems and methods for script injection |
US8631147B2 (en) | 2007-03-12 | 2014-01-14 | Citrix Systems, Inc. | Systems and methods for configuring policy bank invocations |
US7853679B2 (en) * | 2007-03-12 | 2010-12-14 | Citrix Systems, Inc. | Systems and methods for configuring handling of undefined policy events |
US7827237B2 (en) | 2007-03-12 | 2010-11-02 | Citrix Systems, Inc. | Systems and methods for identifying long matches of data in a compression history |
US7870277B2 (en) * | 2007-03-12 | 2011-01-11 | Citrix Systems, Inc. | Systems and methods for using object oriented expressions to configure application security policies |
US7865589B2 (en) | 2007-03-12 | 2011-01-04 | Citrix Systems, Inc. | Systems and methods for providing structured policy expressions to represent unstructured data in a network appliance |
US20080228865A1 (en) * | 2007-03-15 | 2008-09-18 | Nazareno Brier Cruzada | Electronic personal computing and videophone system consisting of a remote server system providing dynamic, subscription based virtual computing services & resources, a thin client hardware device connected to a television set and wireless keyboard & mouse, and a wireless mobile device (a Pocket PC Phone) |
WO2008113641A1 (en) * | 2007-03-19 | 2008-09-25 | International Business Machines Corporation | A method for logging of a remote control session |
US9105005B2 (en) * | 2007-03-27 | 2015-08-11 | Jianqing Wu | Online computing system |
JP2008243066A (en) * | 2007-03-28 | 2008-10-09 | Canon Inc | Information processor and control method thereof |
US8135018B1 (en) | 2007-03-29 | 2012-03-13 | Qurio Holdings, Inc. | Message propagation in a distributed virtual world |
US8880582B2 (en) * | 2007-03-30 | 2014-11-04 | Hewlett-Packard Development Company, L.P. | User access to a partitionable server |
US20080243560A1 (en) * | 2007-04-01 | 2008-10-02 | Christopher Barendt | Virtual cemetery with consecration |
US20080250424A1 (en) * | 2007-04-04 | 2008-10-09 | Ms1 - Microsoft Corporation | Seamless Window Implementation for Windows Presentation Foundation based Applications |
US8116323B1 (en) * | 2007-04-12 | 2012-02-14 | Qurio Holdings, Inc. | Methods for providing peer negotiation in a distributed virtual environment and related systems and computer program products |
US20080263126A1 (en) * | 2007-04-18 | 2008-10-23 | Nirali Sanghi | Internet bridge for applications and web servers |
CN101291426B (en) * | 2007-04-18 | 2010-08-25 | 联想(北京)有限公司 | Method and system for third party to real-time monitor remote control process |
US7743155B2 (en) * | 2007-04-20 | 2010-06-22 | Array Networks, Inc. | Active-active operation for a cluster of SSL virtual private network (VPN) devices with load distribution |
US8756293B2 (en) | 2007-04-23 | 2014-06-17 | Nholdings Sa | Providing a user with virtual computing services |
TWI364208B (en) * | 2007-04-23 | 2012-05-11 | Inventec Corp | Data updating method and electric device using the same |
US20080034408A1 (en) * | 2007-04-23 | 2008-02-07 | Sachin Duggal | Network-Based Computing Service On A Streamed Virtual Computer |
CN101296176B (en) * | 2007-04-25 | 2010-12-22 | 阿里巴巴集团控股有限公司 | Data processing method and apparatus based on cluster |
US8621008B2 (en) | 2007-04-26 | 2013-12-31 | Mcafee, Inc. | System, method and computer program product for performing an action based on an aspect of an electronic mail message thread |
KR101415023B1 (en) | 2007-04-26 | 2014-07-04 | 삼성전자주식회사 | Apparatus and method for providing information through network |
US9438662B2 (en) * | 2007-04-30 | 2016-09-06 | Microsoft Technology Licensing, Llc | Enabling secure remote assistance using a terminal services gateway |
US9405585B2 (en) * | 2007-04-30 | 2016-08-02 | International Business Machines Corporation | Management of heterogeneous workloads |
US7984143B2 (en) * | 2007-05-11 | 2011-07-19 | Spiceworks, Inc. | Computer network software and hardware event monitoring and reporting system and method |
JP5138359B2 (en) * | 2007-12-27 | 2013-02-06 | エヌ・ティ・ティ アイティ株式会社 | Remote access method |
US20080288498A1 (en) * | 2007-05-14 | 2008-11-20 | Hinshaw Foster D | Network-attached storage devices |
US8909296B2 (en) * | 2007-05-14 | 2014-12-09 | Kopin Corporation | Mobile wireless display software platform for controlling other systems and devices |
US7945638B2 (en) * | 2007-05-17 | 2011-05-17 | Oracle International Corporation | Ubiquitous content subscription and delivery via a smart electronic paper device |
US9231778B2 (en) * | 2007-05-18 | 2016-01-05 | Samsung Electronics Co., Ltd. | Method and apparatus for managing control ownership for application of remote user interface server |
US8000328B1 (en) | 2007-05-22 | 2011-08-16 | Qurio Holdings, Inc. | Filtering messages in a distributed virtual world based on virtual space properties |
US20220147634A1 (en) * | 2007-05-22 | 2022-05-12 | Computer Protection Ip, Llc | Client authentication and data management system |
US7895642B1 (en) * | 2007-05-22 | 2011-02-22 | Sprint Communications Company L.P. | Tiered security services |
US8250574B2 (en) * | 2007-05-24 | 2012-08-21 | Nec Corporation | Virtual machine management via use of table in which virtual machine information is registered on a time basis |
US8533821B2 (en) * | 2007-05-25 | 2013-09-10 | International Business Machines Corporation | Detecting and defending against man-in-the-middle attacks |
US8013804B2 (en) * | 2007-05-30 | 2011-09-06 | Lenovo (Singapore) Pte. Ltd, | System and method for graphics remapping in hypervisor |
US20080301770A1 (en) * | 2007-05-31 | 2008-12-04 | Kinder Nathan G | Identity based virtual machine selector |
JP4858313B2 (en) * | 2007-06-01 | 2012-01-18 | 富士ゼロックス株式会社 | Workspace management method |
US8640203B2 (en) * | 2007-06-04 | 2014-01-28 | Rajesh G. Shakkarwar | Methods and systems for the authentication of a user |
US20080307314A1 (en) * | 2007-06-09 | 2008-12-11 | Pavel Cisler | System connections and user interfaces |
US20080307504A1 (en) * | 2007-06-09 | 2008-12-11 | Pavel Cisler | System connections and user interfaces |
US8266323B2 (en) * | 2007-06-09 | 2012-09-11 | Apple Inc. | System connections and user interfaces |
US8296833B2 (en) | 2007-06-09 | 2012-10-23 | Apple Inc. | System connections and user interfaces |
US20090031298A1 (en) * | 2007-06-11 | 2009-01-29 | Jeffrey Brunet | System and method for automated installation and/or launch of software |
US20090030955A1 (en) * | 2007-06-11 | 2009-01-29 | Storage Appliance Corporation | Automated data backup with graceful shutdown for vista-based system |
WO2008152967A1 (en) * | 2007-06-12 | 2008-12-18 | Nec Corporation | Information processing apparatus, execution environment transferring method and program thereof |
US7990947B2 (en) * | 2007-06-12 | 2011-08-02 | Robert W. Twitchell, Jr. | Network watermark |
US9769177B2 (en) * | 2007-06-12 | 2017-09-19 | Syracuse University | Role-based access control to computing resources in an inter-organizational community |
US8433656B1 (en) | 2007-06-13 | 2013-04-30 | Qurio Holdings, Inc. | Group licenses for virtual objects in a distributed virtual world |
US20080313269A1 (en) * | 2007-06-13 | 2008-12-18 | Microsoft Corporation | Remoting of Console Operating in a Multi-Session Environment |
US20080313309A1 (en) * | 2007-06-18 | 2008-12-18 | Pradipta Kumar Banerjee | Client-server data transfer control |
CN101330547A (en) * | 2007-06-20 | 2008-12-24 | 朗迅科技公司 | Medium resource distributed in VoIP network for providing service |
US20080320490A1 (en) * | 2007-06-20 | 2008-12-25 | Nokia Corporation | Method, apparatus and computer program product for providing sub-process resource management |
US9354960B2 (en) | 2010-12-27 | 2016-05-31 | Red Hat, Inc. | Assigning virtual machines to business application service groups based on ranking of the virtual machines |
US8336108B2 (en) * | 2007-06-22 | 2012-12-18 | Red Hat, Inc. | Method and system for collaboration involving enterprise nodes |
US8949827B2 (en) * | 2007-06-22 | 2015-02-03 | Red Hat, Inc. | Tracking a virtual machine |
US9727440B2 (en) | 2007-06-22 | 2017-08-08 | Red Hat, Inc. | Automatic simulation of virtual machine performance |
US8191141B2 (en) * | 2007-06-22 | 2012-05-29 | Red Hat, Inc. | Method and system for cloaked observation and remediation of software attacks |
US8984504B2 (en) * | 2007-06-22 | 2015-03-17 | Red Hat, Inc. | Method and system for determining a host machine by a virtual machine |
US8429748B2 (en) * | 2007-06-22 | 2013-04-23 | Red Hat, Inc. | Network traffic analysis using a dynamically updating ontological network description |
US9569330B2 (en) | 2007-06-22 | 2017-02-14 | Red Hat, Inc. | Performing dependency analysis on nodes of a business application service group |
US8539570B2 (en) * | 2007-06-22 | 2013-09-17 | Red Hat, Inc. | Method for managing a virtual machine |
US9588821B2 (en) | 2007-06-22 | 2017-03-07 | Red Hat, Inc. | Automatic determination of required resource allocation of virtual machines |
US8127290B2 (en) * | 2007-06-22 | 2012-02-28 | Red Hat, Inc. | Method and system for direct insertion of a virtual machine driver |
US9678803B2 (en) | 2007-06-22 | 2017-06-13 | Red Hat, Inc. | Migration of network entities to a cloud infrastructure |
KR100917687B1 (en) * | 2007-06-26 | 2009-09-21 | 문창선 | System and method for providing virtual interface |
US7814154B1 (en) | 2007-06-26 | 2010-10-12 | Qurio Holdings, Inc. | Message transformations in a distributed virtual world |
US8521501B2 (en) * | 2007-06-27 | 2013-08-27 | International Business Machines Corporation | Real-time performance modeling of application in distributed environment and method of use |
US8484578B2 (en) | 2007-06-29 | 2013-07-09 | Microsoft Corporation | Communication between a document editor in-space user interface and a document editor out-space user interface |
US20090006537A1 (en) * | 2007-06-29 | 2009-01-01 | Microsoft Corporation | Virtual Desktop Integration with Terminal Services |
US8762880B2 (en) | 2007-06-29 | 2014-06-24 | Microsoft Corporation | Exposing non-authoring features through document status information in an out-space user interface |
US8341277B2 (en) * | 2007-07-03 | 2012-12-25 | International Business Machines Corporation | System and method for connecting closed, secure production network |
US8321556B1 (en) | 2007-07-09 | 2012-11-27 | The Nielsen Company (Us), Llc | Method and system for collecting data on a wireless device |
US8307358B1 (en) * | 2007-07-10 | 2012-11-06 | Parallels IP Holdings GmbH | Method and system for unattended installation of guest operating system |
US8307024B2 (en) * | 2007-07-20 | 2012-11-06 | Hewlett-Packard Development Company, L.P. | Assisted peer-to-peer media streaming |
IL185224A0 (en) * | 2007-08-13 | 2008-01-06 | C S L Computing Solutions Lead | System and method for managing a virtual machine environment |
US7984449B2 (en) * | 2007-08-15 | 2011-07-19 | International Business Machines Corporation | In-band communication with virtual machines via a hypervisor message bus |
US20090046644A1 (en) * | 2007-08-17 | 2009-02-19 | Qualcomm Incorporated | Service set manager for ad hoc mobile service provider |
US9392445B2 (en) | 2007-08-17 | 2016-07-12 | Qualcomm Incorporated | Handoff at an ad-hoc mobile service provider |
US8644206B2 (en) | 2007-08-17 | 2014-02-04 | Qualcomm Incorporated | Ad hoc service provider configuration for broadcasting service information |
US8199965B1 (en) * | 2007-08-17 | 2012-06-12 | Mcafee, Inc. | System, method, and computer program product for preventing image-related data loss |
US20090073943A1 (en) * | 2007-08-17 | 2009-03-19 | Qualcomm Incorporated | Heterogeneous wireless ad hoc network |
US8671256B2 (en) * | 2007-08-27 | 2014-03-11 | International Business Machines Corporation | Migrating contents of a memory on a virtual machine |
US9274949B2 (en) * | 2007-08-27 | 2016-03-01 | International Business Machines Corporation | Tracking data updates during memory migration |
US20090063752A1 (en) * | 2007-08-27 | 2009-03-05 | International Business Machines Corporation | Utilizing data access patterns to determine a data migration order |
US8694990B2 (en) * | 2007-08-27 | 2014-04-08 | International Business Machines Corporation | Utilizing system configuration information to determine a data migration order |
US8661211B2 (en) * | 2007-08-27 | 2014-02-25 | International Business Machines Corporation | Method for migrating contents of a memory on a virtual machine |
US20130276061A1 (en) | 2007-09-05 | 2013-10-17 | Gopi Krishna Chebiyyam | System, method, and computer program product for preventing access to data with respect to a data access attempt associated with a remote data sharing session |
US8090847B2 (en) * | 2008-05-02 | 2012-01-03 | Microsoft Corporation | Session broker extensibility application program interface |
IL187492A0 (en) * | 2007-09-06 | 2008-02-09 | Human Interface Security Ltd | Information protection device |
US8146098B2 (en) * | 2007-09-07 | 2012-03-27 | Manageiq, Inc. | Method and apparatus for interfacing with a computer user via virtual thumbnails |
JP5090834B2 (en) * | 2007-09-11 | 2012-12-05 | 株式会社リコー | Information processing apparatus and authentication control program |
EP2224339A3 (en) * | 2007-09-12 | 2011-03-16 | Citrix Systems, Inc. | Methods and systems for generating desktop environments providing integrated access to remote and local resources |
US8370802B2 (en) | 2007-09-18 | 2013-02-05 | International Business Machines Corporation | Specifying an order for changing an operational state of software application components |
CA2699562A1 (en) * | 2007-09-20 | 2009-03-26 | C&S Operations, Inc. | Computer system |
US8127233B2 (en) * | 2007-09-24 | 2012-02-28 | Microsoft Corporation | Remote user interface updates using difference and motion encoding |
JP5194673B2 (en) * | 2007-09-26 | 2013-05-08 | 株式会社日立製作所 | Mobile terminal and information transmission / reception method |
US8782779B2 (en) * | 2007-09-26 | 2014-07-15 | Hewlett-Packard Development Company, L.P. | System and method for achieving protected region within computer system |
US8112460B2 (en) * | 2007-09-28 | 2012-02-07 | Xcerion Aktiebolag | Framework for applying rules |
US8307443B2 (en) | 2007-09-28 | 2012-11-06 | Microsoft Corporation | Securing anti-virus software with virtualization |
JP5082722B2 (en) * | 2007-09-28 | 2012-11-28 | ブラザー工業株式会社 | Image display device and image display system |
US8446607B2 (en) * | 2007-10-01 | 2013-05-21 | Mcafee, Inc. | Method and system for policy based monitoring and blocking of printing activities on local and network printers |
EP2201474B1 (en) | 2007-10-03 | 2020-05-06 | NTT Global Networks Incorporated | Virtualized application acceleration infrastructure |
JP4586840B2 (en) * | 2007-10-03 | 2010-11-24 | コニカミノルタビジネステクノロジーズ株式会社 | Image transmission apparatus, image transmission system, and image transmission method |
US8209378B2 (en) | 2007-10-04 | 2012-06-26 | Clearspring Technologies, Inc. | Methods and apparatus for widget sharing between content aggregation points |
US7769828B2 (en) * | 2007-10-05 | 2010-08-03 | International Business Machines Corporation | System for provisioning time sharing option (TSO) and interactive productivity system facility (ISPF) services in a network environment |
US9128741B2 (en) * | 2007-10-05 | 2015-09-08 | Mcafee, Inc. | System, method, and computer program product for conditionally preventing use of hardware virtualization |
US8619877B2 (en) * | 2007-10-11 | 2013-12-31 | Microsoft Corporation | Optimized key frame caching for remote interface rendering |
US8121423B2 (en) | 2007-10-12 | 2012-02-21 | Microsoft Corporation | Remote user interface raster segment motion detection and encoding |
US8106909B2 (en) * | 2007-10-13 | 2012-01-31 | Microsoft Corporation | Common key frame caching for a remote user interface |
WO2009052452A2 (en) * | 2007-10-17 | 2009-04-23 | Dispersive Networks Inc. | Virtual dispersive routing |
US8560634B2 (en) | 2007-10-17 | 2013-10-15 | Dispersive Networks, Inc. | Apparatus, systems and methods utilizing dispersive networking |
US8539098B2 (en) | 2007-10-17 | 2013-09-17 | Dispersive Networks, Inc. | Multiplexed client server (MCS) communications and systems |
US7925694B2 (en) * | 2007-10-19 | 2011-04-12 | Citrix Systems, Inc. | Systems and methods for managing cookies via HTTP content layer |
EP2201486A2 (en) * | 2007-10-20 | 2010-06-30 | Citrix Systems, Inc. | Systems and methods for folder redirection |
US8171483B2 (en) | 2007-10-20 | 2012-05-01 | Citrix Systems, Inc. | Method and system for communicating between isolation environments |
US20090158299A1 (en) * | 2007-10-31 | 2009-06-18 | Carter Ernst B | System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed |
KR20090044437A (en) * | 2007-10-31 | 2009-05-07 | 성균관대학교산학협력단 | Method and system for controlling access for mobile agents in home network environments |
US8195931B1 (en) | 2007-10-31 | 2012-06-05 | Mcafee, Inc. | Application change control |
US20090118006A1 (en) | 2007-11-02 | 2009-05-07 | Bally Gaming, Inc. | Game related systems, methods, and articles that combine virtual and physical elements |
US20090235248A1 (en) * | 2007-11-07 | 2009-09-17 | Avocent Corporation | System and Method for Managing Virtual Hard Drives in a Virtual Machine Environment |
US8616958B2 (en) | 2007-11-12 | 2013-12-31 | Bally Gaming, Inc. | Discovery method and system for dynamically locating networked gaming components and resources |
US20090132816A1 (en) * | 2007-11-15 | 2009-05-21 | Lockheed Martin Corporation | PC on USB drive or cell phone |
US8930945B2 (en) * | 2007-11-15 | 2015-01-06 | Novell, Inc. | Environment managers via virtual machines |
JP4906686B2 (en) * | 2007-11-19 | 2012-03-28 | 三菱電機株式会社 | Virtual machine server sizing apparatus, virtual machine server sizing method, and virtual machine server sizing program |
US8407688B2 (en) | 2007-11-27 | 2013-03-26 | Managelq, Inc. | Methods and apparatus for storing and transmitting historical configuration data associated with information technology assets |
US8418173B2 (en) * | 2007-11-27 | 2013-04-09 | Manageiq, Inc. | Locating an unauthorized virtual machine and bypassing locator code by adjusting a boot pointer of a managed virtual machine in authorized environment |
US8098598B1 (en) | 2007-11-27 | 2012-01-17 | Sprint Communications Company L.P. | Emulating a removable mass storage device |
US8341626B1 (en) | 2007-11-30 | 2012-12-25 | Hewlett-Packard Development Company, L. P. | Migration of a virtual machine in response to regional environment effects |
JP2009139990A (en) * | 2007-12-03 | 2009-06-25 | Internatl Business Mach Corp <Ibm> | Technology for preventing unauthorized access to information |
WO2009071107A1 (en) * | 2007-12-05 | 2009-06-11 | Siemens Aktiengesellscahft | Virtual access control on data storage unit |
US7930264B2 (en) * | 2007-12-06 | 2011-04-19 | First Data Corporation | Multi-module authentication platform |
US20090158216A1 (en) * | 2007-12-14 | 2009-06-18 | Sony Corporation | Method and system for setting up a computer system at startup |
US8775577B1 (en) | 2007-12-18 | 2014-07-08 | Amazon Technologies, Inc. | System and method for configuration management service |
US8539551B2 (en) * | 2007-12-20 | 2013-09-17 | Fujitsu Limited | Trusted virtual machine as a client |
US20110040812A1 (en) * | 2007-12-20 | 2011-02-17 | Virtual Computer, Inc. | Layered Virtual File System |
US8386610B2 (en) | 2007-12-31 | 2013-02-26 | Netapp, Inc. | System and method for automatic storage load balancing in virtual server environments |
US20090178126A1 (en) * | 2008-01-03 | 2009-07-09 | Sterling Du | Systems and methods for providing user-friendly computer services |
WO2009089124A1 (en) * | 2008-01-04 | 2009-07-16 | Wms Gaming, Inc. | Sharing resources in wagering game systems |
US8355671B2 (en) | 2008-01-04 | 2013-01-15 | Kopin Corporation | Method and apparatus for transporting video signal over Bluetooth wireless interface |
US7689700B2 (en) * | 2008-01-08 | 2010-03-30 | Microsoft Corporation | Configuration of a peer group |
US8510808B2 (en) | 2008-01-08 | 2013-08-13 | Microsoft Corporation | Associating computing devices with common credentials |
US8789151B2 (en) * | 2008-01-09 | 2014-07-22 | Microsoft Corporation | Remote device communication platform |
US8898321B2 (en) * | 2008-01-09 | 2014-11-25 | Microsoft Corporation | Remote device communication platform user interface |
US8185894B1 (en) * | 2008-01-10 | 2012-05-22 | Hewlett-Packard Development Company, L.P. | Training a virtual machine placement controller |
US7478436B1 (en) * | 2008-01-17 | 2009-01-13 | International Business Machines Corporation | System and method for providing last log-in screen shots for security confirmation |
WO2009092022A2 (en) * | 2008-01-17 | 2009-07-23 | Bigfoot Networks, Inc. | Network message transformation device and methods thereof |
WO2009093333A1 (en) * | 2008-01-25 | 2009-07-30 | Fujitsu Limited | Information processing device, information processing system, computer program, and information processing method |
US8630415B2 (en) * | 2008-01-25 | 2014-01-14 | Telefonaktiebolaget L M Ericsson (Publ) | Method and apparatus for authentication service application processes during service reallocation in high availability clusters |
US8090877B2 (en) | 2008-01-26 | 2012-01-03 | Citrix Systems, Inc. | Systems and methods for fine grain policy driven cookie proxying |
US9965638B2 (en) * | 2008-01-28 | 2018-05-08 | Adobe Systems Incorporated | Rights application within document-based conferencing |
US20090193067A1 (en) * | 2008-01-30 | 2009-07-30 | Microsoft Corporation | Server-based recalculation of vector graphics |
US8701189B2 (en) | 2008-01-31 | 2014-04-15 | Mcafee, Inc. | Method of and system for computer system denial-of-service protection |
US9116715B2 (en) * | 2008-02-04 | 2015-08-25 | Rightscale, Inc. | Systems and methods for efficiently booting and configuring virtual servers |
US8060585B2 (en) * | 2008-02-06 | 2011-11-15 | Qualcomm Incorporated | Self service distribution configuration framework |
US8996890B2 (en) * | 2008-02-07 | 2015-03-31 | Dell Products L.P. | Method for power conservation in virtualized environments |
US8156503B2 (en) * | 2008-02-12 | 2012-04-10 | International Business Machines Corporation | System, method and computer program product for accessing a memory space allocated to a virtual machine |
JP5205075B2 (en) * | 2008-02-13 | 2013-06-05 | パナソニック株式会社 | Encryption processing method, encryption processing device, decryption processing method, and decryption processing device |
DE102008009116A1 (en) * | 2008-02-14 | 2009-08-20 | Bizerba Gmbh & Co Kg | weighing system |
WO2009102915A2 (en) * | 2008-02-15 | 2009-08-20 | Citrix Systems, Inc. | Systems and methods for secure handling of secure attention sequences |
US9076342B2 (en) | 2008-02-19 | 2015-07-07 | Architecture Technology Corporation | Automated execution and evaluation of network-based training exercises |
US8959248B2 (en) * | 2008-02-22 | 2015-02-17 | Microsoft Corporation | Personal computing environment with virtual computing device |
US8645839B2 (en) * | 2008-02-26 | 2014-02-04 | Red Hat, Inc. | Online desktop distribution |
US8161160B2 (en) * | 2008-02-28 | 2012-04-17 | Microsoft Corporation | XML-based web feed for web access of remote resources |
US8683062B2 (en) * | 2008-02-28 | 2014-03-25 | Microsoft Corporation | Centralized publishing of network resources |
US20090222813A1 (en) * | 2008-02-29 | 2009-09-03 | Dell Products L. P. | System and Method for Automated Configuration of an Information Handling System |
US8495126B2 (en) * | 2008-02-29 | 2013-07-23 | Dell Products L.P. | System and method for managing the deployment of an information handling system |
US7987211B2 (en) * | 2008-02-29 | 2011-07-26 | Dell Products L.P. | System and method for automated deployment of an information handling system |
US20090222879A1 (en) * | 2008-03-03 | 2009-09-03 | Microsoft Corporation | Super policy in information protection systems |
US7852849B2 (en) * | 2008-03-04 | 2010-12-14 | Bridgewater Systems Corp. | Providing dynamic quality of service for virtual private networks |
US20090228654A1 (en) * | 2008-03-06 | 2009-09-10 | Quantum Corporation, A Delaware Corporation | Media Cartridge Resident Auto-Sensing/Loading Archive Software |
US9084231B2 (en) * | 2008-03-13 | 2015-07-14 | Qualcomm Incorporated | Methods and apparatus for acquiring and using multiple connection identifiers |
JP2009223442A (en) | 2008-03-13 | 2009-10-01 | Hitachi Ltd | Storage system |
US20090235177A1 (en) * | 2008-03-14 | 2009-09-17 | Microsoft Corporation | Multi-monitor remote desktop environment user interface |
US8893285B2 (en) | 2008-03-14 | 2014-11-18 | Mcafee, Inc. | Securing data using integrated host-based data loss agent with encryption detection |
US8954551B2 (en) * | 2008-03-17 | 2015-02-10 | Microsoft Corporation | Virtualization of groups of devices |
US8171115B2 (en) * | 2008-03-18 | 2012-05-01 | Microsoft Corporation | Resource equalization for inter- and intra- data center operations |
US8489995B2 (en) | 2008-03-18 | 2013-07-16 | Rightscale, Inc. | Systems and methods for efficiently managing and configuring virtual servers |
US9306796B1 (en) * | 2008-03-18 | 2016-04-05 | Mcafee, Inc. | System, method, and computer program product for dynamically configuring a virtual environment for identifying unwanted data |
US9037608B1 (en) * | 2008-03-21 | 2015-05-19 | Symantec Corporation | Monitoring application behavior by detecting file access category changes |
US8255536B2 (en) * | 2008-03-21 | 2012-08-28 | Microsoft Corporation | Bandwidth and latency controller |
US8539565B2 (en) | 2008-03-21 | 2013-09-17 | Microsoft Corporation | Load balancing in server computer systems |
US8560593B2 (en) * | 2008-03-27 | 2013-10-15 | Dell Software Inc. | System for provisioning, allocating, and managing virtual and physical desktop computers in a network computing environment |
CN102016975A (en) * | 2008-03-28 | 2011-04-13 | 寇平公司 | Handheld wireless display device having high-resolution display suitable for use as a mobile internet device |
US8620146B1 (en) * | 2008-03-28 | 2013-12-31 | Theresa Coleman | Picture-in-picture video system for virtual exercise, instruction and entertainment |
US8176482B1 (en) * | 2008-03-28 | 2012-05-08 | Symantec Corporation | Methods and systems for inserting software applications into images |
US8261254B2 (en) * | 2008-03-31 | 2012-09-04 | Symantec Corporation | Dynamic insertion and removal of virtual software sub-layers |
US9588781B2 (en) | 2008-03-31 | 2017-03-07 | Microsoft Technology Licensing, Llc | Associating command surfaces with multiple active components |
US8312547B1 (en) * | 2008-03-31 | 2012-11-13 | Symantec Corporation | Anti-malware scanning in a portable application virtualized environment |
US20090249219A1 (en) * | 2008-03-31 | 2009-10-01 | Best Steven F | Providing a Shared Desktop Interface of Multiple Computer Terminals |
US7979260B1 (en) * | 2008-03-31 | 2011-07-12 | Symantec Corporation | Simulating PXE booting for virtualized machines |
US8549347B1 (en) | 2010-12-20 | 2013-10-01 | Amazon Technologies, Inc. | Techniques for network replication |
US8281363B1 (en) * | 2008-03-31 | 2012-10-02 | Symantec Corporation | Methods and systems for enforcing network access control in a virtual environment |
US8135838B2 (en) | 2008-04-08 | 2012-03-13 | Geminare Incorporated | System and method for providing data and application continuity in a computer system |
US8756660B2 (en) * | 2008-04-17 | 2014-06-17 | Microsoft Corporation | Enabling two-factor authentication for terminal services |
JP5047870B2 (en) * | 2008-04-17 | 2012-10-10 | 株式会社日立製作所 | Master management system, master management method, and master management program |
US8615502B2 (en) | 2008-04-18 | 2013-12-24 | Mcafee, Inc. | Method of and system for reverse mapping vnode pointers |
US8689292B2 (en) * | 2008-04-21 | 2014-04-01 | Api Technologies Corp. | Method and systems for dynamically providing communities of interest on an end user workstation |
EP2269358A2 (en) * | 2008-04-22 | 2011-01-05 | Barclays Capital Inc. | System and method for secure remote computer task automation |
US9575774B2 (en) * | 2008-04-25 | 2017-02-21 | Vmware, Inc. | Linking virtualized application namespaces at runtime |
DE102008020832B3 (en) * | 2008-04-25 | 2009-11-19 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Concept for efficient distribution of access authorization information |
US8856657B2 (en) * | 2008-04-30 | 2014-10-07 | Bally Gaming, Inc. | User interface for managing network download and configuration tasks |
US9483911B2 (en) | 2008-04-30 | 2016-11-01 | Bally Gaming, Inc. | Information distribution in gaming networks |
US9005034B2 (en) | 2008-04-30 | 2015-04-14 | Bally Gaming, Inc. | Systems and methods for out-of-band gaming machine management |
US20090276774A1 (en) * | 2008-05-01 | 2009-11-05 | Junji Kinoshita | Access control for virtual machines in an information system |
US10127059B2 (en) * | 2008-05-02 | 2018-11-13 | Skytap | Multitenant hosted virtual machine infrastructure |
US9720674B1 (en) * | 2008-05-05 | 2017-08-01 | Open Invention Network, Llc | Automating application of software patches to a server having a virtualization layer |
US8364983B2 (en) | 2008-05-08 | 2013-01-29 | Microsoft Corporation | Corralling virtual machines with encryption keys |
US8793478B2 (en) * | 2008-05-14 | 2014-07-29 | Dell Products, Lp | Grid computing resources and a method of use thereof |
US8296357B2 (en) * | 2008-05-19 | 2012-10-23 | Citrix Systems, Inc. | Systems and methods for remoting multimedia plugin calls |
US8005851B2 (en) * | 2008-05-21 | 2011-08-23 | Microsoft Corporation | Streaming virtual disk for virtual applications |
US9459927B2 (en) * | 2008-05-22 | 2016-10-04 | Alcatel Lucent | Central office based virtual personal computer |
US8195774B2 (en) | 2008-05-23 | 2012-06-05 | Vmware, Inc. | Distributed virtual switch for virtualized computer systems |
US8713177B2 (en) * | 2008-05-30 | 2014-04-29 | Red Hat, Inc. | Remote management of networked systems using secure modular platform |
WO2009155047A2 (en) | 2008-05-30 | 2009-12-23 | Bally Gaming, Inc. | Web pages for gaming devices |
US8924543B2 (en) | 2009-01-28 | 2014-12-30 | Headwater Partners I Llc | Service design center for device assisted services |
US8275830B2 (en) | 2009-01-28 | 2012-09-25 | Headwater Partners I Llc | Device assisted CDR creation, aggregation, mediation and billing |
US8626115B2 (en) | 2009-01-28 | 2014-01-07 | Headwater Partners I Llc | Wireless network service interfaces |
US8924469B2 (en) | 2008-06-05 | 2014-12-30 | Headwater Partners I Llc | Enterprise access control and accounting allocation for access networks |
US8391834B2 (en) | 2009-01-28 | 2013-03-05 | Headwater Partners I Llc | Security techniques for device assisted services |
US8635335B2 (en) | 2009-01-28 | 2014-01-21 | Headwater Partners I Llc | System and method for wireless network offloading |
US8346225B2 (en) | 2009-01-28 | 2013-01-01 | Headwater Partners I, Llc | Quality of service for device assisted services |
US8832777B2 (en) | 2009-03-02 | 2014-09-09 | Headwater Partners I Llc | Adapting network policies based on device service processor configuration |
US8589541B2 (en) | 2009-01-28 | 2013-11-19 | Headwater Partners I Llc | Device-assisted services for protecting network capacity |
US8402111B2 (en) | 2009-01-28 | 2013-03-19 | Headwater Partners I, Llc | Device assisted services install |
US8898293B2 (en) | 2009-01-28 | 2014-11-25 | Headwater Partners I Llc | Service offer set publishing to device agent with on-device service selection |
US8355337B2 (en) | 2009-01-28 | 2013-01-15 | Headwater Partners I Llc | Network based service profile management with user preference, adaptive policy, network neutrality, and user privacy |
US8548428B2 (en) | 2009-01-28 | 2013-10-01 | Headwater Partners I Llc | Device group partitions and settlement platform |
US8725123B2 (en) | 2008-06-05 | 2014-05-13 | Headwater Partners I Llc | Communications device with secure data path processing agents |
US8406748B2 (en) | 2009-01-28 | 2013-03-26 | Headwater Partners I Llc | Adaptive ambient services |
US7870274B1 (en) * | 2008-06-05 | 2011-01-11 | Sprint Communications Company L.P. | Plug-in file sharing |
US8340634B2 (en) | 2009-01-28 | 2012-12-25 | Headwater Partners I, Llc | Enhanced roaming services and converged carrier networks with device assisted services and a proxy |
US9154386B2 (en) * | 2008-06-06 | 2015-10-06 | Tdi Technologies, Inc. | Using metadata analysis for monitoring, alerting, and remediation |
US20090307305A1 (en) * | 2008-06-10 | 2009-12-10 | Entropic Communications, Inc. | Network allocation |
AU2009259876A1 (en) * | 2008-06-19 | 2009-12-23 | Servicemesh, Inc. | Cloud computing gateway, cloud computing hypervisor, and methods for implementing same |
US8261322B2 (en) | 2008-06-19 | 2012-09-04 | Microsoft Corporation | Home networking web-based service portal |
US8949936B2 (en) * | 2008-06-19 | 2015-02-03 | Microsoft Technology Licensing, Llc | Hosted network device user interface |
US9100246B1 (en) | 2008-06-19 | 2015-08-04 | Symantec Corporation | Distributed application virtualization |
US9489647B2 (en) | 2008-06-19 | 2016-11-08 | Csc Agility Platform, Inc. | System and method for a cloud computing abstraction with self-service portal for publishing resources |
US9069599B2 (en) | 2008-06-19 | 2015-06-30 | Servicemesh, Inc. | System and method for a cloud computing abstraction layer with security zone facilities |
US10411975B2 (en) | 2013-03-15 | 2019-09-10 | Csc Agility Platform, Inc. | System and method for a cloud computing abstraction with multi-tier deployment policy |
CN102067101B (en) * | 2008-06-20 | 2013-07-24 | 惠普开发有限公司 | Low level initializer |
US9665850B2 (en) | 2008-06-20 | 2017-05-30 | Microsoft Technology Licensing, Llc | Synchronized conversation-centric message list and message reading pane |
US20090323799A1 (en) * | 2008-06-25 | 2009-12-31 | Stmicroelectronics, Inc. | System and method for rendering a high-performance virtual desktop using compression technology |
US20090328077A1 (en) * | 2008-06-25 | 2009-12-31 | International Business Machines Corporation | Software Appliances not Requiring Virtual Machines |
US8443093B2 (en) * | 2008-06-25 | 2013-05-14 | Hewlett-Packard Development Company, L.P. | Connection management system for multiple connections |
US8612862B2 (en) * | 2008-06-27 | 2013-12-17 | Microsoft Corporation | Integrated client for access to remote resources |
US20090327904A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Presenting dynamic folders |
US9219733B2 (en) * | 2008-06-30 | 2015-12-22 | Microsoft Technology Licensing, Llc | Software-based aliasing for accessing multiple shared resources on a single remote host |
US7941539B2 (en) * | 2008-06-30 | 2011-05-10 | Oracle America, Inc. | Method and system for creating a virtual router in a blade chassis to maintain connectivity |
US8151099B2 (en) * | 2008-07-01 | 2012-04-03 | Caterpillar Inc. | Virtualized service tool and virtualized control tool |
US8055784B2 (en) * | 2008-07-07 | 2011-11-08 | Disney Enterprises, Inc. | Content navigation module for managing delivery of content to computing devices and method therefor |
US8762429B1 (en) * | 2008-07-09 | 2014-06-24 | Sprint Communications Company L.P. | File location application programming interface |
US8412768B2 (en) * | 2008-07-11 | 2013-04-02 | Ball Gaming, Inc. | Integration gateway |
EP2308212A4 (en) * | 2008-07-14 | 2016-06-22 | Riverbed Technology Inc | Methods and systems for secure communications using a local certification authority |
US8516564B2 (en) * | 2008-07-18 | 2013-08-20 | International Business Machines Corporation | Secure user interaction using virtualization |
US9361089B2 (en) * | 2008-07-22 | 2016-06-07 | International Business Machines Corporation | Secure patch updates of a virtual machine image in a virtualization data processing system |
US8978104B1 (en) | 2008-07-23 | 2015-03-10 | United Services Automobile Association (Usaa) | Access control center workflow and approval |
US8271528B1 (en) * | 2008-07-25 | 2012-09-18 | United Services Automobile Association (Usaa) | Database for access control center |
US10887399B2 (en) * | 2008-07-30 | 2021-01-05 | Mcafee, Llc | System, method, and computer program product for managing a connection between a device and a network |
JP5222651B2 (en) * | 2008-07-30 | 2013-06-26 | 株式会社日立製作所 | Virtual computer system and control method of virtual computer system |
DE102008035601A1 (en) * | 2008-07-31 | 2010-02-04 | Walter, Thomas, Dr.-Ing. | System for managing files |
DE112008003966T5 (en) * | 2008-07-31 | 2011-06-01 | Hewlett-Packard Development Co., L.P., Houston | Selective re-mapping of a network topology |
CN101645004A (en) * | 2008-08-04 | 2010-02-10 | 优诺威讯国际有限公司 | Method for window display |
US9077684B1 (en) | 2008-08-06 | 2015-07-07 | Mcafee, Inc. | System, method, and computer program product for determining whether an electronic mail message is compliant with an etiquette policy |
US8776038B2 (en) | 2008-08-07 | 2014-07-08 | Code Systems Corporation | Method and system for configuration of virtualized software applications |
US8434093B2 (en) | 2008-08-07 | 2013-04-30 | Code Systems Corporation | Method and system for virtualization of software applications |
US9104662B2 (en) * | 2008-08-08 | 2015-08-11 | Oracle International Corporation | Method and system for implementing parallel transformations of records |
US8260751B2 (en) * | 2008-08-12 | 2012-09-04 | Tdi Technologies, Inc. | Log file time sequence stamping |
US8634703B1 (en) * | 2008-08-12 | 2014-01-21 | Tivo Inc. | Real-time DVR usage and reporting system |
US8356338B1 (en) | 2008-08-13 | 2013-01-15 | Sprint Communications Company L.P. | Wireless drive file peering |
US8797233B2 (en) * | 2008-08-20 | 2014-08-05 | The Regents Of The University Of California | Systems, methods, and devices for dynamic management of data streams updating displays |
US9100297B2 (en) | 2008-08-20 | 2015-08-04 | Red Hat, Inc. | Registering new machines in a software provisioning environment |
US8261342B2 (en) * | 2008-08-20 | 2012-09-04 | Reliant Security | Payment card industry (PCI) compliant architecture and associated methodology of managing a service infrastructure |
US8543935B2 (en) * | 2008-08-20 | 2013-09-24 | Red Hat, Inc. | Full-screen heterogeneous desktop display and control |
US8336047B2 (en) * | 2008-08-25 | 2012-12-18 | International Business Machines Corporation | Provisioning virtual resources using name resolution |
US20100057865A1 (en) * | 2008-09-04 | 2010-03-04 | International Business Machines Corporation | Transferable Debug Session in a Team Environment |
JP2010066931A (en) * | 2008-09-09 | 2010-03-25 | Fujitsu Ltd | Information processor having load balancing function |
US8707397B1 (en) | 2008-09-10 | 2014-04-22 | United Services Automobile Association | Access control center auto launch |
KR101069500B1 (en) * | 2008-09-12 | 2011-09-30 | 포항공과대학교 산학협력단 | Method for processing secret data based on virtualization and trusted platform module in network system, and computer readable recording medium |
US20100070546A1 (en) * | 2008-09-12 | 2010-03-18 | Meyer Daniel P | Providing Local File Storage within a Java Server Environment |
US8239357B1 (en) * | 2008-09-12 | 2012-08-07 | Ryan, LLC | Method and system for extracting information from electronic data sources |
US8661513B2 (en) * | 2008-09-12 | 2014-02-25 | Hewlett-Packard Development Company, L.P. | Selection and application of roles and systems based on username and layout ID |
US8065714B2 (en) * | 2008-09-12 | 2011-11-22 | Hytrust, Inc. | Methods and systems for securely managing virtualization platform |
US20100100626A1 (en) * | 2008-09-15 | 2010-04-22 | Allen Stewart O | Methods and apparatus related to inter-widget interactions managed by a client-side master |
US7941549B2 (en) * | 2008-09-16 | 2011-05-10 | Microsoft Corporation | Protocol exchange and policy enforcement for a terminal server session |
US8850525B1 (en) | 2008-09-17 | 2014-09-30 | United Services Automobile Association (Usaa) | Access control center auto configuration |
US8588418B2 (en) | 2008-09-22 | 2013-11-19 | Sprint Communications Company L.P. | User level security for an emulated removable mass storage device |
US8645559B2 (en) * | 2008-09-22 | 2014-02-04 | Microsoft Corporation | Redirection of multiple remote devices |
US8286220B2 (en) * | 2008-09-23 | 2012-10-09 | Zscaler, Inc. | Browser access control |
US8521926B2 (en) * | 2008-09-25 | 2013-08-27 | Aten International Co., Ltd. | Remote desktop control system using USB interface and method thereof |
US8516079B2 (en) * | 2008-09-25 | 2013-08-20 | Aten International Co., Ltd. | Remote desktop control system using USB interface and method thereof |
US20100082702A1 (en) * | 2008-09-29 | 2010-04-01 | Honeywell International Inc. | Dynamic vehicle information management |
US9880891B2 (en) * | 2008-09-30 | 2018-01-30 | Hewlett-Packard Development Company, L.P. | Assignment and failover of resources |
US20100082733A1 (en) * | 2008-09-30 | 2010-04-01 | Microsoft Corporation | Extensible remote programmatic access to user interface |
US8396819B2 (en) * | 2008-09-30 | 2013-03-12 | Lockheed Martin Corp | Unique interface in service oriented architecture |
US20100088698A1 (en) * | 2008-10-03 | 2010-04-08 | Ravishankar Krishnamurthy | Techniques for managing communication sessions |
US8713091B2 (en) * | 2008-10-03 | 2014-04-29 | Microsoft Corporation | Network based JIT on a priori knowledge of a set of disparate clients |
US8271974B2 (en) * | 2008-10-08 | 2012-09-18 | Kaavo Inc. | Cloud computing lifecycle management for N-tier applications |
JP2010093585A (en) * | 2008-10-08 | 2010-04-22 | Fujitsu Ltd | Program and method for controlling network connection, program and method for connecting network, and authentication apparatus |
US8005984B2 (en) * | 2008-10-09 | 2011-08-23 | International Business Machines Corporation | Flexible procedure for quiescing multiplexed client |
US8161023B2 (en) * | 2008-10-13 | 2012-04-17 | Internatioanal Business Machines Corporation | Inserting a PDF shared resource back into a PDF statement |
US7805516B2 (en) * | 2008-10-14 | 2010-09-28 | Dell Products L.P. | Enabling throttling of resources on a virtualization enabled information handling system |
US8479015B2 (en) * | 2008-10-17 | 2013-07-02 | Oracle International Corporation | Virtual image management |
US8260873B1 (en) | 2008-10-22 | 2012-09-04 | Qurio Holdings, Inc. | Method and system for grouping user devices based on dual proximity |
IL194943A0 (en) * | 2008-10-27 | 2009-09-22 | Human Interface Security Ltd | Verification of data transmitted by computer |
GB2479068B (en) | 2008-10-28 | 2013-10-02 | Hewlett Packard Development Co | File type association in a remote computing session |
US20100107257A1 (en) * | 2008-10-29 | 2010-04-29 | International Business Machines Corporation | System, method and program product for detecting presence of malicious software running on a computer system |
EP2182696A1 (en) * | 2008-10-31 | 2010-05-05 | Gemalto SA | Method of establishing a link between the applications of a subscriber authentication card and an IMS network |
US9069774B1 (en) * | 2008-11-04 | 2015-06-30 | Infoblox Inc. | Graphical visualization and management of networks |
US8149431B2 (en) * | 2008-11-07 | 2012-04-03 | Citrix Systems, Inc. | Systems and methods for managing printer settings in a networked computing environment |
US8566821B2 (en) * | 2008-11-11 | 2013-10-22 | Netapp Inc. | Cloning virtual machines |
US8266213B2 (en) | 2008-11-14 | 2012-09-11 | Bally Gaming, Inc. | Apparatus, method, and system to provide a multiple processor architecture for server-based gaming |
US9542222B2 (en) * | 2008-11-14 | 2017-01-10 | Oracle International Corporation | Resource broker system for dynamically deploying and managing software services in a virtual environment based on resource usage and service level agreement |
US8260926B2 (en) * | 2008-11-25 | 2012-09-04 | Citrix Systems, Inc. | Systems and methods for GSLB site persistence |
US9009329B2 (en) * | 2008-11-25 | 2015-04-14 | Microsoft Technology Licensing, Llc | Platform for enabling terminal services virtualization |
US20100131667A1 (en) * | 2008-11-25 | 2010-05-27 | Infineon Technologies Ag | Executable Communication Protocol Description Method and Apparatus |
WO2010060207A1 (en) * | 2008-11-26 | 2010-06-03 | Calgary Scientific Inc. | Data communication in a picture archiving and communications system network |
CN101753594B (en) * | 2008-11-28 | 2014-03-12 | 国际商业机器公司 | Method and device for activating virtual machine |
US8782204B2 (en) * | 2008-11-28 | 2014-07-15 | Red Hat, Inc. | Monitoring hardware resources in a software provisioning environment |
US8250182B2 (en) * | 2008-11-30 | 2012-08-21 | Red Hat Israel, Ltd. | Dynamic loading between a server and a client |
US8806611B2 (en) * | 2008-12-02 | 2014-08-12 | At&T Intellectual Property I, L.P. | Message administration system |
CN101447992B (en) * | 2008-12-08 | 2011-04-06 | 西安西电捷通无线网络通信股份有限公司 | Trusted network connection implementing method based on three-element peer-to-peer authentication |
US8239938B2 (en) * | 2008-12-08 | 2012-08-07 | Nvidia Corporation | Centralized device virtualization layer for heterogeneous processing units |
US8180905B2 (en) * | 2008-12-09 | 2012-05-15 | Microsoft Corporation | User-mode based remote desktop protocol (RDP) encoding architecture |
US8413210B2 (en) * | 2008-12-09 | 2013-04-02 | Microsoft Corporation | Credential sharing between multiple client applications |
US8447977B2 (en) * | 2008-12-09 | 2013-05-21 | Canon Kabushiki Kaisha | Authenticating a device with a server over a network |
US9021522B2 (en) * | 2008-12-10 | 2015-04-28 | Microsoft Technology Licensing, Llc | Concurrent interactive television for network connected devices |
US8544003B1 (en) | 2008-12-11 | 2013-09-24 | Mcafee, Inc. | System and method for managing virtual machine configurations |
US8312268B2 (en) * | 2008-12-12 | 2012-11-13 | International Business Machines Corporation | Virtual machine |
US8464256B1 (en) | 2009-04-10 | 2013-06-11 | Open Invention Network, Llc | System and method for hierarchical interception with isolated environments |
US9197706B2 (en) * | 2008-12-16 | 2015-11-24 | Qualcomm Incorporated | Apparatus and method for bundling application services with inbuilt connectivity management |
KR101062654B1 (en) | 2008-12-16 | 2011-09-06 | 한국전자통신연구원 | Continuous desktop providing system and method using virtual machine in mobile terminal environment |
US20100205099A1 (en) * | 2008-12-16 | 2010-08-12 | Kalle Ahmavaara | System and methods to facilitate connections to access networks |
KR101489466B1 (en) | 2008-12-17 | 2015-02-03 | 삼성전자 주식회사 | Apparatus and method for managing process migration |
US20110055299A1 (en) * | 2008-12-18 | 2011-03-03 | Virtual Computer, Inc. | Managing User Data in a Layered Virtual Workspace |
US9270785B2 (en) * | 2008-12-18 | 2016-02-23 | Citrix Systems, Inc. | System and method for a distributed virtual desktop infrastructure |
US9237175B2 (en) * | 2008-12-22 | 2016-01-12 | Microsoft Technology Licensing, Llc | Internet protocol (IP) address virtualization for terminal server sessions |
US9547653B1 (en) | 2008-12-23 | 2017-01-17 | Spring Communications Company L.P. | Wireless drive file backup |
KR101224717B1 (en) * | 2008-12-26 | 2013-01-21 | 에스케이플래닛 주식회사 | Method for Protecting Software License, System, Server, Terminal And Computer-Readable Recording Medium with Program therefor |
FR2940688B1 (en) * | 2008-12-30 | 2011-02-25 | Sagem Comm | SYSTEM COMPRISING A SERVER AND TERMINAL HAVING GRAPHIC INTERFACES COMMUNICATING THROUGH A PROTOCOL FOR SHARING IMAGES |
US8930423B1 (en) * | 2008-12-30 | 2015-01-06 | Symantec Corporation | Method and system for restoring encrypted files from a virtual machine image |
US8126985B1 (en) | 2008-12-31 | 2012-02-28 | Qurio Holdings, Inc. | Prioritizing virtual object downloads in a distributed virtual environment |
US9240978B2 (en) * | 2008-12-31 | 2016-01-19 | Verizon Patent And Licensing Inc. | Communication system having message encryption |
JP4263234B1 (en) * | 2009-01-08 | 2009-05-13 | 株式会社東芝 | Mobile device |
WO2010082192A1 (en) * | 2009-01-14 | 2010-07-22 | Aspect Magnet Technologies Ltd. | Layout storing-communicating and replacing means for providing a pre-stored layout to a computer |
US20100180206A1 (en) * | 2009-01-15 | 2010-07-15 | NexAira, Inc. | Systems and methods for iconic graphical user interface and embedded device manager |
US8645689B2 (en) * | 2009-01-16 | 2014-02-04 | Microsoft Corporation | Stateless agent |
US20100185843A1 (en) * | 2009-01-20 | 2010-07-22 | Microsoft Corporation | Hardware encrypting storage device with physically separable key storage device |
US20100198872A1 (en) * | 2009-01-25 | 2010-08-05 | Thomas Norwin Walter | System for the Management of Files |
US8224885B1 (en) | 2009-01-26 | 2012-07-17 | Teradici Corporation | Method and system for remote computing session management |
US20100188224A1 (en) * | 2009-01-26 | 2010-07-29 | Cheng Loong Corporation. | Method for searching electronic data and system thereof |
US11973804B2 (en) | 2009-01-28 | 2024-04-30 | Headwater Research Llc | Network service plan design |
US10841839B2 (en) | 2009-01-28 | 2020-11-17 | Headwater Research Llc | Security, fraud detection, and fraud mitigation in device-assisted services systems |
US10779177B2 (en) | 2009-01-28 | 2020-09-15 | Headwater Research Llc | Device group partitions and settlement platform |
US9954975B2 (en) | 2009-01-28 | 2018-04-24 | Headwater Research Llc | Enhanced curfew and protection associated with a device group |
US20220360461A1 (en) | 2009-01-28 | 2022-11-10 | Headwater Research Llc | Device-Assisted Services for Protecting Network Capacity |
US8351898B2 (en) | 2009-01-28 | 2013-01-08 | Headwater Partners I Llc | Verifiable device assisted service usage billing with integrated accounting, mediation accounting, and multi-account |
US9351193B2 (en) | 2009-01-28 | 2016-05-24 | Headwater Partners I Llc | Intermediate networking devices |
US8893009B2 (en) | 2009-01-28 | 2014-11-18 | Headwater Partners I Llc | End user device that secures an association of application to service policy with an application certificate check |
US11546472B2 (en) | 2009-01-28 | 2023-01-03 | Virtual Hold Technology Solutions, Llc | System and method for a cloud callback platform |
US9980146B2 (en) | 2009-01-28 | 2018-05-22 | Headwater Research Llc | Communications device with secure data path processing agents |
US10326800B2 (en) | 2009-01-28 | 2019-06-18 | Headwater Research Llc | Wireless network service interfaces |
US9392462B2 (en) | 2009-01-28 | 2016-07-12 | Headwater Partners I Llc | Mobile end-user device with agent limiting wireless data communication for specified background applications based on a stored policy |
US10237757B2 (en) | 2009-01-28 | 2019-03-19 | Headwater Research Llc | System and method for wireless network offloading |
US10264138B2 (en) | 2009-01-28 | 2019-04-16 | Headwater Research Llc | Mobile device and service management |
US10064055B2 (en) | 2009-01-28 | 2018-08-28 | Headwater Research Llc | Security, fraud detection, and fraud mitigation in device-assisted services systems |
US9647918B2 (en) | 2009-01-28 | 2017-05-09 | Headwater Research Llc | Mobile device and method attributing media services network usage to requesting application |
US9578182B2 (en) | 2009-01-28 | 2017-02-21 | Headwater Partners I Llc | Mobile device and service management |
US11218854B2 (en) | 2009-01-28 | 2022-01-04 | Headwater Research Llc | Service plan design, user interfaces, application programming interfaces, and device management |
US9955332B2 (en) | 2009-01-28 | 2018-04-24 | Headwater Research Llc | Method for child wireless device activation to subscriber account of a master wireless device |
US10057775B2 (en) | 2009-01-28 | 2018-08-21 | Headwater Research Llc | Virtualized policy and charging system |
US10783581B2 (en) | 2009-01-28 | 2020-09-22 | Headwater Research Llc | Wireless end-user device providing ambient or sponsored services |
US9565707B2 (en) | 2009-01-28 | 2017-02-07 | Headwater Partners I Llc | Wireless end-user device with wireless data attribution to multiple personas |
US9858559B2 (en) | 2009-01-28 | 2018-01-02 | Headwater Research Llc | Network service plan design |
US8606911B2 (en) | 2009-03-02 | 2013-12-10 | Headwater Partners I Llc | Flow tagging for service policy implementation |
US10798252B2 (en) | 2009-01-28 | 2020-10-06 | Headwater Research Llc | System and method for providing user notifications |
US10715342B2 (en) | 2009-01-28 | 2020-07-14 | Headwater Research Llc | Managing service user discovery and service launch object placement on a device |
US9706061B2 (en) | 2009-01-28 | 2017-07-11 | Headwater Partners I Llc | Service design center for device assisted services |
US9253663B2 (en) | 2009-01-28 | 2016-02-02 | Headwater Partners I Llc | Controlling mobile device communications on a roaming network based on device state |
US10248996B2 (en) | 2009-01-28 | 2019-04-02 | Headwater Research Llc | Method for operating a wireless end-user device mobile payment agent |
US9755842B2 (en) | 2009-01-28 | 2017-09-05 | Headwater Research Llc | Managing service user discovery and service launch object placement on a device |
US9270559B2 (en) | 2009-01-28 | 2016-02-23 | Headwater Partners I Llc | Service policy implementation for an end-user device having a control application or a proxy agent for routing an application traffic flow |
US9572019B2 (en) | 2009-01-28 | 2017-02-14 | Headwater Partners LLC | Service selection set published to device agent with on-device service selection |
US8793758B2 (en) | 2009-01-28 | 2014-07-29 | Headwater Partners I Llc | Security, fraud detection, and fraud mitigation in device-assisted services systems |
US8745191B2 (en) | 2009-01-28 | 2014-06-03 | Headwater Partners I Llc | System and method for providing user notifications |
US11985155B2 (en) | 2009-01-28 | 2024-05-14 | Headwater Research Llc | Communications device with secure data path processing agents |
US10492102B2 (en) | 2009-01-28 | 2019-11-26 | Headwater Research Llc | Intermediate networking devices |
US9557889B2 (en) | 2009-01-28 | 2017-01-31 | Headwater Partners I Llc | Service plan design, user interfaces, application programming interfaces, and device management |
US10484858B2 (en) | 2009-01-28 | 2019-11-19 | Headwater Research Llc | Enhanced roaming services and converged carrier networks with device assisted services and a proxy |
US11665282B2 (en) | 2009-01-28 | 2023-05-30 | Virtual Hold Technology Solutions, Llc | System and method for secure transitory data storage and management |
US10200541B2 (en) | 2009-01-28 | 2019-02-05 | Headwater Research Llc | Wireless end-user device with divided user space/kernel space traffic policy system |
JP5245869B2 (en) * | 2009-01-29 | 2013-07-24 | 富士通株式会社 | Information processing apparatus, information processing method, and computer program |
WO2010089897A1 (en) | 2009-02-09 | 2010-08-12 | 株式会社 日立製作所 | Method for setting communication path in storage system and management device |
US8681780B2 (en) * | 2009-02-12 | 2014-03-25 | International Business Machines Corporation | Establishing electronically authenticated internet voice connections |
US8112392B1 (en) | 2009-02-13 | 2012-02-07 | Symantec Corporation | Methods and systems for creating snapshots of virtualized applications |
US8707288B2 (en) * | 2009-02-13 | 2014-04-22 | Mobitv, Inc. | System for automatic management of applications on remote devices |
US9325789B2 (en) * | 2009-02-17 | 2016-04-26 | International Business Machines Corporation | Distributed server election with imperfect clock synchronization |
US9215279B1 (en) * | 2009-02-17 | 2015-12-15 | Netapp, Inc. | Servicing of storage device software components of nodes of a cluster storage system |
US20100211769A1 (en) * | 2009-02-19 | 2010-08-19 | Subramonian Shankar | Concurrent Execution of a Smartphone Operating System and a Desktop Operating System |
US9313105B2 (en) * | 2009-02-27 | 2016-04-12 | Red Hat, Inc. | Network management using secure mesh command and control framework |
US20100223558A1 (en) * | 2009-02-27 | 2010-09-02 | International Business Machines Corporation | Remote desktop connection to any private desktop to tam e-sso access agent |
US9558195B2 (en) | 2009-02-27 | 2017-01-31 | Red Hat, Inc. | Depopulation of user data from network |
US9292557B2 (en) * | 2009-02-27 | 2016-03-22 | Red Hat Israel, Ltd. | Managing virtual machines using hierarchical labeling |
US8407700B2 (en) | 2009-03-03 | 2013-03-26 | Symantec Corporation | Methods and systems for merging virtualization sublayers |
US10079716B2 (en) * | 2009-03-04 | 2018-09-18 | Amazon Technologies, Inc. | User controlled environment updates in server cluster |
EP2228719A1 (en) | 2009-03-11 | 2010-09-15 | Zimory GmbH | Method of executing a virtual machine, computing system and computer program |
US20160320938A9 (en) * | 2009-03-17 | 2016-11-03 | Litera Technologies, LLC | System and Method for the Auto-Detection and Presentation of Pre-Set Configurations for Multiple Monitor Layout Display |
US8402458B1 (en) | 2009-03-18 | 2013-03-19 | Symantec Corporation | Methods and systems for converting non-layered-software-application installations into layered installations |
JP5293580B2 (en) * | 2009-03-19 | 2013-09-18 | 日本電気株式会社 | Web service system, web service method and program |
US20100242101A1 (en) * | 2009-03-20 | 2010-09-23 | Reese Jr George Edward | Method and system for securely managing access and encryption credentials in a shared virtualization environment |
WO2010109681A1 (en) * | 2009-03-25 | 2010-09-30 | 株式会社日立製作所 | A computer system, resource management server of a computer system, and resource management method of a computer system |
US8738764B1 (en) | 2009-03-26 | 2014-05-27 | Symantec Corporation | Methods and systems for controlling communications |
US20100250818A1 (en) * | 2009-03-27 | 2010-09-30 | Qualcomm Incorporated | System and method of providing wireless connectivity between a portable computing device and a portable computing device docking station |
US9128669B2 (en) * | 2009-03-27 | 2015-09-08 | Qualcomm Incorporated | System and method of managing security between a portable computing device and a portable computing device docking station |
US20100251243A1 (en) * | 2009-03-27 | 2010-09-30 | Qualcomm Incorporated | System and method of managing the execution of applications at a portable computing device and a portable computing device docking station |
US20100250789A1 (en) * | 2009-03-27 | 2010-09-30 | Qualcomm Incorporated | System and method of managing memory at a portable computing device and a portable computing device docking station |
US8707061B2 (en) * | 2009-03-27 | 2014-04-22 | Qualcomm Incorporated | System and method of providing scalable computing between a portable computing device and a portable computing device docking station |
US8653785B2 (en) | 2009-03-27 | 2014-02-18 | Qualcomm Incorporated | System and method of managing power at a portable computing device and a portable computing device docking station |
US20100250817A1 (en) * | 2009-03-27 | 2010-09-30 | Qualcomm Incorporated | System and method of managing data communication at a portable computing device and a portable computing device docking station |
US9201593B2 (en) * | 2009-03-27 | 2015-12-01 | Qualcomm Incorporated | System and method of managing displays at a portable computing device and a portable computing device docking station |
JP5476764B2 (en) * | 2009-03-30 | 2014-04-23 | 富士通株式会社 | Server apparatus, computer system, program, and virtual computer migration method |
US8612994B1 (en) | 2009-03-30 | 2013-12-17 | Symantec Corporation | Methods and systems for activating and deactivating virtualization layers |
US9705888B2 (en) * | 2009-03-31 | 2017-07-11 | Amazon Technologies, Inc. | Managing security groups for data instances |
US8332365B2 (en) | 2009-03-31 | 2012-12-11 | Amazon Technologies, Inc. | Cloning and recovery of data volumes |
US9934320B2 (en) | 2009-03-31 | 2018-04-03 | International Business Machines Corporation | Method and apparatus for using proxy objects on webpage overlays to provide alternative webpage actions |
US8713060B2 (en) | 2009-03-31 | 2014-04-29 | Amazon Technologies, Inc. | Control service for relational data management |
US9207984B2 (en) | 2009-03-31 | 2015-12-08 | Amazon Technologies, Inc. | Monitoring and automatic scaling of data volumes |
US9158912B2 (en) * | 2009-04-01 | 2015-10-13 | Dell Products L.P. | Method and apparatus for a virtual machine hosting network with user devices |
US8117613B2 (en) * | 2009-04-08 | 2012-02-14 | Microsoft Corporation | Optimized virtual machine migration mechanism |
US9762701B1 (en) * | 2009-04-10 | 2017-09-12 | Open Invention Network Llc | System and method for cached streaming application isolation |
US10419504B1 (en) | 2009-04-10 | 2019-09-17 | Open Invention Network Llc | System and method for streaming application isolation |
US9577893B1 (en) * | 2009-04-10 | 2017-02-21 | Open Invention Network Llc | System and method for cached streaming application isolation |
US8418236B1 (en) * | 2009-04-10 | 2013-04-09 | Open Invention Network Llc | System and method for streaming application isolation |
US8533859B2 (en) * | 2009-04-13 | 2013-09-10 | Aventyn, Inc. | System and method for software protection and secure software distribution |
US9124952B2 (en) * | 2009-04-14 | 2015-09-01 | Dell Products L.P. | Virtualization based conditional access tuner module for providing secure linear and non-linear content services |
US20100269162A1 (en) | 2009-04-15 | 2010-10-21 | Jose Bravo | Website authentication |
US9444894B2 (en) | 2009-04-15 | 2016-09-13 | Wyse Technology Llc | System and method for communicating events at a server to a remote device |
US9189124B2 (en) * | 2009-04-15 | 2015-11-17 | Wyse Technology L.L.C. | Custom pointer features for touch-screen on remote client devices |
US9578113B2 (en) | 2009-04-15 | 2017-02-21 | Wyse Technology L.L.C. | Method and apparatus for transferring remote session data |
US8676926B2 (en) | 2009-04-15 | 2014-03-18 | Wyse Technology L.L.C. | System and method for handling remote drawing commands |
US20100268762A1 (en) * | 2009-04-15 | 2010-10-21 | Wyse Technology Inc. | System and method for scrolling a remote application |
US9553953B2 (en) | 2009-04-15 | 2017-01-24 | Dell Products L.P. | Method and apparatus for extending capabilities of a virtualization domain to support features available in a normal desktop application |
US9448815B2 (en) * | 2009-04-15 | 2016-09-20 | Wyse Technology L.L.C. | Server-side computing from a remote client device |
US8902242B2 (en) * | 2009-04-23 | 2014-12-02 | Vmware, Inc. | Method and system for identifying drawing primitives for selective transmission to a remote display |
EP2243738A1 (en) * | 2009-04-24 | 2010-10-27 | Inventio AG | Method for communicating with a lift assembly |
US8856783B2 (en) * | 2010-10-12 | 2014-10-07 | Citrix Systems, Inc. | Allocating virtual machines according to user-specific virtual machine metrics |
EP2425338A1 (en) * | 2009-05-01 | 2012-03-07 | Citrix Systems, Inc. | Systems and methods for providing a virtual appliance in an application delivery fabric |
US8090797B2 (en) * | 2009-05-02 | 2012-01-03 | Citrix Systems, Inc. | Methods and systems for launching applications into existing isolation environments |
US9432356B1 (en) | 2009-05-05 | 2016-08-30 | Amazon Technologies, Inc. | Host identity bootstrapping |
CA2761391A1 (en) | 2009-05-08 | 2010-11-11 | Zokem Oy | System and method for behavioural and contextual data analytics |
US9588803B2 (en) | 2009-05-11 | 2017-03-07 | Microsoft Technology Licensing, Llc | Executing native-code applications in a browser |
US8627074B1 (en) * | 2009-05-12 | 2014-01-07 | Marvell International Ltd. | Secure block acknowledgement mechanism for use in communication networks |
BRPI1010897A2 (en) * | 2009-05-19 | 2019-02-19 | Nholdings Sa | method and system for providing a local device with computer services from a remote provider and method and system for advertising a user of a virtual machine hosted by a remote server |
US9829950B2 (en) * | 2009-05-26 | 2017-11-28 | Lenovo Enterprise Solutions (Singapore) PTE., LTD. | Power management in a virtual machine farm at the local virtual machine platform level by a platform hypervisor extended with farm management server functions |
US9179367B2 (en) | 2009-05-26 | 2015-11-03 | Qualcomm Incorporated | Maximizing service provider utility in a heterogeneous wireless ad-hoc network |
JP5423149B2 (en) * | 2009-05-28 | 2014-02-19 | 日本電気株式会社 | Browsing information collection system, browsing information collection method, server, and program |
US9134987B2 (en) | 2009-05-29 | 2015-09-15 | Red Hat, Inc. | Retiring target machines by a provisioning server |
US8527466B2 (en) * | 2009-05-31 | 2013-09-03 | Red Hat Israel, Ltd. | Handling temporary files of a virtual machine |
US8943498B2 (en) * | 2009-05-31 | 2015-01-27 | Red Hat Israel, Ltd. | Method and apparatus for swapping virtual machine memory |
US8473958B2 (en) * | 2009-05-31 | 2013-06-25 | Red Hat Israel, Ltd. | Adjusting client display devices based on settings included in a notification from remote virtual machine host prior to connection establishment |
WO2010140003A2 (en) * | 2009-06-04 | 2010-12-09 | Bae Systems Plc | System and method of analysing transfer of data over at least one network |
US20100311393A1 (en) * | 2009-06-08 | 2010-12-09 | Castleman Mark | Methods and apparatus for distributing, storing, and replaying directives within a network |
US20100310193A1 (en) * | 2009-06-08 | 2010-12-09 | Castleman Mark | Methods and apparatus for selecting and/or displaying images of perspective views of an object at a communication device |
WO2010144428A1 (en) * | 2009-06-08 | 2010-12-16 | Swakker Llc | Methods and apparatus for distributing, storing, and replaying directives within a network |
US20100313249A1 (en) * | 2009-06-08 | 2010-12-09 | Castleman Mark | Methods and apparatus for distributing, storing, and replaying directives within a network |
US8286084B2 (en) | 2009-06-08 | 2012-10-09 | Swakker Llc | Methods and apparatus for remote interaction using a partitioned display |
US20100313244A1 (en) * | 2009-06-08 | 2010-12-09 | Castleman Mark | Methods and apparatus for distributing, storing, and replaying directives within a network |
US9330282B2 (en) * | 2009-06-10 | 2016-05-03 | Microsoft Technology Licensing, Llc | Instruction cards for storage devices |
US8650562B2 (en) * | 2009-06-12 | 2014-02-11 | International Business Machines Corporation | Method and apparatus for scalable monitoring of virtual machine environments combining base virtual machine and single monitoring agent for measuring common characteristics and individual virtual machines measuring individualized characteristics |
US9141412B2 (en) | 2009-06-16 | 2015-09-22 | Microsoft Technology Licensing, Llc | Terminal services application virtualization for compatibility |
US8989705B1 (en) | 2009-06-18 | 2015-03-24 | Sprint Communications Company L.P. | Secure placement of centralized media controller application in mobile access terminal |
US8970448B2 (en) | 2009-06-18 | 2015-03-03 | Hiperwall, Inc. | Systems, methods, and devices for manipulation of images on tiled displays |
US9135599B2 (en) * | 2009-06-18 | 2015-09-15 | Microsoft Technology Licensing, Llc | Smart notebook |
CN102714618B (en) * | 2009-06-22 | 2015-05-13 | 思杰系统有限公司 | Systems and methods for platform rate limiting |
EP2270665B1 (en) | 2009-06-22 | 2023-07-26 | Citrix Systems, Inc. | Systems and methods for web logging of trace data in a multi-core system |
US9104757B2 (en) * | 2009-06-24 | 2015-08-11 | Red Hat Israel, Ltd. | Interactive search monitoring in a virtual machine environment |
US20100328418A1 (en) * | 2009-06-25 | 2010-12-30 | Yair Winkler | Method for real-time remote presentation and control of a visual page from a mobile terminal during a video call |
US8244559B2 (en) * | 2009-06-26 | 2012-08-14 | Microsoft Corporation | Cloud computing resource broker |
US8438256B2 (en) | 2009-06-26 | 2013-05-07 | Vmware, Inc. | Migrating functionality in virtualized mobile devices |
US20100332544A1 (en) * | 2009-06-29 | 2010-12-30 | Collins Mark A | Surrogate Management Capabilities For Heterogeneous Systems Management Support |
US20100332551A1 (en) * | 2009-06-29 | 2010-12-30 | Dell Products L.P. | Multi-Tiered Caching Architecture For Systems Management |
EP2449469B1 (en) * | 2009-06-29 | 2019-04-03 | Hewlett-Packard Enterprise Development LP | Hypervisor-based management of local and remote virtual memory pages |
US9229850B1 (en) * | 2009-06-30 | 2016-01-05 | Emc Corporation | Mapping data storage and virtual machines |
US8239781B2 (en) * | 2009-06-30 | 2012-08-07 | Sap Ag | Drag and drop of an application component to desktop |
CN102656562B (en) * | 2009-06-30 | 2015-12-09 | 思杰系统有限公司 | For selecting the method and system of desktop executing location |
CN101938368A (en) * | 2009-06-30 | 2011-01-05 | 国际商业机器公司 | Virtual machine manager in blade server system and virtual machine processing method |
US8255984B1 (en) | 2009-07-01 | 2012-08-28 | Quest Software, Inc. | Single sign-on system for shared resource environments |
US9130903B2 (en) * | 2009-07-01 | 2015-09-08 | Citrix Systems, Inc. | Unified out of band management system for desktop and server sessions |
US8990433B2 (en) * | 2009-07-01 | 2015-03-24 | Riverbed Technology, Inc. | Defining network traffic processing flows between virtual machines |
JP5458708B2 (en) * | 2009-07-09 | 2014-04-02 | 株式会社リコー | Image processing apparatus, display control method, and display control program |
US8346721B2 (en) * | 2009-07-15 | 2013-01-01 | International Business Machines Corporation | Apparatus and method to replicate remote virtual volumes to local physical volumes |
US8578374B2 (en) * | 2009-07-16 | 2013-11-05 | Ca, Inc. | System and method for managing virtual machines |
US9367331B2 (en) | 2009-07-20 | 2016-06-14 | Google Technology Holdings LLC | Multi-environment operating system |
US9372711B2 (en) | 2009-07-20 | 2016-06-21 | Google Technology Holdings LLC | System and method for initiating a multi-environment operating system |
US9389877B2 (en) | 2009-07-20 | 2016-07-12 | Google Technology Holdings LLC | Multi-environment operating system |
US9348633B2 (en) | 2009-07-20 | 2016-05-24 | Google Technology Holdings LLC | Multi-environment operating system |
US9569240B2 (en) * | 2009-07-21 | 2017-02-14 | Adobe Systems Incorporated | Method and system to provision and manage a computing application hosted by a virtual instance of a machine |
JP5365399B2 (en) * | 2009-07-27 | 2013-12-11 | 富士通株式会社 | Screen saver control system, image processing apparatus, image display apparatus, screen saver control method, and computer program |
US8060480B2 (en) * | 2009-07-27 | 2011-11-15 | Sap Ag | Processing substantial amounts of data using a database |
US20110028209A1 (en) * | 2009-07-30 | 2011-02-03 | Microsoft Corporation | Controlling content access |
US20110029971A1 (en) * | 2009-07-30 | 2011-02-03 | Fujitsu Limited | Information processing apparatus, image processing method and computer program |
EP2460088A4 (en) * | 2009-07-31 | 2014-07-23 | Hewlett Packard Development Co | Controlling a virtual machine |
US9959131B2 (en) * | 2009-08-03 | 2018-05-01 | Quantum Corporation | Systems and methods for providing a file system viewing of a storeage environment |
US8443202B2 (en) | 2009-08-05 | 2013-05-14 | Daon Holdings Limited | Methods and systems for authenticating users |
US7685629B1 (en) | 2009-08-05 | 2010-03-23 | Daon Holdings Limited | Methods and systems for authenticating users |
US7865937B1 (en) | 2009-08-05 | 2011-01-04 | Daon Holdings Limited | Methods and systems for authenticating users |
US20110035802A1 (en) * | 2009-08-07 | 2011-02-10 | Microsoft Corporation | Representing virtual object priority based on relationships |
US8532967B2 (en) * | 2009-08-14 | 2013-09-10 | Schlumberger Technology Corporation | Executing a utility in a distributed computing system based on an integrated model |
US8418227B2 (en) * | 2009-08-21 | 2013-04-09 | Verizon Patent And Licensing, Inc. | Keystroke logger for Unix-based systems |
US8381284B2 (en) * | 2009-08-21 | 2013-02-19 | Mcafee, Inc. | System and method for enforcing security policies in a virtual environment |
US8341627B2 (en) | 2009-08-21 | 2012-12-25 | Mcafee, Inc. | Method and system for providing user space address protection from writable memory area in a virtual environment |
US9495190B2 (en) * | 2009-08-24 | 2016-11-15 | Microsoft Technology Licensing, Llc | Entropy pools for virtual machines |
US8099397B2 (en) * | 2009-08-26 | 2012-01-17 | International Business Machines Corporation | Apparatus, system, and method for improved portable document format (“PDF”) document archiving |
US9043454B2 (en) * | 2009-08-26 | 2015-05-26 | Red Hat Israel, Ltd. | Auto suspense of virtual machine on client disconnection |
CN101998629B (en) | 2009-08-28 | 2014-05-21 | 国际商业机器公司 | Method, device and system for searching for virtual resources |
US8881140B1 (en) | 2009-09-04 | 2014-11-04 | Symantec Corporation | Systems and methods for virtualizing software associated with external computer hardware devices |
US8386731B2 (en) * | 2009-09-14 | 2013-02-26 | Vmware, Inc. | Method and system for optimizing live migration of persistent data of virtual machine using disk I/O heuristics |
US9143597B2 (en) * | 2009-09-21 | 2015-09-22 | Avaya Inc. | Method for telephony client synchronization in telephone virtualization |
US9338273B2 (en) * | 2009-09-22 | 2016-05-10 | Avaya Inc. | Method for telephony client synchronization in telephone virtualization |
US11132237B2 (en) * | 2009-09-24 | 2021-09-28 | Oracle International Corporation | System and method for usage-based application licensing in a hypervisor virtual execution environment |
US8718611B2 (en) * | 2009-09-30 | 2014-05-06 | Avaya Inc. | Method for the selection of an active software environment of a virtualized telecommunications terminal |
US8938524B2 (en) | 2011-01-27 | 2015-01-20 | Wyse Technology L.L.C. | Comparing and provisioning configurations for a client having a windows-based embedded image |
US9135283B2 (en) | 2009-10-07 | 2015-09-15 | Amazon Technologies, Inc. | Self-service configuration for data environment |
US8560604B2 (en) | 2009-10-08 | 2013-10-15 | Hola Networks Ltd. | System and method for providing faster and more efficient data communication |
WO2011046422A1 (en) * | 2009-10-13 | 2011-04-21 | Mimos Berhad | Method and network infrastructure for establishing dynamic trusted execution environment |
US8620879B2 (en) * | 2009-10-13 | 2013-12-31 | Google Inc. | Cloud based file storage service |
US8812482B1 (en) | 2009-10-16 | 2014-08-19 | Vikas Kapoor | Apparatuses, methods and systems for a data translator |
US9672281B1 (en) | 2009-10-16 | 2017-06-06 | Iqor US. Inc. | Apparatuses, methods and systems for a call searcher |
US8707303B2 (en) * | 2009-10-22 | 2014-04-22 | Hewlett-Packard Development Company, L.P. | Dynamic virtualization and policy-based access control of removable storage devices in a virtualized environment |
US8335765B2 (en) | 2009-10-26 | 2012-12-18 | Amazon Technologies, Inc. | Provisioning and managing replicated data instances |
US8676753B2 (en) | 2009-10-26 | 2014-03-18 | Amazon Technologies, Inc. | Monitoring of replicated data instances |
US8074107B2 (en) | 2009-10-26 | 2011-12-06 | Amazon Technologies, Inc. | Failover and recovery for replicated data instances |
US9003517B2 (en) | 2009-10-28 | 2015-04-07 | Microsoft Technology Licensing, Llc | Isolation and presentation of untrusted data |
US9122537B2 (en) * | 2009-10-30 | 2015-09-01 | Cisco Technology, Inc. | Balancing server load according to availability of physical resources based on the detection of out-of-sequence packets |
US8621460B2 (en) * | 2009-11-02 | 2013-12-31 | International Business Machines Corporation | Endpoint-hosted hypervisor management |
US8356054B2 (en) * | 2009-11-10 | 2013-01-15 | International Business Machines Corporation | Management of resources in a host system |
US9552497B2 (en) | 2009-11-10 | 2017-01-24 | Mcafee, Inc. | System and method for preventing data loss using virtual machine wrapped applications |
US20110112819A1 (en) * | 2009-11-11 | 2011-05-12 | Sony Corporation | User interface systems and methods between a portable device and a computer |
US20110119609A1 (en) * | 2009-11-16 | 2011-05-19 | Apple Inc. | Docking User Interface Elements |
US9094426B2 (en) | 2009-11-20 | 2015-07-28 | Avaya Inc. | Method for telecommunications device synchronization |
US10133773B2 (en) * | 2009-11-20 | 2018-11-20 | Mastercard International Incorporated | Methods and systems for indirectly retrieving account data from data storage devices |
DE102009054114A1 (en) * | 2009-11-20 | 2011-05-26 | Siemens Aktiengesellschaft | Method and device for accessing control data according to provided rights information |
US8707194B1 (en) * | 2009-11-20 | 2014-04-22 | Amazon Technologies, Inc. | System and method for decentralized performance monitoring of host systems |
US8627413B2 (en) * | 2009-11-23 | 2014-01-07 | Symantec Corporation | System and method for authorization and management of connections and attachment of resources |
US8819848B2 (en) | 2009-11-24 | 2014-08-26 | Comcast Interactive Media, Llc | Method for scalable access control decisions |
US8676949B2 (en) * | 2009-11-25 | 2014-03-18 | Citrix Systems, Inc. | Methods for interfacing with a virtualized computing service over a network using a lightweight client |
US20110126197A1 (en) * | 2009-11-25 | 2011-05-26 | Novell, Inc. | System and method for controlling cloud and virtualized data centers in an intelligent workload management system |
US8386207B2 (en) | 2009-11-30 | 2013-02-26 | International Business Machines Corporation | Open-service based test execution frameworks |
US8909916B2 (en) * | 2009-11-30 | 2014-12-09 | Red Hat, Inc. | Using a PKCS module for opening multiple databases |
US9104438B2 (en) * | 2009-12-03 | 2015-08-11 | International Business Machines Corporation | Mapping computer desktop objects to cloud services within a cloud computing environment |
US8615584B2 (en) * | 2009-12-03 | 2013-12-24 | International Business Machines Corporation | Reserving services within a cloud computing environment |
US9274848B2 (en) * | 2009-12-03 | 2016-03-01 | International Business Machines Corporation | Optimizing cloud service delivery within a cloud computing environment |
US8683609B2 (en) | 2009-12-04 | 2014-03-25 | International Business Machines Corporation | Mobile phone and IP address correlation service |
US8995301B1 (en) | 2009-12-07 | 2015-03-31 | Amazon Technologies, Inc. | Using virtual networking devices to manage routing cost information |
US9036504B1 (en) | 2009-12-07 | 2015-05-19 | Amazon Technologies, Inc. | Using virtual networking devices and routing information to associate network addresses with computing nodes |
US7937438B1 (en) | 2009-12-07 | 2011-05-03 | Amazon Technologies, Inc. | Using virtual networking devices to manage external connections |
US9203747B1 (en) | 2009-12-07 | 2015-12-01 | Amazon Technologies, Inc. | Providing virtual networking device functionality for managed computer networks |
US8850426B2 (en) * | 2009-12-13 | 2014-09-30 | International Business Machines Corporation | Managing remote deployment of a virtual machine and service request to be processed by the virtual machines based on network bandwith and storage connectivity |
US9055080B2 (en) * | 2009-12-14 | 2015-06-09 | Citrix Systems, Inc. | Systems and methods for service isolation |
US8898663B2 (en) * | 2009-12-16 | 2014-11-25 | Symantec Corporation | Storage visibility in virtual environments |
JP5371726B2 (en) | 2009-12-16 | 2013-12-18 | キヤノン株式会社 | Information processing apparatus, information processing apparatus control method, and program |
US20130036093A1 (en) * | 2009-12-17 | 2013-02-07 | National Ict Australia Limited | Reliable Writing of Database Log Data |
US20110154376A1 (en) * | 2009-12-17 | 2011-06-23 | Microsoft Corporation | Use of Web Services API to Identify Responsive Content Items |
US8370510B2 (en) * | 2009-12-18 | 2013-02-05 | Microsoft Corporation | Remote application presentation over a public network connection |
US8949408B2 (en) | 2009-12-18 | 2015-02-03 | Microsoft Corporation | Session monitoring of virtual desktops in a virtual machine farm |
US20110154214A1 (en) * | 2009-12-18 | 2011-06-23 | Microsoft Corporation | Offloading Content Retrieval And Decoding In Pluggable Content-Handling Systems |
KR101651202B1 (en) * | 2009-12-21 | 2016-08-26 | 삼성전자주식회사 | Virtualization apparatus and method of operating thereof |
US20110154023A1 (en) | 2009-12-21 | 2011-06-23 | Smith Ned M | Protected device management |
US8438626B2 (en) * | 2009-12-23 | 2013-05-07 | Citrix Systems, Inc. | Systems and methods for processing application firewall session information on owner core in multiple core system |
US7991859B1 (en) | 2009-12-28 | 2011-08-02 | Amazon Technologies, Inc. | Using virtual networking devices to connect managed computer networks |
US8224971B1 (en) * | 2009-12-28 | 2012-07-17 | Amazon Technologies, Inc. | Using virtual networking devices and routing information to initiate external actions |
US7953865B1 (en) | 2009-12-28 | 2011-05-31 | Amazon Technologies, Inc. | Using virtual networking devices to manage routing communications between connected computer networks |
US8626475B1 (en) | 2009-12-29 | 2014-01-07 | Comsol Ab | System and method for accessing a multiphysics modeling system via a design system user interface |
US11610037B2 (en) | 2009-12-29 | 2023-03-21 | Comsol Ab | System and method for accessing settings in a multiphysics modeling system using a model tree |
US8584228B1 (en) | 2009-12-29 | 2013-11-12 | Amazon Technologies, Inc. | Packet authentication and encryption in virtual networks |
US20110162087A1 (en) * | 2009-12-31 | 2011-06-30 | Microsoft Corporation | Virtualizing remote presentation session client licensing with a server-based broker |
US8887172B2 (en) * | 2009-12-31 | 2014-11-11 | Microsoft Corporation | Virtualized management of remote presentation sessions using virtual machines having load above or below thresholds |
US8954958B2 (en) | 2010-01-11 | 2015-02-10 | Code Systems Corporation | Method of configuring a virtual application |
CN102129361B (en) * | 2010-01-13 | 2015-07-15 | 宏正自动科技股份有限公司 | Centralized display system and method for multi-split pictures |
US9363691B1 (en) * | 2010-01-13 | 2016-06-07 | Sprint Communications Company L.P. | Application transfer negotiation for a media device |
US8959217B2 (en) * | 2010-01-15 | 2015-02-17 | Joyent, Inc. | Managing workloads and hardware resources in a cloud resource |
US20110179383A1 (en) * | 2010-01-18 | 2011-07-21 | Robert Paul Morris | Methods, systems, and computer program products for automatically selecting objects in a plurality of objects |
WO2011091056A1 (en) * | 2010-01-19 | 2011-07-28 | Servicemesh, Inc. | System and method for a cloud computing abstraction layer |
CN102130975A (en) * | 2010-01-20 | 2011-07-20 | 中兴通讯股份有限公司 | Method and system for accessing network on public equipment by using identifier |
US9137338B2 (en) * | 2010-01-22 | 2015-09-15 | Microsoft Technology Licensing, Llc | Multi-link remote protocol |
US8463918B2 (en) | 2010-01-22 | 2013-06-11 | Microsoft Corporation | Loss tolerant protocol for remoting desktop graphics |
US8301746B2 (en) * | 2010-01-26 | 2012-10-30 | International Business Machines Corporation | Method and system for abstracting non-functional requirements based deployment of virtual machines |
US9274821B2 (en) | 2010-01-27 | 2016-03-01 | Vmware, Inc. | Independent access to virtual machine desktop content |
US8392838B2 (en) * | 2010-01-27 | 2013-03-05 | Vmware, Inc. | Accessing virtual disk content of a virtual machine using a control virtual machine |
US9009219B2 (en) | 2010-01-27 | 2015-04-14 | Vmware, Inc. | Native viewer use for service results from a remote desktop |
US9477531B2 (en) * | 2010-01-27 | 2016-10-25 | Vmware, Inc. | Accessing virtual disk content of a virtual machine without running a virtual desktop |
US9104517B2 (en) | 2010-01-27 | 2015-08-11 | Code Systems Corporation | System for downloading and executing a virtual application |
US8959183B2 (en) | 2010-01-27 | 2015-02-17 | Code Systems Corporation | System for downloading and executing a virtual application |
US9229748B2 (en) | 2010-01-29 | 2016-01-05 | Code Systems Corporation | Method and system for improving startup performance and interoperability of a virtual application |
US8645977B2 (en) * | 2010-02-04 | 2014-02-04 | Microsoft Corporation | Extensible application virtualization subsystems |
US8413137B2 (en) | 2010-02-04 | 2013-04-02 | Storage Appliance Corporation | Automated network backup peripheral device and method |
US8874914B2 (en) * | 2010-02-05 | 2014-10-28 | Accenture Global Services Limited | Secure and automated credential information transfer mechanism |
US8607229B2 (en) * | 2010-02-05 | 2013-12-10 | Riverbed Technology, Inc. | Correcting packet timestamps in virtualized environments |
US20110202572A1 (en) * | 2010-02-12 | 2011-08-18 | Kinson Kin Sang Ho | Systems and methods for independently managing clinical documents and patient manifests at a datacenter |
US9350702B2 (en) * | 2010-02-17 | 2016-05-24 | Hewlett Packard Enterprise Development Lp | Virtual insertion into a network |
US8495193B2 (en) * | 2010-02-23 | 2013-07-23 | Microsoft Corporation | Centralized management tool for remote presentation session server farms |
US8468455B2 (en) * | 2010-02-24 | 2013-06-18 | Novell, Inc. | System and method for providing virtual desktop extensions on a client desktop |
US8862178B2 (en) * | 2010-02-24 | 2014-10-14 | Qualcomm Incorporated | Methods and systems for managing participation in multiple wireless networks |
JP5477047B2 (en) * | 2010-02-25 | 2014-04-23 | 富士通株式会社 | Information processing apparatus, virtual machine connection method, program, and recording medium |
US9923995B1 (en) | 2010-02-27 | 2018-03-20 | Sitting Man, Llc | Methods, systems, and computer program products for sharing information for detecting an idle TCP connection |
US8984621B2 (en) * | 2010-02-27 | 2015-03-17 | Novell, Inc. | Techniques for secure access management in virtual environments |
US8938808B1 (en) * | 2010-03-01 | 2015-01-20 | Symantec Corporation | Systems and methods for using virtualization to implement information rights management |
US20110219331A1 (en) * | 2010-03-02 | 2011-09-08 | International Business Machines Corporation | Window resize on remote desktops |
US9425986B2 (en) | 2010-03-03 | 2016-08-23 | Iwebgate Technology Limited | System and method for multiple concurrent virtual networks |
US8615014B2 (en) * | 2010-03-03 | 2013-12-24 | Iwebgate Technology Limited | System and method for multiple concurrent virtual networks |
US8572710B2 (en) * | 2010-03-18 | 2013-10-29 | Microsoft Corporation | Pluggable token provider model to implement authentication across multiple web services |
US8365020B2 (en) | 2010-03-18 | 2013-01-29 | Red Hat Israel, Ltd. | Mechanism for saving crash dump files of a virtual machine on a designated disk |
US8826030B2 (en) | 2010-03-22 | 2014-09-02 | Daon Holdings Limited | Methods and systems for authenticating users |
US20110238402A1 (en) * | 2010-03-23 | 2011-09-29 | Fujitsu Limited | System and methods for remote maintenance in an electronic network with multiple clients |
US8583875B1 (en) | 2010-07-13 | 2013-11-12 | Vmware, Inc. | Efficient readable ballooning of guest memory by backing balloon pages with a shared page |
CN102202075B (en) * | 2010-03-26 | 2013-12-04 | 联想(北京)有限公司 | Data sharing method and portable terminal |
US9367341B2 (en) | 2010-03-30 | 2016-06-14 | Red Hat Israel, Ltd. | Encrypting and decrypting virtual disk content using a single user sign-on |
CN102209097A (en) * | 2010-03-31 | 2011-10-05 | 英业达股份有限公司 | System for allocating storage resources of storage local area network |
US8756598B1 (en) * | 2010-03-31 | 2014-06-17 | Netapp, Inc. | Diskless virtual machine cloning by separately cloning a virtual drive and configuration data of a source virtual machine for combination into a cloned virtual machine |
EP2553561A4 (en) * | 2010-04-01 | 2016-03-30 | Citrix Systems Inc | Interacting with remote applications displayed within a virtual desktop of a tablet computing device |
US8886806B2 (en) | 2010-04-07 | 2014-11-11 | Accenture Global Services Limited | Generic control layer in a cloud environment |
JP5576697B2 (en) * | 2010-04-14 | 2014-08-20 | オリンパス株式会社 | Service using terminal, service providing terminal, service using terminal control method, service providing terminal control method, and service providing system |
US8887054B2 (en) * | 2010-04-15 | 2014-11-11 | Hewlett-Packard Development Company, L.P. | Application selection user interface |
US10085128B2 (en) * | 2010-04-15 | 2018-09-25 | Htc Corporation | File download method for mobile device, server and mobile device thereof, and computer-readable medium |
US8763009B2 (en) | 2010-04-17 | 2014-06-24 | Code Systems Corporation | Method of hosting a first application in a second application |
US9443078B2 (en) * | 2010-04-20 | 2016-09-13 | International Business Machines Corporation | Secure access to a virtual machine |
CN102238571B (en) * | 2010-04-27 | 2014-01-01 | 中兴通讯股份有限公司 | Apparatus of Internet of Things machine to machine/man (M2M) business processing, system and method thereof |
US8353013B2 (en) * | 2010-04-28 | 2013-01-08 | Bmc Software, Inc. | Authorized application services via an XML message protocol |
US8555377B2 (en) * | 2010-04-29 | 2013-10-08 | High Cloud Security | Secure virtual machine |
US9270663B2 (en) | 2010-04-30 | 2016-02-23 | T-Central, Inc. | System and method to enable PKI- and PMI-based distributed locking of content and distributed unlocking of protected content and/or scoring of users and/or scoring of end-entity access means—added |
US20120284506A1 (en) * | 2010-04-30 | 2012-11-08 | T-Central, Inc. | Methods and apparatus for preventing crimeware attacks |
US9356916B2 (en) | 2010-04-30 | 2016-05-31 | T-Central, Inc. | System and method to use a cloud-based platform supported by an API to authenticate remote users and to provide PKI- and PMI-based distributed locking of content and distributed unlocking of protected content |
US8473967B2 (en) * | 2010-04-30 | 2013-06-25 | Positron Telecommunication Systems | Systems and methods for providing a client-side application programming interface to access a networked telecommunication resource |
US9244700B2 (en) * | 2010-05-09 | 2016-01-26 | Citrix Systems, Inc. | Methods and systems for delivering applications from a desktop operating system |
US8893004B2 (en) * | 2010-05-12 | 2014-11-18 | International Business Machines Corporation | User interface proxy method and system |
US8468172B2 (en) | 2010-05-14 | 2013-06-18 | Sap Ag | Integrated application server and data server processes with matching data formats |
US9104837B1 (en) | 2012-06-18 | 2015-08-11 | Bromium, Inc. | Exposing subset of host file systems to restricted virtual machines based on upon performing user-initiated actions against host files |
US9386021B1 (en) | 2011-05-25 | 2016-07-05 | Bromium, Inc. | Restricting network access to untrusted virtual machines |
US9558051B1 (en) | 2010-05-28 | 2017-01-31 | Bormium, Inc. | Inter-process communication router within a virtualized environment |
US8752047B2 (en) | 2010-05-28 | 2014-06-10 | Bromium, Inc. | Automated management of virtual machines to process untrusted data based on client policy information |
US9767274B2 (en) | 2011-11-22 | 2017-09-19 | Bromium, Inc. | Approaches for efficient physical to virtual disk conversion |
US9135038B1 (en) | 2010-05-28 | 2015-09-15 | Bromium, Inc. | Mapping free memory pages maintained by a guest operating system to a shared zero page within a machine frame |
US9116733B2 (en) | 2010-05-28 | 2015-08-25 | Bromium, Inc. | Automated provisioning of secure virtual execution environment using virtual machine templates based on requested activity |
US8990584B2 (en) | 2010-05-28 | 2015-03-24 | Dell Products, Lp | System and method for supporting task oriented devices in a client hosted virtualization system |
US10310696B1 (en) | 2010-05-28 | 2019-06-04 | Bromium, Inc. | Supporting a consistent user interface within a virtualized environment |
US9239909B2 (en) | 2012-01-25 | 2016-01-19 | Bromium, Inc. | Approaches for protecting sensitive data within a guest operating system |
US9148428B1 (en) | 2011-05-25 | 2015-09-29 | Bromium, Inc. | Seamless management of untrusted data using virtual machines |
US10095530B1 (en) | 2010-05-28 | 2018-10-09 | Bromium, Inc. | Transferring control of potentially malicious bit sets to secure micro-virtual machine |
US9183560B2 (en) | 2010-05-28 | 2015-11-10 | Daniel H. Abelow | Reality alternate |
US8938774B2 (en) * | 2010-05-28 | 2015-01-20 | Dell Products, Lp | System and method for I/O port assignment and security policy application in a client hosted virtualization system |
US8972980B2 (en) * | 2010-05-28 | 2015-03-03 | Bromium, Inc. | Automated provisioning of secure virtual execution environment using virtual machine templates based on requested activity |
US20110307831A1 (en) * | 2010-06-10 | 2011-12-15 | Microsoft Corporation | User-Controlled Application Access to Resources |
US8839238B2 (en) * | 2010-06-11 | 2014-09-16 | International Business Machines Corporation | Dynamic virtual machine shutdown without service interruptions |
US8700723B2 (en) * | 2010-06-15 | 2014-04-15 | Netzyn, Inc. | Hierarchical display-server system and method |
US8539039B2 (en) * | 2010-06-22 | 2013-09-17 | Splashtop Inc. | Remote server environment |
US8589472B2 (en) * | 2010-06-22 | 2013-11-19 | International Business Machines Corporation | Agent system for reducing server resource usage |
JP5896382B2 (en) | 2010-06-24 | 2016-03-30 | ザ ニールセン カンパニー (ユーエス) エルエルシー | Network server equipment configuration and related methods for handling non-parametric, multi-dimensional, spatial and temporal human behavior or a wide range of technical observations |
US8789189B2 (en) | 2010-06-24 | 2014-07-22 | NeurallQ, Inc. | System and method for sampling forensic data of unauthorized activities using executability states |
US9106697B2 (en) * | 2010-06-24 | 2015-08-11 | NeurallQ, Inc. | System and method for identifying unauthorized activities on a computer system using a data structure model |
TWI439856B (en) * | 2010-06-30 | 2014-06-01 | Ibm | Method and multiple computer system with a failover support to manage shared resources |
US9218359B2 (en) | 2010-07-02 | 2015-12-22 | Code Systems Corporation | Method and system for profiling virtual application resource utilization patterns by executing virtualized application |
SG186975A1 (en) * | 2010-07-09 | 2013-02-28 | State Street Corp | Systems and methods for private cloud computing |
US8713067B1 (en) * | 2010-07-09 | 2014-04-29 | Open Invention Network, Llc | Stable file system |
US9323921B2 (en) | 2010-07-13 | 2016-04-26 | Microsoft Technology Licensing, Llc | Ultra-low cost sandboxing for application appliances |
TWI423039B (en) * | 2010-07-23 | 2014-01-11 | Quanta Comp Inc | Server system and operation method thereof |
US9058088B2 (en) * | 2010-07-23 | 2015-06-16 | Libera, Inc. | Methods and systems for operating a remote computer application from a thin client |
WO2013015835A1 (en) | 2011-07-22 | 2013-01-31 | Seven Networks, Inc. | Mobile application traffic optimization |
US9075635B1 (en) | 2010-07-26 | 2015-07-07 | Symantec Corporation | Systems and methods for merging virtual layers |
US8925101B2 (en) | 2010-07-28 | 2014-12-30 | Mcafee, Inc. | System and method for local protection against malicious software |
US8938800B2 (en) | 2010-07-28 | 2015-01-20 | Mcafee, Inc. | System and method for network level protection against malicious software |
KR101212828B1 (en) * | 2010-07-29 | 2012-12-14 | 삼성에스디에스 주식회사 | Terminal device, sever and method for enforcing security of virtual machine |
JP5678508B2 (en) * | 2010-07-29 | 2015-03-04 | 日本電気株式会社 | Thin client system, management server, virtual machine creation management method, and virtual machine creation management program |
US8892608B2 (en) * | 2010-07-30 | 2014-11-18 | Apollo Education Group, Inc. | Highly reliable cross-session web application instrumentation |
US9158650B2 (en) * | 2010-08-04 | 2015-10-13 | BoxTone, Inc. | Mobile application performance management |
US9560035B2 (en) * | 2010-08-04 | 2017-01-31 | At&T Mobility Ii Llc | Systems, devices, methods and computer program products for establishing network connections between service providers and applications that run natively on devices |
US8918499B2 (en) * | 2010-08-09 | 2014-12-23 | International Business Machines Corporation | Method and system for end-to-end quality of service in virtualized desktop systems |
US8370899B2 (en) * | 2010-08-11 | 2013-02-05 | Emc Corporation | Disposable browser for commercial banking |
WO2012023152A2 (en) * | 2010-08-19 | 2012-02-23 | Ineda Systems Pvt. Ltd | Multi-processor electronic systems |
US8340685B2 (en) | 2010-08-25 | 2012-12-25 | The Nielsen Company (Us), Llc | Methods, systems and apparatus to generate market segmentation data with anonymous location data |
US9043706B2 (en) * | 2010-08-31 | 2015-05-26 | Anders Nancke-Krogh | System and method for using state replication between application instances to provide a collaborative desktop environment |
US8549003B1 (en) | 2010-09-12 | 2013-10-01 | Mcafee, Inc. | System and method for clustering host inventories |
US20120066679A1 (en) * | 2010-09-13 | 2012-03-15 | Startforce, Inc. | Disposable virtual desktop for transient use by multiple users |
CN101938490B (en) * | 2010-09-17 | 2013-01-09 | 浙江大学 | Remote control verification method for mobile Internet equipment |
JP5672893B2 (en) * | 2010-09-21 | 2015-02-18 | 日本電気株式会社 | Thin client system, management server, client environment management method and program |
US8595289B2 (en) * | 2010-09-21 | 2013-11-26 | Telefonaktiebolaget L M Ericsson (Publ) | Cloud phone with distributed processing |
US20120072898A1 (en) * | 2010-09-21 | 2012-03-22 | Startforce, Inc. | On-premise deployment of virtual desktop service servers |
US10805331B2 (en) | 2010-09-24 | 2020-10-13 | BitSight Technologies, Inc. | Information technology security assessment system |
US9547295B2 (en) * | 2010-09-24 | 2017-01-17 | Fisher-Rosemount Systems, Inc. | Methods and apparatus to display process control device information |
US20120079566A1 (en) * | 2010-09-25 | 2012-03-29 | Barranco Roger L | Secure out-of-band management of computing devices over a communications network |
US20120079043A1 (en) * | 2010-09-27 | 2012-03-29 | Research In Motion Limited | Method, apparatus and system for accessing an application across a plurality of computers |
US9160693B2 (en) | 2010-09-27 | 2015-10-13 | Blackberry Limited | Method, apparatus and system for accessing applications and content across a plurality of computers |
US9384029B1 (en) * | 2010-09-30 | 2016-07-05 | Amazon Technologies, Inc. | Managing virtual computing nodes |
US8959173B1 (en) * | 2010-09-30 | 2015-02-17 | Emc Corporation | Non-disruptive load-balancing of virtual machines between data centers |
US8505083B2 (en) * | 2010-09-30 | 2013-08-06 | Microsoft Corporation | Remote resources single sign on |
US8103906B1 (en) * | 2010-10-01 | 2012-01-24 | Massoud Alibakhsh | System and method for providing total real-time redundancy for a plurality of client-server systems |
US9355004B2 (en) * | 2010-10-05 | 2016-05-31 | Red Hat Israel, Ltd. | Installing monitoring utilities using universal performance monitor |
US9235442B2 (en) * | 2010-10-05 | 2016-01-12 | Accenture Global Services Limited | System and method for cloud enterprise services |
US9524224B2 (en) | 2010-10-05 | 2016-12-20 | Red Hat Israel, Ltd. | Customized monitoring of system activities |
US20120089650A1 (en) * | 2010-10-08 | 2012-04-12 | Spectra Logic Corporation | System and method for a storage system |
US8850262B2 (en) * | 2010-10-12 | 2014-09-30 | International Business Machines Corporation | Inter-processor failure detection and recovery |
US20120089978A1 (en) * | 2010-10-12 | 2012-04-12 | I O Interconnect, Ltd. | Method for managing applications of portable devices |
US20120092722A1 (en) * | 2010-10-18 | 2012-04-19 | Aventura Hq, Inc. | Managing printer feedback in a distributed printing environment |
US9021015B2 (en) | 2010-10-18 | 2015-04-28 | Code Systems Corporation | Method and system for publishing virtual applications to a web server |
US8983536B2 (en) | 2010-10-22 | 2015-03-17 | Google Technology Holdings LLC | Resource management in a multi-operating environment |
JP2012093899A (en) * | 2010-10-26 | 2012-05-17 | Hitachi Ltd | Computer system, simulation method, and program |
US9225766B2 (en) * | 2010-10-29 | 2015-12-29 | Sears Brands, L.L.C. | Systems and methods for providing smart appliances |
US8812806B2 (en) * | 2010-10-29 | 2014-08-19 | Netapp, Inc. | Method and system for non-disruptive migration |
US9209976B2 (en) * | 2010-10-29 | 2015-12-08 | Code Systems Corporation | Method and system for restricting execution of virtual applications to a managed process environment |
US8832686B2 (en) | 2010-10-29 | 2014-09-09 | Microsoft Corporation | Inherited product activation for virtual machines |
US8924964B2 (en) | 2010-11-01 | 2014-12-30 | Microsoft Corporation | Dynamic allocation and assignment of virtual environment |
US9886323B2 (en) | 2010-11-01 | 2018-02-06 | Vmware, Inc. | Graphical user interface for managing virtual machines |
US8356100B2 (en) * | 2010-11-08 | 2013-01-15 | Google Inc. | Full-duplex bi-directional communication over a remote procedure call based communications protocol, and applications thereof |
CN102457512B (en) * | 2010-11-08 | 2016-03-16 | 中标软件有限公司 | A kind of thin client server virtual method and virtual thin client server |
US8656453B2 (en) * | 2010-11-10 | 2014-02-18 | Software Ag | Security systems and/or methods for cloud computing environments |
US20120117227A1 (en) * | 2010-11-10 | 2012-05-10 | Sony Corporation | Method and apparatus for obtaining feedback from a device |
WO2012063296A1 (en) * | 2010-11-12 | 2012-05-18 | 株式会社日立製作所 | Server device, resource management method and program |
KR101697979B1 (en) * | 2010-11-23 | 2017-01-19 | 삼성전자주식회사 | Method and apparatus for syncronizing data in connected devices |
WO2012071552A2 (en) * | 2010-11-24 | 2012-05-31 | Coral Networks, Inc. | System and method for access control and identity management |
US8924560B2 (en) * | 2010-11-29 | 2014-12-30 | At&T Intellectual Property I, L.P. | Optimized game server relocation environment |
CN102487380B (en) * | 2010-12-01 | 2016-09-07 | 中兴通讯股份有限公司 | Desktop virtual terminal entrusting method and system |
US8681981B2 (en) * | 2010-12-03 | 2014-03-25 | Motorola Solutions, Inc. | Method and apparatus for transmitting voice communications related to a multimedia session |
CN102571832B (en) * | 2010-12-07 | 2016-03-02 | 财团法人资讯工业策进会 | Resource sharing system and method |
US8699499B2 (en) | 2010-12-08 | 2014-04-15 | At&T Intellectual Property I, L.P. | Methods and apparatus to provision cloud computing network elements |
TW201224754A (en) * | 2010-12-08 | 2012-06-16 | Quanta Comp Inc | Portable electronic apparatus and control method thereof |
KR101591371B1 (en) * | 2010-12-09 | 2016-02-18 | 한국전자통신연구원 | System for managing personalization information of virtual machine based on cloud computing and method therof |
US8607158B2 (en) * | 2010-12-09 | 2013-12-10 | International Business Machines Corporation | Content presentation in remote monitoring sessions for information technology systems |
US9395885B1 (en) | 2010-12-10 | 2016-07-19 | Wyse Technology L.L.C. | Methods and systems for a remote desktop session utilizing HTTP header |
US9245047B2 (en) * | 2010-12-10 | 2016-01-26 | Wyse Technology L.L.C. | Methods and systems for facilitating a remote desktop session utilizing a remote desktop client common interface |
US8949726B2 (en) | 2010-12-10 | 2015-02-03 | Wyse Technology L.L.C. | Methods and systems for conducting a remote desktop session via HTML that supports a 2D canvas and dynamic drawing |
US8601133B1 (en) | 2010-12-14 | 2013-12-03 | Juniper Networks, Inc. | Highly scalable data center architecture with address resolution protocol (ARP)-free servers |
US8903705B2 (en) * | 2010-12-17 | 2014-12-02 | Microsoft Corporation | Application compatibility shims for minimal client computers |
US8990362B2 (en) * | 2010-12-17 | 2015-03-24 | Microsoft Technology Licensing, Llc | Virtual machine provisioning engine |
US9288230B2 (en) | 2010-12-20 | 2016-03-15 | Qualcomm Incorporated | Methods and apparatus for providing or receiving data connectivity |
US8473584B2 (en) * | 2010-12-20 | 2013-06-25 | Sap Ag | Revocable indication of session termination |
FR2969440B1 (en) * | 2010-12-21 | 2013-08-16 | Oberthur Technologies | ELECTRONIC DEVICE AND COMMUNICATION METHOD |
CN102685196A (en) * | 2010-12-22 | 2012-09-19 | 北京华夏未来信息技术有限公司 | Method and virtual application system for improving user experience in virtual application environment |
US8806360B2 (en) | 2010-12-22 | 2014-08-12 | International Business Machines Corporation | Computing resource management in information technology systems |
US20120166619A1 (en) * | 2010-12-23 | 2012-06-28 | Microsoft Corporation | Licensing and metering of virtualized applications |
US8689123B2 (en) | 2010-12-23 | 2014-04-01 | Microsoft Corporation | Application reporting in an application-selectable user interface |
US8931037B2 (en) * | 2010-12-27 | 2015-01-06 | Microsoft Corporation | Policy-based access to virtualized applications |
US9094379B1 (en) | 2010-12-29 | 2015-07-28 | Amazon Technologies, Inc. | Transparent client-side cryptography for network applications |
US8607067B1 (en) * | 2011-03-01 | 2013-12-10 | Amazon Technologies, Inc. | Techniques for attesting to information |
US8862870B2 (en) | 2010-12-29 | 2014-10-14 | Citrix Systems, Inc. | Systems and methods for multi-level tagging of encrypted items for additional security and efficient encrypted item determination |
US8583911B1 (en) | 2010-12-29 | 2013-11-12 | Amazon Technologies, Inc. | Network application encryption with server-side key management |
US8538020B1 (en) * | 2010-12-29 | 2013-09-17 | Amazon Technologies, Inc. | Hybrid client-server cryptography for network applications |
US9058323B2 (en) | 2010-12-30 | 2015-06-16 | Ss8 Networks, Inc. | System for accessing a set of communication and transaction data associated with a user of interest sourced from multiple different network carriers and for enabling multiple analysts to independently and confidentially access the set of communication and transaction data |
US8938534B2 (en) | 2010-12-30 | 2015-01-20 | Ss8 Networks, Inc. | Automatic provisioning of new users of interest for capture on a communication network |
US9009217B1 (en) * | 2011-01-06 | 2015-04-14 | Amazon Technologies, Inc. | Interaction with a virtual network |
US8955110B1 (en) | 2011-01-14 | 2015-02-10 | Robert W. Twitchell, Jr. | IP jamming systems utilizing virtual dispersive networking |
US8429191B2 (en) | 2011-01-14 | 2013-04-23 | International Business Machines Corporation | Domain based isolation of objects |
US9075993B2 (en) | 2011-01-24 | 2015-07-07 | Mcafee, Inc. | System and method for selectively grouping and managing program files |
US8725997B2 (en) | 2011-01-27 | 2014-05-13 | Wyse Technology L.L.C. | Self-provisioning of configuration for a specific-purpose client having a windows-based embedded image with a write-filter |
US8495183B2 (en) | 2011-01-27 | 2013-07-23 | Wyse Technology Inc. | State-based provisioning of a client having a windows-based embedded image |
US8700888B2 (en) | 2011-01-27 | 2014-04-15 | Wyse Technology L.L.C. | Specific-purpose client with configuration history for self-provisioning of configuration and obviating reinstallation of embedded image |
US8751778B2 (en) | 2011-01-27 | 2014-06-10 | Wyse Technology L.L.C. | Generating, validating and applying custom extensible markup language (XML) configuration on a client having a windows-based embedded image |
US8825990B2 (en) | 2011-01-27 | 2014-09-02 | Wyse Technology L.L.C. | Configuring and customizing a specific-purpose client having a windows-based embedded image using extensible markup language (XML) configuration |
US8560818B2 (en) * | 2011-01-27 | 2013-10-15 | Wyse Technolgoy Inc. | Automatic retrieval, parsing and application of configuration for a specific-purpose client having a windows-based embedded image with a write-filter |
US9037633B2 (en) | 2011-01-27 | 2015-05-19 | Wyse Technology L.L.C. | Transferring configuration data from a public cloud server and applying onto a mobile client |
US8941659B1 (en) | 2011-01-28 | 2015-01-27 | Rescon Ltd | Medical symptoms tracking apparatus, methods and systems |
US8863232B1 (en) | 2011-02-04 | 2014-10-14 | hopTo Inc. | System for and methods of controlling user access to applications and/or programs of a computer |
US20120204235A1 (en) * | 2011-02-08 | 2012-08-09 | Joe Jaudon | Updating Resource Access Permissions in a Virtual Computing Environment |
US8549145B2 (en) * | 2011-02-08 | 2013-10-01 | Aventura Hq, Inc. | Pre-access location-based rule initiation in a virtual computing environment |
US10003672B2 (en) * | 2011-02-09 | 2018-06-19 | Cisco Technology, Inc. | Apparatus, systems and methods for deployment of interactive desktop applications on distributed infrastructures |
US9292329B2 (en) * | 2011-02-10 | 2016-03-22 | Microsoft Technology Licensing, Llc | Virtual switch interceptor |
US10067787B2 (en) | 2011-02-10 | 2018-09-04 | Architecture Technology Corporation | Configurable forensic investigative tool |
US10057298B2 (en) | 2011-02-10 | 2018-08-21 | Architecture Technology Corporation | Configurable investigative tool |
EP2487857B1 (en) * | 2011-02-10 | 2015-10-21 | Deutsche Telekom AG | Method for providing secure internet access |
US9413750B2 (en) * | 2011-02-11 | 2016-08-09 | Oracle International Corporation | Facilitating single sign-on (SSO) across multiple browser instance |
US9264435B2 (en) * | 2011-02-15 | 2016-02-16 | Boingo Wireless, Inc. | Apparatus and methods for access solutions to wireless and wired networks |
US20120210399A1 (en) * | 2011-02-16 | 2012-08-16 | Waldeck Technology, Llc | Location-enabled access control lists for real-world devices |
US9112830B2 (en) | 2011-02-23 | 2015-08-18 | Mcafee, Inc. | System and method for interlocking a host and a gateway |
US9021005B2 (en) * | 2011-03-04 | 2015-04-28 | Mformation Software Technologies Llc | System and method to provide remote device management for mobile virtualized platforms |
US8566838B2 (en) | 2011-03-11 | 2013-10-22 | Novell, Inc. | Techniques for workload coordination |
US8555276B2 (en) | 2011-03-11 | 2013-10-08 | Joyent, Inc. | Systems and methods for transparently optimizing workloads |
US9116725B1 (en) | 2011-03-15 | 2015-08-25 | Symantec Corporation | Systems and methods for using virtualization of operating-system-level components to facilitate software testing |
US8417578B1 (en) | 2011-03-17 | 2013-04-09 | Amazon Technologies, Inc. | Customizing component configurations for utility computing |
CN103430165A (en) * | 2011-03-18 | 2013-12-04 | 惠普发展公司,有限责任合伙企业 | Sharing internet capability of a mobile computing device with a client computing device using a virtual machine |
US8959569B2 (en) | 2011-03-18 | 2015-02-17 | Juniper Networks, Inc. | Security enforcement in virtualized systems |
US9473485B2 (en) | 2011-03-21 | 2016-10-18 | Blue Cedar Networks, Inc. | Secure single sign-on for a group of wrapped applications on a computing device and runtime credential sharing |
US8812868B2 (en) | 2011-03-21 | 2014-08-19 | Mocana Corporation | Secure execution of unsecured apps on a device |
US8955142B2 (en) * | 2011-03-21 | 2015-02-10 | Mocana Corporation | Secure execution of unsecured apps on a device |
US9396325B2 (en) | 2011-03-21 | 2016-07-19 | Mocana Corporation | Provisioning an app on a device and implementing a keystore |
US8769305B2 (en) * | 2011-03-21 | 2014-07-01 | Moncana Corporation | Secure execution of unsecured apps on a device |
US8542810B2 (en) * | 2011-03-21 | 2013-09-24 | Microsoft Corporation | Automatic rejoining of conferences |
US20120246740A1 (en) * | 2011-03-22 | 2012-09-27 | Brooker Marc J | Strong rights management for computing application functionality |
US8972485B1 (en) * | 2011-03-22 | 2015-03-03 | Cisco Technology, Inc. | Distributing execution of applications between a local client system and a remote virtual environment |
US8694993B1 (en) * | 2011-03-31 | 2014-04-08 | Emc Corporation | Virtualization platform for secured communications between a user device and an application server |
JP5699756B2 (en) * | 2011-03-31 | 2015-04-15 | 富士通株式会社 | Information processing apparatus and information processing apparatus control method |
CN102143230A (en) * | 2011-04-01 | 2011-08-03 | 广州杰赛科技股份有限公司 | Method for mini-station to authenticate and log in virtual machine in cloud system and login system |
US8972612B2 (en) | 2011-04-05 | 2015-03-03 | SSB Networks, Inc. | Collecting asymmetric data and proxy data on a communication network |
US9154826B2 (en) | 2011-04-06 | 2015-10-06 | Headwater Partners Ii Llc | Distributing content and service launch objects to mobile devices |
EP2697996A4 (en) * | 2011-04-12 | 2014-10-29 | Citrix Systems Inc | Server remotely executing an application using geographic location data of a mobile device |
US8838988B2 (en) | 2011-04-12 | 2014-09-16 | International Business Machines Corporation | Verification of transactional integrity |
US8892707B2 (en) * | 2011-04-13 | 2014-11-18 | Netapp, Inc. | Identification of virtual applications for backup in a cloud computing system |
EP2512106A1 (en) * | 2011-04-15 | 2012-10-17 | Vodafone IP Licensing limited | Method for managing data in M2M systems |
US8984610B2 (en) | 2011-04-18 | 2015-03-17 | Bank Of America Corporation | Secure network cloud architecture |
CN102761564B (en) | 2011-04-25 | 2015-04-22 | 阿里巴巴集团控股有限公司 | Graphic sharing method, system and terminal |
US8990824B2 (en) | 2011-04-28 | 2015-03-24 | Dell Products L.P. | System and method for automated virtual network configuration |
US20120278747A1 (en) * | 2011-04-28 | 2012-11-01 | Motorola Mobility, Inc. | Method and apparatus for user interface in a system having two operating system environments |
US8612738B2 (en) | 2011-04-28 | 2013-12-17 | Dell Products L.P. | System and method for automated network configuration |
US9354900B2 (en) | 2011-04-28 | 2016-05-31 | Google Technology Holdings LLC | Method and apparatus for presenting a window in a system having two operating system environments |
US8375439B2 (en) | 2011-04-29 | 2013-02-12 | International Business Machines Corporation | Domain aware time-based logins |
US8544069B1 (en) * | 2011-04-29 | 2013-09-24 | Intuit Inc. | Methods systems and articles of manufacture for implementing user access to remote resources |
US9524531B2 (en) | 2011-05-09 | 2016-12-20 | Microsoft Technology Licensing, Llc | Extensibility features for electronic communications |
US9237127B2 (en) * | 2011-05-12 | 2016-01-12 | Airmagnet, Inc. | Method and apparatus for dynamic host operating system firewall configuration |
US9495183B2 (en) | 2011-05-16 | 2016-11-15 | Microsoft Technology Licensing, Llc | Instruction set emulation for guest operating systems |
EP2712477B1 (en) * | 2011-05-18 | 2020-05-06 | Citrix Systems, Inc. | Systems and methods for secure handling of data |
EP2696532A4 (en) * | 2011-05-18 | 2014-03-19 | Huawei Tech Co Ltd | Method, server and system for starting application |
US8998544B1 (en) | 2011-05-20 | 2015-04-07 | Amazon Technologies, Inc. | Load balancer |
US10546118B1 (en) | 2011-05-25 | 2020-01-28 | Hewlett-Packard Development Company, L.P. | Using a profile to provide selective access to resources in performing file operations |
US10846396B1 (en) | 2011-05-25 | 2020-11-24 | Hewlett-Packard Development Company, L.P. | Downloading data in a dedicated virtual machine |
US9921860B1 (en) * | 2011-05-25 | 2018-03-20 | Bromium, Inc. | Isolation of applications within a virtual machine |
US8839245B1 (en) | 2012-06-18 | 2014-09-16 | Bromium, Inc. | Transferring files using a virtualized application |
US9843665B2 (en) * | 2011-05-27 | 2017-12-12 | Microsoft Technology Licensing, Llc | Display of immersive and desktop shells |
US10417018B2 (en) | 2011-05-27 | 2019-09-17 | Microsoft Technology Licensing, Llc | Navigation of immersive and desktop shells |
US9104307B2 (en) | 2011-05-27 | 2015-08-11 | Microsoft Technology Licensing, Llc | Multi-application environment |
US20120304283A1 (en) * | 2011-05-27 | 2012-11-29 | Microsoft Corporation | Brokered item access for isolated applications |
US9158445B2 (en) | 2011-05-27 | 2015-10-13 | Microsoft Technology Licensing, Llc | Managing an immersive interface in a multi-application immersive environment |
TW201249135A (en) * | 2011-05-30 | 2012-12-01 | Wistron Corp | Remote management method and remote management system |
CN102215230B (en) * | 2011-06-02 | 2014-04-16 | 首都师范大学 | Bus protocol-independent communication method for scalable processor architecture version 8 (SPARC V8) monitoring software |
US8713649B2 (en) | 2011-06-03 | 2014-04-29 | Oracle International Corporation | System and method for providing restrictions on the location of peer subnet manager (SM) instances in an infiniband (IB) network |
US9058716B2 (en) | 2011-06-06 | 2015-06-16 | Bally Gaming, Inc. | Remote game play in a wireless gaming environment |
US8839275B1 (en) | 2011-06-06 | 2014-09-16 | Proximal Data, Inc. | Method for intercepting input/output requests and responses |
US9405499B2 (en) | 2011-06-07 | 2016-08-02 | Clearcube Technology, Inc. | Zero client device with integrated wireless capability |
US8706869B2 (en) * | 2011-06-14 | 2014-04-22 | International Business Machines Corporation | Distributed cloud placement software |
US8656013B2 (en) * | 2011-06-14 | 2014-02-18 | Sony Computer Entertainment America Llc | Real-time data monitoring based on data push |
US9191454B2 (en) * | 2011-06-27 | 2015-11-17 | Microsoft Technology Licensing, Llc | Host enabled management channel |
US10042657B1 (en) | 2011-06-30 | 2018-08-07 | Emc Corporation | Provisioning virtual applciations from virtual application templates |
US9323820B1 (en) | 2011-06-30 | 2016-04-26 | Emc Corporation | Virtual datacenter redundancy |
US9282142B1 (en) | 2011-06-30 | 2016-03-08 | Emc Corporation | Transferring virtual datacenters between hosting locations while maintaining communication with a gateway server following the transfer |
US10264058B1 (en) | 2011-06-30 | 2019-04-16 | Emc Corporation | Defining virtual application templates |
US8769058B1 (en) * | 2011-06-30 | 2014-07-01 | Emc Corporation | Provisioning interfacing virtual machines to separate virtual datacenters |
US9058336B1 (en) | 2011-06-30 | 2015-06-16 | Emc Corporation | Managing virtual datacenters with tool that maintains communications with a virtual data center that is moved |
KR101507919B1 (en) * | 2011-07-01 | 2015-04-07 | 한국전자통신연구원 | Method and apparatus for virtual desktop service |
US9258703B2 (en) * | 2011-07-05 | 2016-02-09 | Texas Instruments Incorporated | Method, system and computer program product for wirelessly connecting a device to a network |
EP2732604B1 (en) | 2011-07-11 | 2016-01-06 | Oracle International Corporation | System and method for using at least one of a multicast group and a packet process proxy to support a flooding mechanism in a middleware machine environment |
US10983747B2 (en) | 2011-07-15 | 2021-04-20 | Vmware, Inc. | Remote desktop mirroring |
US10976981B2 (en) | 2011-07-15 | 2021-04-13 | Vmware, Inc. | Remote desktop exporting |
CN103827823A (en) | 2011-07-29 | 2014-05-28 | 惠普发展公司,有限责任合伙企业 | Migrating virtual machines |
US20130042312A1 (en) * | 2011-08-09 | 2013-02-14 | Mobileframe Llc | Authentication in a smart thin client server |
US9049174B2 (en) | 2011-08-09 | 2015-06-02 | Mobileframe, Llc | Maintaining sessions in a smart thin client server |
US9053444B2 (en) | 2011-08-09 | 2015-06-09 | Mobileframe, Llc | Deploying applications in a smart thin client server |
US8655955B2 (en) | 2011-08-18 | 2014-02-18 | International Business Machines Corporation | Stream processing using a client-server architecture |
US9158561B2 (en) | 2011-08-18 | 2015-10-13 | Vmware, Inc. | Systems and methods for modifying an operating system for a virtual machine |
JP5304972B1 (en) * | 2011-08-30 | 2013-10-02 | 日本電気株式会社 | INFORMATION PROCESSING APPARATUS, INFORMATION PROCESSING METHOD, AND PROGRAM |
US20130055255A1 (en) * | 2011-08-31 | 2013-02-28 | Rovi Technologies Corporation | Systems and methods for common application platforms utilizing shared services |
US8799647B2 (en) | 2011-08-31 | 2014-08-05 | Sonic Ip, Inc. | Systems and methods for application identification |
US8898459B2 (en) | 2011-08-31 | 2014-11-25 | At&T Intellectual Property I, L.P. | Policy configuration for mobile device applications |
US8918841B2 (en) * | 2011-08-31 | 2014-12-23 | At&T Intellectual Property I, L.P. | Hardware interface access control for mobile applications |
US20130057587A1 (en) | 2011-09-01 | 2013-03-07 | Microsoft Corporation | Arranging tiles |
US8745157B2 (en) * | 2011-09-02 | 2014-06-03 | Trading Technologies International, Inc. | Order feed message stream integrity |
US8924507B2 (en) * | 2011-09-02 | 2014-12-30 | Microsoft Corporation | Cross-frame progressive spoiling support for reduced network bandwidth usage |
US10031636B2 (en) | 2011-09-08 | 2018-07-24 | Microsoft Technology Licensing, Llc | Remoting desktop displays using move regions |
US9965151B2 (en) | 2011-09-09 | 2018-05-08 | Cloudon Ltd. | Systems and methods for graphical user interface interaction with cloud-based applications |
US10063430B2 (en) | 2011-09-09 | 2018-08-28 | Cloudon Ltd. | Systems and methods for workspace interaction with cloud-based applications |
US9606629B2 (en) | 2011-09-09 | 2017-03-28 | Cloudon Ltd. | Systems and methods for gesture interaction with cloud-based applications |
US8959349B2 (en) | 2011-09-09 | 2015-02-17 | Lenovo (Singapore) Pte. Ltd. | Method and apparatus for key sharing over remote desktop protocol |
US9886189B2 (en) | 2011-09-09 | 2018-02-06 | Cloudon Ltd. | Systems and methods for object-based interaction with cloud-based applications |
US9594881B2 (en) | 2011-09-09 | 2017-03-14 | Mcafee, Inc. | System and method for passive threat detection using virtual memory inspection |
US9146670B2 (en) | 2011-09-10 | 2015-09-29 | Microsoft Technology Licensing, Llc | Progressively indicating new content in an application-selectable user interface |
US8843646B2 (en) | 2011-09-12 | 2014-09-23 | Microsoft Corporation | Multi-desktop interaction using nested remote desktop sessions |
US8898672B2 (en) * | 2011-09-14 | 2014-11-25 | Alcatel Lucent | Method and apparatus for providing isolated virtual space |
US9146785B2 (en) * | 2011-09-14 | 2015-09-29 | Microsoft Technology Licensing, Llc | Application acceleration in a virtualized environment |
US20130074064A1 (en) * | 2011-09-15 | 2013-03-21 | Microsoft Corporation | Automated infrastructure provisioning |
US8438635B2 (en) | 2011-09-15 | 2013-05-07 | Microsoft Corporation | Single sign-on for remote desktops |
US8798086B2 (en) * | 2011-09-23 | 2014-08-05 | Alcatel Lucent | Time-preserved transmissions in asynchronous virtual machine replication |
GB2494920B8 (en) * | 2011-09-26 | 2014-02-19 | Validsoft Uk Ltd | Network connection method |
US8842057B2 (en) | 2011-09-27 | 2014-09-23 | Z124 | Detail on triggers: transitional states |
US8930529B1 (en) | 2011-09-27 | 2015-01-06 | Palo Alto Networks, Inc. | Policy enforcement with dynamic address object |
US9537891B1 (en) | 2011-09-27 | 2017-01-03 | Palo Alto Networks, Inc. | Policy enforcement based on dynamically attribute-based matched network objects |
US9047109B1 (en) * | 2012-06-20 | 2015-06-02 | Palo Alto Networks, Inc. | Policy enforcement in virtualized environment |
US9886312B2 (en) * | 2011-09-28 | 2018-02-06 | Microsoft Technology Licensing, Llc | Dynamic provisioning of virtual video memory based on virtual video controller configuration |
US9037511B2 (en) * | 2011-09-29 | 2015-05-19 | Amazon Technologies, Inc. | Implementation of secure communications in a support system |
US8806570B2 (en) | 2011-10-11 | 2014-08-12 | Citrix Systems, Inc. | Policy-based application management |
US9215225B2 (en) | 2013-03-29 | 2015-12-15 | Citrix Systems, Inc. | Mobile device locking with context |
US8799994B2 (en) | 2011-10-11 | 2014-08-05 | Citrix Systems, Inc. | Policy-based application management |
US9286471B2 (en) | 2011-10-11 | 2016-03-15 | Citrix Systems, Inc. | Rules based detection and correction of problems on mobile devices of enterprise users |
US20140032733A1 (en) | 2011-10-11 | 2014-01-30 | Citrix Systems, Inc. | Policy-Based Application Management |
US8694738B2 (en) | 2011-10-11 | 2014-04-08 | Mcafee, Inc. | System and method for critical address space protection in a hypervisor environment |
US9280377B2 (en) | 2013-03-29 | 2016-03-08 | Citrix Systems, Inc. | Application with multiple operation modes |
US8973144B2 (en) | 2011-10-13 | 2015-03-03 | Mcafee, Inc. | System and method for kernel rootkit protection in a hypervisor environment |
US9069586B2 (en) | 2011-10-13 | 2015-06-30 | Mcafee, Inc. | System and method for kernel rootkit protection in a hypervisor environment |
CA2850268A1 (en) * | 2011-10-14 | 2013-04-18 | Open Text S.A. | System and method for secure content sharing and synchronization |
US20130093776A1 (en) * | 2011-10-14 | 2013-04-18 | Microsoft Corporation | Delivering a Single End User Experience to a Client from Multiple Servers |
US8726359B2 (en) | 2011-10-14 | 2014-05-13 | Sony Corporation | Method and system for content distribution management |
US8800024B2 (en) | 2011-10-17 | 2014-08-05 | Mcafee, Inc. | System and method for host-initiated firewall discovery in a network environment |
US8713668B2 (en) | 2011-10-17 | 2014-04-29 | Mcafee, Inc. | System and method for redirected firewall discovery in a network environment |
US8930492B2 (en) | 2011-10-17 | 2015-01-06 | Blackberry Limited | Method and electronic device for content sharing |
US9189753B2 (en) | 2011-10-24 | 2015-11-17 | Blackberry Limited | Multiplatform management system and method for mobile devices |
US9529995B2 (en) | 2011-11-08 | 2016-12-27 | Varmour Networks, Inc. | Auto discovery of virtual machines |
US8832374B1 (en) * | 2011-11-14 | 2014-09-09 | Union Supply Company, Inc. | Providing electronic content to residents of controlled-environment facilities |
US9313100B1 (en) | 2011-11-14 | 2016-04-12 | Amazon Technologies, Inc. | Remote browsing session management |
US8966029B2 (en) | 2011-11-15 | 2015-02-24 | Nicira, Inc. | Network control system for configuring middleboxes |
US20130125009A1 (en) * | 2011-11-16 | 2013-05-16 | International Business Machines Corporation | Remote desktop localized content sharing |
US9529829B1 (en) * | 2011-11-18 | 2016-12-27 | Veritas Technologies Llc | System and method to facilitate the use of processed data from a storage system to perform tasks |
TWI478063B (en) * | 2011-11-21 | 2015-03-21 | Inst Information Industry | System and method for providing application program utilizing virtual machine and computer readable storage medium storing the method |
US8893261B2 (en) * | 2011-11-22 | 2014-11-18 | Vmware, Inc. | Method and system for VPN isolation using network namespaces |
CN103139052A (en) * | 2011-11-28 | 2013-06-05 | 中国北车股份有限公司大连电力牵引研发中心 | Controller area network (CAN)-Ethernet communication gateway and data processing method and system |
US9612724B2 (en) * | 2011-11-29 | 2017-04-04 | Citrix Systems, Inc. | Integrating native user interface components on a mobile device |
CA2873923A1 (en) * | 2011-11-29 | 2013-06-06 | Bruce Ross | Layered security for age verification and transaction authorization |
WO2013078548A1 (en) * | 2011-12-02 | 2013-06-06 | Groupe Iweb Inc. | System and method for automatically configuring and updating a virtual server |
US20130152194A1 (en) * | 2011-12-07 | 2013-06-13 | Computer Associates Think, Inc. | System, method and software for controlling access to virtual machine consoles |
US8584254B2 (en) * | 2011-12-08 | 2013-11-12 | Microsoft Corporation | Data access reporting platform for secure active monitoring |
US9164544B2 (en) | 2011-12-09 | 2015-10-20 | Z124 | Unified desktop: laptop dock, hardware configuration |
US20130151679A1 (en) * | 2011-12-09 | 2013-06-13 | Kubisys Inc. | Hybrid virtual computing environments |
US10282221B2 (en) | 2011-12-09 | 2019-05-07 | International Business Machines Corporation | Controlling usage of virtual disks before their attachment to virtual machines |
US8977735B2 (en) | 2011-12-12 | 2015-03-10 | Rackspace Us, Inc. | Providing a database as a service in a multi-tenant environment |
US9389933B2 (en) | 2011-12-12 | 2016-07-12 | Microsoft Technology Licensing, Llc | Facilitating system service request interactions for hardware-protected applications |
US9413538B2 (en) | 2011-12-12 | 2016-08-09 | Microsoft Technology Licensing, Llc | Cryptographic certification of secure hosted execution environments |
US20130148493A1 (en) * | 2011-12-13 | 2013-06-13 | Avaya Inc. | Providing an Alternative Media Channel in a Virtual Media System |
US10103875B1 (en) * | 2011-12-20 | 2018-10-16 | Amazon Technologies, Inc. | Authentication through a secret holding proxy |
US9288524B2 (en) | 2011-12-21 | 2016-03-15 | Sony Corporation | Using TV over VPN to present remote device application graphics |
US10165036B1 (en) * | 2011-12-21 | 2018-12-25 | Amazon Technologies, Inc. | Network resource remote process execution |
WO2013091556A1 (en) * | 2011-12-22 | 2013-06-27 | 腾讯科技(深圳)有限公司 | Browser based application program extension method and device |
US9330188B1 (en) | 2011-12-22 | 2016-05-03 | Amazon Technologies, Inc. | Shared browsing sessions |
US8938712B2 (en) * | 2011-12-22 | 2015-01-20 | International Business Machines Corporation | Cross-platform virtual machine and method |
US8782224B2 (en) | 2011-12-29 | 2014-07-15 | Joyent, Inc. | Systems and methods for time-based dynamic allocation of resource management |
US8555339B2 (en) * | 2012-01-06 | 2013-10-08 | International Business Machines Corporation | Identifying guests in web meetings |
US20130185772A1 (en) * | 2012-01-12 | 2013-07-18 | Aventura Hq, Inc. | Dynamically updating a session based on location data from an authentication device |
US8974305B2 (en) | 2012-01-18 | 2015-03-10 | Bally Gaming, Inc. | Network gaming architecture, gaming systems, and related methods |
US9120007B2 (en) | 2012-01-18 | 2015-09-01 | Bally Gaming, Inc. | Network gaming architecture, gaming systems, and related methods |
US10257315B2 (en) * | 2012-01-23 | 2019-04-09 | Facebook, Inc. | Secure proxied data retrieval from third-party services |
US8725650B2 (en) * | 2012-01-26 | 2014-05-13 | Microsoft Corporation | Document template licensing |
US9336321B1 (en) | 2012-01-26 | 2016-05-10 | Amazon Technologies, Inc. | Remote browsing and searching |
US8839087B1 (en) | 2012-01-26 | 2014-09-16 | Amazon Technologies, Inc. | Remote browsing and searching |
US9396041B2 (en) * | 2012-02-01 | 2016-07-19 | Google Technology Holdings LLC | Optimization of resource usage in a multi-environment computing system |
US9852010B2 (en) | 2012-02-03 | 2017-12-26 | Microsoft Technology Licensing, Llc | Decoupling partitioning for scalability |
US10860384B2 (en) * | 2012-02-03 | 2020-12-08 | Microsoft Technology Licensing, Llc | Managing partitions in a scalable environment |
JP5850324B2 (en) * | 2012-02-05 | 2016-02-03 | 株式会社応用電子 | Thin client system |
US9832036B2 (en) | 2012-02-09 | 2017-11-28 | Keystone Integrations Llc | Dual-mode vehicular controller |
US8712631B2 (en) * | 2012-02-09 | 2014-04-29 | Nordic Capital Partners, LLC | System and method for access of user accounts on remote servers |
US9110729B2 (en) * | 2012-02-17 | 2015-08-18 | International Business Machines Corporation | Host system admission control |
US9015809B2 (en) | 2012-02-20 | 2015-04-21 | Blackberry Limited | Establishing connectivity between an enterprise security perimeter of a device and an enterprise |
US9137210B1 (en) * | 2012-02-21 | 2015-09-15 | Amazon Technologies, Inc. | Remote browsing session management |
US9721091B2 (en) * | 2012-02-28 | 2017-08-01 | Red Hat Israel, Ltd. | Guest-driven host execution |
US8844032B2 (en) * | 2012-03-02 | 2014-09-23 | Sri International | Method and system for application-based policy monitoring and enforcement on a mobile device |
JP5978659B2 (en) * | 2012-03-06 | 2016-08-24 | 日本電気株式会社 | Thin client system, management server, business environment setting method, and business environment setting program |
JP5503678B2 (en) * | 2012-03-07 | 2014-05-28 | 株式会社Nttドコモ | Host providing system and host providing method |
US8745722B2 (en) * | 2012-03-09 | 2014-06-03 | Wapice Oy | Managing remote network addresses in communications |
US9245108B1 (en) | 2012-03-13 | 2016-01-26 | Bromium, Inc. | Dynamic adjustment of the file format to identify untrusted files |
JP5606477B2 (en) * | 2012-03-13 | 2014-10-15 | 株式会社東芝 | Client management system |
US8667594B1 (en) | 2012-03-13 | 2014-03-04 | Bromium, Inc. | Securing file trust with file format conversions |
US8824750B2 (en) * | 2012-03-19 | 2014-09-02 | Next Level Security Systems, Inc. | Distributive facial matching and notification system |
US20130254762A1 (en) * | 2012-03-21 | 2013-09-26 | Verizon Patent And Licensing Inc. | Providing redundant virtual machines in a cloud computing environment |
JP6095091B2 (en) * | 2012-03-24 | 2017-03-15 | 日本電気株式会社 | Information processing system, information processing method, information processing apparatus, control method thereof, and control program |
CN103368981B (en) * | 2012-03-26 | 2016-08-03 | 英顺源(重庆)科技有限公司 | There is individual-layer data and process virtual desktop management system and the method for framework |
US8739257B1 (en) * | 2012-03-28 | 2014-05-27 | Emc Corporation | Managing authentication of virtual clients |
US10528994B2 (en) * | 2012-03-29 | 2020-01-07 | International Business Machines Corporation | Allocation of application licenses within cloud or infrastructure |
US8990520B1 (en) * | 2012-03-30 | 2015-03-24 | Emc Corporation | Global memory as non-volatile random access memory for guest operating systems |
WO2013143121A1 (en) | 2012-03-30 | 2013-10-03 | Intel Corporation | Accessing a device on a remote machine |
US8739272B1 (en) | 2012-04-02 | 2014-05-27 | Mcafee, Inc. | System and method for interlocking a host and a gateway |
US8712407B1 (en) | 2012-04-05 | 2014-04-29 | Sprint Communications Company L.P. | Multiple secure elements in mobile electronic device with near field communication capability |
US9129124B2 (en) * | 2012-04-12 | 2015-09-08 | Hewlett-Packard Development Company, L.P. | Dynamic provisioning of virtual systems |
US9716802B2 (en) | 2012-04-12 | 2017-07-25 | Hewlett-Packard Development Company, L.P. | Content model for a printer interface |
US9462081B2 (en) * | 2012-04-17 | 2016-10-04 | Igt | Cloud based virtual environment validation |
US20130275968A1 (en) * | 2012-04-17 | 2013-10-17 | Petio Petev | Application management methods and systems |
US9053603B2 (en) | 2012-04-17 | 2015-06-09 | Igt | Cloud based virtual environment authentication |
US20130282869A1 (en) * | 2012-04-24 | 2013-10-24 | Nokia Corporation | Method, apparatus, and computer program product for scheduling file uploads |
US10152409B2 (en) | 2012-04-30 | 2018-12-11 | Vmware, Inc. | Hybrid in-heap out-of-heap ballooning for java virtual machines |
US9852054B2 (en) | 2012-04-30 | 2017-12-26 | Vmware, Inc. | Elastic caching for Java virtual machines |
US9210162B2 (en) | 2012-05-02 | 2015-12-08 | Microsoft Technology Licensing, Llc | Certificate based connection to cloud virtual machine |
US9417753B2 (en) | 2012-05-02 | 2016-08-16 | Google Technology Holdings LLC | Method and apparatus for providing contextual information between operating system environments |
US9436220B2 (en) | 2012-05-04 | 2016-09-06 | Jpmorgan Chase Bank, N.A. | System and method for mobile device docking station |
US9442526B2 (en) | 2012-05-04 | 2016-09-13 | JPMorgan Chase, Bank, N.A. | System and method for mobile device docking station |
US9529878B2 (en) | 2012-05-10 | 2016-12-27 | Oracle International Corporation | System and method for supporting subnet manager (SM) master negotiation in a network environment |
US9027102B2 (en) | 2012-05-11 | 2015-05-05 | Sprint Communications Company L.P. | Web server bypass of backend process on near field communications and secure element chips |
US9535749B2 (en) * | 2012-05-11 | 2017-01-03 | Infosys Limited | Methods for managing work load bursts and devices thereof |
US10936591B2 (en) | 2012-05-15 | 2021-03-02 | Microsoft Technology Licensing, Llc | Idempotent command execution |
US9342325B2 (en) | 2012-05-17 | 2016-05-17 | Google Technology Holdings LLC | Synchronizing launch-configuration information between first and second application environments that are operable on a multi-modal device |
US20130311692A1 (en) | 2012-05-21 | 2013-11-21 | Qualcomm Incorporated | Apparatus and method for direct pairing in a wireless docking system |
US9419848B1 (en) | 2012-05-25 | 2016-08-16 | hopTo Inc. | System for and method of providing a document sharing service in combination with remote access to document applications |
US8713658B1 (en) | 2012-05-25 | 2014-04-29 | Graphon Corporation | System for and method of providing single sign-on (SSO) capability in an application publishing environment |
US8862181B1 (en) | 2012-05-29 | 2014-10-14 | Sprint Communications Company L.P. | Electronic purchase transaction trust infrastructure |
US10169000B2 (en) | 2012-05-30 | 2019-01-01 | Red Hat Israel, Ltd. | Provisioning composite applications using secure parameter access |
US9311119B2 (en) * | 2012-05-30 | 2016-04-12 | Red Hat, Inc. | Reconfiguring virtual machines |
US9990217B2 (en) * | 2012-05-31 | 2018-06-05 | Red Hat, Inc. | Hypervisor printer emulation for virtual machines |
US20130326063A1 (en) * | 2012-05-31 | 2013-12-05 | Lloyd Leon Burch | Techniques for workload discovery and organization |
US9021566B1 (en) * | 2012-05-31 | 2015-04-28 | Starnet Communications Corporation | Apparatus and method to securely connect to and manage X11 applications on a remote system through an HTTP client |
US9015203B2 (en) | 2012-05-31 | 2015-04-21 | Vmware, Inc. | Balloon object feedback for Java Virtual Machines |
US8561142B1 (en) * | 2012-06-01 | 2013-10-15 | Symantec Corporation | Clustered device access control based on physical and temporal proximity to the user |
US8966093B2 (en) * | 2012-06-04 | 2015-02-24 | Cisco Technology, Inc. | Seamless hand-off of combined unified communications and virtual desktop infrastructure sessions |
US10075471B2 (en) | 2012-06-07 | 2018-09-11 | Amazon Technologies, Inc. | Data loss prevention techniques |
US10084818B1 (en) | 2012-06-07 | 2018-09-25 | Amazon Technologies, Inc. | Flexibly configurable data modification services |
US9286491B2 (en) | 2012-06-07 | 2016-03-15 | Amazon Technologies, Inc. | Virtual service provider zones |
CN102750178B (en) | 2012-06-08 | 2015-04-29 | 华为技术有限公司 | Virtualization management method of communication equipment hardware resources, and device related to method |
US9805197B2 (en) * | 2012-06-11 | 2017-10-31 | Ent. Services Development Corporation Lp | Secure host operating system running a virtual guest operating system |
US9940228B2 (en) | 2012-06-14 | 2018-04-10 | Vmware, Inc. | Proactive memory reclamation for java virtual machines |
US9438466B1 (en) * | 2012-06-15 | 2016-09-06 | Juniper Networks, Inc. | Migrating virtual machines between oversubscribed and undersubscribed compute devices |
US9442859B1 (en) | 2012-06-17 | 2016-09-13 | Samsung Electronics Co., Ltd. | Method for asynchronous population of data caches used with mass storage devices |
US9734131B1 (en) | 2012-06-18 | 2017-08-15 | Bromium, Inc. | Synchronizing history data across a virtualized web browser |
US11023088B2 (en) | 2012-06-18 | 2021-06-01 | Hewlett-Packard Development Company, L.P. | Composing the display of a virtualized web browser |
US9727534B1 (en) | 2012-06-18 | 2017-08-08 | Bromium, Inc. | Synchronizing cookie data using a virtualized browser |
US10095662B1 (en) | 2012-06-18 | 2018-10-09 | Bromium, Inc. | Synchronizing resources of a virtualized browser |
US9201850B1 (en) | 2012-06-18 | 2015-12-01 | Bromium, Inc. | Composing the display of a virtualized web browser |
US9384026B1 (en) | 2012-06-18 | 2016-07-05 | Bromium, Inc. | Sharing and injecting cookies into virtual machines for retrieving requested web pages |
US9239868B2 (en) | 2012-06-19 | 2016-01-19 | Microsoft Technology Licensing, Llc | Virtual session management and reestablishment |
US9183031B2 (en) | 2012-06-19 | 2015-11-10 | Bank Of America Corporation | Provisioning of a virtual machine by using a secured zone of a cloud environment |
US9104552B1 (en) | 2012-06-23 | 2015-08-11 | Samsung Electronics Co., Ltd. | Method for the use of shadow ghost lists to prevent excessive wear on FLASH based cache devices |
US9282898B2 (en) | 2012-06-25 | 2016-03-15 | Sprint Communications Company L.P. | End-to-end trusted communications infrastructure |
TWI470550B (en) | 2012-06-26 | 2015-01-21 | Wistron Corp | Communication method of virtual machines and server-end system |
US9842001B2 (en) * | 2012-06-27 | 2017-12-12 | International Business Machines Corporation | System level acceleration server |
US9819694B2 (en) * | 2012-06-27 | 2017-11-14 | Qatar Foundation | Arrangement configured to migrate a virtual machine in the event of an attack |
US9066230B1 (en) | 2012-06-27 | 2015-06-23 | Sprint Communications Company L.P. | Trusted policy and charging enforcement function |
US9436493B1 (en) * | 2012-06-28 | 2016-09-06 | Amazon Technologies, Inc. | Distributed computing environment software configuration |
US9626450B2 (en) | 2012-06-29 | 2017-04-18 | Dell Products L.P. | Flash redirection with browser calls caching |
US9354764B2 (en) * | 2012-06-29 | 2016-05-31 | Dell Products L.P. | Playback of flash content at a client by redirecting execution of a script by a flash redirection plugin at a server to a flash redirection browser at the client |
US8997094B2 (en) * | 2012-06-29 | 2015-03-31 | Pulse Secure, Llc | Migrating virtual machines between computing devices |
US9047463B2 (en) * | 2012-06-29 | 2015-06-02 | Sri International | Method and system for protecting data flow at a mobile device |
US9489471B2 (en) | 2012-06-29 | 2016-11-08 | Dell Products L.P. | Flash redirection with caching |
US8649770B1 (en) | 2012-07-02 | 2014-02-11 | Sprint Communications Company, L.P. | Extended trusted security zone radio modem |
US10061620B2 (en) * | 2012-07-02 | 2018-08-28 | Paypal, Inc. | System and method for clustering of mobile devices and applications |
US9392537B2 (en) * | 2012-07-04 | 2016-07-12 | Softbank Corp. | Terminal and connection method for same |
FI125393B (en) * | 2012-07-17 | 2015-09-30 | Arm Finland Oy | A method, apparatus and system for use in a web service |
US10469506B2 (en) * | 2012-07-19 | 2019-11-05 | Tecore, Inc. | Systems and methods for communication control in a restricted environment |
US8667607B2 (en) | 2012-07-24 | 2014-03-04 | Sprint Communications Company L.P. | Trusted security zone access to peripheral devices |
US9513950B2 (en) | 2012-07-25 | 2016-12-06 | Vmware, Inc. | Dynamic resource configuration based on context |
US8863252B1 (en) | 2012-07-25 | 2014-10-14 | Sprint Communications Company L.P. | Trusted access to third party applications systems and methods |
US9003037B2 (en) * | 2012-07-25 | 2015-04-07 | Vmware, Inc. | Dynamic allocation of physical computing resources amongst virtual machines |
US9251194B2 (en) | 2012-07-26 | 2016-02-02 | Microsoft Technology Licensing, Llc | Automatic data request recovery after session failure |
US8898109B2 (en) | 2012-07-27 | 2014-11-25 | Microsoft Corporation | Automatic transaction retry after session failure |
US8917826B2 (en) | 2012-07-31 | 2014-12-23 | International Business Machines Corporation | Detecting man-in-the-middle attacks in electronic transactions using prompts |
EP2696303B1 (en) * | 2012-08-03 | 2017-05-10 | Alcatel Lucent | Mandatory access control (MAC) in virtual machines |
CN103581265B (en) * | 2012-08-07 | 2017-08-29 | 深圳市傲冠软件股份有限公司 | remote access method and system |
US9032506B2 (en) * | 2012-08-09 | 2015-05-12 | Cisco Technology, Inc. | Multiple application containerization in a single container |
US8966462B2 (en) | 2012-08-10 | 2015-02-24 | Concurix Corporation | Memory management parameters derived from system modeling |
US9183412B2 (en) * | 2012-08-10 | 2015-11-10 | Sprint Communications Company L.P. | Systems and methods for provisioning and using multiple trusted security zones on an electronic device |
US9043788B2 (en) | 2012-08-10 | 2015-05-26 | Concurix Corporation | Experiment manager for manycore systems |
US20130080760A1 (en) * | 2012-08-10 | 2013-03-28 | Concurix Corporation | Execution Environment with Feedback Loop |
US8935689B2 (en) * | 2012-08-13 | 2015-01-13 | International Business Machines Corporation | Concurrent embedded application update and migration |
US9373182B2 (en) * | 2012-08-17 | 2016-06-21 | Intel Corporation | Memory sharing via a unified memory architecture |
US8656482B1 (en) | 2012-08-20 | 2014-02-18 | Bitdefender IPR Management Ltd. | Secure communication using a trusted virtual machine |
US10044522B1 (en) | 2012-08-21 | 2018-08-07 | Amazon Technologies Inc. | Tree-oriented configuration management service |
US9215180B1 (en) | 2012-08-25 | 2015-12-15 | Sprint Communications Company L.P. | File retrieval in real-time brokering of digital content |
US9015068B1 (en) | 2012-08-25 | 2015-04-21 | Sprint Communications Company L.P. | Framework for real-time brokering of digital content delivery |
US8954588B1 (en) | 2012-08-25 | 2015-02-10 | Sprint Communications Company L.P. | Reservations in real-time brokering of digital content delivery |
US9203905B1 (en) * | 2012-08-27 | 2015-12-01 | Google Inc. | Sessionization of visitor activity |
US9621667B2 (en) * | 2012-08-27 | 2017-04-11 | Adobe Systems Incorporated | Streaming media with a server identified at runtime |
US9170845B2 (en) * | 2012-08-28 | 2015-10-27 | Vce Company, Llc | Deployed application factory reset |
US8984186B2 (en) * | 2012-08-29 | 2015-03-17 | Google Inc. | Augmenting capabilities of a host device |
US9043789B2 (en) * | 2012-09-05 | 2015-05-26 | Red Hat Israel, Ltd. | Managing safe removal of a passthrough device in a virtualization system |
US9697093B2 (en) | 2012-09-05 | 2017-07-04 | Veritas Technologies Llc | Techniques for recovering a virtual machine |
US8752140B1 (en) | 2012-09-11 | 2014-06-10 | Sprint Communications Company L.P. | System and methods for trusted internet domain networking |
CN103685399B (en) * | 2012-09-17 | 2018-03-23 | 腾讯科技(深圳)有限公司 | A kind of methods, devices and systems for logging in class Unix virtual containers |
CN103679060B (en) * | 2012-09-19 | 2018-03-27 | 腾讯科技(深圳)有限公司 | Encryption method and encryption device |
US9213515B2 (en) * | 2012-09-24 | 2015-12-15 | At&T Intellectual Property I, L.P. | On-demand multi-screen computing |
US9350762B2 (en) | 2012-09-25 | 2016-05-24 | Ss8 Networks, Inc. | Intelligent feedback loop to iteratively reduce incoming network data for analysis |
US8924972B2 (en) * | 2012-09-27 | 2014-12-30 | Oracle International Corporation | Method and system for logging into a virtual environment executing on a host |
JP6066647B2 (en) * | 2012-09-27 | 2017-01-25 | キヤノン株式会社 | Device apparatus, control method thereof, and program thereof |
US20140096010A1 (en) * | 2012-09-28 | 2014-04-03 | Interactive Memories, Inc. | Methods for Motion Simulation of Digital Assets Presented in an Electronic Interface using Single Point or Multi-Point Inputs |
US9979960B2 (en) | 2012-10-01 | 2018-05-22 | Microsoft Technology Licensing, Llc | Frame packing and unpacking between frames of chroma sampling formats with different chroma resolutions |
US11216159B2 (en) | 2012-10-08 | 2022-01-04 | Fisher-Rosemount Systems, Inc. | Configuration element for graphic elements |
US11774927B2 (en) | 2012-10-08 | 2023-10-03 | Fisher-Rosemount Systems, Inc. | Methods and apparatus to provide a role-based user interface |
GB2578840B (en) | 2012-10-08 | 2020-09-02 | Fisher Rosemount Systems Inc | Dynamically reusable classes |
US9501415B1 (en) * | 2012-10-09 | 2016-11-22 | Amazon Technologies, Inc. | Image caching system to support fast scrolling of images in a graphical user interface |
US9392077B2 (en) | 2012-10-12 | 2016-07-12 | Citrix Systems, Inc. | Coordinating a computing activity across applications and devices having multiple operation modes in an orchestration framework for connected devices |
US9516022B2 (en) | 2012-10-14 | 2016-12-06 | Getgo, Inc. | Automated meeting room |
US8910239B2 (en) | 2012-10-15 | 2014-12-09 | Citrix Systems, Inc. | Providing virtualized private network tunnels |
US9251354B2 (en) * | 2012-10-15 | 2016-02-02 | Imprivata, Inc. | Secure access supersession on shared workstations |
US20140109176A1 (en) | 2012-10-15 | 2014-04-17 | Citrix Systems, Inc. | Configuring and providing profiles that manage execution of mobile applications |
US20140109171A1 (en) | 2012-10-15 | 2014-04-17 | Citrix Systems, Inc. | Providing Virtualized Private Network tunnels |
US9635094B2 (en) | 2012-10-15 | 2017-04-25 | International Business Machines Corporation | Capturing and replaying application sessions using resource files |
US9971585B2 (en) | 2012-10-16 | 2018-05-15 | Citrix Systems, Inc. | Wrapping unmanaged applications on a mobile device |
US9235464B2 (en) | 2012-10-16 | 2016-01-12 | Microsoft Technology Licensing, Llc | Smart error recovery for database applications |
US20140108793A1 (en) | 2012-10-16 | 2014-04-17 | Citrix Systems, Inc. | Controlling mobile device access to secure data |
US9606774B2 (en) | 2012-10-16 | 2017-03-28 | Citrix Systems, Inc. | Wrapping an application with field-programmable business logic |
US9081746B1 (en) * | 2012-10-16 | 2015-07-14 | Teradici Corporation | Method for client configuration management in remote computing |
EP2909715B1 (en) | 2012-10-16 | 2022-12-14 | Citrix Systems, Inc. | Application wrapping for application management framework |
US9239727B1 (en) | 2012-10-17 | 2016-01-19 | Amazon Technologies, Inc. | Configurable virtual machines |
US9536108B2 (en) | 2012-10-23 | 2017-01-03 | International Business Machines Corporation | Method and apparatus for generating privacy profiles |
US20140115606A1 (en) * | 2012-10-24 | 2014-04-24 | OpenMobile World Wide, Inc. | Multi-platform mobile and other computing devices and methods |
US9354907B1 (en) | 2012-10-26 | 2016-05-31 | Veritas Technologies Llc | Optimized restore of virtual machine and virtual disk data |
US9317721B2 (en) * | 2012-10-31 | 2016-04-19 | Google Inc. | Privacy aware camera and device status indicator system |
US9485233B1 (en) | 2012-11-02 | 2016-11-01 | Wyse Technology L.L.C. | Virtual desktop accelerator support for network gateway |
US9058219B2 (en) * | 2012-11-02 | 2015-06-16 | Amazon Technologies, Inc. | Custom resources in a resource stack |
US9069766B2 (en) * | 2012-11-02 | 2015-06-30 | Microsoft Technology Licensing, Llc | Content-based isolation for computing device security |
US9992185B1 (en) * | 2012-11-02 | 2018-06-05 | Wyse Technology L.L.C. | Virtual desktop accelerator support for network gateway |
US9374351B1 (en) | 2012-11-02 | 2016-06-21 | Wyse Technology L.L.C. | Virtual desktop accelerator support for network gateway |
US10051019B1 (en) | 2012-11-09 | 2018-08-14 | Wells Fargo Bank, N.A. | System and method for session management |
US8782809B2 (en) * | 2012-11-09 | 2014-07-15 | International Business Machines Corporation | Limiting information leakage and piracy due to virtual machine cloning |
GB2507816A (en) * | 2012-11-13 | 2014-05-14 | Ibm | Calculating timeout for remote task execution from network delays and processing duration on local application/hardware replica |
US9535720B2 (en) | 2012-11-13 | 2017-01-03 | International Business Machines Corporation | System for capturing and replaying screen gestures |
CN103812913B (en) * | 2012-11-14 | 2017-11-10 | 新华三技术有限公司 | A kind of remote access method and device based on Virtual Networking Computing |
US10474735B2 (en) | 2012-11-19 | 2019-11-12 | Acoustic, L.P. | Dynamic zooming of content with overlays |
US9191336B2 (en) * | 2012-11-20 | 2015-11-17 | The Directv Group, Inc. | Method and apparatus for data traffic distribution among independent processing centers |
WO2014079491A1 (en) * | 2012-11-21 | 2014-05-30 | Qatar Foundation | Methods, remote access systems, client computing devices, and server devices for use in remote access systems |
US9189643B2 (en) | 2012-11-26 | 2015-11-17 | International Business Machines Corporation | Client based resource isolation with domains |
US9426184B2 (en) * | 2012-11-27 | 2016-08-23 | Qualcomm Incorporated | Dockee-centric wireless docking |
CN102968331B (en) * | 2012-11-27 | 2016-08-10 | 中标软件有限公司 | A kind of virtual machine management system and file access method thereof |
CN103853949A (en) * | 2012-12-04 | 2014-06-11 | 中山大学深圳研究院 | Method for identifying identity of user on heterogeneous computer environment |
US9189285B2 (en) | 2012-12-14 | 2015-11-17 | Microsoft Technology Licensing, Llc | Scalable services deployment |
FR3000339A1 (en) * | 2012-12-20 | 2014-06-27 | France Telecom | METHOD FOR PROCESSING ACCESS REQUESTS TO COMPUTER VIRTUALIZATION SERVICES, VIRTUALIZATION GATEWAY AND WEB BROWSER |
US9141400B2 (en) * | 2012-12-21 | 2015-09-22 | Unisys Corporation | Technique for deploying operating systems in a virtualized environment |
CN103902459B (en) | 2012-12-25 | 2017-07-28 | 华为技术有限公司 | Determine the method and relevant device of shared virtual memory page management pattern |
US8973146B2 (en) | 2012-12-27 | 2015-03-03 | Mcafee, Inc. | Herd based scan avoidance system in a network environment |
US20150012863A1 (en) * | 2012-12-28 | 2015-01-08 | Panasonic Intellectual Property Corporation Of America | Control method |
US20140189847A1 (en) * | 2012-12-31 | 2014-07-03 | Aastra Technologies Limited | Remote vpn provisioning of an endpoint |
CN103916412B (en) * | 2012-12-31 | 2018-04-06 | 深圳市傲冠软件股份有限公司 | A kind of method and system of information technoloy equipment novel maintenance |
WO2014107500A1 (en) * | 2013-01-02 | 2014-07-10 | Cisco Technology, Inc. | Method and apparatus for identifying computing resource trajectory |
US10284668B2 (en) * | 2013-01-09 | 2019-05-07 | Red Hat Israel, Ltd. | Managing a logical client for an application |
US8904388B2 (en) * | 2013-01-10 | 2014-12-02 | Vce Company, Llc | Scripting language executor service for applications |
US9110757B2 (en) * | 2013-01-14 | 2015-08-18 | Vmware, Inc. | Techniques for performing virtual machine software upgrades using virtual disk swapping |
WO2014112981A1 (en) * | 2013-01-15 | 2014-07-24 | Empire Technology Development, Llc | Function-targeted virtual machine switching |
WO2014112089A1 (en) * | 2013-01-17 | 2014-07-24 | 株式会社日立製作所 | Computer system and program |
US9128777B2 (en) * | 2013-01-28 | 2015-09-08 | Google Inc. | Operating and maintaining a cluster of machines |
US9332019B2 (en) | 2013-01-30 | 2016-05-03 | International Business Machines Corporation | Establishment of a trust index to enable connections from unknown devices |
US9501298B2 (en) * | 2013-01-31 | 2016-11-22 | Hewlett-Packard Development Company, L.P. | Remotely executing operations of an application using a schema that provides for executable scripts in a nodal hierarchy |
US9298502B2 (en) | 2013-01-31 | 2016-03-29 | Empire Technology Development Llc | Pausing virtual machines using API signaling |
US9578664B1 (en) | 2013-02-07 | 2017-02-21 | Sprint Communications Company L.P. | Trusted signaling in 3GPP interfaces in a network function virtualization wireless communication system |
US9161227B1 (en) | 2013-02-07 | 2015-10-13 | Sprint Communications Company L.P. | Trusted signaling in long term evolution (LTE) 4G wireless communication |
US9336013B2 (en) | 2013-02-08 | 2016-05-10 | Automatic Data Capture Technologies Group, Inc. | Systems and methods for metadata-driven command processor and structured program transfer protocol |
US9495401B2 (en) | 2013-02-08 | 2016-11-15 | Douglas T. Migliori | Database-driven entity framework for internet of things |
US11940999B2 (en) | 2013-02-08 | 2024-03-26 | Douglas T. Migliori | Metadata-driven computing system |
US8997080B2 (en) | 2013-02-11 | 2015-03-31 | Citrix Systems, Inc. | System updates with personal virtual disks |
EP3296914B1 (en) * | 2013-02-19 | 2019-07-24 | Sony Interactive Entertainment Inc. | Information processing system |
US9104840B1 (en) | 2013-03-05 | 2015-08-11 | Sprint Communications Company L.P. | Trusted security zone watermark |
US9069608B2 (en) | 2013-03-06 | 2015-06-30 | Vmware, Inc. | Method and system for providing a roaming remote desktop |
DE102014103016A1 (en) * | 2013-03-07 | 2014-09-11 | Aristotle International, Inc. | Global Identification (ID) and Age verification system and method |
US9251115B2 (en) * | 2013-03-07 | 2016-02-02 | Citrix Systems, Inc. | Dynamic configuration in cloud computing environments |
US9521188B1 (en) * | 2013-03-07 | 2016-12-13 | Amazon Technologies, Inc. | Scheduled execution of instances |
US10142406B2 (en) * | 2013-03-11 | 2018-11-27 | Amazon Technologies, Inc. | Automated data center selection |
US9148350B1 (en) | 2013-03-11 | 2015-09-29 | Amazon Technologies, Inc. | Automated data synchronization |
US9002982B2 (en) * | 2013-03-11 | 2015-04-07 | Amazon Technologies, Inc. | Automated desktop placement |
US10313345B2 (en) | 2013-03-11 | 2019-06-04 | Amazon Technologies, Inc. | Application marketplace for virtual desktops |
US10325105B2 (en) * | 2013-03-12 | 2019-06-18 | Green Hills Software Llc | Single-chip virtualizing and obfuscating storage system for portable computing devices |
US9806933B2 (en) | 2013-03-13 | 2017-10-31 | Microsoft Technology Licensing, Llc | Component loading based on user interactions |
US9613208B1 (en) | 2013-03-13 | 2017-04-04 | Sprint Communications Company L.P. | Trusted security zone enhanced with trusted hardware drivers |
US9565202B1 (en) | 2013-03-13 | 2017-02-07 | Fireeye, Inc. | System and method for detecting exfiltration content |
US9886290B2 (en) * | 2013-03-13 | 2018-02-06 | Microsoft Technology Licensing, Llc | Component loading based on user preferences |
US8881977B1 (en) | 2013-03-13 | 2014-11-11 | Sprint Communications Company L.P. | Point-of-sale and automated teller machine transactions using trusted mobile access device |
US9292713B2 (en) * | 2013-03-13 | 2016-03-22 | Intel Corporation | Tiered access to on chip features |
US8881279B2 (en) | 2013-03-14 | 2014-11-04 | Joyent, Inc. | Systems and methods for zone-based intrusion detection |
US9049013B2 (en) | 2013-03-14 | 2015-06-02 | Sprint Communications Company L.P. | Trusted security zone containers for the protection and confidentiality of trusted service manager data |
WO2014159862A1 (en) | 2013-03-14 | 2014-10-02 | Headwater Partners I Llc | Automated credential porting for mobile devices |
US8826279B1 (en) | 2013-03-14 | 2014-09-02 | Joyent, Inc. | Instruction set architecture for compute-based object stores |
US9104456B2 (en) | 2013-03-14 | 2015-08-11 | Joyent, Inc. | Zone management of compute-centric object stores |
US8677359B1 (en) | 2013-03-14 | 2014-03-18 | Joyent, Inc. | Compute-centric object stores and methods of use |
US8943284B2 (en) | 2013-03-14 | 2015-01-27 | Joyent, Inc. | Systems and methods for integrating compute resources in a storage area network |
US9049186B1 (en) | 2013-03-14 | 2015-06-02 | Sprint Communications Company L.P. | Trusted security zone re-provisioning and re-use capability for refurbished mobile devices |
US9021585B1 (en) | 2013-03-15 | 2015-04-28 | Sprint Communications Company L.P. | JTAG fuse vulnerability determination and protection using a trusted execution environment |
US8793688B1 (en) * | 2013-03-15 | 2014-07-29 | Joyent, Inc. | Systems and methods for double hulled virtualization operations |
US9191388B1 (en) | 2013-03-15 | 2015-11-17 | Sprint Communications Company L.P. | Trusted security zone communication addressing on an electronic device |
EP3910876A1 (en) | 2013-03-15 | 2021-11-17 | Assa Abloy Ab | Method, system, and device for generating, storing, using, and validating nfc tags and data |
US9436589B2 (en) | 2013-03-15 | 2016-09-06 | Microsoft Technology Licensing, Llc | Increasing performance at runtime from trace data |
US8775485B1 (en) | 2013-03-15 | 2014-07-08 | Joyent, Inc. | Object store management operations within compute-centric object stores |
US9374363B1 (en) | 2013-03-15 | 2016-06-21 | Sprint Communications Company L.P. | Restricting access of a portable communication device to confidential data or applications via a remote network based on event triggers generated by the portable communication device |
US9092238B2 (en) | 2013-03-15 | 2015-07-28 | Joyent, Inc. | Versioning schemes for compute-centric object stores |
US8984592B1 (en) | 2013-03-15 | 2015-03-17 | Sprint Communications Company L.P. | Enablement of a trusted security zone authentication for remote mobile device management systems and methods |
US9135324B1 (en) * | 2013-03-15 | 2015-09-15 | Ca, Inc. | System and method for analysis of process data and discovery of situational and complex applications |
US20140282103A1 (en) | 2013-03-16 | 2014-09-18 | Jerry Alan Crandall | Data sharing |
US9516127B2 (en) | 2013-03-25 | 2016-12-06 | Seven Networks, Llc | Intelligent alarm manipulator and resource tracker |
US8850049B1 (en) | 2013-03-29 | 2014-09-30 | Citrix Systems, Inc. | Providing mobile device management functionalities for a managed browser |
US10284627B2 (en) | 2013-03-29 | 2019-05-07 | Citrix Systems, Inc. | Data management for an application with multiple operation modes |
US9985850B2 (en) | 2013-03-29 | 2018-05-29 | Citrix Systems, Inc. | Providing mobile device management functionalities |
US20140297840A1 (en) | 2013-03-29 | 2014-10-02 | Citrix Systems, Inc. | Providing mobile device management functionalities |
US9355223B2 (en) | 2013-03-29 | 2016-05-31 | Citrix Systems, Inc. | Providing a managed browser |
US8813179B1 (en) | 2013-03-29 | 2014-08-19 | Citrix Systems, Inc. | Providing mobile device management functionalities |
US9413736B2 (en) | 2013-03-29 | 2016-08-09 | Citrix Systems, Inc. | Providing an enterprise application store |
US9171243B1 (en) | 2013-04-04 | 2015-10-27 | Sprint Communications Company L.P. | System for managing a digest of biographical information stored in a radio frequency identity chip coupled to a mobile communication device |
US9324016B1 (en) | 2013-04-04 | 2016-04-26 | Sprint Communications Company L.P. | Digest of biographical information for an electronic device with static and dynamic portions |
US9454723B1 (en) | 2013-04-04 | 2016-09-27 | Sprint Communications Company L.P. | Radio frequency identity (RFID) chip electrically and communicatively coupled to motherboard of mobile communication device |
US9298930B2 (en) * | 2013-04-08 | 2016-03-29 | Blackberry Limited | Generating a data audit trail for cross perimeter data transfer |
US9838869B1 (en) | 2013-04-10 | 2017-12-05 | Sprint Communications Company L.P. | Delivering digital content to a mobile device via a digital rights clearing house |
US10306467B2 (en) * | 2013-04-11 | 2019-05-28 | Uniloc 2017 Llc | Shared state among multiple devices |
US9443088B1 (en) | 2013-04-15 | 2016-09-13 | Sprint Communications Company L.P. | Protection for multimedia files pre-downloaded to a mobile device |
JP6256904B2 (en) * | 2013-04-18 | 2018-01-10 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | Apparatus and method for distributing processing requests |
US9729465B2 (en) * | 2013-05-01 | 2017-08-08 | Red Hat, Inc. | Policy based application elasticity across heterogeneous computing infrastructure |
US9729515B1 (en) * | 2013-05-08 | 2017-08-08 | Ca, Inc. | System and method for managing secure communications for a virtual machine infrastructure |
KR101977441B1 (en) | 2013-05-08 | 2019-05-10 | 콘비다 와이어리스, 엘엘씨 | Method and apparatus for the virtualization of resources using a virtualization broker and context information |
US9292323B2 (en) | 2013-05-17 | 2016-03-22 | Citrix Systems, Inc. | Context aware virtual desktop |
US9069952B1 (en) | 2013-05-20 | 2015-06-30 | Sprint Communications Company L.P. | Method for enabling hardware assisted operating system region for safe execution of untrusted code using trusted transitional memory |
US9547619B2 (en) | 2013-05-24 | 2017-01-17 | Qualcomm Incorporated | Wireless docking |
US9292328B2 (en) | 2013-05-24 | 2016-03-22 | Bromium, Inc. | Management of supervisor mode execution protection (SMEP) by a hypervisor |
US9461820B1 (en) * | 2013-06-05 | 2016-10-04 | Teradici Corporation | Method and apparatus for providing a conditional single sign on |
US9560519B1 (en) | 2013-06-06 | 2017-01-31 | Sprint Communications Company L.P. | Mobile communication device profound identity brokering framework |
US9489227B2 (en) * | 2013-06-10 | 2016-11-08 | Electronics And Telecommunications Research Institute | Apparatus and method for virtual desktop service |
KR102102169B1 (en) * | 2013-06-10 | 2020-05-29 | 한국전자통신연구원 | Appratus for a virtual desktop service and method thereof |
US9578137B1 (en) | 2013-06-13 | 2017-02-21 | Amazon Technologies, Inc. | System for enhancing script execution performance |
US10152463B1 (en) | 2013-06-13 | 2018-12-11 | Amazon Technologies, Inc. | System for profiling page browsing interactions |
US9313188B2 (en) | 2013-06-14 | 2016-04-12 | Microsoft Technology Licensing, Llc | Providing domain-joined remote applications in a cloud environment |
US10216549B2 (en) | 2013-06-17 | 2019-02-26 | Seven Networks, Llc | Methods and systems for providing application programming interfaces and application programming interface extensions to third party applications for optimizing and minimizing application traffic |
US9398121B1 (en) * | 2013-06-24 | 2016-07-19 | Amazon Technologies, Inc. | Selecting among virtual networking protocols |
JP6303300B2 (en) * | 2013-06-25 | 2018-04-04 | 富士通株式会社 | Control request method, information processing apparatus, system, and program |
US10686646B1 (en) | 2013-06-26 | 2020-06-16 | Amazon Technologies, Inc. | Management of computing sessions |
US10623243B2 (en) * | 2013-06-26 | 2020-04-14 | Amazon Technologies, Inc. | Management of computing sessions |
US9961052B2 (en) * | 2013-06-28 | 2018-05-01 | Extreme Networks, Inc. | Virtualized host ID key sharing |
WO2015001376A1 (en) | 2013-07-01 | 2015-01-08 | Assa Abloy Ab | Signatures for near field communications |
US9990189B2 (en) | 2013-07-03 | 2018-06-05 | International Business Machines Corporation | Method to optimize provisioning time with dynamically generated virtual disk contents |
KR101715578B1 (en) | 2013-07-09 | 2017-03-13 | 화중과기대 | Universal serial bus (usb) device access |
US9183606B1 (en) | 2013-07-10 | 2015-11-10 | Sprint Communications Company L.P. | Trusted processing location within a graphics processing unit |
US9973965B2 (en) * | 2013-07-12 | 2018-05-15 | Seven Networks, Llc | Transport protocol layer optimization for managing signaling and power consumption |
US10664548B2 (en) | 2013-07-12 | 2020-05-26 | Trading Technologies International, Inc. | Tailored messaging |
US9354908B2 (en) | 2013-07-17 | 2016-05-31 | Veritas Technologies, LLC | Instantly restoring virtual machines by providing read/write access to virtual disk before the virtual disk is completely restored |
EP3025483B1 (en) * | 2013-07-25 | 2022-09-21 | Convida Wireless, LLC | End-to-end m2m service layer sessions |
GB2516833A (en) * | 2013-07-31 | 2015-02-11 | Ibm | Running software application with dynamic action delegation |
US9710386B1 (en) | 2013-08-07 | 2017-07-18 | Veritas Technologies | Systems and methods for prefetching subsequent data segments in response to determining that requests for data originate from a sequential-access computing job |
US9208339B1 (en) | 2013-08-12 | 2015-12-08 | Sprint Communications Company L.P. | Verifying Applications in Virtual Environments Using a Trusted Security Zone |
US9092248B1 (en) | 2013-08-21 | 2015-07-28 | Symantec Corporation | Systems and methods for restoring distributed applications within virtual data centers |
US10289742B2 (en) | 2013-08-22 | 2019-05-14 | Sensoriant, Inc. | Method and system for addressing the problem of discovering relevant services and applications that are available over the internet or other communications network |
US10771936B2 (en) | 2013-08-22 | 2020-09-08 | Sensoriant, Inc. | System and method of creating abstractions of real and virtual environments and objects subject to latency constraints |
WO2015027199A2 (en) | 2013-08-22 | 2015-02-26 | Naqvi Shamim A | Method and system for addressing the problem of discovering relevant services and applications that are available over the internet or other communcations network |
US9215227B2 (en) * | 2013-08-23 | 2015-12-15 | Unisys Corporation | Systems and methods for network communications |
CN103457945A (en) * | 2013-08-28 | 2013-12-18 | 中国科学院信息工程研究所 | Intrusion detection method and system |
US9241044B2 (en) | 2013-08-28 | 2016-01-19 | Hola Networks, Ltd. | System and method for improving internet communication by using intermediate nodes |
US9098303B2 (en) * | 2013-09-04 | 2015-08-04 | Red Hat, Inc. | Portable computing device providing operating system for host devices |
US9438615B2 (en) | 2013-09-09 | 2016-09-06 | BitSight Technologies, Inc. | Security risk management |
US11126476B2 (en) | 2013-09-10 | 2021-09-21 | Vmware, Inc. | Selectively filtering applications from an application volume |
US9633210B2 (en) | 2013-09-13 | 2017-04-25 | Microsoft Technology Licensing, Llc | Keying infrastructure |
GB2518367B (en) | 2013-09-18 | 2020-07-22 | Ibm | Authorized remote access to an operating system hosted by a virtual machine |
WO2015040350A1 (en) * | 2013-09-18 | 2015-03-26 | Toshiba Research Europe Limited | Method and system for establishing a network connection |
US9118650B1 (en) | 2013-09-23 | 2015-08-25 | Amazon Technologies, Inc. | Persistent connections for email web applications |
US10761895B2 (en) | 2013-09-26 | 2020-09-01 | Vmware, Inc. | Selective allocation of physical computing resources amongst virtual machines based on user attribute values contained in user profiles |
US10089458B2 (en) * | 2013-09-26 | 2018-10-02 | Citrix Systems, Inc. | Separate, disposable execution environment for accessing unverified content |
WO2015047433A1 (en) | 2013-09-27 | 2015-04-02 | Mcafee, Inc. | Task-context architecture for efficient data sharing |
CN104516703B (en) * | 2013-09-30 | 2018-02-16 | 中国电信股份有限公司 | The method and system of virtual desktop screen resolution automatic adaptation is realized in android terminal |
US9697516B2 (en) * | 2013-10-10 | 2017-07-04 | Google Inc. | System, methods, and computer program products for storing and managing program data |
US9378391B2 (en) * | 2013-10-11 | 2016-06-28 | Centrify Corporation | Method and apparatus for creating switchable desktops with separate authorizations |
KR20150042643A (en) * | 2013-10-11 | 2015-04-21 | 삼성전자주식회사 | Terminal appartus and method for connecting to virtual server in a vritual desktop infrastructure |
CN103501345B (en) * | 2013-10-12 | 2016-11-09 | 成都阜特科技股份有限公司 | A kind of control method of remote centralized control system |
CN104579724A (en) * | 2013-10-16 | 2015-04-29 | 宇宙互联有限公司 | Installation control system and method |
KR102102168B1 (en) * | 2013-10-21 | 2020-04-21 | 한국전자통신연구원 | Appratus for a virtual desktop service and method thereof |
US10127062B2 (en) | 2013-10-22 | 2018-11-13 | Citrix Systems, Inc. | Displaying graphics for local virtual machine by allocating textual buffer |
EP3061072A4 (en) * | 2013-10-22 | 2017-07-19 | Citrix Systems Inc. | Method and system for displaying graphics for a local virtual machine |
CN104580314A (en) * | 2013-10-24 | 2015-04-29 | 中国移动通信集团广东有限公司 | Data isolation method and device for cloud computing system as well as terminal |
US9578052B2 (en) | 2013-10-24 | 2017-02-21 | Mcafee, Inc. | Agent assisted malicious application blocking in a network environment |
US9628550B1 (en) | 2013-10-24 | 2017-04-18 | Ca, Inc. | Lightweight software management shell |
US9185626B1 (en) | 2013-10-29 | 2015-11-10 | Sprint Communications Company L.P. | Secure peer-to-peer call forking facilitated by trusted 3rd party voice server provisioning |
US9191522B1 (en) | 2013-11-08 | 2015-11-17 | Sprint Communications Company L.P. | Billing varied service based on tier |
US9161325B1 (en) | 2013-11-20 | 2015-10-13 | Sprint Communications Company L.P. | Subscriber identity module virtualization |
CN103618780B (en) * | 2013-11-22 | 2017-10-10 | 华为技术有限公司 | A kind of method and device for realizing multi-dummy machine carry external components |
US9532103B2 (en) * | 2013-12-16 | 2016-12-27 | Vmware, Inc. | Multi-user support for set top boxes and game consoles |
JP6310689B2 (en) * | 2013-12-16 | 2018-04-11 | 株式会社日立製作所 | Management server and management server control method |
CN103677959B (en) * | 2013-12-16 | 2017-05-31 | 国家计算机网络与信息安全管理中心 | A kind of virtual machine cluster migration method and system based on multicast |
US9671945B2 (en) * | 2013-12-17 | 2017-06-06 | American Megatrends, Inc. | Techniques of launching virtual machine from thin client |
CN104717152B (en) * | 2013-12-17 | 2019-07-19 | 深圳市中兴微电子技术有限公司 | A kind of method and apparatus realizing interface caching and dynamically distributing |
CN104735023A (en) * | 2013-12-18 | 2015-06-24 | 国家计算机网络与信息安全管理中心 | High-performance SSL agency device and method |
US10225352B2 (en) * | 2013-12-20 | 2019-03-05 | Sony Corporation | Work sessions |
CN103701791B (en) * | 2013-12-20 | 2017-09-01 | 中电长城网际系统应用有限公司 | A kind of operating method of the virtual desktop based on virtual desktop system |
US10599565B2 (en) | 2013-12-24 | 2020-03-24 | Hewlett-Packard Development Company, L.P. | Hypervisor managing memory addressed above four gigabytes |
CN103685055B (en) * | 2013-12-25 | 2017-06-16 | 深圳供电局有限公司 | Cross-region isolation data balanced transmission method for power system and cross-region isolator |
US10742520B2 (en) * | 2013-12-31 | 2020-08-11 | Citrix Systems, Inc. | Providing mobile device management functionalities |
US9118655B1 (en) | 2014-01-24 | 2015-08-25 | Sprint Communications Company L.P. | Trusted display and transmission of digital ticket documentation |
KR101462829B1 (en) * | 2014-01-29 | 2014-11-21 | (주) 퓨전데이타 | Apparatus and Method for Processing Information of Virtualized Computing Resources |
US10430614B2 (en) | 2014-01-31 | 2019-10-01 | Bromium, Inc. | Automatic initiation of execution analysis |
CN105917627B (en) * | 2014-02-07 | 2021-03-12 | 甲骨文国际公司 | Method and system for customizing execution environment by cloud service |
US10264025B2 (en) | 2016-06-24 | 2019-04-16 | Varmour Networks, Inc. | Security policy generation for virtualization, bare-metal server, and cloud computing environments |
US9560081B1 (en) | 2016-06-24 | 2017-01-31 | Varmour Networks, Inc. | Data network microsegmentation |
US9973472B2 (en) | 2015-04-02 | 2018-05-15 | Varmour Networks, Inc. | Methods and systems for orchestrating physical and virtual switches to enforce security boundaries |
US10545917B2 (en) | 2014-02-19 | 2020-01-28 | Snowflake Inc. | Multi-range and runtime pruning |
US10366102B2 (en) | 2014-02-19 | 2019-07-30 | Snowflake Inc. | Resource management systems and methods |
CN106031122B (en) * | 2014-02-21 | 2020-06-02 | 戴尔产品有限公司 | Generic transcoding service |
US9658870B2 (en) | 2014-02-27 | 2017-05-23 | OpenMobile World Wide, Inc. | In-process trapping for service substitution in hosted applications executing on mobile devices with multi-operating system environment |
US9367673B2 (en) | 2014-03-03 | 2016-06-14 | Ca, Inc. | Privileged shared account password sanitation |
US9800650B2 (en) * | 2014-03-10 | 2017-10-24 | Vmware, Inc. | Resource management for multiple desktop configurations for supporting virtual desktops of different user classes |
US20170134239A1 (en) * | 2014-03-21 | 2017-05-11 | Ptc Inc. | Systems and methods for routing messages in distributed computing environments |
US9350791B2 (en) | 2014-03-21 | 2016-05-24 | Ptc Inc. | System and method of injecting states into message routing in a distributed computing environment |
US10242185B1 (en) | 2014-03-21 | 2019-03-26 | Fireeye, Inc. | Dynamic guest image creation and rollback |
US9226145B1 (en) | 2014-03-28 | 2015-12-29 | Sprint Communications Company L.P. | Verification of mobile device integrity during activation |
US9940180B2 (en) * | 2014-03-31 | 2018-04-10 | Nicira, Inc. | Using loopback interfaces of multiple TCP/IP stacks for communication between processes |
US9729679B2 (en) | 2014-03-31 | 2017-08-08 | Nicira, Inc. | Using different TCP/IP stacks for different tenants on a multi-tenant host |
US9832112B2 (en) * | 2014-03-31 | 2017-11-28 | Nicira, Inc. | Using different TCP/IP stacks for different hypervisor services |
US9411975B2 (en) | 2014-03-31 | 2016-08-09 | Intel Corporation | Methods and apparatus to securely share data |
US10057325B2 (en) * | 2014-03-31 | 2018-08-21 | Nuvestack, Inc. | Remote desktop infrastructure |
US11416459B2 (en) | 2014-04-11 | 2022-08-16 | Douglas T. Migliori | No-code, event-driven edge computing platform |
EP3130111A1 (en) * | 2014-04-11 | 2017-02-15 | Migliori, Douglas T. | Database-driven entity framework for internet of things |
US10459892B2 (en) | 2014-04-23 | 2019-10-29 | Qumulo, Inc. | Filesystem hierarchical aggregate metrics |
US9696983B2 (en) | 2014-04-25 | 2017-07-04 | Vmware, Inc. | Dynamic updating of operating systems and applications using volume attachment |
US9830593B2 (en) | 2014-04-26 | 2017-11-28 | Ss8 Networks, Inc. | Cryptographic currency user directory data and enhanced peer-verification ledger synthesis through multi-modal cryptographic key-address mapping |
US9483310B2 (en) * | 2014-04-29 | 2016-11-01 | Bluedata Software, Inc. | Associating cache memory with a work process |
US9602505B1 (en) * | 2014-04-30 | 2017-03-21 | Symantec Corporation | Dynamic access control |
US9223966B1 (en) | 2014-05-04 | 2015-12-29 | Symantec Corporation | Systems and methods for replicating computing system environments |
US9680805B1 (en) | 2014-05-07 | 2017-06-13 | Skyport Systems, Inc. | Method and system for key management |
EP3140734B1 (en) | 2014-05-09 | 2020-04-08 | Nutanix, Inc. | Mechanism for providing external access to a secured networked virtualization environment |
US9841991B2 (en) | 2014-05-12 | 2017-12-12 | Netapp, Inc. | Techniques for virtual machine migration |
US10216531B2 (en) * | 2014-05-12 | 2019-02-26 | Netapp, Inc. | Techniques for virtual machine shifting |
CN104008320A (en) * | 2014-05-19 | 2014-08-27 | 惠州Tcl移动通信有限公司 | Using permission and user mode control method and system based on face recognition |
US9351098B2 (en) * | 2014-05-19 | 2016-05-24 | Lenovo (Singapore) Pte. Ltd. | Providing access to and enabling functionality of first device based on communication with second device |
WO2015188346A1 (en) * | 2014-06-12 | 2015-12-17 | Empire Technology Development Llc | Virtual machine migration based on communication from nodes |
US9565227B1 (en) * | 2014-06-16 | 2017-02-07 | Teradici Corporation | Composition control method for remote application delivery |
US9338092B1 (en) * | 2014-06-20 | 2016-05-10 | Amazon Technologies, Inc. | Overlay networks for application groups |
US10581737B1 (en) * | 2014-06-20 | 2020-03-03 | Amazon Technologies, Inc. | Acceleration of data routing in an application group |
US9830448B2 (en) * | 2014-06-23 | 2017-11-28 | Waratek Limited | Enhanced security for java virtual machines |
US9262200B2 (en) * | 2014-06-25 | 2016-02-16 | Independenceit, Inc. | Methods and systems for provisioning a virtual resource in a mixed-use server |
CN105338016B (en) * | 2014-06-27 | 2019-08-23 | 国际商业机器公司 | Data high-speed caching method and device and resource request response method and device |
CN106471777B (en) * | 2014-06-28 | 2020-03-10 | 华为技术有限公司 | Network resource balancing method and device |
US9680873B1 (en) | 2014-06-30 | 2017-06-13 | Bromium, Inc. | Trusted network detection |
US11310312B2 (en) | 2014-07-07 | 2022-04-19 | Citrix Systems, Inc. | Peer to peer remote application discovery |
US11283866B2 (en) * | 2014-07-07 | 2022-03-22 | Citrix Systems, Inc. | Providing remote access to applications through interface hooks |
US9961059B2 (en) | 2014-07-10 | 2018-05-01 | Red Hat Israel, Ltd. | Authenticator plugin interface |
WO2016009245A1 (en) * | 2014-07-15 | 2016-01-21 | Assa Abloy Ab | Cloud card application platform |
US9729583B1 (en) | 2016-06-10 | 2017-08-08 | OneTrust, LLC | Data processing systems and methods for performing privacy assessments and monitoring of new versions of computer code for privacy compliance |
US9230085B1 (en) | 2014-07-29 | 2016-01-05 | Sprint Communications Company L.P. | Network based temporary trust extension to a remote or mobile device enabled via specialized cloud services |
US10474485B2 (en) * | 2014-08-07 | 2019-11-12 | Vmware, Inc. | Individualizing virtual hardware configurations of deployed desktop virtual machines using custom resource templates |
US20160048309A1 (en) * | 2014-08-12 | 2016-02-18 | I/O Interconnect Inc. | Method for automatically changing display version of website |
WO2016024970A1 (en) * | 2014-08-13 | 2016-02-18 | Hitachi, Ltd. | Method and apparatus for managing it infrastructure in cloud environments |
JP6217029B2 (en) * | 2014-08-19 | 2017-10-25 | 村田機械株式会社 | Wireless communication system and wireless base station |
US10311122B1 (en) | 2014-08-22 | 2019-06-04 | Bromium, Inc. | On-demand unprotected mode access |
US10824440B2 (en) * | 2014-08-22 | 2020-11-03 | Sensoriant, Inc. | Deriving personalized experiences of smart environments |
US10628186B2 (en) | 2014-09-08 | 2020-04-21 | Wirepath Home Systems, Llc | Method for electronic device virtualization and management |
EP3192703B1 (en) * | 2014-09-12 | 2019-01-30 | Panasonic Intellectual Property Corporation of America | Vehicle communication device, in-vehicle network system, and vehicle communication method |
US10097513B2 (en) * | 2014-09-14 | 2018-10-09 | Microsoft Technology Licensing, Llc | Trusted execution environment extensible computing device interface |
US10693946B2 (en) * | 2014-09-16 | 2020-06-23 | Amazon Technologies, Inc. | Instance backed mobile devices |
US11455181B1 (en) * | 2014-09-19 | 2022-09-27 | Amazon Technologies, Inc. | Cross-network connector appliances |
CN105205088A (en) * | 2014-09-19 | 2015-12-30 | 钟声 | Mass data processing server cluster software system |
US20160085765A1 (en) * | 2014-09-22 | 2016-03-24 | Amazon Technologies, Inc. | Computing environment selection techniques |
US9836339B1 (en) * | 2014-09-24 | 2017-12-05 | Amazon Technologies, Inc. | Application programming interface as a service |
CN105451258B (en) * | 2014-09-26 | 2019-10-25 | 优视科技有限公司 | A kind of test processing method and device |
US10257184B1 (en) | 2014-09-29 | 2019-04-09 | Amazon Technologies, Inc. | Assigning policies for accessing multiple computing resource services |
US9678773B1 (en) | 2014-09-30 | 2017-06-13 | Amazon Technologies, Inc. | Low latency computational capacity provisioning |
US9146764B1 (en) | 2014-09-30 | 2015-09-29 | Amazon Technologies, Inc. | Processing event messages for user requests to execute program code |
US9323556B2 (en) | 2014-09-30 | 2016-04-26 | Amazon Technologies, Inc. | Programmatic event detection and message generation for requests to execute program code |
US10048974B1 (en) | 2014-09-30 | 2018-08-14 | Amazon Technologies, Inc. | Message-based computation request scheduling |
US9600312B2 (en) | 2014-09-30 | 2017-03-21 | Amazon Technologies, Inc. | Threading as a service |
US9830193B1 (en) * | 2014-09-30 | 2017-11-28 | Amazon Technologies, Inc. | Automatic management of low latency computational capacity |
US9715402B2 (en) | 2014-09-30 | 2017-07-25 | Amazon Technologies, Inc. | Dynamic code deployment and versioning |
RU2610266C2 (en) * | 2014-10-07 | 2017-02-08 | Общество С Ограниченной Ответственностью "Яндекс" | Method and system for providing access to file for web resource |
US9621357B2 (en) * | 2014-10-16 | 2017-04-11 | Verato, Inc. | System and method for providing consent management |
IL235175A (en) | 2014-10-19 | 2017-08-31 | Frenkel Lior | Secure remote desktop |
US10567476B2 (en) * | 2014-10-30 | 2020-02-18 | Amazon Technologies, Inc. | Rule-based action triggering in a provider network |
WO2016073315A1 (en) * | 2014-11-05 | 2016-05-12 | NCS Technologies, Inc. | Zero client device with cached connections |
CN104468550B (en) * | 2014-11-28 | 2018-10-19 | 华为技术有限公司 | A kind of user login method of windows desktop, equipment and system |
US9495193B2 (en) * | 2014-12-05 | 2016-11-15 | International Business Machines Corporation | Monitoring hypervisor and provisioned instances of hosted virtual machines using monitoring templates |
US11303539B2 (en) | 2014-12-05 | 2022-04-12 | Accenture Global Services Limited | Network component placement architecture |
US9537788B2 (en) | 2014-12-05 | 2017-01-03 | Amazon Technologies, Inc. | Automatic determination of resource sizing |
CN105743808B (en) * | 2014-12-08 | 2017-09-19 | 华为技术有限公司 | A kind of adaptation QoS method and apparatus |
US9754027B2 (en) * | 2014-12-12 | 2017-09-05 | International Business Machines Corporation | Implementation of data protection policies in ETL landscapes |
US10503920B2 (en) * | 2014-12-15 | 2019-12-10 | Vaultize Technologies Private Limited | Methods and systems for management of data stored in discrete data containers |
US9940456B2 (en) * | 2014-12-16 | 2018-04-10 | Intel Corporation | Using trusted execution environments for security of code and data |
US9525707B2 (en) * | 2014-12-23 | 2016-12-20 | Mcafee, Inc. | Incident response tool using a data exchange layer system |
CN104486350B (en) * | 2014-12-24 | 2017-11-10 | 电子科技大学 | A kind of Web content accelerated method based on user behavior |
US11075976B2 (en) * | 2014-12-24 | 2021-07-27 | Vmware, Inc. | Remoting application user interfaces |
JP6880549B2 (en) * | 2014-12-25 | 2021-06-02 | 株式会社リコー | Information processing system, image processing device, information processing method, and information processing program |
US10148727B2 (en) * | 2014-12-31 | 2018-12-04 | Vidscale Services, Inc. | Methods and systems for an end-to-end solution to deliver content in a network |
US10091111B2 (en) * | 2014-12-31 | 2018-10-02 | Vidscale Services, Inc. | Methods and systems for an end-to-end solution to deliver content in a network |
EP3243313B1 (en) | 2015-01-07 | 2020-09-16 | GoSecure Inc. | System and method for monitoring a computer system using machine interpretable code |
US9779232B1 (en) | 2015-01-14 | 2017-10-03 | Sprint Communications Company L.P. | Trusted code generation and verification to prevent fraud from maleficent external devices that capture data |
US9087001B1 (en) * | 2015-01-16 | 2015-07-21 | Storagecraft Technology Corporation | Virtualizing multiple networked machines using a predetermined network recovery policy |
US11182713B2 (en) | 2015-01-24 | 2021-11-23 | Vmware, Inc. | Methods and systems to optimize operating system license costs in a virtual data center |
US9838868B1 (en) | 2015-01-26 | 2017-12-05 | Sprint Communications Company L.P. | Mated universal serial bus (USB) wireless dongles configured with destination addresses |
JP2016139273A (en) * | 2015-01-27 | 2016-08-04 | 富士通株式会社 | Cooperation system, cooperation program, and cooperation method |
US10025932B2 (en) * | 2015-01-30 | 2018-07-17 | Microsoft Technology Licensing, Llc | Portable security device |
US9588790B1 (en) | 2015-02-04 | 2017-03-07 | Amazon Technologies, Inc. | Stateful virtual compute system |
US9733967B2 (en) | 2015-02-04 | 2017-08-15 | Amazon Technologies, Inc. | Security protocols for low latency execution of program code |
WO2016128491A1 (en) | 2015-02-11 | 2016-08-18 | British Telecommunications Public Limited Company | Validating computer resource usage |
TWI552077B (en) * | 2015-02-12 | 2016-10-01 | 國立中央大學 | Method for live migrating virtual machine |
US9954936B2 (en) * | 2015-03-02 | 2018-04-24 | International Business Machines Corporation | Migrating legacy applications to a multi-tenant computing environment |
US9609026B2 (en) | 2015-03-13 | 2017-03-28 | Varmour Networks, Inc. | Segmented networks that implement scanning |
US10178070B2 (en) | 2015-03-13 | 2019-01-08 | Varmour Networks, Inc. | Methods and systems for providing security to distributed microservices |
US9467476B1 (en) | 2015-03-13 | 2016-10-11 | Varmour Networks, Inc. | Context aware microsegmentation |
US10193929B2 (en) | 2015-03-13 | 2019-01-29 | Varmour Networks, Inc. | Methods and systems for improving analytics in distributed networks |
US9438634B1 (en) | 2015-03-13 | 2016-09-06 | Varmour Networks, Inc. | Microsegmented networks that implement vulnerability scanning |
CN104811473B (en) * | 2015-03-18 | 2018-03-02 | 华为技术有限公司 | A kind of method, system and management system for creating virtual non-volatile storage medium |
US9582298B2 (en) * | 2015-03-20 | 2017-02-28 | Amazon Technologies, Inc. | Executing commands within virtual machine instances |
US9380027B1 (en) | 2015-03-30 | 2016-06-28 | Varmour Networks, Inc. | Conditional declarative policies |
US10834065B1 (en) * | 2015-03-31 | 2020-11-10 | F5 Networks, Inc. | Methods for SSL protected NTLM re-authentication and devices thereof |
US9525697B2 (en) | 2015-04-02 | 2016-12-20 | Varmour Networks, Inc. | Delivering security functions to distributed networks |
US10581755B2 (en) * | 2015-04-03 | 2020-03-03 | Nicira, Inc. | Provisioning network services in a software defined data center |
US9473945B1 (en) | 2015-04-07 | 2016-10-18 | Sprint Communications Company L.P. | Infrastructure for secure short message transmission |
US9785476B2 (en) | 2015-04-08 | 2017-10-10 | Amazon Technologies, Inc. | Endpoint management system and virtual compute system |
US9930103B2 (en) | 2015-04-08 | 2018-03-27 | Amazon Technologies, Inc. | Endpoint management system providing an application programming interface proxy service |
US10320793B2 (en) * | 2015-04-21 | 2019-06-11 | Jail Education Solutions, Inc | Device, system and method for providing incentives including technology use and technology-based work |
EP3089080A1 (en) * | 2015-04-27 | 2016-11-02 | Universität Zürich | Networks and hierarchical routing fabrics with heterogeneous memory structures for scalable event-driven computing systems |
US10067490B2 (en) * | 2015-05-08 | 2018-09-04 | Ciambella Ltd. | Method and apparatus for modifying behavior of code for a controller-based device |
US11057446B2 (en) | 2015-05-14 | 2021-07-06 | Bright Data Ltd. | System and method for streaming content from multiple servers |
CN106575304A (en) | 2015-05-19 | 2017-04-19 | 广州市动景计算机科技有限公司 | Method, apparatus for loading a resource in a web page on a device |
US10082941B2 (en) * | 2015-05-20 | 2018-09-25 | Vmware, Inc. | Optimizing window move actions for remoted applications |
US20160342434A1 (en) * | 2015-05-20 | 2016-11-24 | Blackberry Limited | Methods and systems for virtualization of portable electronic devices |
US10560535B2 (en) * | 2015-05-21 | 2020-02-11 | Dell Products, Lp | System and method for live migration of remote desktop session host sessions without data loss |
EP3304295B1 (en) | 2015-06-05 | 2024-05-29 | Nutanix, Inc. | Architecture for managing i/o and storage for a virtualization environment using executable containers and virtual machines |
US10671470B2 (en) * | 2015-06-11 | 2020-06-02 | Instana, Inc. | Application performance management system with dynamic discovery and extension |
US20160373405A1 (en) | 2015-06-16 | 2016-12-22 | Amazon Technologies, Inc. | Managing dynamic ip address assignments |
US9697046B2 (en) * | 2015-06-19 | 2017-07-04 | Vmware, Inc. | Managing resource reservations in a highly parallel application |
US9887978B2 (en) * | 2015-06-23 | 2018-02-06 | Veritas Technologies Llc | System and method for centralized configuration and authentication |
US10599662B2 (en) | 2015-06-26 | 2020-03-24 | Mcafee, Llc | Query engine for remote endpoint information retrieval |
US9716710B2 (en) * | 2015-06-26 | 2017-07-25 | Intel Corporation | Technologies for virtualized access to security services provided by a converged manageability and security engine |
US10382426B2 (en) * | 2015-07-02 | 2019-08-13 | Adobe Inc. | Authentication context transfer for accessing computing resources via single sign-on with single use access tokens |
US9723026B2 (en) | 2015-07-09 | 2017-08-01 | Cisco Technology, Inc. | Managing network resource access using session context |
US11073960B2 (en) | 2015-07-09 | 2021-07-27 | Sensoriant, Inc. | Method and system for creating adaptive user interfaces using user provided and controlled data |
US9875130B2 (en) * | 2015-07-13 | 2018-01-23 | International Business Machines Corporation | Customizing mirror virtual machine(s) |
US9986040B2 (en) | 2015-07-21 | 2018-05-29 | Amadeus S.A.S. | Communications management system with a separate peripherals server |
US9843568B2 (en) | 2015-07-22 | 2017-12-12 | Here Global B.V. | Method and apparatus for generating an intelligent primary key facilitating faster object retrieval |
US9853946B2 (en) * | 2015-07-22 | 2017-12-26 | Splunk Inc. | Security compliance for cloud-based machine data acquisition and search system |
US10083624B2 (en) | 2015-07-28 | 2018-09-25 | Architecture Technology Corporation | Real-time monitoring of network-based training exercises |
US10803766B1 (en) | 2015-07-28 | 2020-10-13 | Architecture Technology Corporation | Modular training of network-based training exercises |
EP3329440A1 (en) | 2015-07-31 | 2018-06-06 | British Telecommunications public limited company | Controlled resource provisioning in distributed computing environments |
EP3329408A1 (en) | 2015-07-31 | 2018-06-06 | British Telecommunications public limited company | Expendable access control |
US11347876B2 (en) | 2015-07-31 | 2022-05-31 | British Telecommunications Public Limited Company | Access control |
US10394586B2 (en) | 2015-08-13 | 2019-08-27 | Red Hat Israel, Ltd. | Using capability indicators to indicate support for guest driven surprise removal of virtual PCI devices |
CN105100109B (en) * | 2015-08-19 | 2019-05-24 | 华为技术有限公司 | A kind of method and device of deployment secure access control policy |
US10075537B2 (en) | 2015-08-27 | 2018-09-11 | Accenture Global Services Limited | Action execution architecture for virtual machines |
US11709799B2 (en) * | 2015-08-29 | 2023-07-25 | Vmware, Inc. | Content or file based application virtualization using a cache |
US10484459B2 (en) * | 2015-09-03 | 2019-11-19 | Nvidia Corporation | Dynamically providing host input control for streaming applications |
US9819679B1 (en) | 2015-09-14 | 2017-11-14 | Sprint Communications Company L.P. | Hardware assisted provenance proof of named data networking associated to device data, addresses, services, and servers |
US10296580B1 (en) | 2015-09-18 | 2019-05-21 | Amazon Technologies, Inc. | Delivering parsed content items |
US9977912B1 (en) * | 2015-09-21 | 2018-05-22 | EMC IP Holding Company LLC | Processing backup data based on file system authentication |
US9747123B2 (en) * | 2015-09-25 | 2017-08-29 | Intel Corporation | Technologies for multi-level virtualization |
US10127210B1 (en) | 2015-09-25 | 2018-11-13 | Amazon Technologies, Inc. | Content rendering |
US10241983B1 (en) | 2015-09-28 | 2019-03-26 | Amazon Technologies, Inc. | Vector-based encoding for content rendering |
US10601894B1 (en) | 2015-09-28 | 2020-03-24 | Amazon Technologies, Inc. | Vector-based encoding for content rendering |
US9928108B1 (en) | 2015-09-29 | 2018-03-27 | Amazon Technologies, Inc. | Metaevent handling for on-demand code execution environments |
US10042660B2 (en) | 2015-09-30 | 2018-08-07 | Amazon Technologies, Inc. | Management of periodic requests for compute capacity |
US10389795B2 (en) | 2015-10-09 | 2019-08-20 | Microsoft Technology Licensing, Llc | Distributed extension execution in computing systems |
US9762563B2 (en) * | 2015-10-14 | 2017-09-12 | FullArmor Corporation | Resource access system and method |
US10164971B2 (en) * | 2015-10-22 | 2018-12-25 | Oracle International Corporation | End user initiated access server authenticity check |
US20180309851A1 (en) * | 2015-10-28 | 2018-10-25 | Nec Corporation | Server terminal device, client terminal device, thin client system, control method, and program recording medium |
JP6724630B2 (en) * | 2015-10-30 | 2020-07-15 | 株式会社リコー | Information processing system, information processing apparatus, information processing method, and information processing program |
WO2017073049A1 (en) * | 2015-10-30 | 2017-05-04 | Ricoh Company, Ltd. | Information processing system, information processing apparatus, method for processing information, and information processing program |
US10282719B1 (en) | 2015-11-12 | 2019-05-07 | Sprint Communications Company L.P. | Secure and trusted device-based billing and charging process using privilege for network proxy authentication and audit |
US9772872B2 (en) | 2015-11-13 | 2017-09-26 | International Business Machines Corporation | Virtual machine collaborative scheduling |
JP2016053975A (en) * | 2015-11-17 | 2016-04-14 | 株式会社応用電子 | Thin client system |
US10216529B1 (en) * | 2015-11-19 | 2019-02-26 | Virtuozzo International Gmbh | Method and system for sharing driver pages |
US9817992B1 (en) | 2015-11-20 | 2017-11-14 | Sprint Communications Company Lp. | System and method for secure USIM wireless network access |
US10097999B2 (en) | 2015-12-07 | 2018-10-09 | International Business Machines Corporation | Satisfying virtual machine security criteria using remote sensor devices |
US10191758B2 (en) | 2015-12-09 | 2019-01-29 | Varmour Networks, Inc. | Directing data traffic between intra-server virtual machines |
CN105516010B (en) * | 2015-12-09 | 2019-02-05 | 联想(北京)有限公司 | A kind of information processing method and electronic equipment |
US10348797B1 (en) * | 2015-12-15 | 2019-07-09 | Amazon Technologies, Inc. | Network browser configuration |
US10341345B1 (en) | 2015-12-15 | 2019-07-02 | Amazon Technologies, Inc. | Network browser configuration |
US10754701B1 (en) | 2015-12-16 | 2020-08-25 | Amazon Technologies, Inc. | Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions |
US10013267B1 (en) | 2015-12-16 | 2018-07-03 | Amazon Technologies, Inc. | Pre-triggers for code execution environments |
US9811434B1 (en) | 2015-12-16 | 2017-11-07 | Amazon Technologies, Inc. | Predictive management of on-demand code execution |
US10268814B1 (en) * | 2015-12-16 | 2019-04-23 | Western Digital Technologies, Inc. | Providing secure access to digital storage devices |
US9910713B2 (en) | 2015-12-21 | 2018-03-06 | Amazon Technologies, Inc. | Code execution request routing |
US10067801B1 (en) | 2015-12-21 | 2018-09-04 | Amazon Technologies, Inc. | Acquisition and maintenance of compute capacity |
US9864624B2 (en) | 2015-12-21 | 2018-01-09 | International Business Machines Corporation | Software-defined computing system remote support |
US10002026B1 (en) | 2015-12-21 | 2018-06-19 | Amazon Technologies, Inc. | Acquisition and maintenance of dedicated, reserved, and variable compute capacity |
US10037424B1 (en) * | 2015-12-22 | 2018-07-31 | Amazon Technologies, Inc. | Isolated virtual environments for untrusted applications |
US11265362B1 (en) * | 2015-12-28 | 2022-03-01 | Ted Tabacco | Mobile application streaming platform |
US10083054B2 (en) * | 2015-12-28 | 2018-09-25 | Amazon Technologies, Inc. | Application-based computing resource management |
US10404697B1 (en) | 2015-12-28 | 2019-09-03 | Symantec Corporation | Systems and methods for using vehicles as information sources for knowledge-based authentication |
CN106937282B (en) * | 2015-12-29 | 2020-12-18 | 北界创想(北京)软件有限公司 | VPN access method and system based on mobile terminal |
US10326733B2 (en) * | 2015-12-30 | 2019-06-18 | Symantec Corporation | Systems and methods for facilitating single sign-on for multiple devices |
US10069681B2 (en) * | 2015-12-31 | 2018-09-04 | Amazon Technologies, Inc. | FPGA-enabled compute instances |
US9396251B1 (en) * | 2016-01-07 | 2016-07-19 | International Business Machines Corporation | Detecting and tracking virtual containers |
US10075532B2 (en) * | 2016-01-12 | 2018-09-11 | Jens Schmidt | Method and system for controlling remote session on computer systems |
US10404698B1 (en) | 2016-01-15 | 2019-09-03 | F5 Networks, Inc. | Methods for adaptive organization of web application access points in webtops and devices thereof |
US10324745B2 (en) * | 2016-02-01 | 2019-06-18 | Airwatch, Llc | Thin client with managed profile-specific remote virtual machines |
US20170230419A1 (en) | 2016-02-08 | 2017-08-10 | Hytrust, Inc. | Harmonized governance system for heterogeneous agile information technology environments |
US10095506B2 (en) | 2016-02-12 | 2018-10-09 | Nutanix, Inc. | Virtualized file server data sharing |
IL250010B (en) | 2016-02-14 | 2020-04-30 | Waterfall Security Solutions Ltd | Secure connection with protected facilities |
US10146664B2 (en) * | 2016-02-25 | 2018-12-04 | Dell Products, Lp | Virtual test environment for webpages with automation features |
US10116533B1 (en) | 2016-02-26 | 2018-10-30 | Skyport Systems, Inc. | Method and system for logging events of computing devices |
US10419283B1 (en) * | 2016-03-01 | 2019-09-17 | VCE IP Holding Company LLC | Methods, systems, and computer readable mediums for template-based provisioning of distributed computing systems |
US9866459B1 (en) * | 2016-03-04 | 2018-01-09 | Amazon Technologies, Inc. | Origin failover for live streaming |
US11290559B2 (en) * | 2016-03-04 | 2022-03-29 | Convida Wireless, Llc | Request processing in the service layer |
US10848808B2 (en) * | 2016-03-08 | 2020-11-24 | Eagle Eye Networks, Inc. | Apparatus for sharing private video streams with public service agencies |
US12093199B2 (en) * | 2016-03-08 | 2024-09-17 | ZPE Systems, Inc. | Infrastructure management device |
EP3402160B1 (en) * | 2016-03-15 | 2020-04-29 | Huawei Technologies Co., Ltd. | Service processing method and apparatus |
US9990222B2 (en) * | 2016-03-18 | 2018-06-05 | Airwatch Llc | Enforcing compliance rules against hypervisor and virtual machine using host management component |
CN105786596B (en) * | 2016-03-21 | 2018-04-13 | 山东省计算中心(国家超级计算济南中心) | A kind of method that object information is obtained from the memory mirror file of 64 Windows10 operating systems |
US10691547B1 (en) * | 2016-03-21 | 2020-06-23 | EMC IP Holding Company LLC | Backup and recovery for end-user computing in virtual desktop environments |
US10797977B2 (en) * | 2016-03-22 | 2020-10-06 | Citrix Systems, Inc. | Robust suspension and resumption of desktop virtualization |
US10564829B2 (en) | 2016-03-25 | 2020-02-18 | Vmware, Inc. | Optimizing window resize actions for remoted applications |
JP6871943B2 (en) | 2016-03-28 | 2021-05-19 | オラクル・インターナショナル・コーポレイション | Preformed instructions for mobile cloud services |
US11023248B2 (en) | 2016-03-30 | 2021-06-01 | British Telecommunications Public Limited Company | Assured application services |
WO2017167545A1 (en) | 2016-03-30 | 2017-10-05 | British Telecommunications Public Limited Company | Network traffic threat identification |
US11153091B2 (en) | 2016-03-30 | 2021-10-19 | British Telecommunications Public Limited Company | Untrusted code distribution |
WO2017167547A1 (en) | 2016-03-30 | 2017-10-05 | British Telecommunications Public Limited Company | Cryptocurrencies malware based detection |
US11132213B1 (en) | 2016-03-30 | 2021-09-28 | Amazon Technologies, Inc. | Dependency-based process of pre-existing data sets at an on demand code execution environment |
US10162672B2 (en) | 2016-03-30 | 2018-12-25 | Amazon Technologies, Inc. | Generating data streams from pre-existing data sets |
US10891145B2 (en) | 2016-03-30 | 2021-01-12 | Amazon Technologies, Inc. | Processing pre-existing data sets at an on demand code execution environment |
WO2017167544A1 (en) | 2016-03-30 | 2017-10-05 | British Telecommunications Public Limited Company | Detecting computer security threats |
WO2017168408A1 (en) * | 2016-03-31 | 2017-10-05 | Cloud Of Things, Ltd | System and method for remotely troubleshooting network connection problems |
US11244367B2 (en) | 2016-04-01 | 2022-02-08 | OneTrust, LLC | Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design |
US20220164840A1 (en) | 2016-04-01 | 2022-05-26 | OneTrust, LLC | Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design |
US11004125B2 (en) | 2016-04-01 | 2021-05-11 | OneTrust, LLC | Data processing systems and methods for integrating privacy information management systems with data loss prevention tools or other tools for privacy design |
US10706447B2 (en) | 2016-04-01 | 2020-07-07 | OneTrust, LLC | Data processing systems and communication systems and methods for the efficient generation of privacy risk assessments |
US10523598B2 (en) * | 2016-04-04 | 2019-12-31 | Futurewei Technologies, Inc. | Multi-path virtual switching |
US10200461B2 (en) * | 2016-04-07 | 2019-02-05 | Virtustream Ip Holding Company Llc | Virtualized capacity management |
WO2017178519A1 (en) * | 2016-04-13 | 2017-10-19 | Barco N.V. | Display system for displaying image data |
US9817592B1 (en) | 2016-04-27 | 2017-11-14 | Netapp, Inc. | Using an intermediate virtual disk format for virtual disk conversion |
PT3247084T (en) | 2016-05-17 | 2019-06-06 | Nolve Dev S L | Server and method for providing secure access to web-based services |
US10176008B2 (en) * | 2016-05-19 | 2019-01-08 | Airwatch, Llc | Loading and running virtual working environments in a mobile device management system |
US11218418B2 (en) | 2016-05-20 | 2022-01-04 | Nutanix, Inc. | Scalable leadership election in a multi-processing computing environment |
US10334075B2 (en) * | 2016-05-23 | 2019-06-25 | Citrix Systems, Inc. | Virtual browser integration |
US9948673B2 (en) * | 2016-05-26 | 2018-04-17 | Visa International Service Association | Reliable timestamp credential |
US20180032465A1 (en) * | 2016-05-27 | 2018-02-01 | I/O Interconnect, Ltd. | Method for providing graphical panel of docking device and docking device thereof |
US10616311B2 (en) | 2016-06-03 | 2020-04-07 | At&T Intellectual Property I, L.P. | Facilitating management of communications systems |
US10685140B2 (en) | 2016-06-10 | 2020-06-16 | OneTrust, LLC | Consent receipt management systems and related methods |
US10496846B1 (en) | 2016-06-10 | 2019-12-03 | OneTrust, LLC | Data processing and communications systems and methods for the efficient implementation of privacy by design |
US12118121B2 (en) | 2016-06-10 | 2024-10-15 | OneTrust, LLC | Data subject access request processing systems and related methods |
US11144622B2 (en) | 2016-06-10 | 2021-10-12 | OneTrust, LLC | Privacy management systems and methods |
US10839102B2 (en) | 2016-06-10 | 2020-11-17 | OneTrust, LLC | Data processing systems for identifying and modifying processes that are subject to data subject access requests |
US11562097B2 (en) | 2016-06-10 | 2023-01-24 | OneTrust, LLC | Data processing systems for central consent repository and related methods |
US11294939B2 (en) | 2016-06-10 | 2022-04-05 | OneTrust, LLC | Data processing systems and methods for automatically detecting and documenting privacy-related aspects of computer software |
US10853501B2 (en) | 2016-06-10 | 2020-12-01 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
US10796260B2 (en) | 2016-06-10 | 2020-10-06 | OneTrust, LLC | Privacy management systems and methods |
US10510031B2 (en) | 2016-06-10 | 2019-12-17 | OneTrust, LLC | Data processing systems for identifying, assessing, and remediating data processing risks using data modeling techniques |
US10909265B2 (en) | 2016-06-10 | 2021-02-02 | OneTrust, LLC | Application privacy scanning systems and related methods |
US10565236B1 (en) | 2016-06-10 | 2020-02-18 | OneTrust, LLC | Data processing systems for generating and populating a data inventory |
US11138242B2 (en) | 2016-06-10 | 2021-10-05 | OneTrust, LLC | Data processing systems and methods for automatically detecting and documenting privacy-related aspects of computer software |
US10909488B2 (en) | 2016-06-10 | 2021-02-02 | OneTrust, LLC | Data processing systems for assessing readiness for responding to privacy-related incidents |
US10565397B1 (en) | 2016-06-10 | 2020-02-18 | OneTrust, LLC | Data processing systems for fulfilling data subject access requests and related methods |
US11416798B2 (en) | 2016-06-10 | 2022-08-16 | OneTrust, LLC | Data processing systems and methods for providing training in a vendor procurement process |
US11025675B2 (en) | 2016-06-10 | 2021-06-01 | OneTrust, LLC | Data processing systems and methods for performing privacy assessments and monitoring of new versions of computer code for privacy compliance |
US10318761B2 (en) | 2016-06-10 | 2019-06-11 | OneTrust, LLC | Data processing systems and methods for auditing data request compliance |
US11057356B2 (en) | 2016-06-10 | 2021-07-06 | OneTrust, LLC | Automated data processing systems and methods for automatically processing data subject access requests using a chatbot |
US11238390B2 (en) | 2016-06-10 | 2022-02-01 | OneTrust, LLC | Privacy management systems and methods |
US10706379B2 (en) | 2016-06-10 | 2020-07-07 | OneTrust, LLC | Data processing systems for automatic preparation for remediation and related methods |
US10848523B2 (en) | 2016-06-10 | 2020-11-24 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10592692B2 (en) | 2016-06-10 | 2020-03-17 | OneTrust, LLC | Data processing systems for central consent repository and related methods |
US11392720B2 (en) | 2016-06-10 | 2022-07-19 | OneTrust, LLC | Data processing systems for verification of consent and notice processing and related methods |
US11138299B2 (en) | 2016-06-10 | 2021-10-05 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
US10776514B2 (en) | 2016-06-10 | 2020-09-15 | OneTrust, LLC | Data processing systems for the identification and deletion of personal data in computer systems |
US11651106B2 (en) | 2016-06-10 | 2023-05-16 | OneTrust, LLC | Data processing systems for fulfilling data subject access requests and related methods |
US11228620B2 (en) | 2016-06-10 | 2022-01-18 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10706176B2 (en) | 2016-06-10 | 2020-07-07 | OneTrust, LLC | Data-processing consent refresh, re-prompt, and recapture systems and related methods |
US10783256B2 (en) | 2016-06-10 | 2020-09-22 | OneTrust, LLC | Data processing systems for data transfer risk identification and related methods |
US11222139B2 (en) | 2016-06-10 | 2022-01-11 | OneTrust, LLC | Data processing systems and methods for automatic discovery and assessment of mobile software development kits |
US10944725B2 (en) | 2016-06-10 | 2021-03-09 | OneTrust, LLC | Data processing systems and methods for using a data model to select a target data asset in a data migration |
US11438386B2 (en) | 2016-06-10 | 2022-09-06 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US11087260B2 (en) | 2016-06-10 | 2021-08-10 | OneTrust, LLC | Data processing systems and methods for customizing privacy training |
US11416590B2 (en) | 2016-06-10 | 2022-08-16 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
US11074367B2 (en) | 2016-06-10 | 2021-07-27 | OneTrust, LLC | Data processing systems for identity validation for consumer rights requests and related methods |
US11134086B2 (en) | 2016-06-10 | 2021-09-28 | OneTrust, LLC | Consent conversion optimization systems and related methods |
US10873606B2 (en) | 2016-06-10 | 2020-12-22 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10997318B2 (en) | 2016-06-10 | 2021-05-04 | OneTrust, LLC | Data processing systems for generating and populating a data inventory for processing data access requests |
US10803200B2 (en) | 2016-06-10 | 2020-10-13 | OneTrust, LLC | Data processing systems for processing and managing data subject access in a distributed environment |
US11481710B2 (en) | 2016-06-10 | 2022-10-25 | OneTrust, LLC | Privacy management systems and methods |
US11341447B2 (en) | 2016-06-10 | 2022-05-24 | OneTrust, LLC | Privacy management systems and methods |
US10776517B2 (en) | 2016-06-10 | 2020-09-15 | OneTrust, LLC | Data processing systems for calculating and communicating cost of fulfilling data subject access requests and related methods |
US11038925B2 (en) | 2016-06-10 | 2021-06-15 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10572686B2 (en) | 2016-06-10 | 2020-02-25 | OneTrust, LLC | Consent receipt management systems and related methods |
US10607028B2 (en) | 2016-06-10 | 2020-03-31 | OneTrust, LLC | Data processing systems for data testing to confirm data deletion and related methods |
US10706174B2 (en) | 2016-06-10 | 2020-07-07 | OneTrust, LLC | Data processing systems for prioritizing data subject access requests for fulfillment and related methods |
US11416589B2 (en) | 2016-06-10 | 2022-08-16 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
US11023842B2 (en) | 2016-06-10 | 2021-06-01 | OneTrust, LLC | Data processing systems and methods for bundled privacy policies |
US10284604B2 (en) | 2016-06-10 | 2019-05-07 | OneTrust, LLC | Data processing and scanning systems for generating and populating a data inventory |
US10592648B2 (en) | 2016-06-10 | 2020-03-17 | OneTrust, LLC | Consent receipt management systems and related methods |
US11403377B2 (en) | 2016-06-10 | 2022-08-02 | OneTrust, LLC | Privacy management systems and methods |
US10706131B2 (en) | 2016-06-10 | 2020-07-07 | OneTrust, LLC | Data processing systems and methods for efficiently assessing the risk of privacy campaigns |
US11418492B2 (en) | 2016-06-10 | 2022-08-16 | OneTrust, LLC | Data processing systems and methods for using a data model to select a target data asset in a data migration |
US11544667B2 (en) | 2016-06-10 | 2023-01-03 | OneTrust, LLC | Data processing systems for generating and populating a data inventory |
US11343284B2 (en) | 2016-06-10 | 2022-05-24 | OneTrust, LLC | Data processing systems and methods for performing privacy assessments and monitoring of new versions of computer code for privacy compliance |
US10282700B2 (en) | 2016-06-10 | 2019-05-07 | OneTrust, LLC | Data processing systems for generating and populating a data inventory |
US10565161B2 (en) | 2016-06-10 | 2020-02-18 | OneTrust, LLC | Data processing systems for processing data subject access requests |
US11366909B2 (en) | 2016-06-10 | 2022-06-21 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
US10416966B2 (en) | 2016-06-10 | 2019-09-17 | OneTrust, LLC | Data processing systems for identity validation of data subject access requests and related methods |
US12136055B2 (en) | 2016-06-10 | 2024-11-05 | OneTrust, LLC | Data processing systems for identifying, assessing, and remediating data processing risks using data modeling techniques |
US11210420B2 (en) | 2016-06-10 | 2021-12-28 | OneTrust, LLC | Data subject access request processing systems and related methods |
US11295316B2 (en) | 2016-06-10 | 2022-04-05 | OneTrust, LLC | Data processing systems for identity validation for consumer rights requests and related methods |
US11354435B2 (en) | 2016-06-10 | 2022-06-07 | OneTrust, LLC | Data processing systems for data testing to confirm data deletion and related methods |
US11222142B2 (en) | 2016-06-10 | 2022-01-11 | OneTrust, LLC | Data processing systems for validating authorization for personal data collection, storage, and processing |
US12052289B2 (en) | 2016-06-10 | 2024-07-30 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US11146566B2 (en) | 2016-06-10 | 2021-10-12 | OneTrust, LLC | Data processing systems for fulfilling data subject access requests and related methods |
US10242228B2 (en) | 2016-06-10 | 2019-03-26 | OneTrust, LLC | Data processing systems for measuring privacy maturity within an organization |
US11100444B2 (en) | 2016-06-10 | 2021-08-24 | OneTrust, LLC | Data processing systems and methods for providing training in a vendor procurement process |
US11520928B2 (en) | 2016-06-10 | 2022-12-06 | OneTrust, LLC | Data processing systems for generating personal data receipts and related methods |
US10169609B1 (en) | 2016-06-10 | 2019-01-01 | OneTrust, LLC | Data processing systems for fulfilling data subject access requests and related methods |
US11301796B2 (en) | 2016-06-10 | 2022-04-12 | OneTrust, LLC | Data processing systems and methods for customizing privacy training |
US10585968B2 (en) | 2016-06-10 | 2020-03-10 | OneTrust, LLC | Data processing systems for fulfilling data subject access requests and related methods |
US10713387B2 (en) | 2016-06-10 | 2020-07-14 | OneTrust, LLC | Consent conversion optimization systems and related methods |
US12045266B2 (en) | 2016-06-10 | 2024-07-23 | OneTrust, LLC | Data processing systems for generating and populating a data inventory |
US11227247B2 (en) | 2016-06-10 | 2022-01-18 | OneTrust, LLC | Data processing systems and methods for bundled privacy policies |
US10726158B2 (en) | 2016-06-10 | 2020-07-28 | OneTrust, LLC | Consent receipt management and automated process blocking systems and related methods |
US10878127B2 (en) | 2016-06-10 | 2020-12-29 | OneTrust, LLC | Data subject access request processing systems and related methods |
US11354434B2 (en) | 2016-06-10 | 2022-06-07 | OneTrust, LLC | Data processing systems for verification of consent and notice processing and related methods |
US11222309B2 (en) | 2016-06-10 | 2022-01-11 | OneTrust, LLC | Data processing systems for generating and populating a data inventory |
US10949170B2 (en) * | 2016-06-10 | 2021-03-16 | OneTrust, LLC | Data processing systems for integration of consumer feedback with data subject access requests and related methods |
US10467432B2 (en) | 2016-06-10 | 2019-11-05 | OneTrust, LLC | Data processing systems for use in automatically generating, populating, and submitting data subject access requests |
US10606916B2 (en) | 2016-06-10 | 2020-03-31 | OneTrust, LLC | Data processing user interface monitoring systems and related methods |
US11586700B2 (en) | 2016-06-10 | 2023-02-21 | OneTrust, LLC | Data processing systems and methods for automatically blocking the use of tracking tools |
US11475136B2 (en) | 2016-06-10 | 2022-10-18 | OneTrust, LLC | Data processing systems for data transfer risk identification and related methods |
US10282559B2 (en) | 2016-06-10 | 2019-05-07 | OneTrust, LLC | Data processing systems for identifying, assessing, and remediating data processing risks using data modeling techniques |
US11636171B2 (en) | 2016-06-10 | 2023-04-25 | OneTrust, LLC | Data processing user interface monitoring systems and related methods |
US11336697B2 (en) | 2016-06-10 | 2022-05-17 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10740487B2 (en) | 2016-06-10 | 2020-08-11 | OneTrust, LLC | Data processing systems and methods for populating and maintaining a centralized database of personal data |
US10798133B2 (en) | 2016-06-10 | 2020-10-06 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10678945B2 (en) | 2016-06-10 | 2020-06-09 | OneTrust, LLC | Consent receipt management systems and related methods |
US11727141B2 (en) | 2016-06-10 | 2023-08-15 | OneTrust, LLC | Data processing systems and methods for synching privacy-related user consent across multiple computing devices |
US10885485B2 (en) | 2016-06-10 | 2021-01-05 | OneTrust, LLC | Privacy management systems and methods |
US11416109B2 (en) | 2016-06-10 | 2022-08-16 | OneTrust, LLC | Automated data processing systems and methods for automatically processing data subject access requests using a chatbot |
US10776518B2 (en) | 2016-06-10 | 2020-09-15 | OneTrust, LLC | Consent receipt management systems and related methods |
US11200341B2 (en) | 2016-06-10 | 2021-12-14 | OneTrust, LLC | Consent receipt management systems and related methods |
US11651104B2 (en) | 2016-06-10 | 2023-05-16 | OneTrust, LLC | Consent receipt management systems and related methods |
US11151233B2 (en) | 2016-06-10 | 2021-10-19 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
US11366786B2 (en) | 2016-06-10 | 2022-06-21 | OneTrust, LLC | Data processing systems for processing data subject access requests |
US11675929B2 (en) | 2016-06-10 | 2023-06-13 | OneTrust, LLC | Data processing consent sharing systems and related methods |
US10769301B2 (en) | 2016-06-10 | 2020-09-08 | OneTrust, LLC | Data processing systems for webform crawling to map processing activities and related methods |
US10896394B2 (en) | 2016-06-10 | 2021-01-19 | OneTrust, LLC | Privacy management systems and methods |
US11328092B2 (en) | 2016-06-10 | 2022-05-10 | OneTrust, LLC | Data processing systems for processing and managing data subject access in a distributed environment |
US10708305B2 (en) | 2016-06-10 | 2020-07-07 | OneTrust, LLC | Automated data processing systems and methods for automatically processing requests for privacy-related information |
US11625502B2 (en) | 2016-06-10 | 2023-04-11 | OneTrust, LLC | Data processing systems for identifying and modifying processes that are subject to data subject access requests |
US10503926B2 (en) | 2016-06-10 | 2019-12-10 | OneTrust, LLC | Consent receipt management systems and related methods |
US10762236B2 (en) | 2016-06-10 | 2020-09-01 | OneTrust, LLC | Data processing user interface monitoring systems and related methods |
US10949565B2 (en) | 2016-06-10 | 2021-03-16 | OneTrust, LLC | Data processing systems for generating and populating a data inventory |
US11188615B2 (en) | 2016-06-10 | 2021-11-30 | OneTrust, LLC | Data processing consent capture systems and related methods |
US11277448B2 (en) | 2016-06-10 | 2022-03-15 | OneTrust, LLC | Data processing systems for data-transfer risk identification, cross-border visualization generation, and related methods |
US10997315B2 (en) | 2016-06-10 | 2021-05-04 | OneTrust, LLC | Data processing systems for fulfilling data subject access requests and related methods |
US11188862B2 (en) | 2016-06-10 | 2021-11-30 | OneTrust, LLC | Privacy management systems and methods |
US10846433B2 (en) | 2016-06-10 | 2020-11-24 | OneTrust, LLC | Data processing consent management systems and related methods |
US11461500B2 (en) | 2016-06-10 | 2022-10-04 | OneTrust, LLC | Data processing systems for cookie compliance testing with website scanning and related methods |
US11157600B2 (en) | 2016-06-10 | 2021-10-26 | OneTrust, LLC | Data processing and scanning systems for assessing vendor risk |
EP3472960A1 (en) | 2016-06-15 | 2019-04-24 | Convida Wireless, LLC | Grant-less uplink transmission for new radio |
US10708067B2 (en) * | 2016-06-18 | 2020-07-07 | Intel Corporation | Platform attestation and registration for servers |
US12105681B2 (en) * | 2016-06-22 | 2024-10-01 | Omnissa, Llc | Automatic document handling with on-demand application mounting |
US9787639B1 (en) | 2016-06-24 | 2017-10-10 | Varmour Networks, Inc. | Granular segmentation using events |
WO2017219362A1 (en) * | 2016-06-24 | 2017-12-28 | 阿贝尔环球国际有限公司 | Terminal device and terminal operating system thereof, cloud device and cloud operating system thereof |
US10375114B1 (en) | 2016-06-27 | 2019-08-06 | Symantec Corporation | Systems and methods for enforcing access-control policies |
US10462184B1 (en) | 2016-06-28 | 2019-10-29 | Symantec Corporation | Systems and methods for enforcing access-control policies in an arbitrary physical space |
US10282229B2 (en) | 2016-06-28 | 2019-05-07 | Amazon Technologies, Inc. | Asynchronous task management in an on-demand network code execution environment |
US10778636B2 (en) * | 2016-06-28 | 2020-09-15 | ColorTokens, Inc. | Dynamic credential based addressing |
US10102040B2 (en) | 2016-06-29 | 2018-10-16 | Amazon Technologies, Inc | Adjusting variable limit on concurrent code executions |
US10203990B2 (en) | 2016-06-30 | 2019-02-12 | Amazon Technologies, Inc. | On-demand network code execution with cross-account aliases |
US10277708B2 (en) | 2016-06-30 | 2019-04-30 | Amazon Technologies, Inc. | On-demand network code execution with cross-account aliases |
US10171445B2 (en) * | 2016-06-30 | 2019-01-01 | International Business Machines Corporation | Secure virtualized servers |
US10755334B2 (en) | 2016-06-30 | 2020-08-25 | Varmour Networks, Inc. | Systems and methods for continually scoring and segmenting open opportunities using client data and product predictors |
US10467045B1 (en) | 2016-07-07 | 2019-11-05 | Binaris Inc | On-demand isolated execution of specific tasks |
WO2018009828A1 (en) | 2016-07-08 | 2018-01-11 | Vid Scale, Inc. | Systems and methods for region-of-interest tone remapping |
US11243567B2 (en) * | 2016-07-13 | 2022-02-08 | Motorola Mobility Llc | Deformable electronic device and methods and systems for reconfiguring presentation data and actuation elements |
US10372892B2 (en) | 2016-07-13 | 2019-08-06 | Motorola Mobility Llc | Electronic device with gesture actuation of companion devices, and corresponding systems and methods |
US10251056B2 (en) | 2016-07-13 | 2019-04-02 | Motorola Mobility Llc | Electronic device with gesture actuation of companion devices, and corresponding systems and methods |
US10878771B2 (en) | 2016-07-13 | 2020-12-29 | Motorola Mobility Llc | Deformable electronic device and methods and systems for display remediation to compensate performance degradation |
US10437780B2 (en) | 2016-07-14 | 2019-10-08 | Snowflake Inc. | Data pruning based on metadata |
CN107657172A (en) * | 2016-07-25 | 2018-02-02 | 腾讯科技(深圳)有限公司 | Code process method, apparatus and system |
US10341332B2 (en) * | 2016-07-26 | 2019-07-02 | International Business Machines Corporation | System and method for providing persistent user identification |
JP6789712B2 (en) * | 2016-08-01 | 2020-11-25 | キヤノン株式会社 | Image forming apparatus and its control method, and program |
RU2626550C1 (en) * | 2016-08-09 | 2017-07-28 | Акционерное Общество "Научно-Исследовательский Институт Микроэлектронной Аппаратуры "Прогресс" | Program-hardware platform and method of its realisation for wireless communication facilities |
US10303899B2 (en) * | 2016-08-11 | 2019-05-28 | Intel Corporation | Secure public cloud with protected guest-verified host control |
US10614229B2 (en) | 2016-08-24 | 2020-04-07 | International Business Machines Corporation | Security and privacy controls for remote-access support services |
US10581807B2 (en) * | 2016-08-29 | 2020-03-03 | International Business Machines Corporation | Using dispersal techniques to securely store cryptographic resources and respond to attacks |
CN106354546B (en) * | 2016-08-29 | 2019-11-22 | 北京奇虎科技有限公司 | Virtual machine remote control method and system |
CN107797845B (en) * | 2016-09-07 | 2021-06-15 | 华为技术有限公司 | Method and apparatus for accessing containers |
CN106790341B (en) * | 2016-09-08 | 2019-11-22 | 大连海事大学 | The self-adaption deployment method of mobile web service application |
US10536387B2 (en) | 2016-09-12 | 2020-01-14 | International Business Machines Corporation | Window management based on an indication of congestion in a stream computing environment |
US10572276B2 (en) | 2016-09-12 | 2020-02-25 | International Business Machines Corporation | Window management based on a set of computing resources in a stream computing environment |
CN107846433A (en) * | 2016-09-19 | 2018-03-27 | 阿里巴巴集团控股有限公司 | A kind of synchronous methods, devices and systems of session information |
US10884787B1 (en) | 2016-09-23 | 2021-01-05 | Amazon Technologies, Inc. | Execution guarantees in an on-demand network code execution system |
US10061613B1 (en) | 2016-09-23 | 2018-08-28 | Amazon Technologies, Inc. | Idempotent task execution in on-demand network code execution systems |
US10469457B1 (en) | 2016-09-26 | 2019-11-05 | Symantec Corporation | Systems and methods for securely sharing cloud-service credentials within a network of computing devices |
US10476900B2 (en) | 2016-09-30 | 2019-11-12 | McAFEE, LLC. | Safe sharing of sensitive data |
US11119813B1 (en) | 2016-09-30 | 2021-09-14 | Amazon Technologies, Inc. | Mapreduce implementation using an on-demand network code execution system |
WO2018067939A1 (en) * | 2016-10-07 | 2018-04-12 | Convida Wireless, Llc | Service layer resource management for generic interworking and extensibility |
US10368080B2 (en) | 2016-10-21 | 2019-07-30 | Microsoft Technology Licensing, Llc | Selective upsampling or refresh of chroma sample values |
US10791103B2 (en) * | 2016-10-28 | 2020-09-29 | Vmware, Inc. | Adapting remote display protocols to remote applications |
WO2018097947A2 (en) | 2016-11-03 | 2018-05-31 | Convida Wireless, Llc | Reference signals and control channels in nr |
US10785311B2 (en) * | 2016-11-08 | 2020-09-22 | Pearson Education, Inc. | Secure cloud-managed content delivery computer ecosystem |
US10270692B1 (en) * | 2016-11-10 | 2019-04-23 | Juniper Networks, Inc. | Establishing a connection to multiple network devices using a single internet protocol (IP) address |
US10313474B1 (en) * | 2016-11-14 | 2019-06-04 | Parallels International Gmbh | System and method of load balancing by offloading redundant queries to client devices |
US11064267B2 (en) | 2016-11-14 | 2021-07-13 | Google Llc | Systems and methods for providing interactive streaming media |
US10649679B2 (en) | 2016-11-23 | 2020-05-12 | Nutanix, Inc. | Containerized application extensions in distributed storage systems |
US20180145984A1 (en) * | 2016-11-24 | 2018-05-24 | Rajender Duggal | System and method for providing security solutions to protect enterprise critical assets |
CN106506521B (en) * | 2016-11-28 | 2020-08-07 | 腾讯科技(深圳)有限公司 | Resource access control method and device |
CN106789952B (en) * | 2016-11-30 | 2020-05-15 | 用友优普信息技术有限公司 | Method and system for serving local area network into internet |
US11568073B2 (en) | 2016-12-02 | 2023-01-31 | Nutanix, Inc. | Handling permissions for virtualized file servers |
US11562034B2 (en) | 2016-12-02 | 2023-01-24 | Nutanix, Inc. | Transparent referrals for distributed file servers |
US10728090B2 (en) | 2016-12-02 | 2020-07-28 | Nutanix, Inc. | Configuring network segmentation for a virtualization environment |
US10824455B2 (en) | 2016-12-02 | 2020-11-03 | Nutanix, Inc. | Virtualized server systems and methods including load balancing for virtualized file servers |
US11294777B2 (en) | 2016-12-05 | 2022-04-05 | Nutanix, Inc. | Disaster recovery for distributed file servers, including metadata fixers |
US11288239B2 (en) | 2016-12-06 | 2022-03-29 | Nutanix, Inc. | Cloning virtualized file servers |
US11281484B2 (en) | 2016-12-06 | 2022-03-22 | Nutanix, Inc. | Virtualized server systems and methods including scaling of file system virtual machines |
CN106888202B (en) * | 2016-12-08 | 2020-02-21 | 阿里巴巴集团控股有限公司 | Authorized login method and device |
US10095729B2 (en) | 2016-12-09 | 2018-10-09 | Qumulo, Inc. | Managing storage quotas in a shared storage system |
CN108205504B (en) * | 2016-12-16 | 2021-01-12 | 广州杰赛科技股份有限公司 | Terminal USB mapping method, virtual machine USB mapping method and system |
US10873565B2 (en) * | 2016-12-22 | 2020-12-22 | Nicira, Inc. | Micro-segmentation of virtual computing elements |
CN112860479A (en) | 2016-12-26 | 2021-05-28 | 华为技术有限公司 | Data storage method and cloud data center |
US10367639B2 (en) * | 2016-12-29 | 2019-07-30 | Intel Corporation | Graphics processor with encrypted kernels |
CN108279850B (en) * | 2017-01-06 | 2021-05-14 | 普天信息技术有限公司 | Data resource storage method |
WO2018136619A1 (en) * | 2017-01-18 | 2018-07-26 | Sensoriant, Inc. | Deriving personalized experiences of smart environments |
US10860342B2 (en) * | 2017-01-30 | 2020-12-08 | Citrix Systems, Inc. | Computer system providing cloud-based session prelaunch features and related methods |
US11243293B2 (en) * | 2017-02-07 | 2022-02-08 | Samsung Electronics Company, Ltd. | Radar-based system for sensing touch and in-the-air interactions |
US10761911B2 (en) | 2017-02-13 | 2020-09-01 | Nutanix, Inc. | Asynchronous application interactions in distributed systems |
EP3583780B1 (en) | 2017-02-17 | 2023-04-05 | InterDigital Madison Patent Holdings, SAS | Systems and methods for selective object-of-interest zooming in streaming video |
RU2768566C1 (en) * | 2017-02-21 | 2022-03-24 | Прайвеси Софтвэа Солюшнс Лтд. | Method and system for creating multi-mobile environments and numbers on one handset with one sim card |
US10445126B2 (en) * | 2017-02-21 | 2019-10-15 | Red Hat, Inc. | Preloading enhanced application startup |
US10599483B1 (en) * | 2017-03-01 | 2020-03-24 | Amazon Technologies, Inc. | Decentralized task execution bypassing an execution service |
US10554495B2 (en) | 2017-03-13 | 2020-02-04 | International Business Machines Corporation | Sending hardware specific soft metrics for each of a plurality of computing devices based on a plain language user policy |
EP3596593B1 (en) | 2017-03-14 | 2024-05-01 | Ciambella Ltd. | Method and apparatus for automatically generating and incorporating code in development environments |
US10812981B1 (en) | 2017-03-22 | 2020-10-20 | NortonLifeLock, Inc. | Systems and methods for certifying geolocation coordinates of computing devices |
MX2019011257A (en) * | 2017-03-28 | 2019-11-01 | Cloudjumper Corp | Methods and systems for providing wake-on-demand access to session servers. |
US10686729B2 (en) | 2017-03-29 | 2020-06-16 | Fungible, Inc. | Non-blocking any-to-any data center network with packet spraying over multiple alternate data paths |
WO2018183526A1 (en) | 2017-03-29 | 2018-10-04 | Fungible, Inc. | Non-blocking, full-mesh data center network having optical permutors |
WO2018183553A1 (en) | 2017-03-29 | 2018-10-04 | Fungible, Inc. | Non-blocking any-to-any data center network having multiplexed packet spraying within access node groups |
EP3602369B1 (en) | 2017-03-30 | 2022-03-30 | British Telecommunications public limited company | Anomaly detection for computer systems |
EP3382591B1 (en) | 2017-03-30 | 2020-03-25 | British Telecommunications public limited company | Hierarchical temporal memory for expendable access control |
WO2018178026A1 (en) | 2017-03-30 | 2018-10-04 | British Telecommunications Public Limited Company | Hierarchical temporal memory for access control |
US10565112B2 (en) | 2017-04-10 | 2020-02-18 | Fungible, Inc. | Relay consistent memory management in a multiple processor system |
US10635851B2 (en) * | 2017-04-13 | 2020-04-28 | Sap Se | Virtualized server side rendering |
US10754971B2 (en) * | 2017-04-21 | 2020-08-25 | Google Llc | Referenced access control list |
US10783235B1 (en) * | 2017-05-04 | 2020-09-22 | Amazon Technologies, Inc. | Secure remote access of computing resources |
WO2018206405A1 (en) | 2017-05-08 | 2018-11-15 | British Telecommunications Public Limited Company | Interoperation of machine learning algorithms |
EP3622448A1 (en) | 2017-05-08 | 2020-03-18 | British Telecommunications Public Limited Company | Adaptation of machine learning algorithms |
EP3622450A1 (en) | 2017-05-08 | 2020-03-18 | British Telecommunications Public Limited Company | Management of interoperating machine leaning algorithms |
WO2018206374A1 (en) | 2017-05-08 | 2018-11-15 | British Telecommunications Public Limited Company | Load balancing of machine learning algorithms |
CN107147714A (en) * | 2017-05-09 | 2017-09-08 | 郑州云海信息技术有限公司 | A kind of interrupt request device and method that cpu resource is distributed to physical network card |
US10560404B2 (en) * | 2017-06-14 | 2020-02-11 | Citrix Systems, Inc. | Real-time cloud-based messaging system |
US10013577B1 (en) | 2017-06-16 | 2018-07-03 | OneTrust, LLC | Data processing systems for identifying whether cookies contain personally identifying information |
US10121001B1 (en) | 2017-06-21 | 2018-11-06 | Qualcomm Incorporated | System and method for monolithic scheduling in a portable computing device using a hypervisor |
US10425380B2 (en) | 2017-06-22 | 2019-09-24 | BitSight Technologies, Inc. | Methods for mapping IP addresses and domains to organizations using user activity data |
US10637800B2 (en) | 2017-06-30 | 2020-04-28 | Nicira, Inc | Replacement of logical network addresses with physical network addresses |
US10681000B2 (en) | 2017-06-30 | 2020-06-09 | Nicira, Inc. | Assignment of unique physical network addresses for logical network addresses |
CN107391276B (en) * | 2017-07-05 | 2018-09-28 | 腾讯科技(深圳)有限公司 | Distributed monitor method, interception control device and system |
US10621001B1 (en) | 2017-07-06 | 2020-04-14 | Binaris Inc | Systems and methods for efficiently expediting execution of tasks in isolated environments |
US10417043B1 (en) | 2017-07-06 | 2019-09-17 | Binaris Inc | Systems and methods for executing tasks adaptively |
CN117348976A (en) | 2017-07-10 | 2024-01-05 | 微软技术许可有限责任公司 | Data processing unit for stream processing |
CN110915173B (en) | 2017-07-10 | 2022-04-29 | 芬基波尔有限责任公司 | Data processing unit for computing nodes and storage nodes |
US10499249B1 (en) | 2017-07-11 | 2019-12-03 | Sprint Communications Company L.P. | Data link layer trust signaling in communication network |
CN109286598B (en) * | 2017-07-20 | 2020-12-01 | 中国科学院声学研究所 | TLS channel encrypted RDP protocol plaintext data acquisition system and method |
US11240207B2 (en) | 2017-08-11 | 2022-02-01 | L3 Technologies, Inc. | Network isolation |
US10585692B2 (en) | 2017-08-15 | 2020-03-10 | International Business Machines Corporation | Enhancing virtual machine performance using autonomics |
US11601467B2 (en) | 2017-08-24 | 2023-03-07 | L3 Technologies, Inc. | Service provider advanced threat protection |
LT3767494T (en) | 2017-08-28 | 2023-03-10 | Bright Data Ltd. | Method for improving content fetching by selecting tunnel devices |
US11190374B2 (en) | 2017-08-28 | 2021-11-30 | Bright Data Ltd. | System and method for improving content fetching by selecting tunnel devices |
US10560528B2 (en) | 2017-08-29 | 2020-02-11 | Western Digital Technologies, Inc. | Cloud-based management of access to a data storage system on a local network |
US20190082051A1 (en) * | 2017-09-13 | 2019-03-14 | Teleperformance Se | Dynamic computing environment allocation for contact center interaction |
CN107632877A (en) * | 2017-09-15 | 2018-01-26 | 湖南新云网科技有限公司 | VDI and VOI framework virtual machine emerging systems and startup method |
US11687654B2 (en) * | 2017-09-15 | 2023-06-27 | Intel Corporation | Providing isolation in virtualized systems using trust domains |
US10599453B1 (en) * | 2017-09-25 | 2020-03-24 | Amazon Technologies, Inc. | Dynamic content generation with on-demand code execution |
US11178104B2 (en) | 2017-09-26 | 2021-11-16 | L3 Technologies, Inc. | Network isolation with cloud networks |
US11336619B2 (en) | 2017-09-28 | 2022-05-17 | L3 Technologies, Inc. | Host process and memory separation |
US11223601B2 (en) | 2017-09-28 | 2022-01-11 | L3 Technologies, Inc. | Network isolation for collaboration software |
US10931669B2 (en) * | 2017-09-28 | 2021-02-23 | L3 Technologies, Inc. | Endpoint protection and authentication |
US11552987B2 (en) | 2017-09-28 | 2023-01-10 | L3 Technologies, Inc. | Systems and methods for command and control protection |
US11184323B2 (en) | 2017-09-28 | 2021-11-23 | L3 Technologies, Inc | Threat isolation using a plurality of containers |
US11374906B2 (en) | 2017-09-28 | 2022-06-28 | L3 Technologies, Inc. | Data exfiltration system and methods |
CN111164938A (en) | 2017-09-29 | 2020-05-15 | 芬基波尔有限责任公司 | Resilient network communication using selective multipath packet stream injection |
CN111149329A (en) | 2017-09-29 | 2020-05-12 | 芬基波尔有限责任公司 | Architecture control protocol for data center networks with packet injection via multiple backup data paths |
US10853093B2 (en) * | 2017-09-29 | 2020-12-01 | Dell Products L.P. | Application profiling via loopback methods |
US10630642B2 (en) | 2017-10-06 | 2020-04-21 | Stealthpath, Inc. | Methods for internet communication security |
US10367811B2 (en) | 2017-10-06 | 2019-07-30 | Stealthpath, Inc. | Methods for internet communication security |
US10397186B2 (en) | 2017-10-06 | 2019-08-27 | Stealthpath, Inc. | Methods for internet communication security |
SG11202002863SA (en) * | 2017-10-06 | 2020-04-29 | Stealthpath Inc | Methods for internet communication security |
US10361859B2 (en) | 2017-10-06 | 2019-07-23 | Stealthpath, Inc. | Methods for internet communication security |
US10375019B2 (en) | 2017-10-06 | 2019-08-06 | Stealthpath, Inc. | Methods for internet communication security |
CN109656646B (en) * | 2017-10-11 | 2022-05-24 | 阿里巴巴集团控股有限公司 | Remote desktop control method, device, equipment and virtualization chip |
US10911439B2 (en) * | 2017-10-12 | 2021-02-02 | Mx Technologies, Inc. | Aggregation platform permissions |
CN107844302B (en) * | 2017-10-18 | 2020-12-11 | 上海瀚之友信息技术服务有限公司 | Production environment simulation system based on virtual machine |
US10498653B2 (en) * | 2017-10-19 | 2019-12-03 | International Business Machines Corporation | Encryption prioritization for distributed streaming applications |
US11550898B2 (en) | 2017-10-23 | 2023-01-10 | L3 Technologies, Inc. | Browser application implementing sandbox based internet isolation |
US11120125B2 (en) | 2017-10-23 | 2021-09-14 | L3 Technologies, Inc. | Configurable internet isolation and security for laptops and similar devices |
US11170096B2 (en) | 2017-10-23 | 2021-11-09 | L3 Technologies, Inc. | Configurable internet isolation and security for mobile devices |
US10552188B2 (en) * | 2017-11-01 | 2020-02-04 | Alibaba Group Holding Limited | Virtual private cloud services with physical machine servers and virtual machines |
ES2853487T3 (en) * | 2017-11-17 | 2021-09-16 | Asustek Comp Inc | Method and apparatus for user equipment (UE) monitoring behavior for beam recovery in a wireless communication system |
WO2019104090A1 (en) | 2017-11-21 | 2019-05-31 | Fungible, Inc. | Work unit stack data structures in multiple core processor system for stream data processing |
US10802861B2 (en) * | 2017-11-30 | 2020-10-13 | International Busienss Machines Corporation | Accessing host services for virtual guest operating systems |
US10680969B1 (en) * | 2017-12-08 | 2020-06-09 | Amazon Technologies, Inc. | Methods and apparatus for allocating host resources to virtual machines |
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
US10564946B1 (en) | 2017-12-13 | 2020-02-18 | Amazon Technologies, Inc. | Dependency handling in an on-demand network code execution system |
US10303492B1 (en) | 2017-12-13 | 2019-05-28 | Amazon Technologies, Inc. | Managing custom runtimes in an on-demand code execution system |
FI127806B (en) * | 2017-12-22 | 2019-02-28 | Prosys Opc Oy | A method, a system and a computer program product for managing OPC UA server capacity |
JP2019117571A (en) * | 2017-12-27 | 2019-07-18 | シャープ株式会社 | Information processing apparatus, information processing system, information processing method and program |
CN108600284B (en) * | 2017-12-28 | 2021-05-14 | 武汉噢易云计算股份有限公司 | Ceph-based virtual machine high-availability implementation method and system |
TWI647935B (en) * | 2017-12-28 | 2019-01-11 | 中華電信股份有限公司 | System and method for saving backbone bandwidth |
WO2019135773A1 (en) * | 2018-01-08 | 2019-07-11 | Hewlett-Packard Development Company, L.P. | Brokering servers based on remote access performance |
CN108415769A (en) * | 2018-01-14 | 2018-08-17 | 长沙开雅电子科技有限公司 | A kind of storage system CPU acceleration processing data requesting instructions implementation method |
CN108245132B (en) * | 2018-01-15 | 2020-07-14 | 浙江大学 | Bluetooth-based intelligent interaction method for medical wearable equipment |
CN110099080B (en) * | 2018-01-29 | 2022-05-06 | 阿里巴巴集团控股有限公司 | Equipment networking activation method and device and cloud network equipment |
WO2019152063A1 (en) | 2018-02-02 | 2019-08-08 | Fungible, Inc. | Efficient work unit processing in a multicore system |
US10733085B1 (en) | 2018-02-05 | 2020-08-04 | Amazon Technologies, Inc. | Detecting impedance mismatches due to cross-service calls |
US10353678B1 (en) | 2018-02-05 | 2019-07-16 | Amazon Technologies, Inc. | Detecting code characteristic alterations due to cross-service calls |
US10572375B1 (en) | 2018-02-05 | 2020-02-25 | Amazon Technologies, Inc. | Detecting parameter validity in code including cross-service calls |
US10831898B1 (en) | 2018-02-05 | 2020-11-10 | Amazon Technologies, Inc. | Detecting privilege escalations in code including cross-service calls |
US10725752B1 (en) | 2018-02-13 | 2020-07-28 | Amazon Technologies, Inc. | Dependency handling in an on-demand network code execution system |
US10776091B1 (en) | 2018-02-26 | 2020-09-15 | Amazon Technologies, Inc. | Logging endpoint in an on-demand code execution system |
US10257219B1 (en) | 2018-03-12 | 2019-04-09 | BitSight Technologies, Inc. | Correlated risk in cybersecurity |
US10277924B1 (en) | 2018-03-22 | 2019-04-30 | Amazon Technologies, Inc. | Stitching content streams together |
CN108519883A (en) * | 2018-03-26 | 2018-09-11 | 平安普惠企业管理有限公司 | Parameter amending method, device, terminal device and storage medium |
JP7033978B2 (en) * | 2018-03-28 | 2022-03-11 | 株式会社トプコン | Remote control system for surveying instruments |
US10812520B2 (en) | 2018-04-17 | 2020-10-20 | BitSight Technologies, Inc. | Systems and methods for external detection of misconfigured systems |
US20190327159A1 (en) * | 2018-04-20 | 2019-10-24 | Nutanix, Inc. | Systems and methods for identifying and displaying logon duration metrics |
WO2019209893A1 (en) * | 2018-04-23 | 2019-10-31 | SCRRD, Inc. | Operating system on a computing system |
US11086826B2 (en) | 2018-04-30 | 2021-08-10 | Nutanix, Inc. | Virtualized server systems and methods including domain joining techniques |
US10904325B2 (en) * | 2018-05-04 | 2021-01-26 | Citrix Systems, Inc. | WebRTC API redirection with screen sharing |
US11824785B2 (en) | 2018-05-04 | 2023-11-21 | Citrix Systems, Inc. | Systems and methods for remote computing session display based upon user input event prioritization |
EP3788478A1 (en) | 2018-05-04 | 2021-03-10 | Citrix Systems, Inc. | Computer system providing hierarchical display remoting optimized with user and system hints and related methods |
US11206251B2 (en) * | 2018-05-11 | 2021-12-21 | Sony Mobile Communications Inc. | System and method for communicating information about a serviceable item |
US11194609B1 (en) * | 2018-05-23 | 2021-12-07 | Open Invention Network Llc | Onboarding VNFs which include VNFCs that are composed of independently manageable software modules |
US11057385B2 (en) * | 2018-05-24 | 2021-07-06 | Nicira, Inc. | Methods to restrict network file access in guest virtual machines using in-guest agents |
CN108762934B (en) * | 2018-06-02 | 2021-09-07 | 武汉泽塔云科技股份有限公司 | Remote graphic transmission system and method and cloud server |
US11360936B2 (en) | 2018-06-08 | 2022-06-14 | Qumulo, Inc. | Managing per object snapshot coverage in filesystems |
US10817604B1 (en) | 2018-06-19 | 2020-10-27 | Architecture Technology Corporation | Systems and methods for processing source codes to detect non-malicious faults |
US10749890B1 (en) | 2018-06-19 | 2020-08-18 | Architecture Technology Corporation | Systems and methods for improving the ranking and prioritization of attack-related events |
US11012427B2 (en) * | 2018-06-21 | 2021-05-18 | EMC IP Holding Company LLC | RSA trusted networks: RSA packet frames for advanced networking switches |
US10853115B2 (en) | 2018-06-25 | 2020-12-01 | Amazon Technologies, Inc. | Execution of auxiliary functions in an on-demand network code execution system |
US10649749B1 (en) | 2018-06-26 | 2020-05-12 | Amazon Technologies, Inc. | Cross-environment application of tracing information for improved code execution |
US11146569B1 (en) | 2018-06-28 | 2021-10-12 | Amazon Technologies, Inc. | Escalation-resistant secure network services using request-scoped authentication information |
US10949237B2 (en) | 2018-06-29 | 2021-03-16 | Amazon Technologies, Inc. | Operating system customization in an on-demand network code execution system |
CN109120588B (en) * | 2018-06-29 | 2021-04-09 | 华为技术有限公司 | Method for acquiring verification information and data center |
US10877774B2 (en) * | 2018-07-17 | 2020-12-29 | Sap Se | Cloud integration of application runtime |
US11194680B2 (en) | 2018-07-20 | 2021-12-07 | Nutanix, Inc. | Two node clusters recovery on a failure |
US11099870B1 (en) | 2018-07-25 | 2021-08-24 | Amazon Technologies, Inc. | Reducing execution times in an on-demand network code execution system using saved machine states |
CN110851750B (en) * | 2018-08-01 | 2022-07-22 | 北京国双科技有限公司 | Data acquisition method and device |
CN109086120A (en) * | 2018-08-03 | 2018-12-25 | 北京奇虎科技有限公司 | Management method, device and the calculating equipment of resources of virtual machine |
US11055115B1 (en) * | 2018-08-09 | 2021-07-06 | Parallels International Gmbh | Virtual machine conversion in distributed system of remote desktops |
CN109120616B (en) * | 2018-08-16 | 2021-12-21 | 上海达梦数据库有限公司 | Identity authentication method, identity authentication device, proxy server and storage medium |
CN109151582A (en) * | 2018-08-16 | 2019-01-04 | 海信电子科技(深圳)有限公司 | More application management methods, device and terminal based on Linux set-top box |
US11025641B2 (en) * | 2018-08-21 | 2021-06-01 | Bank Of America Corporation | System for optimizing access control for server privilege |
US11356452B2 (en) * | 2018-09-05 | 2022-06-07 | Corelogic Solutions, Llc | System, computer program product and method for risk evaluation of API login and use |
US11544409B2 (en) | 2018-09-07 | 2023-01-03 | OneTrust, LLC | Data processing systems and methods for automatically protecting sensitive data within privacy management systems |
US10803202B2 (en) | 2018-09-07 | 2020-10-13 | OneTrust, LLC | Data processing systems for orphaned data identification and deletion and related methods |
US11144675B2 (en) | 2018-09-07 | 2021-10-12 | OneTrust, LLC | Data processing systems and methods for automatically protecting sensitive data within privacy management systems |
US10765952B2 (en) | 2018-09-21 | 2020-09-08 | Sony Interactive Entertainment LLC | System-level multiplayer matchmaking |
US11099917B2 (en) | 2018-09-27 | 2021-08-24 | Amazon Technologies, Inc. | Efficient state maintenance for execution environments in an on-demand code execution system |
EP3858023A1 (en) | 2018-09-27 | 2021-08-04 | Convida Wireless, Llc | Sub-band operations in unlicensed spectrums of new radio |
US11243953B2 (en) | 2018-09-27 | 2022-02-08 | Amazon Technologies, Inc. | Mapreduce implementation in an on-demand network code execution system and stream data processing system |
US10695671B2 (en) | 2018-09-28 | 2020-06-30 | Sony Interactive Entertainment LLC | Establishing and managing multiplayer sessions |
US11188622B2 (en) | 2018-09-28 | 2021-11-30 | Daniel Chien | Systems and methods for computer security |
CN109710905B (en) * | 2018-09-30 | 2023-04-28 | 天津字节跳动科技有限公司 | Document collaborative editing method and device, storage medium and electronic equipment |
US10963621B2 (en) * | 2018-10-10 | 2021-03-30 | Citrix Systems, Inc. | Management of remote access user application layouts |
US10719362B2 (en) * | 2018-10-10 | 2020-07-21 | Oracle International Corporation | Managing multiple isolated execution contexts in a single process |
US11200323B2 (en) | 2018-10-17 | 2021-12-14 | BitSight Technologies, Inc. | Systems and methods for forecasting cybersecurity ratings based on event-rate scenarios |
US10521583B1 (en) | 2018-10-25 | 2019-12-31 | BitSight Technologies, Inc. | Systems and methods for remote detection of software through browser webinjects |
US11770447B2 (en) | 2018-10-31 | 2023-09-26 | Nutanix, Inc. | Managing high-availability file servers |
US11057373B2 (en) | 2018-11-16 | 2021-07-06 | Bank Of America Corporation | System for authentication using channel dependent one-time passwords |
US11943093B1 (en) | 2018-11-20 | 2024-03-26 | Amazon Technologies, Inc. | Network connection recovery after virtual machine transition in an on-demand network code execution system |
US10929175B2 (en) * | 2018-11-21 | 2021-02-23 | Fungible, Inc. | Service chaining hardware accelerators within a data stream processing integrated circuit |
CN109302425B (en) * | 2018-11-28 | 2021-02-26 | 河北省科学院应用数学研究所 | Identity authentication method and terminal equipment |
CN109614429B (en) * | 2018-12-03 | 2023-04-07 | 北京安华金和科技有限公司 | Method for realizing association of application access and database access behaviors based on kernel driver |
US11782881B2 (en) * | 2018-12-05 | 2023-10-10 | Vmware, Inc. | Recommending remotely executed applications for opening files |
US10884812B2 (en) | 2018-12-13 | 2021-01-05 | Amazon Technologies, Inc. | Performance-based hardware emulation in an on-demand network code execution system |
US10534758B1 (en) | 2018-12-20 | 2020-01-14 | Qumulo, Inc. | File system cache tiers |
CN109726050B (en) * | 2018-12-28 | 2021-01-26 | 杭州迪普科技股份有限公司 | Process repairing method and device |
US11429713B1 (en) | 2019-01-24 | 2022-08-30 | Architecture Technology Corporation | Artificial intelligence modeling for cyber-attack simulation protocols |
US11151092B2 (en) | 2019-01-30 | 2021-10-19 | Qumulo, Inc. | Data replication in distributed file systems |
US11128654B1 (en) | 2019-02-04 | 2021-09-21 | Architecture Technology Corporation | Systems and methods for unified hierarchical cybersecurity |
US11010188B1 (en) | 2019-02-05 | 2021-05-18 | Amazon Technologies, Inc. | Simulated data object storage using on-demand computation of data objects |
US10713181B1 (en) * | 2019-02-21 | 2020-07-14 | Virtuozzo International Gmbh | Method and system for sharing driver pages |
EP4075304B1 (en) | 2019-02-25 | 2023-06-28 | Bright Data Ltd. | System and method for url fetching retry mechanism |
CN113366461B (en) * | 2019-02-28 | 2024-07-02 | 惠普发展公司,有限责任合伙企业 | Accessing firmware settings using asymmetric cryptography |
US11829277B2 (en) * | 2019-03-21 | 2023-11-28 | Dish Network Technologies India Private Limited | Systems and methods for remote debugging |
US11861386B1 (en) | 2019-03-22 | 2024-01-02 | Amazon Technologies, Inc. | Application gateways in an on-demand network code execution system |
US11943229B2 (en) * | 2019-03-29 | 2024-03-26 | Innoplexus Ag | System and method of managing access to remote digital platforms |
EP4027618B1 (en) | 2019-04-02 | 2024-07-31 | Bright Data Ltd. | Managing a non-direct url fetching service |
US10986089B2 (en) * | 2019-04-11 | 2021-04-20 | Kas Kasravi | Virtual mobile device system and method thereof |
US11016797B2 (en) * | 2019-04-12 | 2021-05-25 | Ghost Locomotion Inc. | Device security across multiple operating system modalities |
CN110086661B (en) * | 2019-04-18 | 2022-02-25 | 绿盟科技集团股份有限公司 | Method and device for identifying virtual terminal |
US11949677B2 (en) * | 2019-04-23 | 2024-04-02 | Microsoft Technology Licensing, Llc | Resource access based on audio signal |
US11887505B1 (en) | 2019-04-24 | 2024-01-30 | Architecture Technology Corporation | System for deploying and monitoring network-based training exercises |
US10659388B1 (en) | 2019-05-01 | 2020-05-19 | Bank Of America Corporation | Transaction processing throttle with dynamic transaction load balancing and transaction starvation prevention |
CN111897621A (en) * | 2019-05-06 | 2020-11-06 | 阿里巴巴集团控股有限公司 | Virtual machine migration method, device, equipment, system and storage medium |
US11258773B2 (en) * | 2019-05-13 | 2022-02-22 | Verizon Patent And Licensing Inc. | System and method for providing a privacy layer to secure client data in a network |
US11134079B2 (en) | 2019-05-21 | 2021-09-28 | International Business Machines Corporation | Cognitive behavioral and environmental access |
US11863580B2 (en) | 2019-05-31 | 2024-01-02 | Varmour Networks, Inc. | Modeling application dependencies to identify operational risk |
US11290493B2 (en) | 2019-05-31 | 2022-03-29 | Varmour Networks, Inc. | Template-driven intent-based security |
US11711374B2 (en) | 2019-05-31 | 2023-07-25 | Varmour Networks, Inc. | Systems and methods for understanding identity and organizational access to applications within an enterprise environment |
US11310284B2 (en) | 2019-05-31 | 2022-04-19 | Varmour Networks, Inc. | Validation of cloud security policies |
US11290494B2 (en) | 2019-05-31 | 2022-03-29 | Varmour Networks, Inc. | Reliability prediction for cloud security policies |
US11575563B2 (en) | 2019-05-31 | 2023-02-07 | Varmour Networks, Inc. | Cloud security management |
US11442599B2 (en) | 2019-06-07 | 2022-09-13 | Microsoft Technology Licensing, Llc | Systems and methods for hosting a browser within another browser |
US11570004B2 (en) * | 2019-06-13 | 2023-01-31 | Fidelity Information Services, Llc | Dynamic self-defined API via digital signatures |
US11119809B1 (en) | 2019-06-20 | 2021-09-14 | Amazon Technologies, Inc. | Virtualization-based transaction handling in an on-demand network code execution system |
US11620389B2 (en) | 2019-06-24 | 2023-04-04 | University Of Maryland Baltimore County | Method and system for reducing false positives in static source code analysis reports using machine learning and classification techniques |
CN110266705B (en) * | 2019-06-25 | 2020-10-02 | 珠海格力电器股份有限公司 | Control method and system |
US11403405B1 (en) | 2019-06-27 | 2022-08-02 | Architecture Technology Corporation | Portable vulnerability identification tool for embedded non-IP devices |
CN110365756B (en) * | 2019-06-28 | 2021-09-14 | 联想(北京)有限公司 | Access method, electronic device and computer storage medium |
US11115404B2 (en) | 2019-06-28 | 2021-09-07 | Amazon Technologies, Inc. | Facilitating service connections in serverless code executions |
US11159528B2 (en) | 2019-06-28 | 2021-10-26 | Amazon Technologies, Inc. | Authentication to network-services using hosted authentication information |
US11190609B2 (en) | 2019-06-28 | 2021-11-30 | Amazon Technologies, Inc. | Connection pooling for scalable network services |
CN110321515B (en) * | 2019-07-12 | 2021-07-27 | 北京字节跳动网络技术有限公司 | Webpage data storage method, device, equipment and storage medium |
US10726136B1 (en) | 2019-07-17 | 2020-07-28 | BitSight Technologies, Inc. | Systems and methods for generating security improvement plans for entities |
US11163584B2 (en) | 2019-07-26 | 2021-11-02 | Vmware Inc. | User device compliance-profile-based access to virtual sessions and select virtual session capabilities |
US11093262B2 (en) | 2019-07-29 | 2021-08-17 | Motorola Mobility Llc | Electronic devices and corresponding methods for switching between normal and privacy modes of operation |
US11288399B2 (en) * | 2019-08-05 | 2022-03-29 | Visa International Service Association | Cryptographically secure dynamic third party resources |
US11095735B2 (en) | 2019-08-06 | 2021-08-17 | Tealium Inc. | Configuration of event data communication in computer networks |
US11027196B2 (en) | 2019-09-04 | 2021-06-08 | Take-Two Interactive Software, Inc. | System and method for managing transactions in a multiplayer network gaming environment |
US11113375B2 (en) | 2019-09-09 | 2021-09-07 | Motorola Mobility Llc | Electronic devices with proximity authentication and gaze actuation of companion electronic devices and corresponding methods |
US11237878B2 (en) * | 2019-09-09 | 2022-02-01 | Microsoft Technology Licensing, Llc | Transforming system calls in a distributed architecture |
US11218300B1 (en) | 2019-09-10 | 2022-01-04 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography communications channels |
US11552793B1 (en) | 2019-09-10 | 2023-01-10 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography communications channels |
US11218301B1 (en) | 2019-09-10 | 2022-01-04 | Wells Fargo Bank, N.A. | Systems and methods for post-quantum cryptography communications channels |
US10848382B1 (en) | 2019-09-26 | 2020-11-24 | BitSight Technologies, Inc. | Systems and methods for network asset discovery and association thereof with entities |
US11023416B2 (en) | 2019-09-27 | 2021-06-01 | Amazon Technologies, Inc. | Data access control system for object storage service based on owner-defined code |
US11550944B2 (en) | 2019-09-27 | 2023-01-10 | Amazon Technologies, Inc. | Code execution environment customization system for object storage service |
US11250007B1 (en) | 2019-09-27 | 2022-02-15 | Amazon Technologies, Inc. | On-demand execution of object combination code in output path of object storage service |
US11360948B2 (en) | 2019-09-27 | 2022-06-14 | Amazon Technologies, Inc. | Inserting owner-specified data processing pipelines into input/output path of object storage service |
US11023311B2 (en) | 2019-09-27 | 2021-06-01 | Amazon Technologies, Inc. | On-demand code execution in input path of data uploaded to storage service in multiple data portions |
US11263220B2 (en) | 2019-09-27 | 2022-03-01 | Amazon Technologies, Inc. | On-demand execution of object transformation code in output path of object storage service |
US11656892B1 (en) | 2019-09-27 | 2023-05-23 | Amazon Technologies, Inc. | Sequential execution of user-submitted code and native functions |
US11106477B2 (en) | 2019-09-27 | 2021-08-31 | Amazon Technologies, Inc. | Execution of owner-specified code during input/output path to object storage service |
US11386230B2 (en) | 2019-09-27 | 2022-07-12 | Amazon Technologies, Inc. | On-demand code obfuscation of data in input path of object storage service |
US11394761B1 (en) | 2019-09-27 | 2022-07-19 | Amazon Technologies, Inc. | Execution of user-submitted code on a stream of data |
US11055112B2 (en) | 2019-09-27 | 2021-07-06 | Amazon Technologies, Inc. | Inserting executions of owner-specified code into input/output path of object storage service |
US10996961B2 (en) | 2019-09-27 | 2021-05-04 | Amazon Technologies, Inc. | On-demand indexing of data in input path of object storage service |
US10908927B1 (en) | 2019-09-27 | 2021-02-02 | Amazon Technologies, Inc. | On-demand execution of object filter code in output path of object storage service |
US11416628B2 (en) | 2019-09-27 | 2022-08-16 | Amazon Technologies, Inc. | User-specific data manipulation system for object storage service based on user-submitted code |
US11558423B2 (en) | 2019-09-27 | 2023-01-17 | Stealthpath, Inc. | Methods for zero trust security with high quality of service |
US11032244B2 (en) | 2019-09-30 | 2021-06-08 | BitSight Technologies, Inc. | Systems and methods for determining asset importance in security risk management |
US11444974B1 (en) | 2019-10-23 | 2022-09-13 | Architecture Technology Corporation | Systems and methods for cyber-physical threat modeling |
US11803658B1 (en) * | 2019-10-29 | 2023-10-31 | United Services Automobile Association (Usaa) | Data access control |
US11354402B2 (en) * | 2019-11-01 | 2022-06-07 | Microsoft Technology Licensing, Llc | Virtual environment type validation for policy enforcement |
CN110826069B (en) * | 2019-11-05 | 2022-09-30 | 深信服科技股份有限公司 | Virus processing method, device, equipment and storage medium |
CN111079104B (en) * | 2019-11-21 | 2023-07-11 | 腾讯科技(深圳)有限公司 | Authority control method, device, equipment and storage medium |
US11297147B2 (en) * | 2019-11-22 | 2022-04-05 | Amazon Technologies, Inc. | Managed data export to a remote network from edge devices |
US10942795B1 (en) | 2019-11-27 | 2021-03-09 | Amazon Technologies, Inc. | Serverless call distribution to utilize reserved capacity without inhibiting scaling |
US11119826B2 (en) | 2019-11-27 | 2021-09-14 | Amazon Technologies, Inc. | Serverless call distribution to implement spillover while avoiding cold starts |
CN111132373B (en) * | 2019-12-05 | 2023-08-04 | 北京小米移动软件有限公司 | Network connection method, device and equipment |
US11677754B2 (en) * | 2019-12-09 | 2023-06-13 | Daniel Chien | Access control systems and methods |
US11146656B2 (en) | 2019-12-20 | 2021-10-12 | Tealium Inc. | Feature activation control and data prefetching with network-connected mobile devices |
WO2021137855A1 (en) * | 2019-12-31 | 2021-07-08 | Safe12, Inc. | Methods and apparatus for protecting computer data using hidden wireless data communications |
US11503075B1 (en) | 2020-01-14 | 2022-11-15 | Architecture Technology Corporation | Systems and methods for continuous compliance of nodes |
US11249770B2 (en) * | 2020-01-16 | 2022-02-15 | Vmware, Inc. | Connected provisioning |
US10795796B1 (en) | 2020-01-24 | 2020-10-06 | Qumulo, Inc. | Predictive performance analysis for file systems |
US10860372B1 (en) | 2020-01-24 | 2020-12-08 | Qumulo, Inc. | Managing throughput fairness and quality of service in file systems |
US11151001B2 (en) | 2020-01-28 | 2021-10-19 | Qumulo, Inc. | Recovery checkpoints for distributed file systems |
US10791140B1 (en) | 2020-01-29 | 2020-09-29 | BitSight Technologies, Inc. | Systems and methods for assessing cybersecurity state of entities based on computer network characterization |
US10893067B1 (en) | 2020-01-31 | 2021-01-12 | BitSight Technologies, Inc. | Systems and methods for rapidly generating security ratings |
US10764298B1 (en) * | 2020-02-26 | 2020-09-01 | BitSight Technologies, Inc. | Systems and methods for improving a security profile of an entity based on peer security profiles |
US11714682B1 (en) | 2020-03-03 | 2023-08-01 | Amazon Technologies, Inc. | Reclaiming computing resources in an on-demand code execution system |
US11457057B2 (en) * | 2020-03-11 | 2022-09-27 | Microsoft Technology Licensing, Llc | Systems and methods for establishing highly secure and resilient persistent communication connections |
US11188391B1 (en) | 2020-03-11 | 2021-11-30 | Amazon Technologies, Inc. | Allocating resources to on-demand code executions under scarcity conditions |
CN111338829B (en) * | 2020-03-26 | 2023-09-15 | 口碑(上海)信息技术有限公司 | Calling method and device for remote procedure call service |
US11829499B2 (en) * | 2020-03-26 | 2023-11-28 | Bank Of America Corporation | Securing PIN information using obfuscation by applying extra security layer |
US11775640B1 (en) | 2020-03-30 | 2023-10-03 | Amazon Technologies, Inc. | Resource utilization-based malicious task detection in an on-demand code execution system |
US11740918B2 (en) * | 2020-04-02 | 2023-08-29 | Vmware, Inc. | Method for accessing application logs within virtual machines based on operator-defined criteria |
CN111416874A (en) * | 2020-04-02 | 2020-07-14 | 腾讯科技(深圳)有限公司 | Method, device and system for session reestablishment or sharing |
CN115623257A (en) * | 2020-04-20 | 2023-01-17 | 华为技术有限公司 | Screen projection display method, system, terminal device and storage medium |
US11768809B2 (en) | 2020-05-08 | 2023-09-26 | Nutanix, Inc. | Managing incremental snapshots for fast leader node bring-up |
US11216553B1 (en) | 2020-05-14 | 2022-01-04 | Rapid7, Inc. | Machine scanning system with distributed credential storage |
US11023585B1 (en) | 2020-05-27 | 2021-06-01 | BitSight Technologies, Inc. | Systems and methods for managing cybersecurity alerts |
US11196817B1 (en) * | 2020-06-03 | 2021-12-07 | Dell Products L.P. | Intelligently managing resource utilization in desktop virtualization environments |
US11893199B2 (en) * | 2020-06-10 | 2024-02-06 | Microsoft Technology Licensing, Llc | Systems and methods for viewing incompatible web pages via remote browser instances |
US11611540B2 (en) * | 2020-07-01 | 2023-03-21 | Vmware, Inc. | Protection of authentication data of a server cluster |
US11861388B2 (en) * | 2020-07-06 | 2024-01-02 | Frame Platform, Inc. | User profile management for non-domain joined instance virtual machines |
WO2022011142A1 (en) | 2020-07-08 | 2022-01-13 | OneTrust, LLC | Systems and methods for targeted data discovery |
US11595426B2 (en) * | 2020-07-24 | 2023-02-28 | Vmware, Inc. | Risk based virtual workspace delivery |
WO2022023982A1 (en) * | 2020-07-27 | 2022-02-03 | Promethean Limited | Computer module plugin conversion systems and related methods |
WO2022026564A1 (en) | 2020-07-28 | 2022-02-03 | OneTrust, LLC | Systems and methods for automatically blocking the use of tracking tools |
US11475165B2 (en) | 2020-08-06 | 2022-10-18 | OneTrust, LLC | Data processing systems and methods for automatically redacting unstructured data from a data subject access request |
US11474839B2 (en) * | 2020-09-15 | 2022-10-18 | Dell Products L.P. | Systems and methods for connection broker free remote desktop connections in a virtual desktop environment |
US11436373B2 (en) | 2020-09-15 | 2022-09-06 | OneTrust, LLC | Data processing systems and methods for detecting tools for the automatic blocking of consent requests |
WO2022061270A1 (en) | 2020-09-21 | 2022-03-24 | OneTrust, LLC | Data processing systems and methods for automatically detecting target data transfers and target data processing |
US11019106B1 (en) | 2020-09-22 | 2021-05-25 | Netskope, Inc. | Remotely accessed controlled contained environment |
US11343227B2 (en) | 2020-09-28 | 2022-05-24 | Vmware, Inc. | Application deployment in multi-site virtualization infrastructure |
US11775481B2 (en) | 2020-09-30 | 2023-10-03 | Qumulo, Inc. | User interfaces for managing distributed file systems |
CN112232000B (en) * | 2020-10-23 | 2021-08-10 | 海光信息技术股份有限公司 | Authentication system, authentication method and authentication device spanning multiple authentication domains |
CN114531385B (en) * | 2020-10-31 | 2022-12-27 | 华为技术有限公司 | Method, device and system for sending message |
WO2022099023A1 (en) | 2020-11-06 | 2022-05-12 | OneTrust, LLC | Systems and methods for identifying data processing activities based on data discovery results |
CN112613691B (en) * | 2020-11-09 | 2022-07-29 | 贵州电网有限责任公司 | Chip relay protection universal device |
US11106825B1 (en) | 2020-11-10 | 2021-08-31 | Netskope, Inc. | Predetermined credential system for remote administrative operating system (OS) authorization and policy control |
US11550713B1 (en) | 2020-11-25 | 2023-01-10 | Amazon Technologies, Inc. | Garbage collection in distributed systems using life cycled storage roots |
US11593270B1 (en) | 2020-11-25 | 2023-02-28 | Amazon Technologies, Inc. | Fast distributed caching using erasure coded object parts |
US11379253B2 (en) | 2020-11-30 | 2022-07-05 | International Business Machines Corporation | Training chatbots for remote troubleshooting |
CN114598664A (en) * | 2020-12-03 | 2022-06-07 | 武汉斗鱼鱼乐网络科技有限公司 | Task execution method and related device |
US11122073B1 (en) | 2020-12-11 | 2021-09-14 | BitSight Technologies, Inc. | Systems and methods for cybersecurity risk mitigation and management |
US11818152B2 (en) | 2020-12-23 | 2023-11-14 | Varmour Networks, Inc. | Modeling topic-based message-oriented middleware within a security system |
US11876817B2 (en) | 2020-12-23 | 2024-01-16 | Varmour Networks, Inc. | Modeling queue-based message-oriented middleware relationships in a security system |
FR3118682B1 (en) * | 2021-01-07 | 2022-12-16 | Sagemcom Broadband Sas | PROCEDURE FOR REPORTING ILLEGAL IP ADDRESS USE |
US11687528B2 (en) | 2021-01-25 | 2023-06-27 | OneTrust, LLC | Systems and methods for discovery, classification, and indexing of data in a native computing system |
US11157458B1 (en) | 2021-01-28 | 2021-10-26 | Qumulo, Inc. | Replicating files in distributed file systems using object-based data storage |
US12050693B2 (en) | 2021-01-29 | 2024-07-30 | Varmour Networks, Inc. | System and method for attributing user behavior from multiple technical telemetry sources |
US11777978B2 (en) | 2021-01-29 | 2023-10-03 | Varmour Networks, Inc. | Methods and systems for accurately assessing application access risk |
WO2022170047A1 (en) | 2021-02-04 | 2022-08-11 | OneTrust, LLC | Managing custom attributes for domain objects defined within microservices |
US20240111899A1 (en) | 2021-02-08 | 2024-04-04 | OneTrust, LLC | Data processing systems and methods for anonymizing data samples in classification analysis |
US11601464B2 (en) | 2021-02-10 | 2023-03-07 | OneTrust, LLC | Systems and methods for mitigating risks of third-party computing system functionality integration into a first-party computing system |
US11775348B2 (en) | 2021-02-17 | 2023-10-03 | OneTrust, LLC | Managing custom workflows for domain objects defined within microservices |
US11546661B2 (en) | 2021-02-18 | 2023-01-03 | OneTrust, LLC | Selective redaction of media content |
US11461241B2 (en) | 2021-03-03 | 2022-10-04 | Qumulo, Inc. | Storage tier management for file systems |
US11533315B2 (en) | 2021-03-08 | 2022-12-20 | OneTrust, LLC | Data transfer discovery and analysis systems and related methods |
US11132126B1 (en) | 2021-03-16 | 2021-09-28 | Qumulo, Inc. | Backup services for distributed file systems in cloud computing environments |
US11567660B2 (en) | 2021-03-16 | 2023-01-31 | Qumulo, Inc. | Managing cloud storage for distributed file systems |
US12131192B2 (en) | 2021-03-18 | 2024-10-29 | Nutanix, Inc. | Scope-based distributed lock infrastructure for virtualized file server |
US11762782B2 (en) * | 2021-03-19 | 2023-09-19 | Dell Products, L.P. | Caching system and method for a workspace environment |
CN113221078B (en) * | 2021-03-25 | 2024-03-12 | 贵州大学 | Watermark tracking method for instant messaging system information screen capture leakage |
US11956350B2 (en) * | 2021-03-31 | 2024-04-09 | Seagate Technology Llc | Yes and no secret sharing with hidden access structures |
US12079347B2 (en) | 2021-03-31 | 2024-09-03 | BitSight Technologies, Inc. | Systems and methods for assessing cybersecurity risk in a work from home environment |
US11669361B1 (en) * | 2021-04-01 | 2023-06-06 | Ai-Blockchain, Inc. | System, method and program product for optimizing computer processing power in cloud computing systems |
US11562078B2 (en) | 2021-04-16 | 2023-01-24 | OneTrust, LLC | Assessing and managing computational risk involved with integrating third party computing functionality within a computing system |
US11706209B2 (en) * | 2021-04-29 | 2023-07-18 | Delinea Inc. | Method and apparatus for securely managing computer process access to network resources through delegated system credentials |
US20240205660A1 (en) * | 2021-04-30 | 2024-06-20 | Zebra Technologies Corporation | Enhanced Device Discovery to Support Multiple Clients and High Data Bandwidth |
US11954517B2 (en) | 2021-05-04 | 2024-04-09 | Visa International Service Association | Computer-implemented method and system for providing dynamic endpoints for performing data transactions |
US11888956B2 (en) | 2021-06-11 | 2024-01-30 | Microsoft Technology Licensing, Llc | Paginated data transfer techniques |
US11831688B2 (en) * | 2021-06-18 | 2023-11-28 | Capital One Services, Llc | Systems and methods for network security |
US11669255B2 (en) | 2021-06-30 | 2023-06-06 | Qumulo, Inc. | Distributed resource caching by reallocation of storage caching using tokens and agents with non-depleted cache allocations |
US11388210B1 (en) | 2021-06-30 | 2022-07-12 | Amazon Technologies, Inc. | Streaming analytics using a serverless compute system |
US11734316B2 (en) | 2021-07-08 | 2023-08-22 | Varmour Networks, Inc. | Relationship-based search in a computing environment |
US20230023723A1 (en) * | 2021-07-26 | 2023-01-26 | Cisco Technology, Inc. | Transparent security and policy enforcement for low-code orchestration |
US12117972B2 (en) | 2021-08-19 | 2024-10-15 | Nutanix, Inc. | File server managers and systems for managing virtualized file servers |
US20230066137A1 (en) | 2021-08-19 | 2023-03-02 | Nutanix, Inc. | User interfaces for disaster recovery of distributed file servers |
CN113849289A (en) * | 2021-09-30 | 2021-12-28 | 联想(北京)有限公司 | Control method and electronic equipment |
US11294604B1 (en) | 2021-10-22 | 2022-04-05 | Qumulo, Inc. | Serverless disk drives based on cloud storage |
US11722560B2 (en) * | 2021-10-26 | 2023-08-08 | Vmware, Inc. | Reconciling host cluster membership during recovery |
US20230134511A1 (en) * | 2021-11-01 | 2023-05-04 | Bank Of America Corporation | Apparatus and methods for automating password generators |
US11354273B1 (en) | 2021-11-18 | 2022-06-07 | Qumulo, Inc. | Managing usable storage space in distributed file systems |
US11968280B1 (en) | 2021-11-24 | 2024-04-23 | Amazon Technologies, Inc. | Controlling ingestion of streaming data to serverless function executions |
US12111940B1 (en) * | 2021-12-03 | 2024-10-08 | Amazon Technologies, Inc. | Authorizing access to operating system resources using security policies managed by service external to the operating system |
US12015603B2 (en) | 2021-12-10 | 2024-06-18 | Amazon Technologies, Inc. | Multi-tenant mode for serverless code execution |
US11922192B2 (en) | 2021-12-14 | 2024-03-05 | International Business Machines Corporation | Enhancing server virtualization through host sessions |
CN115016886B (en) * | 2021-12-31 | 2023-04-11 | 荣耀终端有限公司 | Service processing method and device |
US11588702B1 (en) * | 2022-01-12 | 2023-02-21 | Ciena Corporation | 3D visualization of multi-layer networks including network topology and encapsulation |
US12093676B2 (en) * | 2022-01-14 | 2024-09-17 | Dell Products L.P. | Intelligent management of software deployment based on code change |
US20230269290A1 (en) * | 2022-01-20 | 2023-08-24 | Servicenow, Inc. | Nested Request-Response Protocol Network Communications |
US11656926B1 (en) | 2022-01-26 | 2023-05-23 | Bank Of America Corporation | Systems and methods for automatically applying configuration changes to computing clusters |
US11599508B1 (en) | 2022-01-31 | 2023-03-07 | Qumulo, Inc. | Integrating distributed file systems with object stores |
US20230245503A1 (en) * | 2022-02-02 | 2023-08-03 | The Boeing Company | Smart digital twin for monitoring a machine |
US11799971B2 (en) | 2022-02-17 | 2023-10-24 | Bank Of America Corporation | Systems and methods for session migration between devices |
CN114595020B (en) * | 2022-02-25 | 2023-12-19 | 深圳盛显科技有限公司 | Split screen display method, device and system based on hook technology and storage medium |
TWI812072B (en) * | 2022-03-16 | 2023-08-11 | 緯創資通股份有限公司 | Window arrangement method and window arrangement system |
CN114598471B (en) * | 2022-03-18 | 2024-08-02 | 北京启明星辰信息安全技术有限公司 | Single-package authorized seed distribution method and device for connecting initiating host to controller |
CN114726518B (en) * | 2022-03-31 | 2023-05-26 | 阿里云计算有限公司 | Communication method, device and system for cloud network system and storage medium |
CN114880674B (en) * | 2022-04-28 | 2024-05-31 | 西安交通大学 | Vulnerability detection method and system based on novel vulnerability fingerprint |
US11620142B1 (en) | 2022-06-03 | 2023-04-04 | OneTrust, LLC | Generating and customizing user interfaces for demonstrating functions of interactive user environments |
US11776507B1 (en) | 2022-07-20 | 2023-10-03 | Ivan Svirid | Systems and methods for reducing display latency |
US20240039993A1 (en) * | 2022-07-29 | 2024-02-01 | The Toronto-Dominion Bank | System And Method for Managing Data Stored in A Remote Computing Environment |
TWI816510B (en) * | 2022-08-15 | 2023-09-21 | 中華電信股份有限公司 | Authorization system, method and computer readable medium for software component usage |
US11722150B1 (en) | 2022-09-28 | 2023-08-08 | Qumulo, Inc. | Error resistant write-ahead log |
US11729269B1 (en) | 2022-10-26 | 2023-08-15 | Qumulo, Inc. | Bandwidth management in distributed file systems |
US12093674B2 (en) | 2022-11-09 | 2024-09-17 | Bank Of America Corporation | Creation of a performance-optimized image of a server |
US11966592B1 (en) | 2022-11-29 | 2024-04-23 | Qumulo, Inc. | In-place erasure code transcoding for distributed file systems |
CN115543971B (en) * | 2022-11-29 | 2023-03-31 | 天津南大通用数据技术股份有限公司 | Method for realizing high availability of MPP database |
CN116074048B (en) * | 2022-12-20 | 2023-11-14 | 广州辰创科技发展有限公司 | High-speed thing allies oneself with intelligent gateway equipment system |
US12124828B2 (en) | 2023-01-18 | 2024-10-22 | Bank Of America Corporation | Source code validation based on converting the source code to a non-programming language |
US11934660B1 (en) | 2023-11-07 | 2024-03-19 | Qumulo, Inc. | Tiered data storage with ephemeral and persistent tiers |
US11921677B1 (en) | 2023-11-07 | 2024-03-05 | Qumulo, Inc. | Sharing namespaces across file system clusters |
Citations (91)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4564903A (en) * | 1983-10-05 | 1986-01-14 | International Business Machines Corporation | Partitioned multiprocessor programming system |
US5129084A (en) * | 1989-06-29 | 1992-07-07 | Digital Equipment Corporation | Object container transfer system and method in an object based computer operating system |
US5187790A (en) * | 1989-06-29 | 1993-02-16 | Digital Equipment Corporation | Server impersonation of client processes in an object based computer operating system |
US5202971A (en) * | 1987-02-13 | 1993-04-13 | International Business Machines Corporation | System for file and record locking between nodes in a distributed data processing environment maintaining one copy of each file lock |
US5297283A (en) * | 1989-06-29 | 1994-03-22 | Digital Equipment Corporation | Object transferring system and method in an object based computer operating system |
US5418964A (en) * | 1991-12-12 | 1995-05-23 | International Business Machines Corporation | System and method for parent class shadowing in a statically linked object hierarchy |
US5437025A (en) * | 1993-01-26 | 1995-07-25 | International Business Machines Corporation | System and method for run time configuration of objects in an object oriented computing environment |
US5437033A (en) * | 1990-11-16 | 1995-07-25 | Hitachi, Ltd. | System for recovery from a virtual machine monitor failure with a continuous guest dispatched to a nonguest mode |
US5499343A (en) * | 1993-12-17 | 1996-03-12 | Taligent, Inc. | Object-oriented networking system with dynamically configurable communication links |
US5504677A (en) * | 1992-10-15 | 1996-04-02 | Pollin; Robert E. | Automated payment system |
US5515508A (en) * | 1993-12-17 | 1996-05-07 | Taligent, Inc. | Client server system and method of operation including a dynamically configurable protocol stack |
US5596745A (en) * | 1994-05-16 | 1997-01-21 | International Business Machines Corporation | System and procedure for concurrent database access by multiple user applications through shared connection processes |
US5640454A (en) * | 1994-08-11 | 1997-06-17 | Trusted Information Systems, Inc. | System and method for access field verification |
US5706437A (en) * | 1995-12-29 | 1998-01-06 | Mci Communications Corporation | System and method for accessing a service on a services network |
US5729734A (en) * | 1995-11-03 | 1998-03-17 | Apple Computer, Inc. | File privilege administration apparatus and methods |
US5734865A (en) * | 1995-06-07 | 1998-03-31 | Bull Hn Information Systems Inc. | Virtual local area network well-known port routing mechanism for mult--emulators in an open system environment |
US5737622A (en) * | 1986-04-14 | 1998-04-07 | National Instruments Corporation | Method and apparatus for more efficient function synchronization in a data flow program |
US5745573A (en) * | 1994-08-11 | 1998-04-28 | Trusted Information Systems, Inc. | System and method for controlling access to a user secret |
US5761662A (en) * | 1994-12-20 | 1998-06-02 | Sun Microsystems, Inc. | Personalized information retrieval using user-defined profile |
US5764915A (en) * | 1996-03-08 | 1998-06-09 | International Business Machines Corporation | Object-oriented communication interface for network protocol access using the selected newly created protocol interface object and newly created protocol layer objects in the protocol stack |
US5860068A (en) * | 1997-12-04 | 1999-01-12 | Petabyte Corporation | Method and system for custom manufacture and delivery of a data product |
US5884046A (en) * | 1996-10-23 | 1999-03-16 | Pluris, Inc. | Apparatus and method for sharing data and routing messages between a plurality of workstations in a local area network |
US6026440A (en) * | 1997-01-27 | 2000-02-15 | International Business Machines Corporation | Web server account manager plug-in for monitoring resources |
US6061349A (en) * | 1995-11-03 | 2000-05-09 | Cisco Technology, Inc. | System and method for implementing multiple IP addresses on multiple ports |
US6088515A (en) * | 1995-11-13 | 2000-07-11 | Citrix Systems Inc | Method and apparatus for making a hypermedium interactive |
US6199753B1 (en) * | 1996-09-05 | 2001-03-13 | Symbol Technologies, Inc. | Method and system for presenting item information using a portable data terminal |
US6253224B1 (en) * | 1998-03-24 | 2001-06-26 | International Business Machines Corporation | Method and system for providing a hardware machine function in a protected virtual machine |
US6256637B1 (en) * | 1998-05-05 | 2001-07-03 | Gemstone Systems, Inc. | Transactional virtual machine architecture |
US6339595B1 (en) * | 1997-12-23 | 2002-01-15 | Cisco Technology, Inc. | Peer-model support for virtual private networks with potentially overlapping addresses |
US20020035451A1 (en) * | 2000-09-18 | 2002-03-21 | Todd Rothermel | Spatail data enabled engineering, construction, and operations computer-aided design (CAD) project system, method and computer program product |
US6370687B1 (en) * | 1999-01-21 | 2002-04-09 | Fujitsu Limited | Network computer system and substitute compile server |
US20020049608A1 (en) * | 2000-03-03 | 2002-04-25 | Hartsell Neal D. | Systems and methods for providing differentiated business services in information management environments |
US20020049841A1 (en) * | 2000-03-03 | 2002-04-25 | Johnson Scott C | Systems and methods for providing differentiated service in information management environments |
US20020059274A1 (en) * | 2000-03-03 | 2002-05-16 | Hartsell Neal D. | Systems and methods for configuration of information management systems |
US20020057295A1 (en) * | 1998-05-29 | 2002-05-16 | Anatoliy Panasyuk | System and method for combining local and remote windows into a single desktop environment |
US20020065864A1 (en) * | 2000-03-03 | 2002-05-30 | Hartsell Neal D. | Systems and method for resource tracking in information management environments |
US20020087668A1 (en) * | 2000-12-29 | 2002-07-04 | San Martin Raul S. | Automatic upgrade of live network devices |
US20020095400A1 (en) * | 2000-03-03 | 2002-07-18 | Johnson Scott C | Systems and methods for managing differentiated service in information management environments |
US20020095584A1 (en) * | 2001-01-12 | 2002-07-18 | Royer Barry Lynn | System and user interface supporting concurrent application initiation and interoperability |
US20030014669A1 (en) * | 2001-07-10 | 2003-01-16 | Caceres Maximiliano Gerardo | Automated computer system security compromise |
US6510466B1 (en) * | 1998-12-14 | 2003-01-21 | International Business Machines Corporation | Methods, systems and computer program products for centralized management of application programs on a network |
US6516315B1 (en) * | 1998-11-05 | 2003-02-04 | Neuvis, Inc. | Method for controlling access to information |
US6519643B1 (en) * | 1999-04-29 | 2003-02-11 | Attachmate Corporation | Method and system for a session allocation manager (“SAM”) |
US20030051130A1 (en) * | 2001-08-28 | 2003-03-13 | Melampy Patrick J. | System and method for providing encryption for rerouting of real time multi-media flows |
US20030065676A1 (en) * | 2001-09-05 | 2003-04-03 | Microsoft Corporation | Methods and system of managing concurrent access to multiple resources |
US6546454B1 (en) * | 1997-04-15 | 2003-04-08 | Sun Microsystems, Inc. | Virtual machine with securely distributed bytecode verification |
US6550012B1 (en) * | 1998-12-11 | 2003-04-15 | Network Associates, Inc. | Active firewall system and methodology |
US20030074580A1 (en) * | 2001-03-21 | 2003-04-17 | Knouse Charles W. | Access system interface |
US6553377B1 (en) * | 2000-03-31 | 2003-04-22 | Network Associates, Inc. | System and process for maintaining a plurality of remote security applications using a modular framework in a distributed computing environment |
US6571245B2 (en) * | 1998-12-07 | 2003-05-27 | Magically, Inc. | Virtual desktop in a computer network |
US20030101343A1 (en) * | 2001-11-27 | 2003-05-29 | Eaton Eric Thomas | System for providing continuity between messaging clients and method therefor |
US20030105604A1 (en) * | 2001-06-19 | 2003-06-05 | Ash Leslie E. | Real-time streaming media measurement system and method |
US20030145222A1 (en) * | 2002-01-31 | 2003-07-31 | Hewlett-Packard Company | Apparatus for setting access requirements |
US6681238B1 (en) * | 1998-03-24 | 2004-01-20 | International Business Machines Corporation | Method and system for providing a hardware machine function in a protected virtual machine |
US6691232B1 (en) * | 1999-08-05 | 2004-02-10 | Sun Microsystems, Inc. | Security architecture with environment sensitive credential sufficiency evaluation |
US20040031058A1 (en) * | 2002-05-10 | 2004-02-12 | Richard Reisman | Method and apparatus for browsing using alternative linkbases |
US20040039594A1 (en) * | 2002-01-09 | 2004-02-26 | Innerpresence Networks, Inc. | Systems and methods for dynamically generating licenses in a rights management system |
US20040070608A1 (en) * | 2002-10-10 | 2004-04-15 | International Business Machines Corporation | Apparatus and method for transferring files from one machine to another using adjacent desktop displays in a virtual network |
US20040103310A1 (en) * | 2002-11-27 | 2004-05-27 | Sobel William E. | Enforcement of compliance with network security policies |
US20040131042A1 (en) * | 2002-12-31 | 2004-07-08 | Lillie Ross J. | Apparatus and method for controlling and managing individual directed sessions in a communications system |
US6766457B1 (en) * | 1999-12-07 | 2004-07-20 | Unisys Corporation | Method for controlling access to a multiplicity of objects using a customizable object-oriented access control hook |
US20050003810A1 (en) * | 2003-05-28 | 2005-01-06 | Sun Microsystems, Inc. | Method and system for optimizing software program start-up time |
US20050004942A1 (en) * | 2003-04-02 | 2005-01-06 | Madsen Mark E. | Methods and systems for controlling network infrastructure devices |
US20050044108A1 (en) * | 2003-08-21 | 2005-02-24 | Ashish Shah | Systems and methods for providing synchronization services for units of information manageable by a hardware/software interface system |
US20050050053A1 (en) * | 2003-08-21 | 2005-03-03 | Microsoft Corporation. | Systems and methods for the implementation of a core schema for providing a top-level structure for organizing units of information manageable by a hardware/software interface system |
US20050063083A1 (en) * | 2003-08-21 | 2005-03-24 | Dart Scott E. | Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system |
US20050071652A1 (en) * | 2003-09-25 | 2005-03-31 | Sun Microsystems, Inc., A Delaware Corporation | Multiple instruction dispatch tables for application program obfuscation |
US6880002B2 (en) * | 2001-09-05 | 2005-04-12 | Surgient, Inc. | Virtualized logical server cloud providing non-deterministic allocation of logical attributes of logical servers to physical resources |
US20050125739A1 (en) * | 2003-11-20 | 2005-06-09 | Thompson Jeffrey W. | Virtual desktop manager system and method |
US20050125663A1 (en) * | 2002-12-03 | 2005-06-09 | Funk Software, Inc. | Tunneled authentication protocol for preventing man-in-the-middle attacks |
US6920502B2 (en) * | 2000-04-13 | 2005-07-19 | Netilla Networks, Inc. | Apparatus and accompanying methods for providing, through a centralized server site, an integrated virtual office environment, remotely accessible via a network-connected web browser, with remote network monitoring and management capabilities |
US20050160151A1 (en) * | 2003-12-17 | 2005-07-21 | International Business Machines Corporation | Method and system for machine memory power and availability management in a processing system supporting multiple virtual machines |
US20050165928A1 (en) * | 2004-01-26 | 2005-07-28 | Jesse Shu | Wireless firewall with tear down messaging |
US20060010433A1 (en) * | 2004-06-30 | 2006-01-12 | Microsoft Corporation | Systems and methods for providing seamless software compatibility using virtual machines |
US20060020937A1 (en) * | 2004-07-21 | 2006-01-26 | Softricity, Inc. | System and method for extraction and creation of application meta-information within a software application repository |
US20060036570A1 (en) * | 2004-08-03 | 2006-02-16 | Softricity, Inc. | System and method for controlling inter-application association through contextual policy control |
US20060041761A1 (en) * | 2004-08-17 | 2006-02-23 | Neumann William C | System for secure computing using defense-in-depth architecture |
US20060130060A1 (en) * | 2004-12-10 | 2006-06-15 | Intel Corporation | System and method to deprivilege components of a virtual machine monitor |
US7065637B1 (en) * | 2000-08-24 | 2006-06-20 | Veritas Operating Corporating | System for configuration of dynamic computing environments using a visual interface |
US20060161970A1 (en) * | 2003-12-10 | 2006-07-20 | Chris Hopen | End point control |
US20070006226A1 (en) * | 2005-06-29 | 2007-01-04 | Microsoft Corporation | Failure management for a virtualized computing environment |
US20070018992A1 (en) * | 2005-07-22 | 2007-01-25 | Microsoft Corporation | Secure hardware desktop buffer composition |
US7185192B1 (en) * | 2000-07-07 | 2007-02-27 | Emc Corporation | Methods and apparatus for controlling access to a resource |
US20070074071A1 (en) * | 2005-09-27 | 2007-03-29 | Michael Rothman | Processor thermal management |
US20070097130A1 (en) * | 2005-11-01 | 2007-05-03 | Digital Display Innovations, Llc | Multi-user terminal services accelerator |
US20070107048A1 (en) * | 2005-10-11 | 2007-05-10 | David Halls | Systems and Methods for Facilitating Distributed Authentication |
US20070171921A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US7350194B1 (en) * | 2001-09-24 | 2008-03-25 | Oracle Corporation | Techniques for debugging computer programs involving multiple computing machines |
US7533189B2 (en) * | 2005-06-21 | 2009-05-12 | Microsoft Corporation | Enabling a graphical window modification command to be applied to a remotely generated graphical window |
US7546372B2 (en) * | 2002-07-11 | 2009-06-09 | Ibeam Systems, Inc. | System and method for providing to multiple user computers concurrent telephonic access to multiple remote devices |
US7546353B2 (en) * | 1999-12-02 | 2009-06-09 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
Family Cites Families (141)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US555414A (en) * | 1896-02-25 | Heating-stove | ||
US555385A (en) | 1896-02-25 | Island | ||
US754633A (en) * | 1903-04-28 | 1904-03-15 | Lewis Ash | Wrench. |
US4779189A (en) | 1985-06-28 | 1988-10-18 | International Business Machines Corporation | Peripheral subsystem initialization method and apparatus |
US5175852A (en) | 1987-02-13 | 1992-12-29 | International Business Machines Corporation | Distributed file access structure lock |
US5057996A (en) | 1989-06-29 | 1991-10-15 | Digital Equipment Corporation | Waitable object creation system and method in an object based computer operating system |
CA2041992A1 (en) | 1990-05-18 | 1991-11-19 | Yeshayahu Artsy | Routing objects on action paths in a distributed computing system |
AU639802B2 (en) | 1990-08-14 | 1993-08-05 | Oracle International Corporation | Methods and apparatus for providing dynamic invocation of applications in a distributed heterogeneous environment |
US5249290A (en) | 1991-02-22 | 1993-09-28 | At&T Bell Laboratories | Method of and apparatus for operating a client/server computer network |
JP2576762B2 (en) | 1993-06-30 | 1997-01-29 | 日本電気株式会社 | Information collection method between nodes in ring network |
US5794207A (en) | 1996-09-04 | 1998-08-11 | Walker Asset Management Limited Partnership | Method and apparatus for a cryptographically assisted commercial network system designed to facilitate buyer-driven conditional purchase offers |
US5844553A (en) | 1993-08-30 | 1998-12-01 | Hewlett-Packard Company | Mechanism to control and use window events among applications in concurrent computing |
US5555385A (en) | 1993-10-27 | 1996-09-10 | International Business Machines Corporation | Allocation of address spaces within virtual machine compute system |
US5553242A (en) | 1993-11-03 | 1996-09-03 | Wang Laboratories, Inc. | Client/server connection sharing |
CA2145921A1 (en) | 1994-05-10 | 1995-11-11 | Vijay Pochampalli Kumar | Method and apparatus for executing a distributed algorithm or service on a simple network management protocol based computer network |
US5586312A (en) | 1994-10-11 | 1996-12-17 | Unisys Corporation | Method and apparatus for using an independent transaction processing application as a service routine |
US5555414A (en) | 1994-12-14 | 1996-09-10 | International Business Machines Corporation | Multiprocessing system including gating of host I/O and external enablement to guest enablement at polling intervals |
US5557748A (en) | 1995-02-03 | 1996-09-17 | Intel Corporation | Dynamic network configuration |
US6272632B1 (en) | 1995-02-21 | 2001-08-07 | Network Associates, Inc. | System and method for controlling access to a user secret using a key recovery field |
US5774668A (en) | 1995-06-07 | 1998-06-30 | Microsoft Corporation | System for on-line service in which gateway computer uses service map which includes loading condition of servers broadcasted by application servers for load balancing |
US7272639B1 (en) * | 1995-06-07 | 2007-09-18 | Soverain Software Llc | Internet server access control and monitoring systems |
US5996026A (en) | 1995-09-05 | 1999-11-30 | Hitachi, Ltd. | Method and apparatus for connecting i/o channels between sub-channels and devices through virtual machines controlled by a hypervisor using ID and configuration information |
US5826027A (en) * | 1995-10-11 | 1998-10-20 | Citrix Systems, Inc. | Method for supporting an extensible and dynamically bindable protocol stack in a distrubited process system |
US5802306A (en) | 1995-10-31 | 1998-09-01 | International Business Machines Corporation | Supporting multiple client-server sessions from a protocol stack associated with a single physical adapter through use of a plurality of logical adapters |
US6161126A (en) | 1995-12-13 | 2000-12-12 | Immersion Corporation | Implementing force feedback over the World Wide Web and other computer networks |
US5938733A (en) | 1996-03-08 | 1999-08-17 | International Business Machines Corporation | Object oriented representation of network requests in a client server model |
US5838910A (en) | 1996-03-14 | 1998-11-17 | Domenikos; Steven D. | Systems and methods for executing application programs from a memory device linked to a server at an internet site |
US6304893B1 (en) | 1996-07-01 | 2001-10-16 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server event driven message framework in an interprise computing framework system |
US6272556B1 (en) | 1996-07-01 | 2001-08-07 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for migrating a client-server application (#5) |
US5828840A (en) | 1996-08-06 | 1998-10-27 | Verifone, Inc. | Server for starting client application on client if client is network terminal and initiating client application on server if client is non network terminal |
US5983268A (en) | 1997-01-14 | 1999-11-09 | Netmind Technologies, Inc. | Spreadsheet user-interface for an internet-document change-detection tool |
US5879570A (en) * | 1997-01-14 | 1999-03-09 | Seagate Technology, Inc. | One piece flexure for a hard disc file head with selective nickel plating |
US5930801A (en) | 1997-03-07 | 1999-07-27 | Xerox Corporation | Shared-data environment in which each file has independent security properties |
US6324177B1 (en) | 1997-05-02 | 2001-11-27 | Cisco Technology | Method and apparatus for managing connections based on a client IP address |
US5983190A (en) | 1997-05-19 | 1999-11-09 | Microsoft Corporation | Client server animation system for managing interactive user interface characters |
US6158007A (en) | 1997-09-17 | 2000-12-05 | Jahanshah Moreh | Security system for event based middleware |
US5848410A (en) | 1997-10-08 | 1998-12-08 | Hewlett Packard Company | System and method for selective and continuous index generation |
US5999179A (en) | 1997-11-17 | 1999-12-07 | Fujitsu Limited | Platform independent computer network management client |
JP3937548B2 (en) | 1997-12-29 | 2007-06-27 | カシオ計算機株式会社 | Data access control device and program recording medium thereof |
EP1062559A2 (en) | 1998-03-12 | 2000-12-27 | DMW Worldwide, Inc. | Operational system for operating on client defined rules |
US6484174B1 (en) | 1998-04-20 | 2002-11-19 | Sun Microsystems, Inc. | Method and apparatus for session management and user authentication |
US6108712A (en) | 1998-05-05 | 2000-08-22 | International Business Machines Corp. | Client-server system with central application management and providing export agent capability for retrofitting existing hardware and applications into the system |
US6772350B1 (en) | 1998-05-15 | 2004-08-03 | E.Piphany, Inc. | System and method for controlling access to resources in a distributed environment |
US6275942B1 (en) | 1998-05-20 | 2001-08-14 | Network Associates, Inc. | System, method and computer program product for automatic response to computer system misuse using active response modules |
US6157953A (en) | 1998-07-28 | 2000-12-05 | Sun Microsystems, Inc. | Authentication and access control in a management console program for managing services in a computer network |
US6272677B1 (en) * | 1998-08-28 | 2001-08-07 | International Business Machines Corporation | Method and system for automatic detection and distribution of code version updates |
US6564327B1 (en) | 1998-12-23 | 2003-05-13 | Worldcom, Inc. | Method of and system for controlling internet access |
US6643690B2 (en) * | 1998-12-29 | 2003-11-04 | Citrix Systems, Inc. | Apparatus and method for determining a program neighborhood for a client node in a client-server network |
US6675196B1 (en) | 1999-01-08 | 2004-01-06 | Amazon.Com, Inc. | Universal protocol for enabling a device to discover and utilize the services of another device |
US6463459B1 (en) * | 1999-01-22 | 2002-10-08 | Wall Data Incorporated | System and method for executing commands associated with specific virtual desktop |
US6345241B1 (en) * | 1999-02-19 | 2002-02-05 | International Business Machines Corporation | Method and apparatus for simulation of data in a virtual environment using a queued direct input-output device |
JP4276698B2 (en) | 1999-04-20 | 2009-06-10 | 富士通株式会社 | Data communication system and recording medium |
US6966060B1 (en) | 1999-07-02 | 2005-11-15 | Microsoft Corporation | Method and system for remote client installation |
US6915344B1 (en) * | 1999-11-30 | 2005-07-05 | Microsoft Corporation | Server stress-testing response verification |
US7340499B1 (en) * | 1999-12-03 | 2008-03-04 | Sun Microsystems, Inc. | Dynamic embedding of literal object data in supplied instance of information object |
US20020105972A1 (en) | 2000-03-03 | 2002-08-08 | Richter Roger K. | Interprocess communications within a network node using switch fabric |
US20020107903A1 (en) | 2000-11-07 | 2002-08-08 | Richter Roger K. | Methods and systems for the order serialization of information in a network processing environment |
US20030236919A1 (en) | 2000-03-03 | 2003-12-25 | Johnson Scott C. | Network connected computing system |
US20020133593A1 (en) | 2000-03-03 | 2002-09-19 | Johnson Scott C. | Systems and methods for the deterministic management of information |
US20030236837A1 (en) | 2000-03-03 | 2003-12-25 | Johnson Scott C. | Content delivery system providing accelerate content delivery |
US20020107990A1 (en) | 2000-03-03 | 2002-08-08 | Surgient Networks, Inc. | Network connected computing system including network switch |
US20020107989A1 (en) | 2000-03-03 | 2002-08-08 | Johnson Scott C. | Network endpoint system with accelerated data path |
US20020174227A1 (en) | 2000-03-03 | 2002-11-21 | Hartsell Neal D. | Systems and methods for prioritization in information management environments |
US20030236861A1 (en) | 2000-03-03 | 2003-12-25 | Johnson Scott C. | Network content delivery system with peer to peer processing components |
US20020108059A1 (en) | 2000-03-03 | 2002-08-08 | Canion Rodney S. | Network security accelerator |
US20020116452A1 (en) | 2000-03-03 | 2002-08-22 | Surgient Networks, Inc. | Network connected computing system including storage system |
US6738811B1 (en) * | 2000-03-31 | 2004-05-18 | Supermicro Computer, Inc. | Method and architecture for monitoring the health of servers across data networks |
US6748436B1 (en) * | 2000-05-04 | 2004-06-08 | International Business Machines Corporation | System, method and program for management of users, groups, servers and resources in a heterogeneous network environment |
US7337217B2 (en) * | 2000-07-21 | 2008-02-26 | Samsung Electronics Co., Ltd. | Architecture for home network on world wide web |
EP1364296A4 (en) | 2000-09-12 | 2004-09-15 | Netmotion Wireless Inc | Method and apparatus for providing mobile and other intermittent connectivity in a computing environment |
CA2424568A1 (en) * | 2000-10-02 | 2002-04-11 | Learning Tree International Inc. | Method and system for hands-on e-learning |
US20020107962A1 (en) | 2000-11-07 | 2002-08-08 | Richter Roger K. | Single chassis network endpoint system with network processor for load balancing |
US20020107971A1 (en) | 2000-11-07 | 2002-08-08 | Bailey Brian W. | Network transport accelerator |
US7133923B2 (en) | 2000-12-11 | 2006-11-07 | Acme Packet, Inc. | System and method for assisting in controlling real-time transport protocol flow through multiple networks via screening |
US7299276B1 (en) | 2000-12-14 | 2007-11-20 | Cisco Technology, Inc. | Technique for monitoring health of network device using data format verification |
US7451196B1 (en) * | 2000-12-15 | 2008-11-11 | Stream Theory, Inc. | Method and system for executing a software application in a virtual environment |
US7143437B2 (en) | 2001-01-12 | 2006-11-28 | Siemens Medical Solutions Health Services Corporation | System and user interface for managing user access to network compatible applications |
DE50107821D1 (en) * | 2001-01-12 | 2005-12-01 | Siemens Ag | Method and device for computer-aided monitoring of a telecommunications network |
US6546077B2 (en) * | 2001-01-17 | 2003-04-08 | Medtronic Ave, Inc. | Miniature X-ray device and method of its manufacture |
US7092987B2 (en) * | 2001-02-13 | 2006-08-15 | Educational Testing Service | Remote computer capabilities querying and certification |
US8019835B2 (en) | 2001-04-20 | 2011-09-13 | Hewlett-Packard Development Company, L.P. | Automated provisioning of computing networks using a network database data model |
US7028305B2 (en) | 2001-05-16 | 2006-04-11 | Softricity, Inc. | Operating system abstraction and protection layer |
US7640153B2 (en) | 2001-06-04 | 2009-12-29 | Hewlett-Packard Development Company, L.P. | Networked client-server architecture for transparently transforming and executing applications |
US7330872B2 (en) * | 2001-10-02 | 2008-02-12 | Citrix Systems, Inc. | Method for distributed program execution with web-based file-type association |
KR100429514B1 (en) * | 2001-12-12 | 2004-05-03 | 삼성전자주식회사 | Method and system for data base access of information memory useing management information base in network management protocol |
AUPR947701A0 (en) * | 2001-12-14 | 2002-01-24 | Activesky, Inc. | Digital multimedia publishing system for wireless devices |
US7016343B1 (en) * | 2001-12-28 | 2006-03-21 | Cisco Technology, Inc. | PSTN call routing control features applied to a VoIP |
US7284067B2 (en) | 2002-02-20 | 2007-10-16 | Hewlett-Packard Development Company, L.P. | Method for integrated load balancing among peer servers |
US7287075B2 (en) | 2002-02-22 | 2007-10-23 | Bea Systems, Inc. | System for monitoring managed server health |
US20030172175A1 (en) | 2002-03-11 | 2003-09-11 | Mccormack Jonathan I. | System for standardizing updates of data on a plurality of electronic devices |
US7577722B1 (en) * | 2002-04-05 | 2009-08-18 | Vmware, Inc. | Provisioning of computer systems using virtual machines |
US6993686B1 (en) * | 2002-04-30 | 2006-01-31 | Cisco Technology, Inc. | System health monitoring and recovery |
US7363363B2 (en) | 2002-05-17 | 2008-04-22 | Xds, Inc. | System and method for provisioning universal stateless digital and computing services |
US7139798B2 (en) | 2002-05-17 | 2006-11-21 | Groove Networks, Inc. | Method and apparatus for connecting a secure peer-to-peer collaboration system to an external system |
US7367044B2 (en) | 2002-06-14 | 2008-04-29 | Clink Systems, Ltd. | System and method for network operation |
US7454458B2 (en) | 2002-06-24 | 2008-11-18 | Ntt Docomo, Inc. | Method and system for application load balancing |
EP1388812A1 (en) | 2002-07-04 | 2004-02-11 | Ronald E. Dr. Kates | Method for training a learning-capable system |
US20060294238A1 (en) * | 2002-12-16 | 2006-12-28 | Naik Vijay K | Policy-based hierarchical management of shared resources in a grid environment |
US7117448B2 (en) * | 2002-12-17 | 2006-10-03 | International Business Machines Corporation | System and method for determining desktop functionality based on workstation and user roles |
US7937551B2 (en) | 2003-01-21 | 2011-05-03 | Dell Products L.P. | Storage systems having differentiated storage pools |
US20040181476A1 (en) * | 2003-03-13 | 2004-09-16 | Smith William R. | Dynamic network resource brokering |
US7779405B2 (en) * | 2003-03-14 | 2010-08-17 | At&T Intellectual Property I, L.P. | Run-time determination of application delivery |
US7251732B2 (en) * | 2003-06-18 | 2007-07-31 | Microsoft Corporation | Password synchronization in a sign-on management system |
BRPI0406612A (en) | 2003-08-21 | 2005-12-06 | Microsoft Corp | Systems and methods for providing synchronization services for information units managed by a hardware / software interface system. |
MXPA06001986A (en) | 2003-08-21 | 2006-05-17 | Microsoft Corp | Systems and methods for data modeling in an item-based storage platform. |
CA2532909A1 (en) | 2003-08-21 | 2005-03-31 | Microsoft Corporation | Systems and methods for interfacing application programs with an item-based storage platform |
US20060008256A1 (en) * | 2003-10-01 | 2006-01-12 | Khedouri Robert K | Audio visual player apparatus and system and method of content distribution using the same |
US7594018B2 (en) | 2003-10-10 | 2009-09-22 | Citrix Systems, Inc. | Methods and apparatus for providing access to persistent application sessions |
US7136931B2 (en) | 2003-10-20 | 2006-11-14 | Hewlett-Packard Development Company, L.P. | Method and system for identifying the health of virtual routers |
US7523116B2 (en) * | 2003-10-30 | 2009-04-21 | International Business Machines Corporation | Selection of optimal execution environment for software applications |
US7430598B2 (en) | 2003-11-25 | 2008-09-30 | Microsoft Corporation | Systems and methods for health monitor alert management for networked systems |
US20050177635A1 (en) * | 2003-12-18 | 2005-08-11 | Roland Schmidt | System and method for allocating server resources |
US20050198303A1 (en) * | 2004-01-02 | 2005-09-08 | Robert Knauerhase | Dynamic virtual machine service provider allocation |
US20050182834A1 (en) * | 2004-01-20 | 2005-08-18 | Black Chuck A. | Network and network device health monitoring |
US20050193396A1 (en) | 2004-02-27 | 2005-09-01 | Stafford-Fraser James Q. | Computer network architecture and method of providing display data |
US7720054B2 (en) | 2004-03-02 | 2010-05-18 | Cisco Technology, Inc. | Router configured for outputting update messages specifying a detected attribute change of a connected active path according to a prescribed routing protocol |
US7496847B2 (en) | 2004-04-29 | 2009-02-24 | International Business Machines Corporation | Displaying a computer resource through a preferred browser |
US7574709B2 (en) * | 2004-04-30 | 2009-08-11 | Microsoft Corporation | VEX-virtual extension framework |
US7313735B1 (en) | 2004-04-30 | 2007-12-25 | Sun Microsystems, Inc. | In-line server health checking |
JP4491308B2 (en) | 2004-09-24 | 2010-06-30 | 富士通株式会社 | Network monitoring method and apparatus |
US7143223B2 (en) * | 2004-10-14 | 2006-11-28 | International Business Machines Corporation | Method, system and program product for emulating an interrupt architecture within a data processing system |
US8024568B2 (en) * | 2005-01-28 | 2011-09-20 | Citrix Systems, Inc. | Method and system for verification of an endpoint security scan |
US20060179476A1 (en) | 2005-02-09 | 2006-08-10 | International Business Machines Corporation | Data security regulatory rule compliance |
US7591014B2 (en) | 2005-03-04 | 2009-09-15 | Microsoft Corporation | Program authentication on environment |
US7774830B2 (en) | 2005-03-14 | 2010-08-10 | Microsoft Corporation | Access control policy engine controlling access to resource based on any of multiple received types of security tokens |
US7987306B2 (en) | 2005-04-04 | 2011-07-26 | Oracle America, Inc. | Hiding system latencies in a throughput networking system |
US20070083620A1 (en) * | 2005-10-07 | 2007-04-12 | Pedersen Bradley J | Methods for selecting between a predetermined number of execution methods for an application program |
US20070083610A1 (en) * | 2005-10-07 | 2007-04-12 | Treder Terry N | Method and a system for accessing a plurality of files comprising an application program |
US7779034B2 (en) * | 2005-10-07 | 2010-08-17 | Citrix Systems, Inc. | Method and system for accessing a remote file in a directory structure associated with an application program executing locally |
US8131825B2 (en) * | 2005-10-07 | 2012-03-06 | Citrix Systems, Inc. | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
CN100420202C (en) * | 2005-10-20 | 2008-09-17 | 联想(北京)有限公司 | Computer management system and computer management method |
US7836303B2 (en) * | 2005-12-09 | 2010-11-16 | University Of Washington | Web browser operating system |
US20070150595A1 (en) * | 2005-12-23 | 2007-06-28 | Microsoft Corporation | Identifying information services and schedule times to implement load management |
US7606868B1 (en) * | 2006-03-30 | 2009-10-20 | Wmware, Inc. | Universal file access architecture for a heterogeneous computing environment |
US7571349B2 (en) * | 2006-08-18 | 2009-08-04 | Microsoft Corporation | Configuration replication for system recovery and migration |
US7597018B2 (en) | 2007-04-11 | 2009-10-06 | Rosemount Aerospace Inc. | Pneumatic line isolation and heating for air data probes |
JP4882845B2 (en) | 2007-04-19 | 2012-02-22 | 株式会社日立製作所 | Virtual computer system |
JP5607531B2 (en) * | 2007-10-10 | 2014-10-15 | スリーエム イノベイティブ プロパティズ カンパニー | Articles and methods for masking or protecting a substrate |
US8220029B2 (en) * | 2007-11-13 | 2012-07-10 | Samsung Electronics Co., Ltd. | Method and system for enforcing trusted computing policies in a hypervisor security module architecture |
US7865785B2 (en) | 2008-02-13 | 2011-01-04 | Honeywell International Inc. | System and method for improving communications for systems having communications protocol enabled devices |
US8046550B2 (en) * | 2008-07-14 | 2011-10-25 | Quest Software, Inc. | Systems and methods for performing backup operations of virtual machine files |
-
2006
- 2006-10-24 US US11/552,315 patent/US20070174429A1/en not_active Abandoned
- 2006-10-25 US US11/552,787 patent/US8051180B2/en active Active
- 2006-11-14 US US11/559,658 patent/US20070180447A1/en not_active Abandoned
- 2006-11-14 US US11/559,635 patent/US8355407B2/en active Active
- 2006-11-28 US US11/563,958 patent/US20070174410A1/en not_active Abandoned
- 2006-11-28 US US11/563,927 patent/US8010679B2/en active Active
- 2006-11-28 US US11/563,932 patent/US8341270B2/en active Active
-
2007
- 2007-01-18 US US11/624,395 patent/US8117314B2/en active Active
- 2007-01-18 US US11/624,402 patent/US7949677B2/en active Active
- 2007-01-18 US US11/624,396 patent/US7954150B2/en active Active
- 2007-01-18 US US11/624,403 patent/US8341732B2/en active Active
- 2007-01-18 US US11/624,394 patent/US7870153B2/en active Active
- 2007-01-24 CN CN2007800104850A patent/CN101410803B/en active Active
Patent Citations (98)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4564903A (en) * | 1983-10-05 | 1986-01-14 | International Business Machines Corporation | Partitioned multiprocessor programming system |
US5737622A (en) * | 1986-04-14 | 1998-04-07 | National Instruments Corporation | Method and apparatus for more efficient function synchronization in a data flow program |
US5202971A (en) * | 1987-02-13 | 1993-04-13 | International Business Machines Corporation | System for file and record locking between nodes in a distributed data processing environment maintaining one copy of each file lock |
US5129084A (en) * | 1989-06-29 | 1992-07-07 | Digital Equipment Corporation | Object container transfer system and method in an object based computer operating system |
US5187790A (en) * | 1989-06-29 | 1993-02-16 | Digital Equipment Corporation | Server impersonation of client processes in an object based computer operating system |
US5297283A (en) * | 1989-06-29 | 1994-03-22 | Digital Equipment Corporation | Object transferring system and method in an object based computer operating system |
US5321841A (en) * | 1989-06-29 | 1994-06-14 | Digital Equipment Corporation | System for determining the rights of object access for a server process by combining them with the rights of the client process |
US5437033A (en) * | 1990-11-16 | 1995-07-25 | Hitachi, Ltd. | System for recovery from a virtual machine monitor failure with a continuous guest dispatched to a nonguest mode |
US5418964A (en) * | 1991-12-12 | 1995-05-23 | International Business Machines Corporation | System and method for parent class shadowing in a statically linked object hierarchy |
US5504677A (en) * | 1992-10-15 | 1996-04-02 | Pollin; Robert E. | Automated payment system |
US5727249A (en) * | 1992-10-15 | 1998-03-10 | Pollin; Robert E. | Automated payment system and method |
US5437025A (en) * | 1993-01-26 | 1995-07-25 | International Business Machines Corporation | System and method for run time configuration of objects in an object oriented computing environment |
US5499343A (en) * | 1993-12-17 | 1996-03-12 | Taligent, Inc. | Object-oriented networking system with dynamically configurable communication links |
US5515508A (en) * | 1993-12-17 | 1996-05-07 | Taligent, Inc. | Client server system and method of operation including a dynamically configurable protocol stack |
US5596745A (en) * | 1994-05-16 | 1997-01-21 | International Business Machines Corporation | System and procedure for concurrent database access by multiple user applications through shared connection processes |
US5745573A (en) * | 1994-08-11 | 1998-04-28 | Trusted Information Systems, Inc. | System and method for controlling access to a user secret |
US5640454A (en) * | 1994-08-11 | 1997-06-17 | Trusted Information Systems, Inc. | System and method for access field verification |
US5761662A (en) * | 1994-12-20 | 1998-06-02 | Sun Microsystems, Inc. | Personalized information retrieval using user-defined profile |
US5734865A (en) * | 1995-06-07 | 1998-03-31 | Bull Hn Information Systems Inc. | Virtual local area network well-known port routing mechanism for mult--emulators in an open system environment |
US5729734A (en) * | 1995-11-03 | 1998-03-17 | Apple Computer, Inc. | File privilege administration apparatus and methods |
US6061349A (en) * | 1995-11-03 | 2000-05-09 | Cisco Technology, Inc. | System and method for implementing multiple IP addresses on multiple ports |
US6370570B1 (en) * | 1995-11-13 | 2002-04-09 | Citrix Systems, Inc. | Method and apparatus for making a hypermedium interactive |
US7359953B2 (en) * | 1995-11-13 | 2008-04-15 | Citrix Systems, Inc. | Methods and apparatus for making a hypermedium interactive |
US6088515A (en) * | 1995-11-13 | 2000-07-11 | Citrix Systems Inc | Method and apparatus for making a hypermedium interactive |
US5706437A (en) * | 1995-12-29 | 1998-01-06 | Mci Communications Corporation | System and method for accessing a service on a services network |
US5764915A (en) * | 1996-03-08 | 1998-06-09 | International Business Machines Corporation | Object-oriented communication interface for network protocol access using the selected newly created protocol interface object and newly created protocol layer objects in the protocol stack |
US6199753B1 (en) * | 1996-09-05 | 2001-03-13 | Symbol Technologies, Inc. | Method and system for presenting item information using a portable data terminal |
US5884046A (en) * | 1996-10-23 | 1999-03-16 | Pluris, Inc. | Apparatus and method for sharing data and routing messages between a plurality of workstations in a local area network |
US6026440A (en) * | 1997-01-27 | 2000-02-15 | International Business Machines Corporation | Web server account manager plug-in for monitoring resources |
US6546454B1 (en) * | 1997-04-15 | 2003-04-08 | Sun Microsystems, Inc. | Virtual machine with securely distributed bytecode verification |
US5860068A (en) * | 1997-12-04 | 1999-01-12 | Petabyte Corporation | Method and system for custom manufacture and delivery of a data product |
US6339595B1 (en) * | 1997-12-23 | 2002-01-15 | Cisco Technology, Inc. | Peer-model support for virtual private networks with potentially overlapping addresses |
US6526056B1 (en) * | 1997-12-23 | 2003-02-25 | Cisco Technology, Inc. | Virtual private network employing tag-implemented egress-channel selection |
US6253224B1 (en) * | 1998-03-24 | 2001-06-26 | International Business Machines Corporation | Method and system for providing a hardware machine function in a protected virtual machine |
US6681238B1 (en) * | 1998-03-24 | 2004-01-20 | International Business Machines Corporation | Method and system for providing a hardware machine function in a protected virtual machine |
US6256637B1 (en) * | 1998-05-05 | 2001-07-03 | Gemstone Systems, Inc. | Transactional virtual machine architecture |
US20020057295A1 (en) * | 1998-05-29 | 2002-05-16 | Anatoliy Panasyuk | System and method for combining local and remote windows into a single desktop environment |
US6516315B1 (en) * | 1998-11-05 | 2003-02-04 | Neuvis, Inc. | Method for controlling access to information |
US6571245B2 (en) * | 1998-12-07 | 2003-05-27 | Magically, Inc. | Virtual desktop in a computer network |
US6550012B1 (en) * | 1998-12-11 | 2003-04-15 | Network Associates, Inc. | Active firewall system and methodology |
US6510466B1 (en) * | 1998-12-14 | 2003-01-21 | International Business Machines Corporation | Methods, systems and computer program products for centralized management of application programs on a network |
US6370687B1 (en) * | 1999-01-21 | 2002-04-09 | Fujitsu Limited | Network computer system and substitute compile server |
US6519643B1 (en) * | 1999-04-29 | 2003-02-11 | Attachmate Corporation | Method and system for a session allocation manager (“SAM”) |
US6691232B1 (en) * | 1999-08-05 | 2004-02-10 | Sun Microsystems, Inc. | Security architecture with environment sensitive credential sufficiency evaluation |
US7546353B2 (en) * | 1999-12-02 | 2009-06-09 | Western Digital Technologies, Inc. | Managed peer-to-peer applications, systems and methods for distributed data access and storage |
US6766457B1 (en) * | 1999-12-07 | 2004-07-20 | Unisys Corporation | Method for controlling access to a multiplicity of objects using a customizable object-oriented access control hook |
US20020049841A1 (en) * | 2000-03-03 | 2002-04-25 | Johnson Scott C | Systems and methods for providing differentiated service in information management environments |
US20020049608A1 (en) * | 2000-03-03 | 2002-04-25 | Hartsell Neal D. | Systems and methods for providing differentiated business services in information management environments |
US20020095400A1 (en) * | 2000-03-03 | 2002-07-18 | Johnson Scott C | Systems and methods for managing differentiated service in information management environments |
US20020065864A1 (en) * | 2000-03-03 | 2002-05-30 | Hartsell Neal D. | Systems and method for resource tracking in information management environments |
US20020059274A1 (en) * | 2000-03-03 | 2002-05-16 | Hartsell Neal D. | Systems and methods for configuration of information management systems |
US6553377B1 (en) * | 2000-03-31 | 2003-04-22 | Network Associates, Inc. | System and process for maintaining a plurality of remote security applications using a modular framework in a distributed computing environment |
US6920502B2 (en) * | 2000-04-13 | 2005-07-19 | Netilla Networks, Inc. | Apparatus and accompanying methods for providing, through a centralized server site, an integrated virtual office environment, remotely accessible via a network-connected web browser, with remote network monitoring and management capabilities |
US7185192B1 (en) * | 2000-07-07 | 2007-02-27 | Emc Corporation | Methods and apparatus for controlling access to a resource |
US7065637B1 (en) * | 2000-08-24 | 2006-06-20 | Veritas Operating Corporating | System for configuration of dynamic computing environments using a visual interface |
US20020035451A1 (en) * | 2000-09-18 | 2002-03-21 | Todd Rothermel | Spatail data enabled engineering, construction, and operations computer-aided design (CAD) project system, method and computer program product |
US20020087668A1 (en) * | 2000-12-29 | 2002-07-04 | San Martin Raul S. | Automatic upgrade of live network devices |
US20020095584A1 (en) * | 2001-01-12 | 2002-07-18 | Royer Barry Lynn | System and user interface supporting concurrent application initiation and interoperability |
US20030074580A1 (en) * | 2001-03-21 | 2003-04-17 | Knouse Charles W. | Access system interface |
US20030105604A1 (en) * | 2001-06-19 | 2003-06-05 | Ash Leslie E. | Real-time streaming media measurement system and method |
US20030014669A1 (en) * | 2001-07-10 | 2003-01-16 | Caceres Maximiliano Gerardo | Automated computer system security compromise |
US20030051130A1 (en) * | 2001-08-28 | 2003-03-13 | Melampy Patrick J. | System and method for providing encryption for rerouting of real time multi-media flows |
US6880002B2 (en) * | 2001-09-05 | 2005-04-12 | Surgient, Inc. | Virtualized logical server cloud providing non-deterministic allocation of logical attributes of logical servers to physical resources |
US20030065676A1 (en) * | 2001-09-05 | 2003-04-03 | Microsoft Corporation | Methods and system of managing concurrent access to multiple resources |
US7350194B1 (en) * | 2001-09-24 | 2008-03-25 | Oracle Corporation | Techniques for debugging computer programs involving multiple computing machines |
US20030101343A1 (en) * | 2001-11-27 | 2003-05-29 | Eaton Eric Thomas | System for providing continuity between messaging clients and method therefor |
US20040039594A1 (en) * | 2002-01-09 | 2004-02-26 | Innerpresence Networks, Inc. | Systems and methods for dynamically generating licenses in a rights management system |
US20030145222A1 (en) * | 2002-01-31 | 2003-07-31 | Hewlett-Packard Company | Apparatus for setting access requirements |
US20040031058A1 (en) * | 2002-05-10 | 2004-02-12 | Richard Reisman | Method and apparatus for browsing using alternative linkbases |
US7546372B2 (en) * | 2002-07-11 | 2009-06-09 | Ibeam Systems, Inc. | System and method for providing to multiple user computers concurrent telephonic access to multiple remote devices |
US20040070608A1 (en) * | 2002-10-10 | 2004-04-15 | International Business Machines Corporation | Apparatus and method for transferring files from one machine to another using adjacent desktop displays in a virtual network |
US20040103310A1 (en) * | 2002-11-27 | 2004-05-27 | Sobel William E. | Enforcement of compliance with network security policies |
US20050125663A1 (en) * | 2002-12-03 | 2005-06-09 | Funk Software, Inc. | Tunneled authentication protocol for preventing man-in-the-middle attacks |
US20040131042A1 (en) * | 2002-12-31 | 2004-07-08 | Lillie Ross J. | Apparatus and method for controlling and managing individual directed sessions in a communications system |
US20050004942A1 (en) * | 2003-04-02 | 2005-01-06 | Madsen Mark E. | Methods and systems for controlling network infrastructure devices |
US20050003810A1 (en) * | 2003-05-28 | 2005-01-06 | Sun Microsystems, Inc. | Method and system for optimizing software program start-up time |
US20050063083A1 (en) * | 2003-08-21 | 2005-03-24 | Dart Scott E. | Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system |
US20050050053A1 (en) * | 2003-08-21 | 2005-03-03 | Microsoft Corporation. | Systems and methods for the implementation of a core schema for providing a top-level structure for organizing units of information manageable by a hardware/software interface system |
US20050044089A1 (en) * | 2003-08-21 | 2005-02-24 | Microsoft Corporation | Systems and methods for interfacing application programs with an item-based storage platform |
US20050044108A1 (en) * | 2003-08-21 | 2005-02-24 | Ashish Shah | Systems and methods for providing synchronization services for units of information manageable by a hardware/software interface system |
US20050071652A1 (en) * | 2003-09-25 | 2005-03-31 | Sun Microsystems, Inc., A Delaware Corporation | Multiple instruction dispatch tables for application program obfuscation |
US20050125739A1 (en) * | 2003-11-20 | 2005-06-09 | Thompson Jeffrey W. | Virtual desktop manager system and method |
US20060161970A1 (en) * | 2003-12-10 | 2006-07-20 | Chris Hopen | End point control |
US20050160151A1 (en) * | 2003-12-17 | 2005-07-21 | International Business Machines Corporation | Method and system for machine memory power and availability management in a processing system supporting multiple virtual machines |
US20050165928A1 (en) * | 2004-01-26 | 2005-07-28 | Jesse Shu | Wireless firewall with tear down messaging |
US20060010433A1 (en) * | 2004-06-30 | 2006-01-12 | Microsoft Corporation | Systems and methods for providing seamless software compatibility using virtual machines |
US20060020937A1 (en) * | 2004-07-21 | 2006-01-26 | Softricity, Inc. | System and method for extraction and creation of application meta-information within a software application repository |
US20060036570A1 (en) * | 2004-08-03 | 2006-02-16 | Softricity, Inc. | System and method for controlling inter-application association through contextual policy control |
US20060041761A1 (en) * | 2004-08-17 | 2006-02-23 | Neumann William C | System for secure computing using defense-in-depth architecture |
US20060130060A1 (en) * | 2004-12-10 | 2006-06-15 | Intel Corporation | System and method to deprivilege components of a virtual machine monitor |
US7533189B2 (en) * | 2005-06-21 | 2009-05-12 | Microsoft Corporation | Enabling a graphical window modification command to be applied to a remotely generated graphical window |
US20070006226A1 (en) * | 2005-06-29 | 2007-01-04 | Microsoft Corporation | Failure management for a virtualized computing environment |
US20070018992A1 (en) * | 2005-07-22 | 2007-01-25 | Microsoft Corporation | Secure hardware desktop buffer composition |
US20070074071A1 (en) * | 2005-09-27 | 2007-03-29 | Michael Rothman | Processor thermal management |
US20070107048A1 (en) * | 2005-10-11 | 2007-05-10 | David Halls | Systems and Methods for Facilitating Distributed Authentication |
US20070097130A1 (en) * | 2005-11-01 | 2007-05-03 | Digital Display Innovations, Llc | Multi-user terminal services accelerator |
US20070171921A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US20070174410A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for incorporating remote windows from disparate remote desktop environments into a local desktop environment |
Cited By (457)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080039062A1 (en) * | 1997-12-09 | 2008-02-14 | Openwave Systems Inc. | Method and apparatus for accessing a common database from a mobile device and a computing device |
US7813714B2 (en) * | 1997-12-09 | 2010-10-12 | Openwave Systems Inc. | Apparatus for accessing a common database from a mobile device and a computing device |
US8898294B2 (en) | 2000-07-28 | 2014-11-25 | Axeda Corporation | Reporting the state of an apparatus to a remote computer |
US8055758B2 (en) | 2000-07-28 | 2011-11-08 | Axeda Corporation | Reporting the state of an apparatus to a remote computer |
US8108543B2 (en) | 2000-09-22 | 2012-01-31 | Axeda Corporation | Retrieving data from a server |
US10069937B2 (en) | 2000-09-22 | 2018-09-04 | Ptc Inc. | Retrieving data from a server |
US8762497B2 (en) | 2000-09-22 | 2014-06-24 | Axeda Corporation | Retrieving data from a server |
US7937370B2 (en) | 2000-09-22 | 2011-05-03 | Axeda Corporation | Retrieving data from a server |
US9674067B2 (en) | 2001-12-20 | 2017-06-06 | PTC, Inc. | Adaptive device-initiated polling |
US8406119B2 (en) | 2001-12-20 | 2013-03-26 | Axeda Acquisition Corporation | Adaptive device-initiated polling |
US9170902B2 (en) | 2001-12-20 | 2015-10-27 | Ptc Inc. | Adaptive device-initiated polling |
US8752074B2 (en) | 2002-04-17 | 2014-06-10 | Axeda Corporation | Scripting of soap commands |
US9591065B2 (en) | 2002-04-17 | 2017-03-07 | Ptc Inc. | Scripting of SOAP commands |
US10708346B2 (en) | 2002-04-17 | 2020-07-07 | Ptc Inc. | Scripting of soap commands |
US8060886B2 (en) | 2002-04-17 | 2011-11-15 | Axeda Corporation | XML scripting of SOAP commands |
US7966418B2 (en) | 2003-02-21 | 2011-06-21 | Axeda Corporation | Establishing a virtual tunnel between two computer programs |
US8291039B2 (en) | 2003-02-21 | 2012-10-16 | Axeda Corporation | Establishing a virtual tunnel between two computer programs |
US9002980B2 (en) | 2003-02-21 | 2015-04-07 | Axeda Corporation | Establishing a virtual tunnel between two computer programs |
US10069939B2 (en) | 2003-02-21 | 2018-09-04 | Ptc Inc. | Establishing a virtual tunnel between two computers |
US20060075224A1 (en) * | 2004-09-24 | 2006-04-06 | David Tao | System for activating multiple applications for concurrent operation |
US20100218236A1 (en) * | 2004-11-29 | 2010-08-26 | Signacert, Inc. | Method and apparatus to establish routes based on the trust scores of routers within an ip routing domain |
US8139588B2 (en) | 2004-11-29 | 2012-03-20 | Harris Corporation | Method and apparatus to establish routes based on the trust scores of routers within an IP routing domain |
US7733804B2 (en) | 2004-11-29 | 2010-06-08 | Signacert, Inc. | Method and apparatus to establish routes based on the trust scores of routers within an IP routing domain |
US8266676B2 (en) | 2004-11-29 | 2012-09-11 | Harris Corporation | Method to verify the integrity of components on a trusted platform using integrity database services |
US8429412B2 (en) | 2004-11-29 | 2013-04-23 | Signacert, Inc. | Method to control access between network endpoints based on trust scores calculated from information system component analysis |
US8327131B1 (en) | 2004-11-29 | 2012-12-04 | Harris Corporation | Method and system to issue trust score certificates for networked devices using a trust scoring service |
US20070180495A1 (en) * | 2004-11-29 | 2007-08-02 | Signacert, Inc. | Method and apparatus to establish routes based on the trust scores of routers within an ip routing domain |
US20090144813A1 (en) * | 2004-11-29 | 2009-06-04 | Signacert, Inc. | Method to control access between network endpoints based on trust scores calculated from information system component analysis |
US9450966B2 (en) | 2004-11-29 | 2016-09-20 | Kip Sign P1 Lp | Method and apparatus for lifecycle integrity verification of virtual machines |
US20070143629A1 (en) * | 2004-11-29 | 2007-06-21 | Hardjono Thomas P | Method to verify the integrity of components on a trusted platform using integrity database services |
US20110078452A1 (en) * | 2004-11-29 | 2011-03-31 | Signacert, Inc. | Method to control access between network endpoints based on trust scores calculated from information system component analysis |
US7904727B2 (en) | 2004-11-29 | 2011-03-08 | Signacert, Inc. | Method to control access between network endpoints based on trust scores calculated from information system component analysis |
US20090089860A1 (en) * | 2004-11-29 | 2009-04-02 | Signacert, Inc. | Method and apparatus for lifecycle integrity verification of virtual machines |
US11379582B2 (en) | 2005-06-30 | 2022-07-05 | Webroot Inc. | Methods and apparatus for malware threat research |
US10803170B2 (en) | 2005-06-30 | 2020-10-13 | Webroot Inc. | Methods and apparatus for dealing with malware |
US7765483B2 (en) * | 2005-09-12 | 2010-07-27 | Microsoft Corporation | Filtering obscured data from a remote client display |
US20070061399A1 (en) * | 2005-09-12 | 2007-03-15 | Microsoft Corporation | Filtering obscured data from a remote client display |
US20110179477A1 (en) * | 2005-12-09 | 2011-07-21 | Harris Corporation | System including property-based weighted trust score application tokens for access control and related methods |
US9195450B2 (en) * | 2005-12-22 | 2015-11-24 | Microsoft Technology Licensing, Llc | Program execution service windows |
US20140165051A1 (en) * | 2005-12-22 | 2014-06-12 | Microsoft Corporation | Program execution service windows |
US20070198656A1 (en) * | 2006-01-24 | 2007-08-23 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine executing in a terminal services session and hosting a requested computing environment |
US20070171921A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US8051180B2 (en) | 2006-01-24 | 2011-11-01 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine executing in a terminal services session and hosting a requested computing environment |
US8010679B2 (en) | 2006-01-24 | 2011-08-30 | Citrix Systems, Inc. | Methods and systems for providing access to a computing environment provided by a virtual machine executing in a hypervisor executing in a terminal services session |
US7954150B2 (en) | 2006-01-24 | 2011-05-31 | Citrix Systems, Inc. | Methods and systems for assigning access control levels in providing access to resources via virtual machines |
US7949677B2 (en) | 2006-01-24 | 2011-05-24 | Citrix Systems, Inc. | Methods and systems for providing authorized remote access to a computing environment provided by a virtual machine |
US8355407B2 (en) | 2006-01-24 | 2013-01-15 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US8341732B2 (en) | 2006-01-24 | 2012-12-25 | Citrix Systems, Inc. | Methods and systems for selecting a method for execution, by a virtual machine, of an application program |
US8117314B2 (en) | 2006-01-24 | 2012-02-14 | Citrix Systems, Inc. | Methods and systems for providing remote access to a computing environment provided by a virtual machine |
US20070180449A1 (en) * | 2006-01-24 | 2007-08-02 | Citrix Systems, Inc. | Methods and systems for providing remote access to a computing environment provided by a virtual machine |
US20070198729A1 (en) * | 2006-02-07 | 2007-08-23 | Yechuri Sitaramarao S | SQL network gadget |
US20070244966A1 (en) * | 2006-03-31 | 2007-10-18 | Microsoft Corporation | Establishing and utilizing terminal server dynamic virtual channels |
US20110138061A1 (en) * | 2006-03-31 | 2011-06-09 | Microsoft Corporation | Establishing and utilizing terminal server dynamic virtual channels |
US8799479B2 (en) * | 2006-03-31 | 2014-08-05 | Microsoft Corporation | Establishing and utilizing terminal server dynamic virtual channels |
US7904563B2 (en) * | 2006-03-31 | 2011-03-08 | Microsoft Corporation | Establishing and utilizing terminal server dynamic virtual channels |
US20090199132A1 (en) * | 2006-07-10 | 2009-08-06 | Devicevm, Inc. | Quick access to virtual applications |
US20090083375A1 (en) * | 2006-07-10 | 2009-03-26 | Chong Benedict T | Installation of a Virtualization Environment |
US8086836B2 (en) | 2006-07-10 | 2011-12-27 | Splashtop Inc. | Method and apparatus for virtualization of appliances |
US20080320295A1 (en) * | 2006-07-10 | 2008-12-25 | Chong Benedict T | Method and apparatus for virtualization of appliances |
US8966016B2 (en) * | 2006-09-28 | 2015-02-24 | International Business Machines Corporation | Resource-based event typing in a rules system |
US20080162579A1 (en) * | 2006-09-28 | 2008-07-03 | Kaminsky David L | Resource-Based Event Typing In A Rules System |
US8769095B2 (en) | 2006-10-03 | 2014-07-01 | Axeda Acquisition Corp. | System and method for dynamically grouping devices based on present device conditions |
US8370479B2 (en) | 2006-10-03 | 2013-02-05 | Axeda Acquisition Corporation | System and method for dynamically grouping devices based on present device conditions |
US10212055B2 (en) | 2006-10-03 | 2019-02-19 | Ptc Inc. | System and method for dynamically grouping devices based on present device conditions |
US9491071B2 (en) | 2006-10-03 | 2016-11-08 | Ptc Inc. | System and method for dynamically grouping devices based on present device conditions |
US20080091800A1 (en) * | 2006-10-13 | 2008-04-17 | Xerox Corporation | Local user interface support of remote services |
US20090254982A1 (en) * | 2006-10-23 | 2009-10-08 | Real Enterprise Solutions Development B.V. | Methods, programs and a system of providing remote access |
US20080120372A1 (en) * | 2006-11-21 | 2008-05-22 | General Electric Company | Systems and methods for image sharing in a healthcare setting while maintaining diagnostic image quality |
US8725801B2 (en) * | 2006-11-21 | 2014-05-13 | General Electric Company | Systems and methods for image sharing in a healthcare setting while maintaining diagnostic image quality |
US8065397B2 (en) | 2006-12-26 | 2011-11-22 | Axeda Acquisition Corporation | Managing configurations of distributed devices |
US9491049B2 (en) | 2006-12-26 | 2016-11-08 | Ptc Inc. | Managing configurations of distributed devices |
US8788632B2 (en) | 2006-12-26 | 2014-07-22 | Axeda Acquisition Corp. | Managing configurations of distributed devices |
US9712385B2 (en) | 2006-12-26 | 2017-07-18 | PTC, Inc. | Managing configurations of distributed devices |
US20080172494A1 (en) * | 2007-01-12 | 2008-07-17 | Samsung Electronics Co., Ltd. | Method and apparatus for determining communication protocol |
US20080183641A1 (en) * | 2007-01-25 | 2008-07-31 | Chang Bin Tang | Generalized application virtualization method for business use on the web and the mini server using this method |
US11010799B2 (en) * | 2007-01-25 | 2021-05-18 | Transoft (Shanghai) Inc. | Generalized application virtualization method for business use on the web and the mini server using this method |
US9747125B2 (en) | 2007-02-15 | 2017-08-29 | Citrix Systems, Inc. | Associating virtual machines on a server computer with particular users on an exclusive basis |
US9270781B2 (en) * | 2007-02-15 | 2016-02-23 | Citrix Systems, Inc. | Associating virtual machines on a server computer with particular users on an exclusive basis |
US20080201479A1 (en) * | 2007-02-15 | 2008-08-21 | Husain Syed M Amir | Associating Virtual Machines on a Server Computer with Particular Users on an Exclusive Basis |
US9043391B2 (en) | 2007-02-15 | 2015-05-26 | Citrix Systems, Inc. | Capturing and restoring session state of a machine without using memory images |
US20080235384A1 (en) * | 2007-03-20 | 2008-09-25 | Microsoft Corporation | Web service for coordinating actions of clients |
US7984158B2 (en) * | 2007-03-20 | 2011-07-19 | Microsoft Corporation | Web service for coordinating actions of clients |
US20090003387A1 (en) * | 2007-06-27 | 2009-01-01 | Microsoft Corporation | Synchronization Between Connection Manager and Extension Components |
US9350493B1 (en) * | 2007-07-19 | 2016-05-24 | American Megatrends, Inc. | Multi-protocol data transfers |
WO2009018366A1 (en) * | 2007-08-01 | 2009-02-05 | Signacert. Inc. | Method and apparatus for lifecycle integrity verification of virtual machines |
WO2009032446A1 (en) * | 2007-08-01 | 2009-03-12 | Devicevm, Inc. | Diagnostic virtual appliance |
US20090037496A1 (en) * | 2007-08-01 | 2009-02-05 | Chong Benedict T | Diagnostic Virtual Appliance |
US8280790B2 (en) | 2007-08-06 | 2012-10-02 | Gogrid, LLC | System and method for billing for hosted services |
US20090182605A1 (en) * | 2007-08-06 | 2009-07-16 | Paul Lappas | System and Method for Billing for Hosted Services |
US8374929B1 (en) | 2007-08-06 | 2013-02-12 | Gogrid, LLC | System and method for billing for hosted services |
US10198142B1 (en) | 2007-08-06 | 2019-02-05 | Gogrid, LLC | Multi-server control panel |
US20090063665A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Highly scalable architecture for application network appliances |
US8295306B2 (en) | 2007-08-28 | 2012-10-23 | Cisco Technologies, Inc. | Layer-4 transparent secure transport protocol for end-to-end application protection |
US20090063688A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Centralized tcp termination with multi-service chaining |
US20090063701A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Layers 4-7 service gateway for converged datacenter fabric |
US20090063625A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Highly scalable application layer service appliances |
US20090064287A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Application protection architecture with triangulated authorization |
US8161167B2 (en) | 2007-08-28 | 2012-04-17 | Cisco Technology, Inc. | Highly scalable application layer service appliances |
US20090064288A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Highly scalable application network appliances with virtualized services |
US8180901B2 (en) | 2007-08-28 | 2012-05-15 | Cisco Technology, Inc. | Layers 4-7 service gateway for converged datacenter fabric |
US9100371B2 (en) | 2007-08-28 | 2015-08-04 | Cisco Technology, Inc. | Highly scalable architecture for application network appliances |
US20090059957A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Layer-4 transparent secure transport protocol for end-to-end application protection |
US20090063893A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Redundant application network appliances using a low latency lossless interconnect link |
US7895463B2 (en) | 2007-08-28 | 2011-02-22 | Cisco Technology, Inc. | Redundant application network appliances using a low latency lossless interconnect link |
US8621573B2 (en) | 2007-08-28 | 2013-12-31 | Cisco Technology, Inc. | Highly scalable application network appliances with virtualized services |
US7913529B2 (en) | 2007-08-28 | 2011-03-29 | Cisco Technology, Inc. | Centralized TCP termination with multi-service chaining |
US7921686B2 (en) | 2007-08-28 | 2011-04-12 | Cisco Technology, Inc. | Highly scalable architecture for application network appliances |
US9491201B2 (en) | 2007-08-28 | 2016-11-08 | Cisco Technology, Inc. | Highly scalable architecture for application network appliances |
US8443069B2 (en) | 2007-08-28 | 2013-05-14 | Cisco Technology, Inc. | Highly scalable architecture for application network appliances |
US20090063747A1 (en) * | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Application network appliances with inter-module communications using a universal serial bus |
US20090089260A1 (en) * | 2007-09-27 | 2009-04-02 | Chong Benedict T | Quick Searching UI for a Better User Experience |
US20090102838A1 (en) * | 2007-10-20 | 2009-04-23 | Justin Bullard | Methods and systems for remoting three dimensional graphical data |
US8638336B2 (en) * | 2007-10-20 | 2014-01-28 | Citrix Systems, Inc. | Methods and systems for remoting three dimensional graphical data |
US8505029B1 (en) * | 2007-11-26 | 2013-08-06 | Adobe Systems Incorporated | Virtual machine communication |
US20100042993A1 (en) * | 2007-12-20 | 2010-02-18 | Virtual Computer, Inc. | Transportation of a Workspace from One Machine to Another in a Virtual Computing Environment without Installing Hardware |
US20100042992A1 (en) * | 2007-12-20 | 2010-02-18 | Virtual Computer, Inc. | Remote Access to Workspaces in a Virtual Computing Environment with Multiple Virtualization Dimensions |
US8572370B1 (en) * | 2007-12-21 | 2013-10-29 | Parallels IP Holdings GmbH | Accessing a remote virtual environment without user authentication |
US20110154325A1 (en) * | 2007-12-26 | 2011-06-23 | Hiroshi Terasaki | Virtual machine system, system for forcing policy, method for forcing policy, and virtual machine control program |
US8468522B2 (en) * | 2007-12-26 | 2013-06-18 | Nec Corporation | Virtual machine system, system for forcing policy, method for forcing policy, and virtual machine control program |
US20090210512A1 (en) * | 2008-02-15 | 2009-08-20 | Chanan Steinhart | System, method, and program product for creating and sharing digital image output data across a network |
US11669359B2 (en) | 2008-02-26 | 2023-06-06 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US10896054B2 (en) | 2008-02-26 | 2021-01-19 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US10061605B2 (en) | 2008-02-26 | 2018-08-28 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US20090216975A1 (en) * | 2008-02-26 | 2009-08-27 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US8640126B2 (en) | 2008-02-26 | 2014-01-28 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US12106137B2 (en) | 2008-02-26 | 2024-10-01 | Omnissa, Llc | Extending server-based desktop virtual machine architecture to client machines |
US9444883B2 (en) | 2008-02-26 | 2016-09-13 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
AU2009219470B2 (en) * | 2008-02-26 | 2012-06-21 | VMware LLC | Extending server-based desktop virtual machine architecture to client machines |
WO2009108579A3 (en) * | 2008-02-26 | 2009-11-26 | Vmware, Inc. | Extending server-based desktop virtual machine architecture to client machines |
US20090219569A1 (en) * | 2008-02-28 | 2009-09-03 | Canon Kabushiki Kaisha | Information processing apparatus, information processing system, and information processing method |
US8646052B2 (en) * | 2008-03-31 | 2014-02-04 | Intel Corporation | Method and apparatus for providing a secure display window inside the primary display |
US20090245521A1 (en) * | 2008-03-31 | 2009-10-01 | Balaji Vembu | Method and apparatus for providing a secure display window inside the primary display |
US8094560B2 (en) | 2008-05-19 | 2012-01-10 | Cisco Technology, Inc. | Multi-stage multi-core processing of network packets |
US8667556B2 (en) | 2008-05-19 | 2014-03-04 | Cisco Technology, Inc. | Method and apparatus for building and managing policies |
US8677453B2 (en) | 2008-05-19 | 2014-03-18 | Cisco Technology, Inc. | Highly parallel evaluation of XACML policies |
US20130054426A1 (en) * | 2008-05-20 | 2013-02-28 | Verizon Patent And Licensing Inc. | System and Method for Customer Provisioning in a Utility Computing Platform |
US9479394B2 (en) | 2008-05-20 | 2016-10-25 | Verizon Patent And Licensing Inc. | System and method for customer provisioning in a utility computing platform |
US8745601B1 (en) * | 2008-07-17 | 2014-06-03 | Apple Inc. | Methods and systems for using data structures for operating systems |
US20100037220A1 (en) * | 2008-08-05 | 2010-02-11 | International Business Machines Corporation | System and Method for Creating and Associating a Virtual Pseudo TTY with a Running Process |
US8201175B2 (en) * | 2008-08-05 | 2012-06-12 | International Business Machines Corporation | Creating and associating a virtual pseudo TTY with a running process |
EP2329401A1 (en) * | 2008-09-11 | 2011-06-08 | Ely Tsern | Expandable systems architecture for a handheld device that dynamically generates different user environments for device displays |
EP2329401A4 (en) * | 2008-09-11 | 2012-08-22 | Ely Tsern | Expandable systems architecture for a handheld device that dynamically generates different user environments for device displays |
WO2010030610A1 (en) | 2008-09-11 | 2010-03-18 | Ely Tsern | Expandable systems architecture for a handheld device that dynamically generates different user environments for device displays |
US8914730B2 (en) | 2008-09-15 | 2014-12-16 | Vmware, Inc. | Unified secure virtual machine player and remote desktop client |
US20100070870A1 (en) * | 2008-09-15 | 2010-03-18 | Vmware, Inc. | Unified Secure Virtual Machine Player and Remote Desktop Client |
US8255806B2 (en) | 2008-09-15 | 2012-08-28 | Vmware, Inc. | Unified secure virtual machine player and remote desktop client |
US8453144B1 (en) | 2008-09-23 | 2013-05-28 | Gogrid, LLC | System and method for adapting a system configuration using an adaptive library |
US11442759B1 (en) | 2008-09-23 | 2022-09-13 | Google Llc | Automated system and method for extracting and adapting system configurations |
US8352608B1 (en) | 2008-09-23 | 2013-01-08 | Gogrid, LLC | System and method for automated configuration of hosting resources |
US8418176B1 (en) | 2008-09-23 | 2013-04-09 | Gogrid, LLC | System and method for adapting virtual machine configurations for hosting across different hosting systems |
US8458717B1 (en) | 2008-09-23 | 2013-06-04 | Gogrid, LLC | System and method for automated criteria based deployment of virtual machines across a grid of hosting resources |
US8468535B1 (en) | 2008-09-23 | 2013-06-18 | Gogrid, LLC | Automated system and method to provision and allocate hosting resources |
US8364802B1 (en) * | 2008-09-23 | 2013-01-29 | Gogrid, LLC | System and method for monitoring a grid of hosting resources in order to facilitate management of the hosting resources |
US10365935B1 (en) | 2008-09-23 | 2019-07-30 | Open Invention Network Llc | Automated system and method to customize and install virtual machine configurations for hosting in a hosting environment |
US10684874B1 (en) | 2008-09-23 | 2020-06-16 | Open Invention Network Llc | Automated system and method for extracting and adapting system configurations |
US9798560B1 (en) | 2008-09-23 | 2017-10-24 | Gogrid, LLC | Automated system and method for extracting and adapting system configurations |
US8656018B1 (en) | 2008-09-23 | 2014-02-18 | Gogrid, LLC | System and method for automated allocation of hosting resources controlled by different hypervisors |
US8533305B1 (en) | 2008-09-23 | 2013-09-10 | Gogrid, LLC | System and method for adapting a system configuration of a first computer system for hosting on a second computer system |
US8219653B1 (en) | 2008-09-23 | 2012-07-10 | Gogrid, LLC | System and method for adapting a system configuration of a first computer system for hosting on a second computer system |
US8732308B1 (en) * | 2008-10-01 | 2014-05-20 | Hewlett-Packard Development Company, L. P. | Coordinated management in virtualized systems using management brokers and management channels |
US20100088360A1 (en) * | 2008-10-03 | 2010-04-08 | Joe Jaudon | Methods for dynamically updating virtual desktops or virtual applications |
US20100088397A1 (en) * | 2008-10-03 | 2010-04-08 | Joe Jaudon | Systems for dynamically updating virtual desktops or virtual applications |
US8842313B2 (en) | 2008-10-30 | 2014-09-23 | Xerox Corporation | System and method for managing a print job in a printing system |
US20100110473A1 (en) * | 2008-10-30 | 2010-05-06 | Xerox Corporation | System and method for managing a print job in a printing system |
US20100110472A1 (en) * | 2008-10-30 | 2010-05-06 | Xerox Corporation | System and method for managing a print job in a printing system |
US8407316B2 (en) | 2008-10-30 | 2013-03-26 | Xerox Corporation | System and method for managing a print job in a printing system |
US20100138744A1 (en) * | 2008-11-30 | 2010-06-03 | Red Hat Israel, Ltd. | Methods for playing multimedia content at remote graphics display client |
US9135024B2 (en) * | 2008-11-30 | 2015-09-15 | Red Hat Israel, Ltd. | Playing multimedia content at remote graphics display client |
US8931087B1 (en) * | 2008-12-03 | 2015-01-06 | Verizon Patent And Licensing Inc. | Reconfigurable virtualized remote computer security system |
US20100146039A1 (en) * | 2008-12-08 | 2010-06-10 | Dell Products L.P. | System and Method for Providing Access to a Shared System Image |
US8868782B2 (en) * | 2009-03-10 | 2014-10-21 | Telefonaktiebolaget L M Ericsson (Publ) | System and methods for a managed application server restart |
US20110320633A1 (en) * | 2009-03-10 | 2011-12-29 | Andreas Burmester | System and methods for a managed application server restart |
US20100235750A1 (en) * | 2009-03-12 | 2010-09-16 | Bryce Douglas Noland | System, method and program product for a graphical interface |
US20100242038A1 (en) * | 2009-03-19 | 2010-09-23 | Berrange Daniel P | Providing a Trusted Environment for Provisioning a Virtual Machine |
US8959510B2 (en) * | 2009-03-19 | 2015-02-17 | Red Hat, Inc. | Providing a trusted environment for provisioning a virtual machine |
US11425055B2 (en) | 2009-04-01 | 2022-08-23 | Nicira, Inc. | Method and apparatus for implementing and managing virtual switches |
US8966035B2 (en) | 2009-04-01 | 2015-02-24 | Nicira, Inc. | Method and apparatus for implementing and managing distributed virtual switches in several hosts and physical forwarding elements |
US9590919B2 (en) | 2009-04-01 | 2017-03-07 | Nicira, Inc. | Method and apparatus for implementing and managing virtual switches |
US10931600B2 (en) | 2009-04-01 | 2021-02-23 | Nicira, Inc. | Method and apparatus for implementing and managing virtual switches |
US10693917B1 (en) | 2009-04-10 | 2020-06-23 | Open Invention Network Llc | System and method for on-line and off-line streaming application isolation |
US9832232B1 (en) * | 2009-04-10 | 2017-11-28 | Open Invention Network Llc | System and method for on-line and off-line streaming application isolation |
US8555360B1 (en) * | 2009-04-10 | 2013-10-08 | Open Invention Network Llc | System and method for on-line and off-line streaming application isolation |
US9369358B1 (en) * | 2009-04-10 | 2016-06-14 | Open Invention Network Llc | System and method for on-line and off-line streaming application isolation |
US11538078B1 (en) | 2009-04-10 | 2022-12-27 | International Business Machines Corporation | System and method for usage billing of hosted applications |
US20100268756A1 (en) * | 2009-04-16 | 2010-10-21 | Dell Products L.P. | System and method for providing access to a shared system image |
US8069217B2 (en) | 2009-04-16 | 2011-11-29 | Dell Products L.P. | System and method for providing access to a shared system image |
US9367512B2 (en) | 2009-04-22 | 2016-06-14 | Aventura Hq, Inc. | Systems and methods for dynamically updating virtual desktops or virtual applications in a standard computing environment |
US8234332B2 (en) | 2009-04-22 | 2012-07-31 | Aventura Hq, Inc. | Systems and methods for updating computer memory and file locations within virtual computing environments |
US20100274841A1 (en) * | 2009-04-22 | 2010-10-28 | Joe Jaudon | Systems and methods for dynamically updating virtual desktops or virtual applications in a standard computing environment |
WO2010127327A1 (en) * | 2009-05-01 | 2010-11-04 | Kaazing Corporation | Enterprise client-server system and methods of providing web application support through distributed emulation of websocket communications |
US10148705B2 (en) | 2009-05-01 | 2018-12-04 | Kaazing Corporation | Enterprise client-server system and methods of providing web application support through distributed emulation of websocket communications |
US9794304B2 (en) | 2009-05-01 | 2017-10-17 | Kaazing Corporation | Enterprise client-server system and methods of providing web application support through distributed emulation of websocket communications |
US10686850B2 (en) | 2009-05-01 | 2020-06-16 | Kaazing Corporation | Enterprise client-server system and methods of providing web application support through distributed emulation of websocket communications |
US8538919B1 (en) | 2009-05-16 | 2013-09-17 | Eric H. Nielsen | System, method, and computer program for real time remote recovery of virtual computing machines |
US20110082938A1 (en) * | 2009-10-07 | 2011-04-07 | Joe Jaudon | Systems and methods for dynamically updating a user interface within a virtual computing environment |
US8593671B2 (en) | 2009-10-16 | 2013-11-26 | Xerox Corporation | System and method for controlling usage of printer resources |
US20110090528A1 (en) * | 2009-10-16 | 2011-04-21 | Xerox Corporation | System and method for controlling usage of printer resources |
US8478722B2 (en) | 2009-11-12 | 2013-07-02 | Salesforce.Com, Inc. | Enterprise level business information networking for changes in a database |
US9054913B1 (en) | 2009-11-30 | 2015-06-09 | Dell Software Inc. | Network protocol proxy |
US8966112B1 (en) | 2009-11-30 | 2015-02-24 | Dell Software Inc. | Network protocol proxy |
US9804866B2 (en) | 2009-12-14 | 2017-10-31 | Citrix Systems, Inc. | Methods and systems for securing sensitive information using a hypervisor-trusted client |
US9507615B2 (en) * | 2009-12-14 | 2016-11-29 | Citrix Systems, Inc. | Methods and systems for allocating a USB device to a trusted virtual machine or a non-trusted virtual machine |
EP3009941A1 (en) * | 2009-12-14 | 2016-04-20 | Citrix Systems Inc. | Methods and systems for communicating between trusted and non-trusted virtual machines |
US20140101754A1 (en) * | 2009-12-14 | 2014-04-10 | Citrix Systems, Inc. | Methods and systems for allocating a usb device to a trusted virtual machine or a non-trusted virtual machine |
EP3001326A1 (en) * | 2009-12-14 | 2016-03-30 | Citrix Systems Inc. | Methods and systems for communicating between trusted and non-trusted virtual machines |
US20120017210A1 (en) * | 2010-01-08 | 2012-01-19 | Sauce Labs, Inc. | Real Time Verification of Web Applications |
US9170847B2 (en) * | 2010-01-08 | 2015-10-27 | Sauce Labs, Inc. | Real time verification of web applications |
US8601056B2 (en) * | 2010-03-09 | 2013-12-03 | Avistar Communications Corporation | Scalable high-performance interactive real-time media architectures for virtual desktop environments |
US20110225313A1 (en) * | 2010-03-09 | 2011-09-15 | Avistar Communications Corporation | Scalable high-performance interactive real-time media architectures for virtual desktop environments |
US20110225578A1 (en) * | 2010-03-09 | 2011-09-15 | Avistar Communications Corporation | Scalable high-performance interactive real-time media architectures for virtual desktop environments |
US8869141B2 (en) * | 2010-03-09 | 2014-10-21 | Avistar Communications Corp. | Scalable high-performance interactive real-time media architectures for virtual desktop environments |
EP2958257A1 (en) * | 2010-03-23 | 2015-12-23 | Citrix Systems Inc. | Network policy implementation for a multi-virtual machine appliance |
US9344334B2 (en) | 2010-03-23 | 2016-05-17 | Citrix Systems, Inc. | Network policy implementation for a multi-virtual machine appliance within a virtualization environment |
US8601226B1 (en) | 2010-05-20 | 2013-12-03 | Gogrid, LLC | System and method for storing server images in a hosting system |
US8473587B1 (en) | 2010-05-20 | 2013-06-25 | Gogrid, LLC | System and method for caching server images in a hosting system |
US8443077B1 (en) | 2010-05-20 | 2013-05-14 | Gogrid, LLC | System and method for managing disk volumes in a hosting system |
US8495512B1 (en) | 2010-05-20 | 2013-07-23 | Gogrid, LLC | System and method for storing a configuration of virtual servers in a hosting system |
US9507542B1 (en) | 2010-05-20 | 2016-11-29 | Gogrid, LLC | System and method for deploying virtual servers in a hosting system |
US9870271B1 (en) | 2010-05-20 | 2018-01-16 | Gogrid, LLC | System and method for deploying virtual servers in a hosting system |
US8771064B2 (en) | 2010-05-26 | 2014-07-08 | Aristocrat Technologies Australia Pty Limited | Gaming system and a method of gaming |
US20110307614A1 (en) * | 2010-06-15 | 2011-12-15 | Microsoft Corporation | Techniques For Efficient Remote Presentation Session Connectivity And Routing |
US9891931B2 (en) * | 2010-06-15 | 2018-02-13 | Microsoft Technology Licensing, Llc | Techniques for efficient remote presentation session connectivity and routing |
US8913483B2 (en) | 2010-07-06 | 2014-12-16 | Nicira, Inc. | Fault tolerant managed switching element architecture |
US9306875B2 (en) | 2010-07-06 | 2016-04-05 | Nicira, Inc. | Managed switch architectures for implementing logical datapath sets |
US12028215B2 (en) | 2010-07-06 | 2024-07-02 | Nicira, Inc. | Distributed network control system with one master controller per logical datapath set |
US11539591B2 (en) | 2010-07-06 | 2022-12-27 | Nicira, Inc. | Distributed network control system with one master controller per logical datapath set |
US9007903B2 (en) | 2010-07-06 | 2015-04-14 | Nicira, Inc. | Managing a network by controlling edge and non-edge switching elements |
US9049153B2 (en) | 2010-07-06 | 2015-06-02 | Nicira, Inc. | Logical packet processing pipeline that retains state information to effectuate efficient processing of packets |
US9008087B2 (en) | 2010-07-06 | 2015-04-14 | Nicira, Inc. | Processing requests in a network control system with multiple controller instances |
US9077664B2 (en) | 2010-07-06 | 2015-07-07 | Nicira, Inc. | One-hop packet processing in a network with managed switching elements |
US9525647B2 (en) | 2010-07-06 | 2016-12-20 | Nicira, Inc. | Network control apparatus and method for creating and modifying logical switching elements |
US9680750B2 (en) | 2010-07-06 | 2017-06-13 | Nicira, Inc. | Use of tunnels to hide network addresses |
US9692655B2 (en) | 2010-07-06 | 2017-06-27 | Nicira, Inc. | Packet processing in a network with hierarchical managed switching elements |
US8743888B2 (en) | 2010-07-06 | 2014-06-03 | Nicira, Inc. | Network control apparatus and method |
US9106587B2 (en) | 2010-07-06 | 2015-08-11 | Nicira, Inc. | Distributed network control system with one master controller per managed switching element |
US9112811B2 (en) | 2010-07-06 | 2015-08-18 | Nicira, Inc. | Managed switching elements used as extenders |
US8966040B2 (en) | 2010-07-06 | 2015-02-24 | Nicira, Inc. | Use of network information base structure to establish communication between applications |
US8750119B2 (en) | 2010-07-06 | 2014-06-10 | Nicira, Inc. | Network control apparatus and method with table mapping engine |
US8964598B2 (en) | 2010-07-06 | 2015-02-24 | Nicira, Inc. | Mesh architectures for managed switching elements |
US10326660B2 (en) | 2010-07-06 | 2019-06-18 | Nicira, Inc. | Network virtualization apparatus and method |
US8964528B2 (en) | 2010-07-06 | 2015-02-24 | Nicira, Inc. | Method and apparatus for robust packet distribution among hierarchical managed switching elements |
US8959215B2 (en) | 2010-07-06 | 2015-02-17 | Nicira, Inc. | Network virtualization |
US9172663B2 (en) | 2010-07-06 | 2015-10-27 | Nicira, Inc. | Method and apparatus for replicating network information base in a distributed network control system with multiple controller instances |
US10320585B2 (en) | 2010-07-06 | 2019-06-11 | Nicira, Inc. | Network control apparatus and method for creating and modifying logical switching elements |
US8750164B2 (en) | 2010-07-06 | 2014-06-10 | Nicira, Inc. | Hierarchical managed switch architecture |
US8958292B2 (en) | 2010-07-06 | 2015-02-17 | Nicira, Inc. | Network control apparatus and method with port security controls |
US11641321B2 (en) | 2010-07-06 | 2023-05-02 | Nicira, Inc. | Packet processing for logical datapath sets |
US11979280B2 (en) | 2010-07-06 | 2024-05-07 | Nicira, Inc. | Network control apparatus and method for populating logical datapath sets |
US8743889B2 (en) | 2010-07-06 | 2014-06-03 | Nicira, Inc. | Method and apparatus for using a network information base to control a plurality of shared network infrastructure switching elements |
US9231891B2 (en) | 2010-07-06 | 2016-01-05 | Nicira, Inc. | Deployment of hierarchical managed switching elements |
US8761036B2 (en) | 2010-07-06 | 2014-06-24 | Nicira, Inc. | Network control apparatus and method with quality of service controls |
US11509564B2 (en) | 2010-07-06 | 2022-11-22 | Nicira, Inc. | Method and apparatus for replicating network information base in a distributed network control system with multiple controller instances |
US8880468B2 (en) | 2010-07-06 | 2014-11-04 | Nicira, Inc. | Secondary storage architecture for a network control system that utilizes a primary network information base |
US10103939B2 (en) | 2010-07-06 | 2018-10-16 | Nicira, Inc. | Network control apparatus and method for populating logical datapath sets |
US11677588B2 (en) | 2010-07-06 | 2023-06-13 | Nicira, Inc. | Network control apparatus and method for creating and modifying logical switching elements |
US11876679B2 (en) | 2010-07-06 | 2024-01-16 | Nicira, Inc. | Method and apparatus for interacting with a network information base in a distributed network control system with multiple controller instances |
US8717895B2 (en) | 2010-07-06 | 2014-05-06 | Nicira, Inc. | Network virtualization apparatus and method with a table mapping engine |
US9300603B2 (en) | 2010-07-06 | 2016-03-29 | Nicira, Inc. | Use of rich context tags in logical data processing |
US8842679B2 (en) | 2010-07-06 | 2014-09-23 | Nicira, Inc. | Control system that elects a master controller instance for switching elements |
US9391928B2 (en) | 2010-07-06 | 2016-07-12 | Nicira, Inc. | Method and apparatus for interacting with a network information base in a distributed network control system with multiple controller instances |
US10686663B2 (en) | 2010-07-06 | 2020-06-16 | Nicira, Inc. | Managed switch architectures: software managed switches, hardware managed switches, and heterogeneous managed switches |
US8718070B2 (en) | 2010-07-06 | 2014-05-06 | Nicira, Inc. | Distributed network virtualization apparatus and method |
US10038597B2 (en) | 2010-07-06 | 2018-07-31 | Nicira, Inc. | Mesh architectures for managed switching elements |
US10021019B2 (en) | 2010-07-06 | 2018-07-10 | Nicira, Inc. | Packet processing for logical datapath sets |
US8837493B2 (en) | 2010-07-06 | 2014-09-16 | Nicira, Inc. | Distributed network control apparatus and method |
US8830823B2 (en) | 2010-07-06 | 2014-09-09 | Nicira, Inc. | Distributed control platform for large-scale production networks |
US8817620B2 (en) | 2010-07-06 | 2014-08-26 | Nicira, Inc. | Network virtualization apparatus and method |
US11743123B2 (en) | 2010-07-06 | 2023-08-29 | Nicira, Inc. | Managed switch architectures: software managed switches, hardware managed switches, and heterogeneous managed switches |
US8775594B2 (en) | 2010-07-06 | 2014-07-08 | Nicira, Inc. | Distributed network control system with a distributed hash table |
US9363210B2 (en) | 2010-07-06 | 2016-06-07 | Nicira, Inc. | Distributed network control system with one master controller per logical datapath set |
US8817621B2 (en) | 2010-07-06 | 2014-08-26 | Nicira, Inc. | Network virtualization apparatus |
US11223531B2 (en) | 2010-07-06 | 2022-01-11 | Nicira, Inc. | Method and apparatus for interacting with a network information base in a distributed network control system with multiple controller instances |
US20130133030A1 (en) * | 2010-07-30 | 2013-05-23 | China Iwncomm Co., Ltd. | Platform authentication strategy management method and device for trusted connection architecture |
US9246942B2 (en) * | 2010-07-30 | 2016-01-26 | China Iwncomm Co., Ltd. | Platform authentication strategy management method and device for trusted connection architecture |
US9027103B2 (en) * | 2010-09-26 | 2015-05-05 | Feitian Technologies Co., Ltd. | Method and system for securely accessing to protected resource |
US20130104218A1 (en) * | 2010-09-26 | 2013-04-25 | Zhou Lu | Method and system for securely accessing to protected resource |
US8990562B2 (en) | 2010-10-08 | 2015-03-24 | Microsoft Technology Licensing, Llc | Secure deployment of provable identity for dynamic application environments |
WO2012047555A3 (en) * | 2010-10-08 | 2012-05-31 | Microsoft Corporation | Secure deployment of provable identity for dynamic application environments |
US9304614B2 (en) | 2010-10-20 | 2016-04-05 | Salesforce.Com, Inc. | Framework for custom actions on an information feed |
US10528370B2 (en) | 2010-10-20 | 2020-01-07 | Salesforce.Com.Inc. | Framework for custom actions on an information feed |
US11372660B2 (en) | 2010-10-20 | 2022-06-28 | Salesforce.Com, Inc. | Framework for custom actions on an information feed |
WO2012054309A1 (en) * | 2010-10-20 | 2012-04-26 | Salesforce.Com, Inc. | Framework for custom actions on an information feed |
US9411855B2 (en) | 2010-10-25 | 2016-08-09 | Salesforce.Com, Inc. | Triggering actions in an information feed system |
US8756696B1 (en) | 2010-10-30 | 2014-06-17 | Sra International, Inc. | System and method for providing a virtualized secure data containment service with a networked environment |
US9128803B2 (en) | 2010-12-15 | 2015-09-08 | Microsoft Technology Licensing, Llc | Application model for implementing composite applications |
US9710233B2 (en) | 2010-12-15 | 2017-07-18 | Microsoft Technology Licensing, Llc | Application model for implementing composite applications |
US9363102B1 (en) * | 2010-12-21 | 2016-06-07 | Amazon Technologies, Inc. | Methods and apparatus for implementing anycast flow stickiness in stateful sessions |
US20120180039A1 (en) * | 2011-01-11 | 2012-07-12 | International Business Machines Corporation | Automated Deployment of Applications with Tenant-Isolation Requirements |
US9104514B2 (en) * | 2011-01-11 | 2015-08-11 | International Business Machines Corporation | Automated deployment of applications with tenant-isolation requirements |
US10305743B1 (en) | 2011-02-08 | 2019-05-28 | Open Invention Network Llc | System and method for managing virtual and dedicated servers |
US9288117B1 (en) | 2011-02-08 | 2016-03-15 | Gogrid, LLC | System and method for managing virtual and dedicated servers |
US11368374B1 (en) | 2011-02-08 | 2022-06-21 | International Business Machines Corporation | System and method for managing virtual and dedicated servers |
WO2012110501A1 (en) * | 2011-02-15 | 2012-08-23 | Prevx Limited | Methods and apparatus for dealing with malware |
US9413721B2 (en) | 2011-02-15 | 2016-08-09 | Webroot Inc. | Methods and apparatus for dealing with malware |
US10574630B2 (en) | 2011-02-15 | 2020-02-25 | Webroot Inc. | Methods and apparatus for malware threat research |
US20120246570A1 (en) * | 2011-03-22 | 2012-09-27 | International Business Machines Corporation | Managing a portal application |
US9383800B2 (en) * | 2011-03-22 | 2016-07-05 | International Business Machines Corporation | Managing a portal application |
WO2012146987A1 (en) * | 2011-04-26 | 2012-11-01 | Azuan Technologies S.A. | Method for internet transactions |
EP2702728A4 (en) * | 2011-04-26 | 2014-09-03 | Azuan Technologies S A | Method for internet transactions |
US9369439B2 (en) | 2011-04-26 | 2016-06-14 | Azuan Technologies S.A. | Method for internet transactions |
EP2702728A1 (en) * | 2011-04-26 | 2014-03-05 | Azuan Technologies S.A. | Method for internet transactions |
EP3454508A1 (en) * | 2011-04-26 | 2019-03-13 | Azuan Technologies S.A. | Method for internet transactions |
US9043452B2 (en) | 2011-05-04 | 2015-05-26 | Nicira, Inc. | Network control apparatus and method for port isolation |
US20120297380A1 (en) * | 2011-05-18 | 2012-11-22 | Vmware, Inc. | Combining profiles based on priorities |
US9276809B2 (en) | 2011-05-18 | 2016-03-01 | Vmware, Inc. | Combining profiles based on priorities |
US8776055B2 (en) * | 2011-05-18 | 2014-07-08 | Vmware, Inc. | Combining profiles based on priorities |
EP2717161A4 (en) * | 2011-05-24 | 2016-04-06 | Intelligent Willpower Corp | System for providing virtual machines |
US20120324358A1 (en) * | 2011-06-16 | 2012-12-20 | Vmware, Inc. | Delivery of a user interface using hypertext transfer protocol |
US9600350B2 (en) * | 2011-06-16 | 2017-03-21 | Vmware, Inc. | Delivery of a user interface using hypertext transfer protocol |
US8880657B1 (en) | 2011-06-28 | 2014-11-04 | Gogrid, LLC | System and method for configuring and managing virtual grids |
US9647854B1 (en) | 2011-06-28 | 2017-05-09 | Gogrid, LLC | System and method for configuring and managing virtual grids |
US9443225B2 (en) | 2011-07-18 | 2016-09-13 | Salesforce.Com, Inc. | Computer implemented methods and apparatus for presentation of feed items in an information feed to be displayed on a display device |
US9514242B2 (en) | 2011-08-29 | 2016-12-06 | Vmware, Inc. | Presenting dynamically changing images in a limited rendering environment |
US9549045B2 (en) | 2011-08-29 | 2017-01-17 | Vmware, Inc. | Sharing remote sessions of a user interface and/or graphics of a computer |
US20140115587A1 (en) * | 2011-11-14 | 2014-04-24 | Huawei Technologies Co., Ltd. | Exception handling method, apparatus, and client |
US9740515B2 (en) * | 2011-11-14 | 2017-08-22 | Huawei Technologies Co., Ltd. | Exception handling method, apparatus, and client |
US9086907B2 (en) | 2011-12-28 | 2015-07-21 | Kabushiki Kaisha Toshiba | Apparatus and method for managing virtual machine addresses |
US20130174151A1 (en) * | 2011-12-28 | 2013-07-04 | Hiroshi Nakajima | Information processing apparatus and method of controlling virtual machine |
US20130198349A1 (en) * | 2012-01-31 | 2013-08-01 | Edward Allen Wright | Remote server configuration |
US9973385B2 (en) * | 2012-01-31 | 2018-05-15 | Hewlett Packard Enterprise Development Lp | Remote server configuration |
US20130238785A1 (en) * | 2012-03-06 | 2013-09-12 | Rackspace Us, Inc. | System and Method for Metadata Discovery and Metadata-Aware Scheduling |
US9276824B2 (en) | 2012-03-29 | 2016-03-01 | Fujitsu Limited | Access control method, server device, and storage device |
EP2648127A1 (en) * | 2012-03-29 | 2013-10-09 | Fujitsu Limited | Access control method, server device, and storage device |
US20130268573A1 (en) * | 2012-04-09 | 2013-10-10 | Empire Technology Development Llc | Processing load distribution |
US9294335B2 (en) * | 2012-04-09 | 2016-03-22 | Empire Technology Development Llc | Processing load distribution |
US9961146B2 (en) * | 2012-04-09 | 2018-05-01 | Empire Technology Development Llc | Processing load distribution |
US20160105495A1 (en) * | 2012-04-09 | 2016-04-14 | Empire Technology Development Llc | Processing load distribution |
WO2013163165A1 (en) | 2012-04-25 | 2013-10-31 | Citrix Systems, Inc. | Secure administration of virtual machines |
EP2842049A4 (en) * | 2012-04-25 | 2015-11-04 | Citrix Systems Inc | Secure administration of virtual machines |
US10210567B2 (en) | 2012-05-09 | 2019-02-19 | Rackspace Us, Inc. | Market-based virtual machine allocation |
US9027024B2 (en) | 2012-05-09 | 2015-05-05 | Rackspace Us, Inc. | Market-based virtual machine allocation |
US10382442B2 (en) | 2012-05-31 | 2019-08-13 | Ikonopedia, Inc. | Secure data transmission |
US20130332587A1 (en) * | 2012-06-11 | 2013-12-12 | International Business Machines Corporation | Method and a system for on-boarding, administration and communication between cloud providers and tenants in a share-all multi-tenancy environment |
EP3640829A1 (en) * | 2012-06-15 | 2020-04-22 | VMware, Inc. | Systems and methods for accessing a virtual desktop |
EP2677760A1 (en) * | 2012-06-22 | 2013-12-25 | Kabushiki Kaisha Toshiba | Information transmisison between an information processing device and an external device |
US9866656B2 (en) | 2012-06-29 | 2018-01-09 | Avocent Huntsville, Llc | System and method for single KVM client accommodating multiple different video compression technologies |
WO2014005053A1 (en) * | 2012-06-29 | 2014-01-03 | Avocent Huntsville Corp. | System and method for single kvm client accommodating multiple different video compression technologies |
US10185954B2 (en) | 2012-07-05 | 2019-01-22 | Google Llc | Selecting a preferred payment instrument based on a merchant category |
US9658895B2 (en) | 2012-08-07 | 2017-05-23 | Advanced Micro Devices, Inc. | System and method for configuring boot-time parameters of nodes of a cloud computing system |
US20140047095A1 (en) * | 2012-08-07 | 2014-02-13 | Advanced Micro Devices, Inc. | System and method for tuning a cloud computing system |
US9152532B2 (en) | 2012-08-07 | 2015-10-06 | Advanced Micro Devices, Inc. | System and method for configuring a cloud computing system with a synthetic test workload |
US9262231B2 (en) | 2012-08-07 | 2016-02-16 | Advanced Micro Devices, Inc. | System and method for modifying a hardware configuration of a cloud computing system |
US11516275B2 (en) * | 2012-09-22 | 2022-11-29 | Google Llc | Subscription-notification mechanisms for synchronization of distributed states |
US20210385301A1 (en) * | 2012-09-22 | 2021-12-09 | Google Llc | Subscription-notification mechanisms for synchronization of distributed states |
AU2021245117B2 (en) * | 2012-09-22 | 2023-08-10 | Google Llc | Subscription-notification mechanisms for synchronization of distributed states |
US20140108589A1 (en) * | 2012-10-11 | 2014-04-17 | Sanjeev Dhanda | Testing an executable binary file using an injection proxy |
CN105190557A (en) * | 2012-10-16 | 2015-12-23 | 思杰系统有限公司 | Systems and methods for bridging between public and private clouds through multi-level api integration |
WO2014062405A1 (en) * | 2012-10-16 | 2014-04-24 | Citrix Systems, Inc. | Systems and methods for bridging between public and private clouds through multi-level api integration |
US9917865B2 (en) | 2012-10-16 | 2018-03-13 | Citrix Systems, Inc. | Systems and methods for bridging between public and private clouds through multilevel API integration |
US10248453B2 (en) * | 2012-10-23 | 2019-04-02 | Red Hat Israel, Ltd. | Client live migration for a virtual machine |
US20140115175A1 (en) * | 2012-10-23 | 2014-04-24 | Red Hat Israel, Ltd. | Client live migration for a virtual machine |
US10884792B2 (en) | 2012-10-23 | 2021-01-05 | Red Hat Israel, Ltd. | Client live migration for a virtual machine |
US10789096B2 (en) | 2012-10-23 | 2020-09-29 | Red Hat Israel, Ltd. | Client live migration for a virtual machine |
US9032400B1 (en) * | 2012-10-25 | 2015-05-12 | Amazon Technologies, Inc. | Opportunistic initiation of potentially invasive actions |
US20160212248A1 (en) * | 2012-11-09 | 2016-07-21 | Sap Se | Retry mechanism for data loading from on-premise datasource to cloud |
US9742884B2 (en) * | 2012-11-09 | 2017-08-22 | Sap Se | Retry mechanism for data loading from on-premise datasource to cloud |
US20140136593A1 (en) * | 2012-11-09 | 2014-05-15 | Sap Ag | Retry mechanism for data loading from on-premise datasource to cloud |
US9307059B2 (en) * | 2012-11-09 | 2016-04-05 | Sap Se | Retry mechanism for data loading from on-premise datasource to cloud |
US9509695B2 (en) * | 2012-11-20 | 2016-11-29 | Ikonopedia, Inc. | Secure data transmission |
US9729554B2 (en) | 2012-11-20 | 2017-08-08 | Ikonopedia, Inc. | Secure data transmission |
US20150143469A1 (en) * | 2012-11-20 | 2015-05-21 | Michael Sokoryansky | Secure data transmission |
US9621665B2 (en) | 2012-12-07 | 2017-04-11 | Huawei Technologies Co., Ltd. | Multimedia redirection method, multimedia server, and computer system |
US20140208194A1 (en) * | 2013-01-22 | 2014-07-24 | Michael O'Leary | Device and system for securely executing electronic documents |
US9092767B1 (en) * | 2013-03-04 | 2015-07-28 | Google Inc. | Selecting a preferred payment instrument |
US10579981B2 (en) | 2013-03-04 | 2020-03-03 | Google Llc | Selecting a preferred payment instrument |
US9679284B2 (en) | 2013-03-04 | 2017-06-13 | Google Inc. | Selecting a preferred payment instrument |
US9331903B2 (en) * | 2013-09-05 | 2016-05-03 | NCS Technologies, Inc. | Systems and methods providing a mobile zero client |
US10075507B2 (en) | 2013-09-05 | 2018-09-11 | NCS Technologies, Inc. | Systems and methods providing a mobile zero client |
US20150244571A1 (en) * | 2013-09-05 | 2015-08-27 | NCS Technologies, Inc. | Systems and methods providing a mobile zero client |
US10115174B2 (en) * | 2013-09-24 | 2018-10-30 | 2236008 Ontario Inc. | System and method for forwarding an application user interface |
US9858572B2 (en) | 2014-02-06 | 2018-01-02 | Google Llc | Dynamic alteration of track data |
US9749333B2 (en) | 2014-05-05 | 2017-08-29 | Oliver Lloyd Pty Ltd | Shared access appliance, device and process |
US10073963B2 (en) | 2014-05-14 | 2018-09-11 | Microsoft Technology Licensing, Llc | Claiming data from a virtual whiteboard |
US9552473B2 (en) | 2014-05-14 | 2017-01-24 | Microsoft Technology Licensing, Llc | Claiming data from a virtual whiteboard |
WO2015175588A1 (en) * | 2014-05-14 | 2015-11-19 | Microsoft Technology Licensing, Llc | Transferring content between graphical user interfaces |
US10270819B2 (en) | 2014-05-14 | 2019-04-23 | Microsoft Technology Licensing, Llc | System and method providing collaborative interaction |
CN106462372A (en) * | 2014-05-14 | 2017-02-22 | 微软技术许可有限责任公司 | Transferring content between graphical user interfaces |
US11227265B2 (en) * | 2014-05-21 | 2022-01-18 | Euronet Usa Llc | Distributed transaction system |
US9467329B2 (en) * | 2014-05-29 | 2016-10-11 | Blackberry Limited | Coordinating activity views across operating system domains |
US20150350005A1 (en) * | 2014-05-29 | 2015-12-03 | Blackberry Limited | Coordinating activity views across operating system domains |
EP3203700A4 (en) * | 2014-10-31 | 2017-10-18 | Institute of Acoustics, Chinese Academy of Sciences | Rdp data collection apparatus and method |
US9582309B2 (en) | 2014-12-09 | 2017-02-28 | Vmware, Inc. | Allocating cost of disk usage to a linked clone virtual machine based on a parameter of usage |
US9710296B2 (en) | 2014-12-09 | 2017-07-18 | Vmware, Inc. | Allocating cost of disk usage to a linked clone virtual machine |
US11824768B2 (en) | 2014-12-15 | 2023-11-21 | Royal Bank Of Canada | Verification of data processes in a network of computing resources |
US11368391B2 (en) * | 2014-12-15 | 2022-06-21 | Royal Bank Of Canada | Verification of data processes in a network of computing resources |
US11477135B2 (en) | 2014-12-15 | 2022-10-18 | Royal Bank Of Canada | Verification of data processes in a network of computing resources |
US11962513B2 (en) | 2014-12-15 | 2024-04-16 | Royal Bank Of Canada | Verification of data processes in a network of computing resources |
US11303704B2 (en) * | 2014-12-16 | 2022-04-12 | Citrix Systems, Inc. | Methods and systems for connecting devices to applications and desktops that are receiving maintenance |
US10348837B2 (en) * | 2014-12-16 | 2019-07-09 | Citrix Systems, Inc. | Methods and systems for connecting devices to applications and desktops that are receiving maintenance |
US20160173619A1 (en) * | 2014-12-16 | 2016-06-16 | Citrix Systems, Inc. | Methods and systems for connecting devices to applications and desktops that are receiving maintenance |
US11308173B2 (en) * | 2014-12-19 | 2022-04-19 | Meta Platforms, Inc. | Searching for ideograms in an online social network |
US11038777B2 (en) | 2014-12-23 | 2021-06-15 | Huawei Technologies Co., Ltd. | Method and apparatus for deploying service in virtualized network |
JP2018500834A (en) * | 2014-12-23 | 2018-01-11 | 華為技術有限公司Huawei Technologies Co.,Ltd. | Method and apparatus for deploying services in a virtualized network |
US9516063B2 (en) * | 2015-03-10 | 2016-12-06 | Raytheon Company | System, method, and computer-readable medium for performing automated security validation on a virtual machine |
WO2016166183A1 (en) * | 2015-04-13 | 2016-10-20 | Barco N.V. | Browser based display system for displaying image data |
US10601632B2 (en) | 2015-05-11 | 2020-03-24 | Nec Corporation | Communication apparatus, system, method, and non-transitory medium for securing network communication |
WO2016181423A1 (en) * | 2015-05-11 | 2016-11-17 | Nec Corporation | Communication apparaus, system, method, and program |
EP3107052A1 (en) * | 2015-06-15 | 2016-12-21 | Tata Consultancy Services Limited | Method and system for performing secure banking transactions |
US10187325B2 (en) | 2015-08-25 | 2019-01-22 | Accenture Global Services Limited | Network proxy for control and normalization of tagging data |
AU2017218936B2 (en) * | 2015-08-25 | 2019-08-15 | Accenture Global Services Limited | Multi-cloud network proxy for control and normalization of tagging data |
US10270671B2 (en) * | 2015-09-22 | 2019-04-23 | Microsoft Technology Licensing, Llc | External process user interface isolation and monitoring |
EP3211520A3 (en) * | 2016-02-24 | 2017-11-01 | Konica Minolta, Inc. | Image processing system, information processing device, image processing device and computer readable program |
US10674039B2 (en) | 2016-02-24 | 2020-06-02 | Konica Minolta, Inc. | Image processing system, information processing device, image processing device and non-transitory recording medium |
US20190205147A1 (en) * | 2016-10-25 | 2019-07-04 | Tencent Technology (Shenzhen) Company Limited | Application running method and device |
US10824449B2 (en) * | 2016-10-25 | 2020-11-03 | Tencent Technology (Shenzhen) Company Limited | Application running method and device |
US10334052B2 (en) * | 2016-10-28 | 2019-06-25 | Caterpillar Inc. | System and method for communicating negotiated groups of parameters |
AU2017248430B2 (en) * | 2016-10-28 | 2019-05-02 | Caterpillar Inc. | System and method for communicating negotiated groups of parameters |
US12099620B1 (en) * | 2017-02-03 | 2024-09-24 | Rockloans Marketplace Llc | User authentication |
US11893145B2 (en) * | 2017-04-18 | 2024-02-06 | Bankvault Pty Ltd | Virtual machines—computer implemented security methods and systems |
US11188356B2 (en) | 2017-06-20 | 2021-11-30 | Siemens Aktiengesellschaft | Method and arrangement to access a first computer on a virtual machine of a second computer |
US11748091B2 (en) | 2017-09-28 | 2023-09-05 | At&T Intellectual Property I, L.P. | Virtualization platform for creating, deploying, modifying, and relocating applications |
US11550562B2 (en) | 2017-09-28 | 2023-01-10 | At&T Intellectual Property I, L.P. | Virtualization platform for creating, deploying, modifying, and relocating applications |
US11036489B2 (en) | 2017-09-28 | 2021-06-15 | At&T Intellectual Property I, L.P. | Virtualization platform for creating, deploying, modifying, and relocating applications |
US10445086B2 (en) | 2017-09-28 | 2019-10-15 | At&T Intellectual Property I, L.P. | Virtualization platform for creating, deploying, modifying, and relocating applications |
US11245529B2 (en) * | 2017-10-06 | 2022-02-08 | Stealthpath, Inc. | Methods for internet communication security |
US20210226799A1 (en) * | 2017-11-29 | 2021-07-22 | Oracle International Corporation | Trusted client security factor-based authorizations at a server |
US11777737B2 (en) * | 2017-11-29 | 2023-10-03 | Oracle International Corporation | Trusted client security factor-based authorizations at a server |
US11012239B2 (en) * | 2017-11-29 | 2021-05-18 | Oracle International Corporation | Trusted client security factor-based authorizations |
US11314853B2 (en) * | 2018-01-10 | 2022-04-26 | Feitian Technologies Co., Ltd. | Method and apparatus for implementing logging-on of hardware to windows system with version 10 or higher |
US20220300464A1 (en) * | 2018-05-15 | 2022-09-22 | Splunk Inc. | Log data extraction from data chunks of an isolated execution environment |
US11829330B2 (en) * | 2018-05-15 | 2023-11-28 | Splunk Inc. | Log data extraction from data chunks of an isolated execution environment |
US20210367922A1 (en) * | 2018-05-24 | 2021-11-25 | Texas Instruments Incorporated | System on chip firewall memory architecture |
US12101293B2 (en) * | 2018-05-24 | 2024-09-24 | Texas Instruments Incorporated | System on chip firewall memory architecture |
US11258848B1 (en) * | 2018-08-09 | 2022-02-22 | Amazon Technologies, Inc. | Load balancing requests such that target resources serve a single client |
US11886455B1 (en) | 2018-09-28 | 2024-01-30 | Splunk Inc. | Networked cloud service monitoring |
US11582287B2 (en) | 2018-10-12 | 2023-02-14 | Connectwise, Llc | Hidden desktop session for remote access |
US11005914B2 (en) * | 2018-10-12 | 2021-05-11 | Connectwise, Llc. | Hidden desktop session for remote access |
US10931641B1 (en) * | 2018-10-29 | 2021-02-23 | Beijing Beyondinfo Technology Co., Ltd. | Hardware control logic based data forwarding control method and system |
US11477185B2 (en) * | 2019-02-15 | 2022-10-18 | Xiid Corporation | Method and system for single sign-on authentication |
US11895214B2 (en) * | 2019-03-01 | 2024-02-06 | Microsoft Technology Licensing, Llc | User interaction and task management using multiple devices |
US20220377156A1 (en) * | 2019-03-01 | 2022-11-24 | Microsoft Technology Licensing, Llc | User interaction and task management using multiple devices |
US11783074B2 (en) * | 2019-05-30 | 2023-10-10 | Bank Of America Corporation | Controlling access to secure information resources using rotational datasets and dynamically configurable data containers |
US20210397730A1 (en) * | 2019-05-30 | 2021-12-23 | Bank Of America Corporation | Controlling Access to Secure Information Resources Using Rotational Datasets and Dynamically Configurable Data Containers |
US20210240768A1 (en) * | 2020-02-05 | 2021-08-05 | EMC IP Holding Company LLC | Reliably maintaining strict consistency in cluster wide state of opened files in a distributed file system cluster exposing a global namespace |
US11893064B2 (en) * | 2020-02-05 | 2024-02-06 | EMC IP Holding Company LLC | Reliably maintaining strict consistency in cluster wide state of opened files in a distributed file system cluster exposing a global namespace |
US11928476B2 (en) * | 2020-04-14 | 2024-03-12 | Ncr Voyix Corporation | Virtualized transaction terminal platform |
US20220206824A1 (en) * | 2020-04-14 | 2022-06-30 | Ncr Corporation | Virtualized transaction terminal platform |
US20220058660A1 (en) * | 2020-08-24 | 2022-02-24 | AO Kaspersky Lab | System and method for detecting malicious use of a remote administration tool |
US11978062B2 (en) * | 2020-08-24 | 2024-05-07 | AO Kaspersky Lab | System and method for detecting malicious use of a remote administration tool |
US11012482B1 (en) | 2020-08-28 | 2021-05-18 | Tmrw Foundation Ip S. À R.L. | Spatially aware multimedia router system and method |
US11218522B1 (en) | 2020-08-28 | 2022-01-04 | Tmrw Foundation Ip S. À R.L. | Data processing system and method using hybrid system architecture for image processing tasks |
US12107907B2 (en) | 2020-08-28 | 2024-10-01 | Tmrw Foundation Ip S.Àr.L. | System and method enabling interactions in virtual environments with virtual presence |
US12034785B2 (en) | 2020-08-28 | 2024-07-09 | Tmrw Foundation Ip S.Àr.L. | System and method enabling interactions in virtual environments with virtual presence |
US11638870B2 (en) | 2020-10-25 | 2023-05-02 | Meta Platforms, Inc. | Systems and methods for low-latency initialization of streaming applications |
US11583768B2 (en) | 2020-10-25 | 2023-02-21 | Meta Platforms, Inc. | Systems and methods for secure concurrent streaming of applications |
US12105794B2 (en) * | 2021-03-03 | 2024-10-01 | Bank Of America Corporation | System for electronic data obfuscation and protection using independent destructible data objects |
US20220284125A1 (en) * | 2021-03-03 | 2022-09-08 | Bank Of America Corporation | System for electronic data obfuscation and protection using independent destructible data objects |
US11645384B2 (en) * | 2021-03-03 | 2023-05-09 | Bank Of America Corporation | System for electronic data obfuscation and protection using independent destructible data objects |
US20230259613A1 (en) * | 2021-03-03 | 2023-08-17 | Bank Of America Corporation | System for electronic data obfuscation and protection using independent destructible data objects |
US20220337576A1 (en) * | 2021-04-15 | 2022-10-20 | Jpmorgan Chase Bank, N.A. | System and method for smart authentication |
US11632365B2 (en) * | 2021-04-15 | 2023-04-18 | Jpmorgan Chase Bank, N.A. | System and method for smart authentication |
US11941421B1 (en) | 2021-07-09 | 2024-03-26 | Splunk Inc. | Evaluating and scaling a collection of isolated execution environments at a particular geographic location |
US20230015697A1 (en) * | 2021-07-13 | 2023-01-19 | Citrix Systems, Inc. | Application programming interface (api) authorization |
US11456923B1 (en) * | 2021-07-28 | 2022-09-27 | Hewlett Packard Enterprise Development Lp | System and method for facilitating a dynamic policy engine with recursive key selection |
US20230080623A1 (en) * | 2021-09-15 | 2023-03-16 | Sam Barhoumeh | Systems and Methods for an Enterprise Computing Platform |
US20230254301A1 (en) * | 2022-02-07 | 2023-08-10 | Elasticsearch B.V. | Auto-Configuration of Security Features in Distributed System with Minimal User Interaction |
WO2024065247A1 (en) * | 2022-09-28 | 2024-04-04 | Citrix Systems, Inc. | On-demand virtual secure session |
Also Published As
Publication number | Publication date |
---|---|
US7954150B2 (en) | 2011-05-31 |
US20070180450A1 (en) | 2007-08-02 |
US7949677B2 (en) | 2011-05-24 |
CN101410803B (en) | 2013-07-17 |
US20070174410A1 (en) | 2007-07-26 |
US20070198656A1 (en) | 2007-08-23 |
US20070186212A1 (en) | 2007-08-09 |
US8341270B2 (en) | 2012-12-25 |
CN101410803A (en) | 2009-04-15 |
US8355407B2 (en) | 2013-01-15 |
US20070171921A1 (en) | 2007-07-26 |
US20070180493A1 (en) | 2007-08-02 |
US8010679B2 (en) | 2011-08-30 |
US20070179955A1 (en) | 2007-08-02 |
US20070180447A1 (en) | 2007-08-02 |
US8051180B2 (en) | 2011-11-01 |
US20070180448A1 (en) | 2007-08-02 |
US8117314B2 (en) | 2012-02-14 |
US20070180449A1 (en) | 2007-08-02 |
US7870153B2 (en) | 2011-01-11 |
US8341732B2 (en) | 2012-12-25 |
US20070192329A1 (en) | 2007-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8355407B2 (en) | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session | |
EP2375328A2 (en) | Methods and Systems for Providing Access to a Computing Environment | |
EP2369479A2 (en) | Methods and systems for providing access to a computing environment | |
WO2007100942A2 (en) | Methods and systems for providing access to a computing environment provided by a virtual machine executing in a hypervisor executing in a terminal services session | |
US9742876B2 (en) | Span out load balancing model | |
JP6092428B2 (en) | Secure interface for invoking privileged actions | |
US20150074663A1 (en) | Virtual environment manager | |
US20060190532A1 (en) | Apparatus and methods for multiple user remote connections to an information handling system via a remote access controller | |
US11595482B2 (en) | Image acquisition device virtualization for remote computing | |
KR20140143953A (en) | Appratus for a virtual desktop service and method thereof | |
US11818183B2 (en) | System and method for workspace sharing | |
WO2024045000A1 (en) | Application-based clipboard isolation and sharing | |
US20240171543A1 (en) | Protectively displaying specific fields in specific views of a secure interface |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: CITRIX SYSTEMS, INC., FLORIDA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:MAZZAFERRI, RICHARD JAMES;ROBINSON, DAVID NEIL;REEL/FRAME:018736/0873 Effective date: 20061218 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |