WO2006085883A1 - Acces a un objet cible avec une fonctionnalite souhaitee - Google Patents

Acces a un objet cible avec une fonctionnalite souhaitee Download PDF

Info

Publication number
WO2006085883A1
WO2006085883A1 PCT/US2005/004525 US2005004525W WO2006085883A1 WO 2006085883 A1 WO2006085883 A1 WO 2006085883A1 US 2005004525 W US2005004525 W US 2005004525W WO 2006085883 A1 WO2006085883 A1 WO 2006085883A1
Authority
WO
WIPO (PCT)
Prior art keywords
target object
alternative procedure
existing
accessing
deskband
Prior art date
Application number
PCT/US2005/004525
Other languages
English (en)
Inventor
Johann Thomas Sigurdsson
Tomas Gunnarsson
Original Assignee
Google, Inc.
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google, Inc. filed Critical Google, Inc.
Priority to PCT/US2005/004525 priority Critical patent/WO2006085883A1/fr
Publication of WO2006085883A1 publication Critical patent/WO2006085883A1/fr

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Definitions

  • This invention relates generally to accessing software objects with a desired functionality and, more specifically, to accessing software objects to enable deskbands.
  • GUIs graphical user interfaces
  • a deskband is a type of taskbar object, which is dockable on the taskbar or floats on the screen and includes one or more deskband objects.
  • a taskbar is a visual device on the desktop that typically shows the user which applications (tasks) are currently active and running.
  • deskband object Clicking on one type of deskband object launches the application or file associated with the object.
  • Another types of deskband allows text entry as part of a search.
  • One advantage of using deskbands for applications or files is that they take up very little GUI space.
  • deskbands may be displayed regardless of whether another application program is running, making them continuously accessible.
  • Creating deskbands for applications generally requires the end user to participate in the installation process. The installation process requires, for example, implementation of several interfaces and a special registration procedure. However, the steps involved in the installation process may be confusing to the user. In the Microsoft® Windows® 2000 operating system, a component object model (COM) interface exists for creating deskband objects; however, no known mechanism exists to get to the implementation of this interface without user interaction.
  • COM component object model
  • Prior deskband installations have attempted to remedy this problem by providing text or animated instructions for the user.
  • Such instructions require significant user involvement and time.
  • Prior attempts to install deskbands without direct user interaction have included on-screen simulations of user actions. Such simulations have a substantial likelihood of failure due to inadvertent user interference with the process. In addition, these simulations create a flicker on the screen that is visible to the user during installation.
  • the present invention enables programmatic access to a target object, where there is otherwise no or limited access due to the design or implementation of the host operating system.
  • Target objects include, for example, deskband objects, widgets, controls, and any other type of programmatic entity.
  • access to a target object is provided by creating an object of the same class as a pre-existing object.
  • the pre-existing object's behavior is made up of functions in various procedure tables that store references to procedures of the object.
  • the procedure tables are shared with all other class members, including the newly created object. At least one of the shared tables is modified by replacing one (or more) of the existing procedure references to an alternative procedure that provides access to the target object. From there, a call can be made to execute the alternative procedure to allow access to the target object.
  • a method and system for accessing an object associated with enabling a deskband includes creating an object of the same class as a pre-existing object. The method also includes modifying one or more tables shared by the created object and the pre-existing object by replacing one or more entries with alternative procedures that provide access to the target object. Further, the method includes triggering a call that executes the alternative procedures to allow access to the object associated with enabling a deskband.
  • a method and system for accessing a target object includes modifying one or more tables shared by the created object and the preexisting object by replacing one or more entries with alternative procedures that emulate user actions to provide access to the target object.
  • the method also includes triggering a call that executes the alternative procedures to allow access to the target object.
  • FIG. 1 is a flowchart illustrating a method of accessing a target object according to one embodiment of the present invention.
  • FIG. 2 is a flowchart illustrating an example of a method of accessing a target object according to one embodiment of the present invention.
  • FIG. 3 is a block diagram illustrating a system for accessing a target object according to one embodiment of the present invention.
  • FIG. 4 is a block diagram illustrating code modules and memory storage areas for accessing a target object according to one embodiment of the present invention.
  • FIG. 5 is a sequence diagram showing an example implementation of the method of FIG. 1 according to one embodiment of the present invention.
  • FIG. 6 is a sequence diagram showing an example implementation of the method of FIG. 1 according to one embodiment of the present invention.
  • FIG. 7 is a sequence diagram showing an example implementation of the method of FIG. 1 according to one embodiment of the present invention.
  • FIG. 8 is a schematic representation of the example implementation of FIG. 5 according to one embodiment of the present invention.
  • FIG. 1 is a flowchart illustrating a method of accessing a target object according to one embodiment of the present invention.
  • This method is executed, for example, by a collection of software objects executing on a user's computer.
  • access to an object in a class associated with a desired functionality may be obtained.
  • the method begins by creation 110 of an object of the same class as existing object. From an existing object of a class, an instance is created, resulting in an object of the same class.
  • preliminary steps precede the creation of the new object, for example injecting a process into a library, locating a window associated with the object, and/or creating a subclass of an existing window.
  • a function table stores references (e.g., handles, pointers, memory addresses) to methods or procedures of the class. Every class has associated with it one or more function tables that store these function references. When a new instance of a class is created, it holds a reference to at least one of the function tables; such function tables are called shared tables. Other function tables may be specific to an individual object.
  • the modification includes the replacement of an existing function reference in a shared function table with an alternative procedure, also known as a hook.
  • the replaced function is peripheral to the main functionality provided by the shared table. However, even a main function may be used, in which case the alternative procedure also would call the original function to minimize any side effects of the replacement.
  • the first few bytes of the implementation itself are patched rather than patching a shared table. In this example, the first five bytes are modified to include a jump instruction that sends control to an alternative procedure.
  • the alternative procedure may include multiple functions.
  • the alternative procedure receives a direct or indirect reference to the target object, thereby allowing access to the target object where none was previously available.
  • the alternative procedure invokes a pointer it has received to allow direct access to the target object.
  • the target object may be the original object.
  • the alternative procedure invokes a pointer to the original object and uses a method (e.g., the IUnknown::QueryInterface method) to get a second pointer to another (target) object.
  • the alternative procedure also directs a navigation of a contextual menu to programmatically emulate user actions (e.g., to simulate the user's actions in using the target object).
  • the shared table is a vtable, i.e., a structure in the header of every class object that contains the memory addresses of the actual code associated with the properties and methods implemented by the class.
  • an additional table also may be modified to include an alternative procedure, for example an import address table (IAT).
  • IAT import address table
  • a call is triggered 130 to execute the alternative procedure of the table.
  • the trigger occurs in the form of a message sent to the original, existing object, which causes the existing object to read the shard table, invoking the alternative procedure.
  • the message also programmatically initiates a context menu for the target object that includes selections related to the desired functionality; this will subsequently allow the end user to access specific methods and data associated with the target object.
  • the trigger causes the return of a command identifier of a function or access to a menu. In any of these methods, any pointer, command identifier, or access obtained may be stored in memory. [0023] After the alternative procedure is executed and provides access to the target object, the target object or the methods of the object may then be accessed 140. For example, a method in an interface implemented by the target object may be invoked. Additional finishing steps may be made at this time as well, such as restoring tables to their initial state and/or unsubclassing windows, if any.
  • FIG. 2 is a flowchart illustrating an example of a method of accessing a target object according to one embodiment of the present invention.
  • the purpose of accessing the target object is to enable a deskband.
  • a dynamic load library (DLL) implementation is injected 210 into the Explorer.exe process in the Windows operating system (e.g., Windows 2000).
  • This step can be accomplished by any of several means known in the art, for example, using CreateRemoteThread, SetWindowsHookEx, or Explorer-specific methods such as SHLoadlnProc.
  • a tray window is found 220 that is known to include key functionality, in this example, a tray window necessary to enable deskbands.
  • the tray window then is subclassed 230. Subclassing a window in this example means altering an existing window instance so that messages sent to the existing instance are first processed by the subclassed window, which delegates those messages is does not need to handle to the existing instance.
  • An object, or instance, of the same class as an existing object or instance is created 240 next.
  • the class is associated with enabling a deskband.
  • a table associated with the newly created object or instance is modified 250, or patched, such that one of the functions in the table is replaced with an alternative procedure.
  • the table is a vtable shared by the objects of the class, including the original object or instance. Thus, by replacing a function with an alternative procedure to patch the vtable of one instance of the object, all instances will use the alternative procedure.
  • a call is triggered 260 that causes the table to be read.
  • the trigger comes in the form of a WM_CONTEXTMENU message sent to the tray window, programmatically notifying the window that a right mouse button click has occurred in the window, although no click actually occurred.
  • the message causes the existing object to read the shared table, invoking the alternative procedure, which returns access to an IBandSite object instance associated with deskband enablement.
  • the concept of aggregation and the Querylnterface method of the IUnknown interface are used to get access to the IBandSite object.
  • the first parameter to the alternative procedure function is the "this" pointer to the object on which the function is being invoked (the existing object).
  • the alternative procedure calls Querylnterface on the "this" pointer to get to the IBandSite object.
  • a reference to the IBandSite object which is the target object in this example, is then stored 270.
  • the IBandSite object or the methods of the object may then be accessed for the purposes of enabling a deskband, e.g., by calling IDeskBand::AddBand().
  • the table may be restored 280 to its original state and the window unsubclassed. However, because access to the target object was stored, the target object remains accessible.
  • FIG. 3 is a block diagram illustrating a system for accessing a target object according to one embodiment of the present invention.
  • the system 300 includes one or more user devices 310a-n that can communicate with a server device 320 over a network 330, e.g., the Internet.
  • a network 330 e.g., the Internet.
  • other networks such as a local area network (LAN), or the like, may be used instead.
  • functions described with respect to a client or a server in a distributed network environment may take place within a single user device without a server device or a network. The implementation of these techniques as well as similar adaptations falls within the scope of this invention.
  • the user devices 310a-n each include a processor 340, an operating system
  • a user device 310a includes a random access memory (RAM) coupled to the processor 340.
  • the processor 340 executes computer- executable program instructions stored in memory 360.
  • processors may include a microprocessor, an ASIC, state machines, or other processors, and can be any of a number of suitable computer processors, such as processors from Intel Corporation of Santa Clara, California and Motorola Corporation of Schaumburg, Illinois.
  • processors include, or may be in communication with, code modules (410-480 of FIG. 4), which store instructions that, when executed by the processor 340, cause the processor 340 to perform the steps described herein.
  • User devices 310a-n may be coupled to a network 330.
  • User devices 310a-n also may include a number of external or internal devices such as a mouse, a CD-ROM, DVD, a keyboard, a display device, or other input or output devices.
  • Examples of user devices 310a-n are personal computers, digital assistants, personal digital assistants, cellular phones, mobile phones, smart phones, pagers, digital tablets, laptop computers, Internet appliances, and other processor-based devices.
  • the user devices 310a-n may be any type of processor-based platform that operates on any suitable operating system 340, such as Microsoft® Windows® or Linux, and that are capable of executing one or more user application programs.
  • the user device 102a can include a personal computer executing user application programs.
  • a server device 320 can be coupled to the network 330.
  • the server device 320 can include a server executing a search engine application program, such as the GoogleTM search engine.
  • the server device 320 can include a related information server or an advertising server.
  • the server device 320 can include a processor 370 coupled to a computer-readable memory 380.
  • Server device 320 depicted as a single computer system, may be implemented as a network of computer processors. Examples of a server device 320 are servers, mainframe computers, networked computers, a processor-based device, and similar types of systems and devices.
  • the server processor 370 can be any of a number of computer processors, such as processors from Intel Corporation of Santa Clara, California and Motorola Corporation of Schaumburg, Illinois.
  • the server device 320 may exist on a client-device.
  • FIG. 4 is a block diagram illustrating code modules and memory storage areas for accessing a target object according to one embodiment of the present invention. Generally, several code modules and memory storage areas are stored in the memory 400 for enabling access to a target object.
  • the modules may be provided to user device 310 on computer readable media, such as a CD-ROM, diskette, or by electronic communication over a network 330 from software distributors, for installation and execution thereon.
  • some modules can be hosted on a server device 320, and accessed over the network by the user, for example using a browser interface.
  • the memory 400 (dotted line) is for illustration purposes only, and the modules may be stored in the memories 360, 380 of the user device 310, server device 320, or some combination thereof.
  • the modules are installed in memory 360 of the user device 310 upon the initiation of a download of an executable process over a network 330.
  • the code modules and memory storage areas include an inject module 410, a preparation module 420, a create instance module 430, a modify table module 440, an activation module 450, a store module 460, an access module 470, and a restore module 480.
  • the code modules and memory storage areas 410-480 may be communicatively coupled to each other.
  • the inject module 410 executes logic for injecting code into the Explorer.exe process by any of the methods described above for that purpose.
  • the preparation module 420 executes logic for locating and subclassing a window useful for the desired functionality of the method according to one embodiment of the present invention.
  • the create instance module 430 executes logic for creating an object, or instance, of the same class as any existing object or instance.
  • the modify table module 440 executes logic for modifying a table associated with an object. In one embodiment, the modification includes the replacement of an existing function in the table with an alternative procedure. In one embodiment, more than one table may be modified with more than one alternative procedure.
  • the activation module 450 executes logic for triggering a call that causes the alternative procedure of the table to execute, initiate, or otherwise activate.
  • the trigger may come in the form of a message that initiates a read of a table and an invocation of the alternative procedure or activates a contextual menu.
  • the store module 460 executes logic for storing access to objects and menus.
  • the access module 470 executes logic for accessing objects and methods of objects.
  • the restore module 480 executes logic for restoring windows and tables to a previous state. For example, an alternative procedure may be removed from a table and/or a window may be unsubclassed.
  • FIG. 5 is a sequence diagram showing an example implementation of the method of FIG. 1 according to one embodiment of the present invention.
  • This example describes one embodiment of a process for accessing a target object with desired functionality.
  • the desired functionality according to this example is enabling a deskband.
  • the example implementation begins with a client object 310 that wants to enable a particular deskband.
  • a dynamic load library (DLL) implementation is injected 515 into the Explorer.exe process in the Windows operating system, using any of the methods described herein for that purpose or any other well-known method.
  • a tray window 512 is found 520 that is known to include key functionality for enabling deskbands.
  • the tray window 520 includes an inner and outer IBandSite object.
  • the IBandSite outer object allows deskband enablement.
  • the tray window 520 class is ShellJTrayWnd.
  • the tray window 520 then is subclassed 525.
  • an instance of the IBandSite inner object is created 530.
  • the instance is cocreated, which means that a single unitialized object of the class associated with a specific CSLID is created.
  • the inner object is found in browseui.dll and the CSLID is ECD4FC4D-521C-11DO-B792-00AOC90312E1 (Shell Rebar Band Site).
  • the vtable is patched 535 by replacing one of the functions in the vtable of the instance with an alternative procedure or hook.
  • the (shared) vtable is patched for all objects of the class.
  • the IBandSite: :EnumBands method is replaced with the alternative procedure.
  • the EnumBands method is used to enumerate the bands in a bandsite is used in this example, but other methods could be used as well.
  • the patch establishes an IBandSite hook, as the alternative procedure now is included in the vtable shared by all IBandSite instances.
  • a WM_CONTEXTMENU message then is sent 540, via a SendMessage or PostMessage function, to the tray window.
  • a WM_CONTEXTMENU message is a message that notifies a window, in this example the tray window, that the user clicked the right mouse button (right- clicked) in the window.
  • Explorer.exe creates a context menu that it intends to show. To populate the context menu, it needs to call the IBandSite: iEnumBands function. It retrieves the pointer to this function from a specific position in the IBandSite vtable. Because the pointer in this position in the vtable has been replaced with a pointer to the alternative procedure, it instead receives 545 a pointer to the alternative procedure, which it then calls.
  • the first parameter is the "this" pointer, as described above.
  • the "this" pointer is a pointer to the inner IBandSite object, which the Querylnterface method can be called on to retrieve the IUnknown interface.
  • the outer and inner IBandSite objects have a containment/delegation relationship.
  • the outer object is said to contain the inner object.
  • the outer object delegates the implementation to the inner object's methods, hi addition, the relationship between the inner and outer objects is a specialized case of containment and delegation known as aggregation, in which the outer object exposes interfaces from the inner object as if they were its own. Due to the rules of COM aggregation, Querylnterface on an inner aggregated object will always return the pointer to the IUnknown interface of the outer object, from which any other COM interface implemented by the outer object can be retrieved, including in this case IBandSite.
  • the function that is invoked with respect to the outer object is redirected 550 to the inner object.
  • the replaced function of the inner object uses the Querylnterface method of the IUnknown interface to get 555 a pointer to the outer object.
  • the inner object acts as a client to the outer object and calls Querylnterface to ask the outer object for an interface for the desired operations. Assuming the outer object accepts the request, it returns a new pointer to the requested object.
  • the reference to the outer IBandSite object then is stored 560.
  • the tray window then causes Explorer to call 565
  • TrackPopupMenu function to the Win32 System 340, in response to the WM_CONTEXTMENU message.
  • the Win32 system 340 is the Windows programming platform implemented by Windows 95 and later and Windows NT 3.51 and later.
  • TrackPopupMenu is used, which displays a shortcut menu at the specified location and tracks the selection of items on the menu.
  • the menu is then cancelled 570 in the tray window subclass 507 when activated. In one embodiment, this is accomplished by handling the WM_ENTERMENULOOP message, which informs the window procedure that a menu modal loop has been entered.
  • the subclass 507 then calls 575 the EndMenu() function to end the calling thread's active menu and SendMessage returns 580, indicating that the window procedure has processed the message.
  • the tray window 512 then may be unsubclassed 585 and the shared table unpatched 590.
  • FIG. 6 is a sequence diagram showing an example implementation of the method of FIG. 1 according to one embodiment of the present invention.
  • This example describes one embodiment of a process for accessing a target object with desired functionality.
  • the desired functionality according to this example includes enabling a deskband.
  • the example implementation begins with a client object 310 that wants to enable a particular deskband.
  • the basic premise of this example implementation is to use the known object that implements the Desktop and QuickLaunch deskbands, which are always present in the shell's context menu, to create a new deskband.
  • a dynamic load library (DLL) implementation is injected 515 into Explorer.exe as described in conjunction with FIG. 5.
  • an instance of the Desktop deskband 605 object is created 530 using CoCreatelnstance.
  • the vtable associated with the instance is then patched 615 by replacing one of its functions with an alternative procedure or hook 610.
  • the IDeskBand: :SetSite method is replaced with the first hook function.
  • This step intercepts the method and places the first hook function into all instances of the Desktop deskband object.
  • a second hook 607 is created 620 on a TrackPopupMenu function using an Import Address Table (IAT).
  • IAT is a table of jump instructions, with each entry instructing the processor to jump to the actual implementation of the function.
  • a WM_CONTEXTMENU message then is sent 540, via a SendMessage or PostMessage function, to the tray window.
  • Next Explorer attempts to call TrackPopupMenu, however, the IAT patch directs 565 a jump to the TrackPopupMenu hook 607 rather than a jump to the original function. Then the command identifier of the Desktop deskband is returned 625 to the tray window 512.
  • Explorer will create and initialize the Desktop deskband object.
  • the IDeskBand: :SetSite method is called is provided with either a null pointer 630 or a pointer to Explorer's IBandSite instance 645. The result depends on whether the Desktop deskband is initially enabled (null 630) or disabled (the_band_site 645). The status of the Desktop deskband is unknown the function is initially called. If a null pointer 630 is supplied, the following steps, outlined by dotted box 617, occur. First, the IDeskBand: :SetSite (null) is redirected 635 due to the IDeskBand: :SetSite hook 610.
  • the SendMessage returns 580, indicating that the window procedure has processed the message.
  • HavePointer is called and returns false 640.
  • a WM_CONTEXTMENU message is sent 540 a second time and the IAT patch directs 565 a jump to the TrackPopupMenu hook 607 as above. Then the command identifier of the Desktop deskband is returned 625 to the tray window 512 a second time.
  • the IDeskBand: :SetSite method is called and a pointer to Explorer's IBandSite instance is provided as one of its parameters 645.
  • the IDeskBand: :SetSite (the_band_site) result redirects 650.
  • the pointer to Explorer's IBandSite instance is stored 655 in a BandSite cache 612.
  • the SendMessage again returns 580, indicating that the window procedure has processed the (second WM_CONTEXTMENU) message.
  • HavePointer again is called and this time returns true 660.
  • the vtable and IAT are then unpatched 590, restoring them to their original state.
  • the Desktop deskbar is disabled 665 to return it to its previous state. This step is accomplished using a IBandSite: :HideBand method. This disable step (665) does not occur if the Desktop deskband was enabled initially.
  • FIG. 7 is a sequence diagram showing an example implementation of the method of FIG. 1 according to one embodiment of the present invention.
  • This example describes one embodiment of a process for accessing a target object with desired functionality.
  • the desired functionality according to this example includes enabling a deskband.
  • the example implementation begins with a client object 310 that wants to enable a particular deskband.
  • This implementation works in part by programmatically emulating user actions and in part by hooking standard Win32 APIs.
  • a dynamic load library (DLL) implementation is injected 515 into Explorer.exe.
  • a first hook 607 is created 715 on a TrackPopupMenu function by patching an Import Address Table (IAT).
  • IAT Import Address Table
  • This hook 705 allows a change in the return value of the function so that it returns the identifier of the item desired to toggle (enable or disable).
  • a second hook 710 is created 720 on an InsertMenuW function by again patching the IAT.
  • the InsertMenuW function inserts a new menu item into a menu, moving other items down the menu. This hook allows the item identifier to be seen when Explorer dynamically inserts it in a submenu of the popup menu.
  • the tray window 512 is subclassed 525 that is the owner of the popup dialog used to manually enable and disable deskbar items.
  • a WM_CONTEXTMENU message then is sent 540 to the tray window 512, via a SendMessage or PostMessage function, to cause it to show the popup menu.
  • the TrackPopupMenu function is called 725 and redirected 730 due to the TrackPopoupMenu Hook 607.
  • the popup menu is then initialized 735 using a WM_INITMENU message.
  • keypresses are programmatically simulated to expand 740 all submenus.
  • a DOWN keypress is used to navigate down the menu
  • a RIGHT keypress is used to navigate into menu items that are submenus.
  • a message is posted (via PostMessage) and control is returned to Explorer.
  • a left keypress is sent to close the submenu and continue navigating the menu until the entire top-level menu has been traversed.
  • This step 740 forces Explorer to populate the submenus, which it does using InsertMenuW, thus triggering 745 the InsertMenuW hook with the identifier of the deskband menu of the deskband being enabled.
  • the command identifier of the item to toggle is returned.
  • This menu identifier is stored 750.
  • the original TrackPopupMenu returns 755.
  • the new deskband's menu identifier is returned 760, assuming the menu identifier was found. This causes Explorer to toggle the display state of the new deskband, e.g., enabling it. However, if the store menu identifier was not found by the InsertMenuW hook function, the value of the original TrackPopupMenu function is returned in step 760.
  • FIG. 8 is a schematic representation of the example implementation of FIG. 5 according to one embodiment of the present invention. This example describes one embodiment of the example implementation in conjunction with the process of user installation of a deskbar.
  • the process begins when a user accesses a website, for example over network 330, to install an executable process to install a deskband. After agreeing to a set of terms, the user clicks an icon on his screen to begin a download of the executable.
  • This step causes an installation program to run, installing software modules, e.g., 410-480 as described in conjunction with FIG. 4.
  • the installation program executes an implementation, for example as illustrated in FIGS. 5 and 8.
  • the IBandSite tray window 512 is found and subclassed 800 to create subclass 507 as shown in FIG. 8.
  • an object or instance 805 is created 802 of the same class as inner object (or instance) 510.
  • the vtable 810 of inner object instance 805 is then modified to replace 840 the EnumBands function with an alternative procedure.
  • a call 825 via message 540 to outer object 514 is redirected 830 to inner object 510, causing the vtable 810 to be read 835. Note that because inner object instance 510 and the other instance of the inner object 805 are of the same class, they share the vtable 810.
  • the read results in activation of the alternative procedure, which has received 845 a "this" pointer to the inner object 510, and using IUnknown::QueryInterface 850 of the pointer, a pointer to the outer object 514. Additional steps may occur as well, such as storing a reference to the outer object 514, restoring the vtable 810 to its previous state, and unsubclassing the tray window 512. As a result of these steps, the reference to the target object can be used to install a deskbar by calling IDeskBand::AddBand(), causing the new deskband to display on the user's device.
  • the present invention also relates to an apparatus for performing the operations herein.
  • This apparatus may be specially constructed for the required purposes, or it may comprise a general-purpose computer selectively activated or reconfigured by a computer program stored on a computer readable medium that can be accessed by the computer.
  • a computer program may be stored in a computer readable storage medium, such as, but is not limited to, any type of disk including floppy disks, optical disks, CD- ROMs, magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, application specific integrated circuits (ASICs), or any type of media suitable for storing electronic instructions, and each coupled to a computer system bus.
  • the computers referred to in the specification may include a single processor or may be architectures employing multiple processor designs for increased computing capability.
  • the present invention is well suited to a wide variety of computer network systems over numerous topologies. Within this field, the configuration and management of large networks comprise storage devices and computers that are communicatively coupled to dissimilar computers and storage devices over a network, such as the Internet. [0068] Finally, it should be noted that the language used in the specification has been principally selected for readability and instructional purposes, and may not have been selected to delineate or circumscribe the inventive subject matter. Accordingly, the disclosure of the present invention is intended to be illustrative, but not limiting, of the scope of the invention, which is set forth in the following claims.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

La présente invention concerne un système et un procédé qui permettent d'accéder à un objet cible associé à une fonctionnalité souhaitée. Ceci est réalisé en créant un cas d’objet préexistant (110), en remplaçant une ou plusieurs fonctions d’un tableau partagé par tous les objets d’une catégorie d’objets (120) et en déclenchant un appel qui contraint finalement à appeler les fonctions de remplacement (130) pour permettre l’accès à l’objet cible (140). Le système comprend des parties de logiciel pour activer le procédé.
PCT/US2005/004525 2005-02-10 2005-02-10 Acces a un objet cible avec une fonctionnalite souhaitee WO2006085883A1 (fr)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/US2005/004525 WO2006085883A1 (fr) 2005-02-10 2005-02-10 Acces a un objet cible avec une fonctionnalite souhaitee

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2005/004525 WO2006085883A1 (fr) 2005-02-10 2005-02-10 Acces a un objet cible avec une fonctionnalite souhaitee

Publications (1)

Publication Number Publication Date
WO2006085883A1 true WO2006085883A1 (fr) 2006-08-17

Family

ID=36793345

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2005/004525 WO2006085883A1 (fr) 2005-02-10 2005-02-10 Acces a un objet cible avec une fonctionnalite souhaitee

Country Status (1)

Country Link
WO (1) WO2006085883A1 (fr)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692195A (en) * 1994-08-31 1997-11-25 International Business Machines Corporation Parent class shadowing
US20010037417A1 (en) * 2000-01-14 2001-11-01 Markus Meyer Method and system for dynamically dispatching function calls from a first execution environment to a second execution environment
US6529985B1 (en) * 2000-02-04 2003-03-04 Ensim Corporation Selective interception of system calls
US6714942B1 (en) * 2000-07-28 2004-03-30 E-Volve Incorporated Method of creating and using a sub-classed object that spans multiple computers in a networked computing system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692195A (en) * 1994-08-31 1997-11-25 International Business Machines Corporation Parent class shadowing
US20010037417A1 (en) * 2000-01-14 2001-11-01 Markus Meyer Method and system for dynamically dispatching function calls from a first execution environment to a second execution environment
US6529985B1 (en) * 2000-02-04 2003-03-04 Ensim Corporation Selective interception of system calls
US6714942B1 (en) * 2000-07-28 2004-03-30 E-Volve Incorporated Method of creating and using a sub-classed object that spans multiple computers in a networked computing system

Similar Documents

Publication Publication Date Title
US10402239B2 (en) Method of hosting a first application in a second application
US6513158B1 (en) Method and apparatus for running multiple java applications simultaneously
Wasserman Software engineering issues for mobile application development
US7735059B2 (en) Winforms control hosting in unmanaged applications
US8904012B2 (en) Client-server input method editor architecture
US8762936B2 (en) Dynamic design-time extensions support in an integrated development environment
US20030043192A1 (en) Dynamically modifiable user interface
US20220365773A1 (en) Run-Time Application Modification
EP2531914B1 (fr) Sous-systèmes de virtualisation d'applications extensibles
EP1860553A2 (fr) Procédé et appareil pour virtualiser les informations de fenêtre
US7614005B2 (en) Method for seamlessly crossing GUI toolkit boundaries
US20140297999A1 (en) Computer system and method for controlling acpi information
CN106055368B (zh) 应用更新方法和装置
JP2005528667A (ja) ウェブベースのアプリケーションをサポートするためのフレームワークを実施する方法、装置及びシステム
US9038071B2 (en) Operating system context isolation of application execution
WO2023029747A1 (fr) Procédé de mise en œuvre d'une fonction d'instance unique d'une application, et appareil
US8225328B2 (en) Access to a target object with desired functionality
US20030001894A1 (en) Method and apparatus for dynamically determining actions to perform for an object
US7730495B2 (en) Declaratively defined control actions
US9465677B2 (en) Partitioned application environment
US11520482B2 (en) Navigating displayed graphical user interface panels using assigned keyboard shortcut key(s)
US10503572B2 (en) Hybrid remote controller
EP3289451A1 (fr) Extensibilité de commande de multiplateforme
US8910144B1 (en) Managing software environment installation
WO2006085883A1 (fr) Acces a un objet cible avec une fonctionnalite souhaitee

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application
NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 05713446

Country of ref document: EP

Kind code of ref document: A1