US20030191865A1 - Method and apparatus for software technology injection for operating systems which assign separate process address spaces - Google Patents

Method and apparatus for software technology injection for operating systems which assign separate process address spaces Download PDF

Info

Publication number
US20030191865A1
US20030191865A1 US10/411,429 US41142903A US2003191865A1 US 20030191865 A1 US20030191865 A1 US 20030191865A1 US 41142903 A US41142903 A US 41142903A US 2003191865 A1 US2003191865 A1 US 2003191865A1
Authority
US
United States
Prior art keywords
procedure
surrogate
target
application program
processing
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
Application number
US10/411,429
Inventor
Mario De Armas
Edward Shockley
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to US10/411,429 priority Critical patent/US20030191865A1/en
Publication of US20030191865A1 publication Critical patent/US20030191865A1/en
Abandoned legal-status Critical Current

Links

Images

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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Definitions

  • This invention relates to the field of sub-classing, and more particularly to the modification of a target application user interface with user interface enhancements.
  • Speech recognition is a highly complex technology requiring significant specialized expertise on the part of the developer.
  • the need or demand for this technology may not be sufficiently widespread at this time so as to provide clear economic justification for an individual computer software application developer to generally include the feature in software application products.
  • GUI graphical user interface
  • the method and apparatus as disclosed herein is particularly intended for use in conjunction with operating systems wherein each application program which may be operating concurrently, each residing within its own process address space, as defined by the operating system. This fact is of particular significance, as operating system architectures of this type generally do not permit one application program to share with another program the memory block allocated for the first program's particular process address space. Thus, a combination of innovative techniques must be employed to overcome the inherent limitations of such operating systems.
  • the operating system establishes a message queue for each thread associated with an application program when that application program is launched.
  • the message queue stores messages to all of the windows a program may create.
  • a function called WinMain which is part of all Windows application programs, will periodically issue a command, which causes any messages left in the application message queue to be retrieved.
  • the application program By making use of a Windows function or API, called “GetMessage”, the application program obtains the message from the message queue. The message is then transmitted to the appropriate window procedure when the application program calls an API function named “DispatchMessage”.
  • the DispatchMessage function determines the recipient window procedure for such messages based upon a window handle assigned to the particular window procedure, which is included with the message as one of its parameters. This type of communication between the operating system and a window is called a “queued” message.
  • messages may also be sent directly to a particular window procedure, without being placed in the message queue.
  • These types of messages are referred to as “non-queued” messages.
  • Queued messages are posted to a message queue while non-queued messages are sent to the window procedure.
  • messages are either queued or non-queued, depending upon what operations they relate to. For example, queued messages are most often those which result from user input events in the form of keystrokes, mouse clicks or movements.
  • Certain other message types which also tend to be queued include incrementation of an internal clock, repaint messages and the quit messages. Most other message types are non-queued.
  • FIG. 1 is a block diagram which illustrates, the basic architecture of a computer, including a target application program 100 , a computer operating system 102 and computer hardware 104 . As shown in FIG. 1, the target application program 100 communicates with the operating system 102 , which in turn communicates with the computer hardware 104 .
  • a window procedure can process a received message without modifying the source code of the window procedure through a technique known as “sub-classing”.
  • sub-classing an operating system vector pointing to the window procedure assigned to handle events for a particular window can be replaced with a vector pointing to a surrogate procedure.
  • the surrogate procedure can process all messages intended for the replaced window procedure. Where the surrogate procedure has not defined an event handler for a particular event, the event can be passed to the replaced window procedure for processing.
  • This invention solves the aforementioned problems in the context of an operating system wherein each application program resides in a process address space which cannot be directly accessed by another application program. More particularly, the method provides a method and apparatus for seamlessly integrating new functionality to an existing target application program. It also permits seamless integration of modified user interface features to a GUI of an existing target application program. Significantly, the disclosed invention does not require access to the existing application program's source code in order to accomplish the foregoing results.
  • the disclosed method and apparatus provides an approach which allows a technology injection system (TIS) to inject itself directly between a computer operating system and the target program so as to intercept messages and commands to the target program.
  • TIS technology injection system
  • the TIS can modify any inputs and outputs of the target program.
  • the TIS can implement the new functional features and seize control over the appearance of the interface.
  • an emulation procedure can be coupled to the TIS so as to off-load complex processing from the TIS.
  • Interception of messages between the operating system and the target application program is achieved by utilizing a combination of techniques which take advantage of available operating system functions, to insert a surrogate window procedure contained in a Dynamic Link Library (DLL), into the process address space of the target application program.
  • DLL Dynamic Link Library
  • the surrogate window procedure Upon command from the TIS program, the surrogate window procedure initiates a sub-classing process whereby a pointer to the target application program's main window procedure is overwritten with a new pointer to the surrogate window procedure.
  • such modifications may be performed directly by the surrogate window procedure, i.e. if permitted by the operating system architecture, or by a emulation window procedure residing in the TIS program.
  • messages are transmitted between the primary and secondary window procedures, by manipulating existing operating system functions to overcome system architecture limitations which would normally prevent functional and user interface modifications to a target application program.
  • a method for enhancing the operable functionality of an existing target software application with a complex technological add-in can include mapping a library function containing a surrogate procedure to at least one of a multiplicity of application programs executing in a computer system.
  • the application program can include the existing target software application.
  • the library function can be selectively caused to map to the existing target software application. More specifically, a first pointer in memory to a target procedure for the existing target software application can be replaced with a second pointer to the surrogate procedure, so that the surrogate procedure receives intercepted messages that would otherwise be received by the target procedure.
  • the intercepted messages can be processed in the surrogate procedure to modify an operating feature of the target application program. More importantly, an emulation procedure separate from and external to the surrogate procedure can be called to assist the surrogate procedure in processing the intercepted messages. To that end, the emulation procedure can perform complex processing to enhance the operable functionality of the existing target software application.
  • FIG. 1 is a block diagram which illustrates a basic computer architecture.
  • FIG. 2 is a block diagram which illustrates, in basic form, a preferred embodiment of the present invention.
  • FIG. 3 is a block diagram which illustrates the normal operation of the target application program in the context of a Windows 95 or Windows NT operating system.
  • FIG. 4 illustrates the operation of a preferred embodiment of the system according to the invention.
  • FIG. 5 is a block diagram showing how the invention overwrites a pointer to a target application program's window procedure with a new pointer, for the purpose of intercepting messages to the target application program.
  • FIG. 6( a ) is a flow chart for a surrogate window procedure.
  • FIG. 6( b ) is a continuation of the flow chart of FIG. 6( a ).
  • FIG. 7( a ) shows a main target application program window prior to modification.
  • FIG. 7( b ) shows a version of the window in FIG. 7( a ), which has been modified to include additional user interface elements for a voice recognition function.
  • a novel and non-obvious sub-classing technique for modifying the handling of a received message can be applied to a target application program so as to alter the user interface and/or the behavior of the target application program without also modifying the source code of the target application program.
  • an emulation procedure can be communicatively coupled to the surrogate procedure to separately handle the event.
  • processing intensive modifications such as speech recognition can be incorporated into an existing target application program without requiring any modification to the source code of the target application program and without requiring the inclusion of vast quantities of logic in the surrogate procedure.
  • FIG. 2 is a block diagram which illustrates the sub-classing process of the present invention, in basic form.
  • a technology injection system (TIS) 106 intercepts all messages (queued and non-queued) from the operating system 102 , to the target application program 100 , and modifies the manner in which the target application program interacts with the operating system. More particularly, upon receiving a message from the operating system 102 , the TIS 106 evaluates the message to determine whether it concerns a function or GUI feature which is to be modified or implemented by the TIS program.
  • TIS technology injection system
  • the TIS 106 If it is not such a message, it is transmitted to the target application program, which responds to the message and performs any requested action. If the message does concern a function or GUI feature which is to be implemented or modified by the TIS 106 , then the TIS will perform any necessary processing to implement the function or user interface modification. Such processing may include requests to the target application program for the purpose of retrieving certain information or for performing a portion of the processing. In this way, the TIS 106 can seamlessly modify the target application program 100 . The specific manner in which such processing is accomplished is explained below in relation to FIGS. 3 - 6 .
  • a first step in modifying the user interface or functionality of a target application program in a separate process address space environment is to achieve some means for overwriting a pointer to the target application main window procedure, with a pointer to a surrogate window procedure associated with the TIS 106 .
  • FIGS. 3 and 4 illustrate the manner in which a surrogate window procedure is inserted into the process address space of the target application in a preferred embodiment according to the present invention.
  • the invention will be described in the context of a Windows operating system. However, it should be understood that the invention is not so limited, and can be used in conjunction with other operating systems which also assign separate address spaces for application programs which are simultaneously running.
  • the Windows operating system 102 includes an Application Programming Interface (API) 126 .
  • API Application Programming Interface
  • the APIs 126 consist of certain operating system functions implemented by the operating system, which are available for use by an application programmer.
  • thread message queues are not used when API functions are called. Instead, the application program's call is made to the operating system directly, and the operating system, in turn, returns the requested information directly to the application program.
  • FIG. 3 illustrates the normal operation of the target application program 100 relative to the operating system 102 .
  • the operating system 102 communicates with the target window procedure 116 through a target queue 110 .
  • the operating system 102 communicates with the TIS program 142 , through a TIS message queue 112 and with an nth application program 122 through a message queue 108 .
  • messages from the operating system are distributed from the message queues 108 , 110 , 112 to the appropriate window procedure within each program.
  • an application program has one main window procedure. In FIG. 3, these are identified as nth window procedure 114 , target window procedure 116 , and TIS main window procedure 118 .
  • each of the application programs 100 , 142 , 122 reside within a separate process address space 128 , 130 , 132 , respectively. These process address spaces are assigned by the operating system, and are not shared with respect to other application programs which may also be running. Also shown in FIG. 3 is an injection DLL 134 , containing surrogate window procedure 124 . Significantly, it should be noted that the TIS 106 illustrated in FIG. 2 is comprised of the combination of injection DLL 134 and TIS program 142 .
  • operating systems such as 32-bit Windows, which assign distinct process address spaces for each application program, do not allow one program to be sub-classed by another, i.e., they do not permit a pointer to a window procedure of a first application program to be overwritten with a pointer to a second window procedure, because the second window procedure is not contained within the process address space of the first application.
  • 32-bit Windows operating system can be used in a unique way, to overcome this limitation.
  • Operating systems including Windows, often include “hooks”, which may be installed in an application program through the use of an API.
  • a hook is generally understood as referring to some programming mechanism by which a programmed function can intercept events, such as messages, mouse actions, and keystrokes, before they reach an application.
  • the function can be programmed to respond to certain events, react to events in a particular way, or to ignore them.
  • functions that are designed to receive events are called filter functions.
  • a hook can be installed to a specific application program thread, or system-wide to multiple application programs.
  • certain system-wide hooks When certain system-wide hooks are installed in the context of the Windows operating system, they will cause a designated DLL file to be mapped into the process address space of each application program then running.
  • the present invention takes advantage of this operating system characteristic to ensure that a designated DLL is written to all threads contained within a target application program. This process enables the TIS program 142 to gain access to the target application program 100 , as will now be described.
  • the TIS main window procedure 118 calls a Windows API called “SetWindowsHookEx( ).
  • This function is specifically made available for the purpose of adding a filter function to a hook.
  • arguments (1) and (4) above which specify that the type of hook to be set, and that the hook is to be set system wide.
  • the Set WindowsHookEx( ) API is used to set a WH_GETMESSAGE type hook.
  • the WH_GETMESSAGE hook is designed for processing or modifying all system messages whenever a GetMessage function is called to retrieve a message from a thread message queue).
  • the hook is specified by inserting a WH_GETMESSAGE function as parameter (1) in the WindowsHookEx( ) API.
  • the hook is set system-wide by setting parameter (4) to zero. By setting the hook system-wide, the hook may be called in the context of any thread in the system.
  • the SetWindowHookEx( ) API when called with a WH_GETMESSAGE parameter, it will cause the operating system 102 to map the injection DLL 134 into the process address space of each application program 100 , 142 , 122 .
  • This mapping which is illustrated in FIG. 4 by mapping arrows 144 , may be viewed as a side effect of installing the hook in the 32-bit Windows operating systems.
  • the present invention takes advantage of this side effect to map new code, including surrogate window procedure 124 , into the process address space 130 of the target application 100 . The remaining reasons for installing the WH_GETMESSAGE hook will be explained below.
  • system-wide hook procedure (WH_GETMESSAGE) overwrites an existing pointer to the target window procedure 116 with a pointer to the surrogate window procedure 124 . It does so by using an available operating system API as described below. This “sub-classing” process results in all future messages to the target window procedure 116 being intercepted and dispatched to the surrogate window procedure 124 instead.
  • the installation of the WH_GETMESSAGE hook causes injection DLL 134 to be notified of all messages and their parameters whenever a GetMessage API function is called by any application program thread to retrieve messages from its message queue.
  • the TIS program 142 initiates the sub-classing process by means of a PostMessage( ) API call 146 .
  • an arrow is shown directly from the TIS program 142 to the injection DLL 134 to illustrate the PostMessage( ) call. It should be understood, however, that the PostMessage( ) API call is actually made from the application program, to the operating system 102 , which places a message in a thread message queue for the target application.
  • the PostMessage( ) API call 146 includes four parameters, which include (1) a window handle (to identify the application thread to which the message is to be posted), (2) a message number, and (3, 4) two additional message specific parameters.
  • the target application window handle may be ascertained by the TIS program by any suitable means, and the invention is not limited in this regard.
  • the TIS program may use the window handle for the window which currently has system focus. In the Windows operating system, such focus is generally reflected by a highlighted window title bar. Such window handle can be obtained by the TIS program from the operating system.
  • the TIS program can be designed to accept a target application based upon specific inputs provided by a user.
  • the Windows operating system allows the message number (item (2) above) to be defined as application specific, such that it has significance only for a particular application window procedure.
  • the process for intercepting messages to the target application may be initiated by means of a flag, in the form of a unique message number which has significance only to the surrogate window procedure.
  • the injection DLL 134 Upon receipt of such command, the injection DLL 134 initiates the sub-classing process. Specifically, it begins by requesting from the operating system 102 , the location or address in the computer's random access memory (RAM) 136 where the target window procedure 116 is located. In FIG. 5, the request for the pointer information for the target application window procedure is illustrated by function call arrow 140 .
  • RAM random access memory
  • pointer 138 (which identifies the address of the target window procedure) is returned to injection DLL 134 , as shown by return arrow 142 .
  • the injection DLL requests the operating system 102 to overwrite the original pointer with a replacement pointer to the TIS surrogate window procedure 124 , which is contained within injection DLL 134 .
  • any subsequent messages to the target window procedure 116 will be dispatched instead to the TIS surrogate window procedure 124 , as mapped into the target application program process address space 130 .
  • two APIs in particular are used to modify the value of pointer 138 .
  • One API is to retrieve a pointer to the target application program's window procedure 116 , and another is to cause the operating system 102 to overwrite the existing pointer with a new pointer to the surrogate window procedure 124 .
  • the injection DLL 134 calls an API known as “GetWindowLong(hwnd,nOffset)” to get the value of the pointer 138 to the target window procedure 116 . This call is shown in FIG. 5 by function call arrow 140 .
  • the hwnd parameter or “window handle” identifies the specific target application window procedure for which the pointer is sought.
  • the API GetWindowLong( ) will access the internal Windows operating system information to determine the pointer value 138 to the target application window procedure 116 .
  • the pointer value 138 is returned to the TIS program as illustrated by return arrow 142 .
  • the injection DLL 134 calls a second API, i.e., “SetWindowLong(hwnd,nOffset,nVal)”.
  • this API will cause the operating system 102 to overwrite the pointer value 138 for the original window procedure of the target application 116 , with a new pointer value to the surrogate window procedure 124 .
  • any subsequent messages from the operating system 102 to the target window procedure 116 will be dispatched by the target application program 100 , to the surrogate window procedure 124 .
  • the mapping of the injection DLL 134 into the target application program process space may be sufficient to accomplish the goal of modifying the functionality and or user interface of the target application program.
  • DLL structures such as injection DLL 134 are limited by the operating system architecture as to those functions they can perform.
  • some means must be provided to allow the surrogate window procedure 124 to send and receive messages from an external block of code residing in the TIS program 106 .
  • the external block of code for performing such additional processing is an emulation window procedure 120 , residing in the process address space of the TIS program 142 .
  • Communication of messages from the surrogate window procedure 124 to the emulation window procedure 120 is accomplished by means of a SendMessage( ) API.
  • the SendMessage( ) API allows the emulation window procedure 120 to send a message to the surrogate window procedure 120 , even though such window procedures are assigned to separate process address spaces.
  • the SendMessage( ) API accommodates the sending of three pieces of information, namely a message type and two parameter values.
  • the parameter values can be any type of data chosen by a programmer, but are limited to 32-bits in length and cannot be a pointer or memory address.
  • the SendMessage( ) API can be used to send a block of data of any size.
  • the emulation window procedure 120 Upon receipt of a WM_COPYDATA message, the emulation window procedure 120 will copy and decode the block of data sent from surrogate window procedure. In this way, messages and data can be communicated from the surrogate window procedure 124 , to the emulation window procedure 120 , whenever it is necessary for the emulation window procedure 120 to perform processing required by the surrogate window procedure 124 .
  • the same procedure may be used (where required) for sending messages from the emulation window procedure 120 to the surrogate window procedure 124 .
  • the SendMessage API permits one value to be returned from the window procedure to which a message and/or data has been sent. In a preferred embodiment of the present invention, this value is used as a flag to the surrogate window procedure 124 .
  • the surrogate window procedure is preferably programmed so that upon return of a specific predetermined flag value, it will perform particular processing functions. For example, depending upon the flag value, the surrogate window procedure 124 may pass an intercepted message to the target window procedure 116 , with or without modification, or it may simply return control to the operating system.
  • FIG. 4 illustrates the operation of a preferred embodiment of the system according to the invention.
  • the Windows operating system 114 continues to communicate normally with the TIS main window procedure 134 through the TIS message queue 112 .
  • messages to the target window procedure 116 which are posted in the target message queue 110 are now dispatched to the surrogate window procedure 124 which has been mapped into the target application program process address space 130 .
  • all messages to the target window procedure 116 will be intercepted by the surrogate window procedure 124 .
  • FIGS. 6 ( a )-( b ) show a flow chart which illustrates the basic operation of the surrogate window procedure 124 in a preferred embodiment.
  • the surrogate window procedure 124 retrieves a window handle for the emulation window procedure 120 and the address of the target window procedure 116 in block 150 .
  • These attributes are preferably stored as window property values because they allow the TIS DLL to maintain the sub-classing information in an easily accessible location which is unique to each window instance. The information must be retrieved before proceeding further since it provides the necessary information for establishing a “link” between the injection DLL 134 and the TIS program 142 .
  • the surrogate window procedure evaluates each message to determine what action should be performed. Those messages which do not concern any new functionality or the display of the window elements comprising the target application GUI user interface, are generally passed on to the target window procedure 116 by means of a “CallWindowProc( )” API in block 162 .
  • the target window procedure functions as it normally does under such circumstances by performing any necessary action, and then returns control to the surrogate window procedure 124 .
  • the surrogate window procedure 124 will then return control to the 32-bit Windows Operating System.
  • the intercepted message does concern new functionality or user interface features to be provided by the TIS system, then any necessary pre-processing will be performed either in surrogate window procedure 124 or the emulation window procedure 156 . These steps are illustrated in blocks 154 and 158 in FIG. 6( a ).
  • the surrogate procedure will transmit the message to the emulation window procedure 120 by using a SendMessage API, and the emulation window procedure will perform any necessary post processing. Further, a decision will be made in the surrogate window procedure 124 at block 164 , as to whether any post processing is necessary in block 166 .
  • the surrogate window procedure 124 performs any necessary post-processing in step 166 and then returns control to the operating system 102 at block 168 .
  • the target application window procedure can be called to handle part or all of the processing responsive to some operating system messages, it should be noted that the surrogate window procedure 124 and/or the emulation window procedure 120 may, in some cases, perform all necessary processing, without any call to the target application window procedure.
  • a WM_NCCALCSIZE message from the operating system 102 is sent to the target application when the size and position of a window's client area need to be calculated.
  • this is a non-queued type message, and therefore does not pass through the target message queue 110 , but rather, is sent directly to the window procedure.
  • client area is understood to mean that portion of a window where an application displays a document, spreadsheet, database, form or other data an application is working with.
  • the WM_NCCALCSIZE message will not be delivered to the target window procedure 116 , as originally intended, but will instead be dispatched to the surrogate window procedure 124 .
  • a window procedure normally would respond by providing the operating system with window specification data.
  • window specification data typically includes information relating to the various elements comprising the window interface, such as the location and size of menus, scroll bars, client area and borders.
  • the surrogate window procedure 124 requires window specification data for the target application main window.
  • the surrogate window procedure 124 initiates an API call to the target window procedure 116 . This is accomplished using the original target window procedure pointer as a call parameter in the “CallWindowProc( )” API, along with a WM_NCCALCSIZE message. This is the same pointer value which was previously overwritten by the injection DLL 134 , in order to intercept messages to the target window procedure 116 .
  • the target window procedure 116 Upon receipt of the “CallWindowProc( )” API containing a WM_NCCALCSIZE message, the target window procedure 116 returns to the surrogate window procedure 124 , the window specification data.
  • FIG. 4 For greater clarity, an arrow is shown in FIG. 4 to illustrate the CallWindowProc( ) API call from the surrogate window procedure 124 to the target window procedure 116 . It should be understood, however, that this communication is actually achieved through the API routines 126 within the operating system 102 , and not directly between the two programs.
  • the data is edited in the surrogate window procedure to modify or add features to the existing interface, including items such as push-buttons, graphic indicators, program status indicators, icons, informational data, etc. In fact, practically any desired change to the target window interface is possible with the invention as described herein.
  • the modified window specification data is finally returned to the operating system 102 by the surrogate window procedure 124 , in response to the original WM_NCCALCSIZE message.
  • the modified target application window elements are then available for display by the operating system 102 .
  • the operating system 102 will typically post a WM_NCPAINT message to the target message queue 110 .
  • This message requests that the target window procedure 116 paint the window frame, i.e. those window elements surrounding the client area.
  • This message will also be intercepted by the surrogate window procedure 124 .
  • the surrogate window procedure 124 in this case, will generally call the target window procedure 116 using a “CallWindowProc( )” API call, with a WM_NCPAINT message parameter. See FIG. 6, block 162 . This action will cause the target window procedure to paint the original unmodified elements comprising the graphical user interface.
  • the target window procedure 116 When the target window procedure 116 has painted the window frame, it will return control to the surrogate window procedure 124 .
  • the emulation window procedure 120 will then preferably perform post processing in block 164 , i.e., it will paint the new or modified elements of the window interface which have been left blank by the target window procedure 116 .
  • the foregoing illustration relates to user interface modifications of the target application.
  • the same techniques are applied to provide new or modified functionality to the target application program 100 .
  • Queued and non-queued messages from the operating system to the target window procedure 116 are intercepted and dispatched to the surrogate window procedure 124 . If the intercepted message concerns a task which is unrelated to the new or modified functionality provided by the TIS system, then the surrogate window procedure 124 passes the message to the target application window procedure without further processing. On the other hand, if the intercepted message does concern the new or modified functionality, e.g.
  • the TIS system will follow the process outlined in FIGS. 6 ( a ) and ( b ). Specifically, it will perform pre-processing and post processing, and call the target application window procedure in some instances to perform a portion of the processing.
  • FIGS. 7 ( a ) and ( b ) show one example of how a target application user interface may be modified using the present invention.
  • FIG. 7( a ) shows a main target application program window prior to modification. The window includes a title bar 170 , a menu bar 172 , a series of push-button icons 174 below the menu bar, and a client area 176 below the push-buttons.
  • FIG. 7( b ) shows the window in FIG. 7( a ), after it has been modified to include additional user interface elements for a voice recognition function. As can be seen from FIG. 7( b ), the additional user interface elements are placed, in this case, between the menu bar 172 and the push-buttons 174 .
  • the new elements in this example include an on/off button 178 , a graphic volume level indicator 180 , a voice prompt 182 , and a corporate logo 184 .
  • the additional user interface elements 178 , 180 , 182 , 184 are merely exemplary, and the invention is not limited in this regard. Essentially, any new user interface elements chosen by a programmer can be integrated into the target application in the method according to the present invention.
  • the new interface elements are seamlessly integrated in the modified window as though they had been painted there by the target application program.
  • the new or modified user interface elements provided by the surrogate window procedure are preferably painted to match the color and texture adopted in the original target application program GUI. Matching the color and texture in this manner enhances the seamless appearance of the new interface elements.
  • the system and apparatus is designed to operate in conjunction with a computer system comprising a central processing unit, one or more electronic memory storage devices, and related peripheral equipment such as a data entry device (e.g., a mouse and/or keyboard) and at least one user interface unit (e.g., CRT).
  • the central processing unit (or CPU) is electronically coupled to the one or more electronic memory storage devices, data entry device and display unit by suitable means which are well know by those of ordinary skill in this field.
  • the CPU can be comprised of any suitable microprocessor or other electronic processing unit as is well known to those skilled in the art.
  • An example of such a processor would include the Pentium brand microprocessor available from Intel Corporation.

Abstract

A method for enhancing the operable functionality of an existing target software application with a complex technological add-in can include mapping a library function containing a surrogate procedure to at least one of a multiplicity of application programs executing in a computer system. Upon command from an injection software application program, the library function can be selectively caused to map to the existing target software application. More specifically, a first pointer to a target procedure can be replaced with a second pointer to the surrogate procedure, so that the surrogate procedure receives intercepted messages that would otherwise be received by the target procedure. The intercepted messages can be processed in the surrogate procedure to modify an operating feature of the target application program. Also, an emulation procedure separate from and external to the surrogate procedure can be called to assist the surrogate procedure in processing the intercepted messages.

Description

    CROSS-REFERENCE TO RELATED APPLICATIONS
  • This application is a divisional of U.S. patent application Ser. No. 08/747,040 which was filed in the United States Patent and Trademark Office on Nov. 8, 1996.[0001]
  • BACKGROUND OF THE INVENTION
  • 1. Technical Field [0002]
  • This invention relates to the field of sub-classing, and more particularly to the modification of a target application user interface with user interface enhancements. [0003]
  • 2. Description of the Related Art [0004]
  • There are presently available a wide variety of computer software application programs to enable computer users to perform a various specialized tasks. For example, software application programs exist which can perform word processing, spread-sheet analysis, scheduling, and a multitude of other common tasks associated with business and technology. These programs are developed to satisfy certain well known requirements of a group of users, and are generally designed to offer capabilities which satisfy all of the tasks normally associated with such requirements. To this extent, the commercial application programs which are generally available to the public are quite satisfactory. [0005]
  • Occasionally, however, certain users may have specialized needs which have been either overlooked by software developers or which have been intentionally ignored, because implementation of functional features to address such needs has been deemed uneconomical, given the relatively small number of users who have a requirement for them. Alternatively, certain functional features may not be present in existing software applications programs because the technology to implement such features has not previously been available or is beyond the expertise of a particular software application developer. [0006]
  • One example of a functional feature having both of the foregoing characteristics is speech recognition technology, or the ability of a software application to recognize spoken words. Speech recognition is a highly complex technology requiring significant specialized expertise on the part of the developer. On the other hand, the need or demand for this technology may not be sufficiently widespread at this time so as to provide clear economic justification for an individual computer software application developer to generally include the feature in software application products. [0007]
  • Where a particular commercial software developer chooses not to implement a particular product feature, such as speech recognition, in an application program, third party software developers may wish to independently provide such feature or functionality. In such cases, it would be desirable for the third party software developer to be able to develop and offer such functionality. Likewise, it would be desirable for such third party developers to be able to seamlessly integrate the new function into a graphical user interface (GUI) of the existing application's user interface. In this regard, it should be understood that, as used herein, the phrase “seamless integration” means that the user interface for the additional functionality to be added to a particular application, appears to a user to be an integrated or cohesive part of the existing software application's user interface, and not as a separate window or separate program. [0008]
  • Significantly, however, seamless integration of additional software functions and features within the context of an existing application's GUI creates several problems. Specifically, modification of a software application program to seamlessly implement an additional function within the context of the existing GUI generally requires access to the program's source code. This requirement can present an insurmountable obstacle to implementation of the desired feature, as software owners are often quite reluctant to allow third parties to have access to source code for an application program. At a minimum, the need to have access to a software application's source code, along with the owner's permission to modify such code, will inevitably cause delays and added expense. [0009]
  • Accordingly, it would be desirable to provide a method for integrating one or more new functions to an existing target application program, and for adding one or more features to a GUI of an existing software application program. It would also be desirable to provide a method and system for seamlessly injecting a new function and/or a user interface feature into an existing software application program, without access to, or modification of, the source code for such existing software application program. [0010]
  • The method and apparatus as disclosed herein is particularly intended for use in conjunction with operating systems wherein each application program which may be operating concurrently, each residing within its own process address space, as defined by the operating system. This fact is of particular significance, as operating system architectures of this type generally do not permit one application program to share with another program the memory block allocated for the first program's particular process address space. Thus, a combination of innovative techniques must be employed to overcome the inherent limitations of such operating systems. [0011]
  • In order to better understand the field of the present invention, it is helpful to consider the normal interaction between an application program and an operating system of this type, such as the Microsoft Windows family of operating systems. In this regard, when a Windows based application is launched, one or more windows are created by the operating system. Each window can handle events passed to the window by the operating system. In particular, certain user interface events such as mouse clicks which are performed within the window, generally, can be passed by the operating to the window procedure for processing. The initial handling of an event in a window procedure can occur within an “event handler”. [0012]
  • There are two basic methods by which messages are transmitted from the Windows operating systems to an application program. According to one method, the operating system establishes a message queue for each thread associated with an application program when that application program is launched. The message queue stores messages to all of the windows a program may create. A function called WinMain, which is part of all Windows application programs, will periodically issue a command, which causes any messages left in the application message queue to be retrieved. [0013]
  • By making use of a Windows function or API, called “GetMessage”, the application program obtains the message from the message queue. The message is then transmitted to the appropriate window procedure when the application program calls an API function named “DispatchMessage”. The DispatchMessage function determines the recipient window procedure for such messages based upon a window handle assigned to the particular window procedure, which is included with the message as one of its parameters. This type of communication between the operating system and a window is called a “queued” message. [0014]
  • According to a second method of communication between the Windows operating systems and an application program, messages may also be sent directly to a particular window procedure, without being placed in the message queue. These types of messages are referred to as “non-queued” messages. Queued messages are posted to a message queue while non-queued messages are sent to the window procedure. Generally, messages are either queued or non-queued, depending upon what operations they relate to. For example, queued messages are most often those which result from user input events in the form of keystrokes, mouse clicks or movements. Certain other message types which also tend to be queued include incrementation of an internal clock, repaint messages and the quit messages. Most other message types are non-queued. [0015]
  • When a window procedure receives a message from the operating system, it normally analyzes the message and performs any necessary processing. When it has completed such tasks, it returns control to the operating system. In those instances when an application program needs to communicate with the Windows operating system, it generally does so by means of a call to an API function. As further explanation of message passing between an application and the operating system, FIG. 1 is a block diagram which illustrates, the basic architecture of a computer, including a [0016] target application program 100, a computer operating system 102 and computer hardware 104. As shown in FIG. 1, the target application program 100 communicates with the operating system 102, which in turn communicates with the computer hardware 104.
  • Importantly, it will be recognized by the skilled artisan that the manner in which a window procedure can process a received message can be modified without modifying the source code of the window procedure through a technique known as “sub-classing”. In the sub-classing technique an operating system vector pointing to the window procedure assigned to handle events for a particular window can be replaced with a vector pointing to a surrogate procedure. The surrogate procedure can process all messages intended for the replaced window procedure. Where the surrogate procedure has not defined an event handler for a particular event, the event can be passed to the replaced window procedure for processing. [0017]
  • It will be noted by the skilled artisan, while sub-classing techniques can be helpful in regard to the minor modification of a target application, conventional sub-classing cannot elegantly and effectively handle large scale modifications to the target application such as in the case of adding speech recognition functionality to a target application. In such cases, the amount of codebase required to undertake the process of speech recognition can be too large for use in a replacement event handler in a surrogate procedure. Thus, conventional sub-classing has proven inadequate augmenting a target application to perform complex processing. [0018]
  • SUMMARY OF THE INVENTION
  • This invention solves the aforementioned problems in the context of an operating system wherein each application program resides in a process address space which cannot be directly accessed by another application program. More particularly, the method provides a method and apparatus for seamlessly integrating new functionality to an existing target application program. It also permits seamless integration of modified user interface features to a GUI of an existing target application program. Significantly, the disclosed invention does not require access to the existing application program's source code in order to accomplish the foregoing results. [0019]
  • Rather, the disclosed method and apparatus provides an approach which allows a technology injection system (TIS) to inject itself directly between a computer operating system and the target program so as to intercept messages and commands to the target program. In this way, the TIS can modify any inputs and outputs of the target program. By intercepting and then performing special processing of those messages to the target application which relate to the new functionality and/or which determine the appearance of the target application user interface, the TIS can implement the new functional features and seize control over the appearance of the interface. Importantly, an emulation procedure can be coupled to the TIS so as to off-load complex processing from the TIS. [0020]
  • Interception of messages between the operating system and the target application program is achieved by utilizing a combination of techniques which take advantage of available operating system functions, to insert a surrogate window procedure contained in a Dynamic Link Library (DLL), into the process address space of the target application program. Upon command from the TIS program, the surrogate window procedure initiates a sub-classing process whereby a pointer to the target application program's main window procedure is overwritten with a new pointer to the surrogate window procedure. Depending upon the nature of the functional or interface modifications to be implemented, such modifications may be performed directly by the surrogate window procedure, i.e. if permitted by the operating system architecture, or by a emulation window procedure residing in the TIS program. In a preferred embodiment, messages are transmitted between the primary and secondary window procedures, by manipulating existing operating system functions to overcome system architecture limitations which would normally prevent functional and user interface modifications to a target application program. [0021]
  • A method for enhancing the operable functionality of an existing target software application with a complex technological add-in can include mapping a library function containing a surrogate procedure to at least one of a multiplicity of application programs executing in a computer system. In this regard, the application program can include the existing target software application. Upon command from an injection software application program, the library function can be selectively caused to map to the existing target software application. More specifically, a first pointer in memory to a target procedure for the existing target software application can be replaced with a second pointer to the surrogate procedure, so that the surrogate procedure receives intercepted messages that would otherwise be received by the target procedure. [0022]
  • The intercepted messages can be processed in the surrogate procedure to modify an operating feature of the target application program. More importantly, an emulation procedure separate from and external to the surrogate procedure can be called to assist the surrogate procedure in processing the intercepted messages. To that end, the emulation procedure can perform complex processing to enhance the operable functionality of the existing target software application. [0023]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • There are presently shown in the drawings embodiments which are presently preferred, it being understood, however, that the invention is not so limited to the precise arrangements and instrumentalities shown, wherein: [0024]
  • FIG. 1 is a block diagram which illustrates a basic computer architecture. [0025]
  • FIG. 2 is a block diagram which illustrates, in basic form, a preferred embodiment of the present invention. [0026]
  • FIG. 3 is a block diagram which illustrates the normal operation of the target application program in the context of a Windows 95 or Windows NT operating system. [0027]
  • FIG. 4 illustrates the operation of a preferred embodiment of the system according to the invention. [0028]
  • FIG. 5 is a block diagram showing how the invention overwrites a pointer to a target application program's window procedure with a new pointer, for the purpose of intercepting messages to the target application program. [0029]
  • FIG. 6([0030] a) is a flow chart for a surrogate window procedure.
  • FIG. 6([0031] b) is a continuation of the flow chart of FIG. 6(a).
  • FIG. 7([0032] a) shows a main target application program window prior to modification.
  • FIG. 7([0033] b) shows a version of the window in FIG. 7(a), which has been modified to include additional user interface elements for a voice recognition function.
  • DETAILED DESCRIPTION OF THE INVENTION
  • In accordance with the inventive arrangements a novel and non-obvious sub-classing technique for modifying the handling of a received message can be applied to a target application program so as to alter the user interface and/or the behavior of the target application program without also modifying the source code of the target application program. Significantly, where additional, intensive or otherwise complex processing is required to handle a message intercepted in a surrogate procedure, an emulation procedure can be communicatively coupled to the surrogate procedure to separately handle the event. In this way, processing intensive modifications such as speech recognition can be incorporated into an existing target application program without requiring any modification to the source code of the target application program and without requiring the inclusion of vast quantities of logic in the surrogate procedure. [0034]
  • FIG. 2 is a block diagram which illustrates the sub-classing process of the present invention, in basic form. As shown in FIG. 2, a technology injection system (TIS) [0035] 106, intercepts all messages (queued and non-queued) from the operating system 102, to the target application program 100, and modifies the manner in which the target application program interacts with the operating system. More particularly, upon receiving a message from the operating system 102, the TIS 106 evaluates the message to determine whether it concerns a function or GUI feature which is to be modified or implemented by the TIS program.
  • If it is not such a message, it is transmitted to the target application program, which responds to the message and performs any requested action. If the message does concern a function or GUI feature which is to be implemented or modified by the [0036] TIS 106, then the TIS will perform any necessary processing to implement the function or user interface modification. Such processing may include requests to the target application program for the purpose of retrieving certain information or for performing a portion of the processing. In this way, the TIS 106 can seamlessly modify the target application program 100. The specific manner in which such processing is accomplished is explained below in relation to FIGS. 3-6.
  • Before discussing the details of the implementation of the TIS, it is helpful to note that in operating systems such as the Microsoft Windows operating system, a separate process address space is assigned for each application program which may be running. One of the limitations associated with this architecture, is that it does not permit applications to share memory locations (i.e. data pointers, function addresses, etc.) between separate process address spaces. The addresses of pointers in one process address space have no meaning to a second address space. Thus, such operating systems prevent application programs from modifying or overwriting a pointer to a window procedure contained in another program. This limitation is a fundamental obstacle to achieving the desired interaction among the [0037] operating system 102, target application 100 and TIS 106, as illustrated in FIG. 2. Accordingly, a first step in modifying the user interface or functionality of a target application program in a separate process address space environment, is to achieve some means for overwriting a pointer to the target application main window procedure, with a pointer to a surrogate window procedure associated with the TIS 106.
  • FIGS. 3 and 4 illustrate the manner in which a surrogate window procedure is inserted into the process address space of the target application in a preferred embodiment according to the present invention. For convenience, the invention will be described in the context of a Windows operating system. However, it should be understood that the invention is not so limited, and can be used in conjunction with other operating systems which also assign separate address spaces for application programs which are simultaneously running. [0038]
  • As shown in FIG. 3, the [0039] Windows operating system 102 includes an Application Programming Interface (API) 126. In the Windows environment, the APIs 126 consist of certain operating system functions implemented by the operating system, which are available for use by an application programmer. As an aside, it should be noted that thread message queues are not used when API functions are called. Instead, the application program's call is made to the operating system directly, and the operating system, in turn, returns the requested information directly to the application program.
  • FIG. 3 illustrates the normal operation of the [0040] target application program 100 relative to the operating system 102. The operating system 102 communicates with the target window procedure 116 through a target queue 110. Similarly, the operating system 102 communicates with the TIS program 142, through a TIS message queue 112 and with an nth application program 122 through a message queue 108. In each case, messages from the operating system are distributed from the message queues 108, 110, 112 to the appropriate window procedure within each program. Typically, an application program has one main window procedure. In FIG. 3, these are identified as nth window procedure 114, target window procedure 116, and TIS main window procedure 118.
  • As shown in FIG. 3, each of the [0041] application programs 100, 142, 122 reside within a separate process address space 128, 130, 132, respectively. These process address spaces are assigned by the operating system, and are not shared with respect to other application programs which may also be running. Also shown in FIG. 3 is an injection DLL 134, containing surrogate window procedure 124. Significantly, it should be noted that the TIS 106 illustrated in FIG. 2 is comprised of the combination of injection DLL 134 and TIS program 142.
  • As noted above, operating systems such as 32-bit Windows, which assign distinct process address spaces for each application program, do not allow one program to be sub-classed by another, i.e., they do not permit a pointer to a window procedure of a first application program to be overwritten with a pointer to a second window procedure, because the second window procedure is not contained within the process address space of the first application. Significantly, however, certain existing features of the 32-bit Windows operating system can be used in a unique way, to overcome this limitation. [0042]
  • Operating systems, including Windows, often include “hooks”, which may be installed in an application program through the use of an API. In the Windows operating system, a hook is generally understood as referring to some programming mechanism by which a programmed function can intercept events, such as messages, mouse actions, and keystrokes, before they reach an application. The function can be programmed to respond to certain events, react to events in a particular way, or to ignore them. Typically, functions that are designed to receive events are called filter functions. [0043]
  • A hook can be installed to a specific application program thread, or system-wide to multiple application programs. When certain system-wide hooks are installed in the context of the Windows operating system, they will cause a designated DLL file to be mapped into the process address space of each application program then running. The present invention takes advantage of this operating system characteristic to ensure that a designated DLL is written to all threads contained within a target application program. This process enables the [0044] TIS program 142 to gain access to the target application program 100, as will now be described.
  • In order to insert [0045] injection DLL 134 into the process address space 130 of the target application, the TIS main window procedure 118 calls a Windows API called “SetWindowsHookEx( ). This function is specifically made available for the purpose of adding a filter function to a hook. There are four arguments associated with the foregoing API. These include (1) a code describing the hook to attach to the filter function, (2) the filter function address, (3) the instance handle of the module containing the filter function, and (4) the thread identifier where the hook is to be installed. Of particular importance with respect to the present invention, are the arguments (1) and (4) above, which specify that the type of hook to be set, and that the hook is to be set system wide.
  • In a preferred embodiment according to the present invention, the Set WindowsHookEx( ) API is used to set a WH_GETMESSAGE type hook. The WH_GETMESSAGE hook is designed for processing or modifying all system messages whenever a GetMessage function is called to retrieve a message from a thread message queue). The hook is specified by inserting a WH_GETMESSAGE function as parameter (1) in the WindowsHookEx( ) API. The hook is set system-wide by setting parameter (4) to zero. By setting the hook system-wide, the hook may be called in the context of any thread in the system. [0046]
  • In a preferred embodiment of the invention, when the SetWindowHookEx( ) API is called with a WH_GETMESSAGE parameter, it will cause the [0047] operating system 102 to map the injection DLL 134 into the process address space of each application program 100, 142, 122. This mapping, which is illustrated in FIG. 4 by mapping arrows 144, may be viewed as a side effect of installing the hook in the 32-bit Windows operating systems. The present invention takes advantage of this side effect to map new code, including surrogate window procedure 124, into the process address space 130 of the target application 100. The remaining reasons for installing the WH_GETMESSAGE hook will be explained below.
  • Upon command from the [0048] TIS program 142, system-wide hook procedure (WH_GETMESSAGE) overwrites an existing pointer to the target window procedure 116 with a pointer to the surrogate window procedure 124. It does so by using an available operating system API as described below. This “sub-classing” process results in all future messages to the target window procedure 116 being intercepted and dispatched to the surrogate window procedure 124 instead.
  • The installation of the WH_GETMESSAGE hook causes [0049] injection DLL 134 to be notified of all messages and their parameters whenever a GetMessage API function is called by any application program thread to retrieve messages from its message queue. As shown in FIG. 5, the TIS program 142 initiates the sub-classing process by means of a PostMessage( ) API call 146. For convenience, in FIG. 5 an arrow is shown directly from the TIS program 142 to the injection DLL 134 to illustrate the PostMessage( ) call. It should be understood, however, that the PostMessage( ) API call is actually made from the application program, to the operating system 102, which places a message in a thread message queue for the target application.
  • The PostMessage( ) [0050] API call 146 includes four parameters, which include (1) a window handle (to identify the application thread to which the message is to be posted), (2) a message number, and (3, 4) two additional message specific parameters. The target application window handle may be ascertained by the TIS program by any suitable means, and the invention is not limited in this regard. For example, the TIS program may use the window handle for the window which currently has system focus. In the Windows operating system, such focus is generally reflected by a highlighted window title bar. Such window handle can be obtained by the TIS program from the operating system. In the case of a user selected target application, the TIS program can be designed to accept a target application based upon specific inputs provided by a user.
  • The Windows operating system allows the message number (item (2) above) to be defined as application specific, such that it has significance only for a particular application window procedure. Thus, according to a preferred embodiment of the invention, the process for intercepting messages to the target application may be initiated by means of a flag, in the form of a unique message number which has significance only to the surrogate window procedure. [0051]
  • Upon receipt of such command, the [0052] injection DLL 134 initiates the sub-classing process. Specifically, it begins by requesting from the operating system 102, the location or address in the computer's random access memory (RAM) 136 where the target window procedure 116 is located. In FIG. 5, the request for the pointer information for the target application window procedure is illustrated by function call arrow 140.
  • The value of pointer [0053] 138 (which identifies the address of the target window procedure) is returned to injection DLL 134, as shown by return arrow 142. Once the injection DLL has obtained the pointer value, it requests the operating system 102 to overwrite the original pointer with a replacement pointer to the TIS surrogate window procedure 124, which is contained within injection DLL 134. Significantly, by changing the pointer 138 as described above, any subsequent messages to the target window procedure 116 will be dispatched instead to the TIS surrogate window procedure 124, as mapped into the target application program process address space 130.
  • For the purposes of the present invention, two APIs in particular are used to modify the value of [0054] pointer 138. One API is to retrieve a pointer to the target application program's window procedure 116, and another is to cause the operating system 102 to overwrite the existing pointer with a new pointer to the surrogate window procedure 124. More particularly, the injection DLL 134 calls an API known as “GetWindowLong(hwnd,nOffset)” to get the value of the pointer 138 to the target window procedure 116. This call is shown in FIG. 5 by function call arrow 140. The hwnd parameter or “window handle” identifies the specific target application window procedure for which the pointer is sought. When the parameter nOffset is chosen to be GWL_WNDPROC, the API GetWindowLong( ) will access the internal Windows operating system information to determine the pointer value 138 to the target application window procedure 116.
  • The [0055] pointer value 138 is returned to the TIS program as illustrated by return arrow 142. Once this information is received, the injection DLL 134 calls a second API, i.e., “SetWindowLong(hwnd,nOffset,nVal)”. When the hwnd and nOffset parameters are set as described above, and the nVal parameter is a pointer to TIS surrogate window procedure 124, this API will cause the operating system 102 to overwrite the pointer value 138 for the original window procedure of the target application 116, with a new pointer value to the surrogate window procedure 124. Thus, any subsequent messages from the operating system 102 to the target window procedure 116, will be dispatched by the target application program 100, to the surrogate window procedure 124.
  • Depending upon the specific features to be implemented, the mapping of the [0056] injection DLL 134 into the target application program process space, by itself, may be sufficient to accomplish the goal of modifying the functionality and or user interface of the target application program. Often, however, it may be necessary to provide additional processing capabilities which cannot be implemented in the context of the injection DLL. DLL structures such as injection DLL 134 are limited by the operating system architecture as to those functions they can perform. Thus, in order to accomplish any additional necessary processing, some means must be provided to allow the surrogate window procedure 124 to send and receive messages from an external block of code residing in the TIS program 106. In a preferred embodiment according to the present invention, the external block of code for performing such additional processing is an emulation window procedure 120, residing in the process address space of the TIS program 142.
  • Communication of messages from the [0057] surrogate window procedure 124 to the emulation window procedure 120 is accomplished by means of a SendMessage( ) API. The SendMessage( ) API allows the emulation window procedure 120 to send a message to the surrogate window procedure 120, even though such window procedures are assigned to separate process address spaces. The SendMessage( ) API accommodates the sending of three pieces of information, namely a message type and two parameter values. The parameter values can be any type of data chosen by a programmer, but are limited to 32-bits in length and cannot be a pointer or memory address.
  • Significantly, if the message type is chosen to be WM_COPYDATA, the SendMessage( ) API can be used to send a block of data of any size. Upon receipt of a WM_COPYDATA message, the [0058] emulation window procedure 120 will copy and decode the block of data sent from surrogate window procedure. In this way, messages and data can be communicated from the surrogate window procedure 124, to the emulation window procedure 120, whenever it is necessary for the emulation window procedure 120 to perform processing required by the surrogate window procedure 124. The same procedure may be used (where required) for sending messages from the emulation window procedure 120 to the surrogate window procedure 124.
  • The SendMessage API permits one value to be returned from the window procedure to which a message and/or data has been sent. In a preferred embodiment of the present invention, this value is used as a flag to the [0059] surrogate window procedure 124. The surrogate window procedure is preferably programmed so that upon return of a specific predetermined flag value, it will perform particular processing functions. For example, depending upon the flag value, the surrogate window procedure 124 may pass an intercepted message to the target window procedure 116, with or without modification, or it may simply return control to the operating system.
  • FIG. 4 illustrates the operation of a preferred embodiment of the system according to the invention. As shown in FIG. 4, the [0060] Windows operating system 114 continues to communicate normally with the TIS main window procedure 134 through the TIS message queue 112. Significantly, however, messages to the target window procedure 116 which are posted in the target message queue 110, are now dispatched to the surrogate window procedure 124 which has been mapped into the target application program process address space 130. Thus, all messages to the target window procedure 116 will be intercepted by the surrogate window procedure 124.
  • FIGS. [0061] 6(a)-(b) show a flow chart which illustrates the basic operation of the surrogate window procedure 124 in a preferred embodiment. As shown in FIGS. 6(a) and (b), after an intercepted message is received in block 148, the surrogate window procedure 124 retrieves a window handle for the emulation window procedure 120 and the address of the target window procedure 116 in block 150. These attributes are preferably stored as window property values because they allow the TIS DLL to maintain the sub-classing information in an easily accessible location which is unique to each window instance. The information must be retrieved before proceeding further since it provides the necessary information for establishing a “link” between the injection DLL 134 and the TIS program 142.
  • Once the window handle for the [0062] emulation window procedure 120 and the address of the target window procedure 116 are retrieved, the surrogate window procedure evaluates each message to determine what action should be performed. Those messages which do not concern any new functionality or the display of the window elements comprising the target application GUI user interface, are generally passed on to the target window procedure 116 by means of a “CallWindowProc( )” API in block 162. The target window procedure functions as it normally does under such circumstances by performing any necessary action, and then returns control to the surrogate window procedure 124.
  • If no further processing is required, the [0063] surrogate window procedure 124 will then return control to the 32-bit Windows Operating System. Alternatively, if the intercepted message does concern new functionality or user interface features to be provided by the TIS system, then any necessary pre-processing will be performed either in surrogate window procedure 124 or the emulation window procedure 156. These steps are illustrated in blocks 154 and 158 in FIG. 6(a).
  • Once any necessary pre-processing has been performed in [0064] blocks 154 and 158, a decision is made in block 160 as to whether it is necessary for the target window procedure 116 to perform any processing in block 162. If so, the surrogate window procedure 124 calls the target window procedure 116 by means of a CallWindowProc( ) API. Upon completion of any necessary processing by the target window procedure, control is returned to the surrogate window procedure 124. At this point, a decision will be made in step 163 as to whether any post processing needs to be performed by the emulation window procedure 120. If so, the surrogate procedure will transmit the message to the emulation window procedure 120 by using a SendMessage API, and the emulation window procedure will perform any necessary post processing. Further, a decision will be made in the surrogate window procedure 124 at block 164, as to whether any post processing is necessary in block 166.
  • If so, the [0065] surrogate window procedure 124 performs any necessary post-processing in step 166 and then returns control to the operating system 102 at block 168. Although the target application window procedure can be called to handle part or all of the processing responsive to some operating system messages, it should be noted that the surrogate window procedure 124 and/or the emulation window procedure 120 may, in some cases, perform all necessary processing, without any call to the target application window procedure.
  • To better understand the foregoing process, it is helpful to consider a specific example. In particular, the operation of the TIS system with respect to a few specific messages relating to the appearance of the target application user interface will now be discussed. A WM_NCCALCSIZE message from the [0066] operating system 102 is sent to the target application when the size and position of a window's client area need to be calculated. As an aside, it should be noted that this is a non-queued type message, and therefore does not pass through the target message queue 110, but rather, is sent directly to the window procedure. Also, it should be noted that for the purposes of this specification, the term “client area” is understood to mean that portion of a window where an application displays a document, spreadsheet, database, form or other data an application is working with.
  • In the present case, the WM_NCCALCSIZE message will not be delivered to the [0067] target window procedure 116, as originally intended, but will instead be dispatched to the surrogate window procedure 124. When a WM_NCCALCSIZE message is received, a window procedure normally would respond by providing the operating system with window specification data. Such data typically includes information relating to the various elements comprising the window interface, such as the location and size of menus, scroll bars, client area and borders. In the present case, however, in order to make any necessary modification to the target application's main window, the surrogate window procedure 124 requires window specification data for the target application main window.
  • This information is needed so that the original appearance of the window can be integrated with the new features or modifications to be provided. In order to obtain the window specification data, the [0068] surrogate window procedure 124 initiates an API call to the target window procedure 116. This is accomplished using the original target window procedure pointer as a call parameter in the “CallWindowProc( )” API, along with a WM_NCCALCSIZE message. This is the same pointer value which was previously overwritten by the injection DLL 134, in order to intercept messages to the target window procedure 116. Upon receipt of the “CallWindowProc( )” API containing a WM_NCCALCSIZE message, the target window procedure 116 returns to the surrogate window procedure 124, the window specification data.
  • For greater clarity, an arrow is shown in FIG. 4 to illustrate the CallWindowProc( ) API call from the [0069] surrogate window procedure 124 to the target window procedure 116. It should be understood, however, that this communication is actually achieved through the API routines 126 within the operating system 102, and not directly between the two programs. Upon receipt of the window specification data by the surrogate window procedure 124, the data is edited in the surrogate window procedure to modify or add features to the existing interface, including items such as push-buttons, graphic indicators, program status indicators, icons, informational data, etc. In fact, practically any desired change to the target window interface is possible with the invention as described herein. Upon completion of any necessary changes, the modified window specification data is finally returned to the operating system 102 by the surrogate window procedure 124, in response to the original WM_NCCALCSIZE message. The modified target application window elements are then available for display by the operating system 102.
  • Subsequent to receiving a response to the WM_NCCALCSIZE message, the [0070] operating system 102 will typically post a WM_NCPAINT message to the target message queue 110. This message requests that the target window procedure 116 paint the window frame, i.e. those window elements surrounding the client area. This message will also be intercepted by the surrogate window procedure 124. The surrogate window procedure 124, in this case, will generally call the target window procedure 116 using a “CallWindowProc( )” API call, with a WM_NCPAINT message parameter. See FIG. 6, block 162. This action will cause the target window procedure to paint the original unmodified elements comprising the graphical user interface. When the target window procedure 116 has painted the window frame, it will return control to the surrogate window procedure 124. The emulation window procedure 120 will then preferably perform post processing in block 164, i.e., it will paint the new or modified elements of the window interface which have been left blank by the target window procedure 116.
  • The foregoing illustration relates to user interface modifications of the target application. However, the same techniques are applied to provide new or modified functionality to the [0071] target application program 100. Queued and non-queued messages from the operating system to the target window procedure 116 are intercepted and dispatched to the surrogate window procedure 124. If the intercepted message concerns a task which is unrelated to the new or modified functionality provided by the TIS system, then the surrogate window procedure 124 passes the message to the target application window procedure without further processing. On the other hand, if the intercepted message does concern the new or modified functionality, e.g. a mouse click on a push-button added by the TIS system, or other operating system message relating to TIS implemented functions, then the TIS system will follow the process outlined in FIGS. 6(a) and (b). Specifically, it will perform pre-processing and post processing, and call the target application window procedure in some instances to perform a portion of the processing.
  • FIGS. [0072] 7(a) and (b) show one example of how a target application user interface may be modified using the present invention. FIG. 7(a) shows a main target application program window prior to modification. The window includes a title bar 170, a menu bar 172, a series of push-button icons 174 below the menu bar, and a client area 176 below the push-buttons. FIG. 7(b) shows the window in FIG. 7(a), after it has been modified to include additional user interface elements for a voice recognition function. As can be seen from FIG. 7(b), the additional user interface elements are placed, in this case, between the menu bar 172 and the push-buttons 174. The new elements in this example include an on/off button 178, a graphic volume level indicator 180, a voice prompt 182, and a corporate logo 184. The additional user interface elements 178, 180, 182, 184 are merely exemplary, and the invention is not limited in this regard. Essentially, any new user interface elements chosen by a programmer can be integrated into the target application in the method according to the present invention.
  • As can be seen from FIG. 7([0073] b), the new interface elements are seamlessly integrated in the modified window as though they had been painted there by the target application program. In a preferred embodiment, the new or modified user interface elements provided by the surrogate window procedure are preferably painted to match the color and texture adopted in the original target application program GUI. Matching the color and texture in this manner enhances the seamless appearance of the new interface elements.
  • In view of the foregoing, it should be apparent that the system and apparatus according to the invention is designed to operate in conjunction with a computer system comprising a central processing unit, one or more electronic memory storage devices, and related peripheral equipment such as a data entry device (e.g., a mouse and/or keyboard) and at least one user interface unit (e.g., CRT). The central processing unit (or CPU) is electronically coupled to the one or more electronic memory storage devices, data entry device and display unit by suitable means which are well know by those of ordinary skill in this field. Similarly, the CPU can be comprised of any suitable microprocessor or other electronic processing unit as is well known to those skilled in the art. An example of such a processor would include the Pentium brand microprocessor available from Intel Corporation. [0074]
  • The various hardware requirements for the computer system as described herein can generally be satisfied by any one of many commercially available high speed personal computers offered by manufacturers such as Compaq, Hewlett Packard, or IBM Corp. Likewise, the system as disclosed herein can be implemented by a programmer using commercially available development tools for the operating systems described above. While the foregoing specification illustrates and describes the preferred embodiments of this invention, it is to be understood that the invention is not limited to the precise construction herein disclosed. The invention can be embodied in other specific forms without departing from the spirit or essential attributes. Accordingly, reference should be made to the following claims, rather than to the foregoing specification, as indicating the scope of the invention. [0075]

Claims (14)

1. A method for enhancing the operable functionality of an existing target software application with a complex technological add-in, the method comprising the steps of:
mapping a library function containing a surrogate procedure to at least one of a plurality of application programs executing in a computer system, said at least one application program including the existing target software application;
upon command from an injection software application program, selectively causing only said library function mapped to the existing target software application to replace a first pointer in memory to a target procedure for the existing target software application with a second pointer to said surrogate procedure, so that said surrogate procedure receives intercepted messages that would otherwise be received by said target procedure;
processing said intercepted messages in said surrogate procedure to modify an operating feature of said target application program; and,
calling an emulation procedure separate from and external to said surrogate procedure to assist said surrogate procedure in processing said intercepted messages by performing complex processing to enhance the operable functionality of the existing target software application.
2. The method of claim 1, further comprising the step of calling said emulation procedure by means of an application programming interface routine which has a return value, and further wherein said return value determines said processing to be performed by said surrogate procedure.
3. The method of claim 1 further comprising the step of
processing in said surrogate window procedure, each of said intercepted messages, to determine if said intercepted message requires post-processing by said surrogate procedure after any processing by said target procedure and said emulation procedure has been completed, in order to modify said operating feature of said target application program.
4. The method of claim 3, further comprising the step of:
retrieving from said target procedure to said surrogate procedure, graphical user interface specification data for a graphical user interface of said target application program, when said message is a request from said operating system for information which will determine the appearance of the target application graphical user interface.
5. The method of claim 4, wherein said graphical user interface specification data is edited by said surrogate window procedure to create a modified portion of said target application graphical user interface.
6. The method of claim 1 wherein said modified feature modifies the operation of the target application program without modifying the screen displays of said target application program.
7. The method of claim 1 wherein said modified feature modifies the screen displays that are seen by the user during operation of the target application program.
8. A machine readable storage having stored thereon a computer program for enhancing the operable functionality of an existing target software application with a complex technological add-in, the computer program comprising a routine set of instruction for causing the machine to perform the steps of:
mapping a library function containing a surrogate procedure to at least one of a plurality of application programs executing in a computer system, said at least one application program including the existing target software application;
upon command from an injection software application program, selectively causing only said library function mapped to the existing target software application to replace a first pointer in memory to a target procedure for the existing target software application with a second pointer to said surrogate procedure, so that said surrogate procedure receives intercepted messages that would otherwise be received by said target procedure;
processing said intercepted messages in said surrogate procedure to modify an operating feature of said target application program; and,
calling an emulation procedure separate from and external to said surrogate procedure to assist said surrogate procedure in processing said intercepted messages by performing complex processing to enhance the operable functionality of the existing target software application.
9. The machine readable storage of claim 8, further comprising the step of calling said emulation procedure by means of an application programming interface routine which has a return value, and further wherein said return value determines said processing to be performed by said surrogate procedure.
10. The machine readable storage of claim 8, further comprising the step of
processing in said surrogate window procedure, each of said intercepted messages, to determine if said intercepted message requires post-processing by said surrogate procedure after any processing by said target procedure and said emulation procedure has been completed, in order to modify said operating feature of said target application program.
11. The machine readable storage of claim 10, further comprising the step of:
retrieving from said target procedure to said surrogate procedure, graphical user interface specification data for a graphical user interface of said target application program, when said message is a request from said operating system for information which will determine the appearance of the target application graphical user interface.
12. The machine readable storage of claim 11, wherein said graphical user interface specification data is edited by said surrogate window procedure to create a modified portion of said target application graphical user interface.
13. The machine readable storage of claim 8, wherein said modified feature modifies the operation of the target application program without modifying the screen displays of said target application program.
14. The machine readable storage of claim 8, wherein said modified feature modifies the screen displays that are seen by the user during operation of the target application program.
US10/411,429 1996-11-08 2003-04-10 Method and apparatus for software technology injection for operating systems which assign separate process address spaces Abandoned US20030191865A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US10/411,429 US20030191865A1 (en) 1996-11-08 2003-04-10 Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/747,040 US6611878B2 (en) 1996-11-08 1996-11-08 Method and apparatus for software technology injection for operating systems which assign separate process address spaces
US10/411,429 US20030191865A1 (en) 1996-11-08 2003-04-10 Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US08/747,040 Division US6611878B2 (en) 1996-11-08 1996-11-08 Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Publications (1)

Publication Number Publication Date
US20030191865A1 true US20030191865A1 (en) 2003-10-09

Family

ID=25003424

Family Applications (2)

Application Number Title Priority Date Filing Date
US08/747,040 Expired - Fee Related US6611878B2 (en) 1996-11-08 1996-11-08 Method and apparatus for software technology injection for operating systems which assign separate process address spaces
US10/411,429 Abandoned US20030191865A1 (en) 1996-11-08 2003-04-10 Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US08/747,040 Expired - Fee Related US6611878B2 (en) 1996-11-08 1996-11-08 Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Country Status (1)

Country Link
US (2) US6611878B2 (en)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060565A1 (en) * 2003-09-16 2005-03-17 Chebolu Anil Kumar Controlling user-access to computer applications
US20050066290A1 (en) * 2003-09-16 2005-03-24 Chebolu Anil Kumar Pop-up capture
US20050149930A1 (en) * 2004-01-02 2005-07-07 Microsoft Corporation System and method for implicit configurable message-queue-based user interface automation synchronization
US20060212286A1 (en) * 2004-03-01 2006-09-21 Microsoft Corporation Message data management
US20070038462A1 (en) * 2005-08-10 2007-02-15 International Business Machines Corporation Overriding default speech processing behavior using a default focus receiver
US20080163270A1 (en) * 2006-12-29 2008-07-03 Mitrov Vesselin P Injection Library
US7575163B2 (en) 2006-07-18 2009-08-18 At&T Intellectual Property I, L.P. Interactive management of storefront purchases
US20100269122A1 (en) * 2009-04-16 2010-10-21 Benchmark Technology Group, Inc. System and Method of Heuristic Event Detection
WO2013023143A1 (en) * 2011-08-10 2013-02-14 Zynga Inc. Injecting features into an application
US8949781B1 (en) 2011-08-10 2015-02-03 Zynga Inc. Injecting features into an application
US20150186114A1 (en) * 2013-12-27 2015-07-02 Symantec Corporation Systems and methods for injecting code into an application

Families Citing this family (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6611878B2 (en) * 1996-11-08 2003-08-26 International Business Machines Corporation Method and apparatus for software technology injection for operating systems which assign separate process address spaces
US6473100B1 (en) * 1998-05-20 2002-10-29 Microsoft Corporation Hosting controls in a window via an interface for controlling the window
US6975712B1 (en) 1998-08-26 2005-12-13 Microsoft Corporation Common visual and functional architecture for presenting and controlling arbitrary telephone line features
US7225409B1 (en) * 1998-08-26 2007-05-29 Microsoft Corporation Graphical user interface for a screen telephone
WO2000054385A1 (en) * 1999-03-10 2000-09-14 Preview Systems, Inc. User transparent software malfunction detection and reporting
US6340977B1 (en) * 1999-05-07 2002-01-22 Philip Lui System and method for dynamic assistance in software applications using behavior and host application models
US6745385B1 (en) * 1999-09-01 2004-06-01 Microsoft Corporation Fixing incompatible applications by providing stubs for APIs
US20050154885A1 (en) * 2000-05-15 2005-07-14 Interfuse Technology, Inc. Electronic data security system and method
US6874139B2 (en) * 2000-05-15 2005-03-29 Interfuse Technology Corporation Method and system for seamless integration of preprocessing and postprocessing functions with an existing application program
US7037886B2 (en) * 2000-06-01 2006-05-02 Ecolab Inc. Method for manufacturing a molded detergent composition
US6961945B2 (en) 2000-10-30 2005-11-01 Microsoft Corporation Method and apparatus for adapting and hosting legacy user interface controls
KR100470493B1 (en) * 2001-06-01 2005-02-07 니트젠테크놀러지스 주식회사 Method for the Service resolving special domain name
US7162743B1 (en) * 2001-10-04 2007-01-09 Hewlett-Packard Development Company, L.P. System and method of limiting access to protected hardware addresses and processor instructions
US7673308B2 (en) * 2002-11-18 2010-03-02 Symantec Corporation Virtual OS computing environment
US7100172B2 (en) * 2002-11-27 2006-08-29 Microsoft Corporation System and method for changing operation of an application without recompiling
US8659615B2 (en) * 2003-01-31 2014-02-25 Nvidia Corporation System and method for providing transparent windows of a display
US20040230806A1 (en) * 2003-05-14 2004-11-18 International Business Machines Corporation Digital content control including digital rights management (DRM) through dynamic instrumentation
US7328439B1 (en) * 2003-08-21 2008-02-05 Nvidia Corporation System and method for creating thread-level message hooks
US7480655B2 (en) 2004-01-09 2009-01-20 Webroor Software, Inc. System and method for protecting files on a computer from access by unauthorized applications
US7827565B2 (en) * 2004-03-12 2010-11-02 Microsoft Corporation Integration architecture for non-integrated tools
US7636922B2 (en) * 2004-05-03 2009-12-22 Microsoft Corporation Generic user interface command architecture
US20060075490A1 (en) * 2004-10-01 2006-04-06 Boney Matthew L System and method for actively operating malware to generate a definition
US7480683B2 (en) * 2004-10-01 2009-01-20 Webroot Software, Inc. System and method for heuristic analysis to identify pestware
US7533131B2 (en) 2004-10-01 2009-05-12 Webroot Software, Inc. System and method for pestware detection and removal
US7287279B2 (en) 2004-10-01 2007-10-23 Webroot Software, Inc. System and method for locating malware
US20060075494A1 (en) * 2004-10-01 2006-04-06 Bertman Justin R Method and system for analyzing data for potential malware
US9766953B2 (en) 2004-12-16 2017-09-19 Openspan, Inc. System and method for non-programmatically constructing software solutions
US20060212940A1 (en) * 2005-03-21 2006-09-21 Wilson Michael C System and method for removing multiple related running processes
US7565695B2 (en) * 2005-04-12 2009-07-21 Webroot Software, Inc. System and method for directly accessing data from a data storage medium
US7346611B2 (en) * 2005-04-12 2008-03-18 Webroot Software, Inc. System and method for accessing data from a data storage medium
US8452744B2 (en) * 2005-06-06 2013-05-28 Webroot Inc. System and method for analyzing locked files
US20090144826A2 (en) * 2005-06-30 2009-06-04 Webroot Software, Inc. Systems and Methods for Identifying Malware Distribution
US20070016951A1 (en) * 2005-07-13 2007-01-18 Piccard Paul L Systems and methods for identifying sources of malware
US20070067842A1 (en) * 2005-08-08 2007-03-22 Greene Michael P Systems and methods for collecting files related to malware
US20070074289A1 (en) * 2005-09-28 2007-03-29 Phil Maddaloni Client side exploit tracking
US20070073792A1 (en) * 2005-09-28 2007-03-29 Tony Nichols System and method for removing residual data from memory
US20070094496A1 (en) * 2005-10-25 2007-04-26 Michael Burtscher System and method for kernel-level pestware management
US7996898B2 (en) * 2005-10-25 2011-08-09 Webroot Software, Inc. System and method for monitoring events on a computer to reduce false positive indication of pestware
US20070094733A1 (en) * 2005-10-26 2007-04-26 Wilson Michael C System and method for neutralizing pestware residing in executable memory
US20070094726A1 (en) * 2005-10-26 2007-04-26 Wilson Michael C System and method for neutralizing pestware that is loaded by a desirable process
US20080281772A2 (en) * 2005-11-30 2008-11-13 Webroot Software, Inc. System and method for managing access to storage media
US20070150906A1 (en) * 2005-12-09 2007-06-28 Art Richards Method for integration of functionality of computer programs and substitute user interface for transportation environment
US8418245B2 (en) * 2006-01-18 2013-04-09 Webroot Inc. Method and system for detecting obfuscatory pestware in a computer memory
US7721333B2 (en) * 2006-01-18 2010-05-18 Webroot Software, Inc. Method and system for detecting a keylogger on a computer
US20070168285A1 (en) * 2006-01-18 2007-07-19 Jurijs Girtakovskis Systems and methods for neutralizing unauthorized attempts to monitor user activity
US8255992B2 (en) 2006-01-18 2012-08-28 Webroot Inc. Method and system for detecting dependent pestware objects on a computer
US20070168694A1 (en) * 2006-01-18 2007-07-19 Phil Maddaloni System and method for identifying and removing pestware using a secondary operating system
US20070169198A1 (en) * 2006-01-18 2007-07-19 Phil Madddaloni System and method for managing pestware affecting an operating system of a computer
US20070203884A1 (en) * 2006-02-28 2007-08-30 Tony Nichols System and method for obtaining file information and data locations
US20070226800A1 (en) * 2006-03-22 2007-09-27 Tony Nichols Method and system for denying pestware direct drive access
US8079032B2 (en) * 2006-03-22 2011-12-13 Webroot Software, Inc. Method and system for rendering harmless a locked pestware executable object
US20070261117A1 (en) * 2006-04-20 2007-11-08 Boney Matthew L Method and system for detecting a compressed pestware executable object
US8201243B2 (en) * 2006-04-20 2012-06-12 Webroot Inc. Backwards researching activity indicative of pestware
US20070250818A1 (en) * 2006-04-20 2007-10-25 Boney Matthew L Backwards researching existing pestware
US8181244B2 (en) * 2006-04-20 2012-05-15 Webroot Inc. Backward researching time stamped events to find an origin of pestware
US20080010326A1 (en) * 2006-06-15 2008-01-10 Carpenter Troy A Method and system for securely deleting files from a computer storage device
US20070294396A1 (en) * 2006-06-15 2007-12-20 Krzaczynski Eryk W Method and system for researching pestware spread through electronic messages
US20070294767A1 (en) * 2006-06-20 2007-12-20 Paul Piccard Method and system for accurate detection and removal of pestware
US7996903B2 (en) * 2006-07-07 2011-08-09 Webroot Software, Inc. Method and system for detecting and removing hidden pestware files
US20080028462A1 (en) * 2006-07-26 2008-01-31 Michael Burtscher System and method for loading and analyzing files
US8578495B2 (en) * 2006-07-26 2013-11-05 Webroot Inc. System and method for analyzing packed files
US20080028466A1 (en) * 2006-07-26 2008-01-31 Michael Burtscher System and method for retrieving information from a storage medium
US7590707B2 (en) * 2006-08-07 2009-09-15 Webroot Software, Inc. Method and system for identifying network addresses associated with suspect network destinations
US8065664B2 (en) * 2006-08-07 2011-11-22 Webroot Software, Inc. System and method for defining and detecting pestware
US8171550B2 (en) * 2006-08-07 2012-05-01 Webroot Inc. System and method for defining and detecting pestware with function parameters
US8190868B2 (en) * 2006-08-07 2012-05-29 Webroot Inc. Malware management through kernel detection
US7769992B2 (en) 2006-08-18 2010-08-03 Webroot Software, Inc. File manipulation during early boot time
US20080127352A1 (en) * 2006-08-18 2008-05-29 Min Wang System and method for protecting a registry of a computer
US8078577B2 (en) * 2008-04-07 2011-12-13 Installfree, Inc. Method of bi-directional synchronization of user data
US8473964B2 (en) * 2008-09-30 2013-06-25 Microsoft Corporation Transparent user mode scheduling on traditional threading systems
US8321874B2 (en) * 2008-09-30 2012-11-27 Microsoft Corporation Intelligent context migration for user mode scheduling
US11489857B2 (en) 2009-04-21 2022-11-01 Webroot Inc. System and method for developing a risk profile for an internet resource
US9400659B2 (en) * 2009-09-29 2016-07-26 Verizon Patent And Licensing Inc. Graphical user interface window attachment
US10235216B1 (en) * 2009-10-15 2019-03-19 Ivanti, Inc. Modifying system-defined user interface control functionality on a computing device
CN105786524B (en) * 2016-03-23 2019-03-12 福建正孚软件有限公司 Software hooks setting method and device
CN110879677A (en) * 2018-09-06 2020-03-13 武汉斗鱼网络科技有限公司 Window interface message management method and related equipment
US11495347B2 (en) 2019-01-22 2022-11-08 International Business Machines Corporation Blockchain framework for enforcing regulatory compliance in healthcare cloud solutions
US11164671B2 (en) * 2019-01-22 2021-11-02 International Business Machines Corporation Continuous compliance auditing readiness and attestation in healthcare cloud solutions
CN114816401B (en) * 2022-04-13 2022-12-23 上海弘玑信息技术有限公司 Interface element positioning method, electronic equipment and storage medium
CN116680013B (en) * 2023-06-16 2024-02-20 上海移芯通信科技股份有限公司 Compiling and developing method and device for separating system foundation bag from application program

Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5204947A (en) * 1990-10-31 1993-04-20 International Business Machines Corporation Application independent (open) hypermedia enablement services
US5274815A (en) * 1991-11-01 1993-12-28 Motorola, Inc. Dynamic instruction modifying controller and operation method
US5291585A (en) * 1991-07-29 1994-03-01 Dell Usa, L.P. Computer system having system feature extension software containing a self-describing feature table for accessing I/O devices according to machine-independent format
US5315703A (en) * 1992-12-23 1994-05-24 Taligent, Inc. Object-oriented notification framework system
US5349658A (en) * 1991-11-01 1994-09-20 Rourke Thomas C O Graphical user interface
US5375241A (en) * 1992-12-21 1994-12-20 Microsoft Corporation Method and system for dynamic-link library
US5381534A (en) * 1990-07-20 1995-01-10 Temple University Of The Commonwealth System Of Higher Education System for automatically generating efficient application - customized client/server operating environment for heterogeneous network computers and operating systems
US5392386A (en) * 1994-02-03 1995-02-21 Inter Hi-Tec Ag Method and apparatus for adding functionality to computer programs executing under graphical user interfaces
US5455948A (en) * 1991-12-17 1995-10-03 Texas Instruments Incorporated Method and system for providing data to an application program
US5455904A (en) * 1990-08-02 1995-10-03 Bull S.A. Method of sizing or moving windows
US5457798A (en) * 1992-03-13 1995-10-10 Icl Systems Ab Method and computer system for increasing the functionality of a computer program
US5504928A (en) * 1991-07-23 1996-04-02 International Business Machines Corporation Method and apparatus for providing multi-command support in a rendering adapter
US5528753A (en) * 1994-06-30 1996-06-18 International Business Machines Corporation System and method for enabling stripped object software monitoring in a computer system
US5583761A (en) * 1993-10-13 1996-12-10 Kt International, Inc. Method for automatic displaying program presentations in different languages
US5600789A (en) * 1992-11-19 1997-02-04 Segue Software, Inc. Automated GUI interface testing
US5712995A (en) * 1995-09-20 1998-01-27 Galileo Frames, Inc. Non-overlapping tiling apparatus and method for multiple window displays
US5864819A (en) * 1996-11-08 1999-01-26 International Business Machines Corporation Internal window object tree method for representing graphical user interface applications for speech navigation
US5870606A (en) * 1996-05-01 1999-02-09 International Business Machines Corp. Data triggered trace technique for debugging software programs
US5873064A (en) * 1996-11-08 1999-02-16 International Business Machines Corporation Multi-action voice macro method
US5903269A (en) * 1995-10-10 1999-05-11 Anysoft Ltd. Apparatus for and method of acquiring processing and routing data contained in a GUI window
US6611878B2 (en) * 1996-11-08 2003-08-26 International Business Machines Corporation Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2103297A1 (en) 1992-12-07 1994-06-08 Donald J. Kennedy Interception system and method including user interface
JPH07140708A (en) 1993-11-19 1995-06-02 Sekisui Chem Co Ltd Resin composition for toner and toner
US6343263B1 (en) 1994-08-02 2002-01-29 Apple Computer, Inc. Real-time signal processing system for serially transmitted data

Patent Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5381534A (en) * 1990-07-20 1995-01-10 Temple University Of The Commonwealth System Of Higher Education System for automatically generating efficient application - customized client/server operating environment for heterogeneous network computers and operating systems
US5455904A (en) * 1990-08-02 1995-10-03 Bull S.A. Method of sizing or moving windows
US5204947A (en) * 1990-10-31 1993-04-20 International Business Machines Corporation Application independent (open) hypermedia enablement services
US5504928A (en) * 1991-07-23 1996-04-02 International Business Machines Corporation Method and apparatus for providing multi-command support in a rendering adapter
US5291585A (en) * 1991-07-29 1994-03-01 Dell Usa, L.P. Computer system having system feature extension software containing a self-describing feature table for accessing I/O devices according to machine-independent format
US5274815A (en) * 1991-11-01 1993-12-28 Motorola, Inc. Dynamic instruction modifying controller and operation method
US5349658A (en) * 1991-11-01 1994-09-20 Rourke Thomas C O Graphical user interface
US5455948A (en) * 1991-12-17 1995-10-03 Texas Instruments Incorporated Method and system for providing data to an application program
US5457798A (en) * 1992-03-13 1995-10-10 Icl Systems Ab Method and computer system for increasing the functionality of a computer program
US5600789A (en) * 1992-11-19 1997-02-04 Segue Software, Inc. Automated GUI interface testing
US5375241A (en) * 1992-12-21 1994-12-20 Microsoft Corporation Method and system for dynamic-link library
US5315703A (en) * 1992-12-23 1994-05-24 Taligent, Inc. Object-oriented notification framework system
US5583761A (en) * 1993-10-13 1996-12-10 Kt International, Inc. Method for automatic displaying program presentations in different languages
US5392386A (en) * 1994-02-03 1995-02-21 Inter Hi-Tec Ag Method and apparatus for adding functionality to computer programs executing under graphical user interfaces
US5528753A (en) * 1994-06-30 1996-06-18 International Business Machines Corporation System and method for enabling stripped object software monitoring in a computer system
US5712995A (en) * 1995-09-20 1998-01-27 Galileo Frames, Inc. Non-overlapping tiling apparatus and method for multiple window displays
US5903269A (en) * 1995-10-10 1999-05-11 Anysoft Ltd. Apparatus for and method of acquiring processing and routing data contained in a GUI window
US5870606A (en) * 1996-05-01 1999-02-09 International Business Machines Corp. Data triggered trace technique for debugging software programs
US5864819A (en) * 1996-11-08 1999-01-26 International Business Machines Corporation Internal window object tree method for representing graphical user interface applications for speech navigation
US5873064A (en) * 1996-11-08 1999-02-16 International Business Machines Corporation Multi-action voice macro method
US6611878B2 (en) * 1996-11-08 2003-08-26 International Business Machines Corporation Method and apparatus for software technology injection for operating systems which assign separate process address spaces

Cited By (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8166560B2 (en) 2003-09-16 2012-04-24 At&T Intellectual Property I, L.P. Remote administration of computer access settings
US7577995B2 (en) 2003-09-16 2009-08-18 At&T Intellectual Property I, L.P. Controlling user-access to computer applications
US20050060566A1 (en) * 2003-09-16 2005-03-17 Chebolu Anil Kumar Online user-access reports with authorization features
US20050066290A1 (en) * 2003-09-16 2005-03-24 Chebolu Anil Kumar Pop-up capture
US20050065935A1 (en) * 2003-09-16 2005-03-24 Chebolu Anil Kumar Client comparison of network content with server-based categorization
US20050060412A1 (en) * 2003-09-16 2005-03-17 Chebolu Anil Kumar Synchronizing automatic updating of client
US20050060565A1 (en) * 2003-09-16 2005-03-17 Chebolu Anil Kumar Controlling user-access to computer applications
US20050149930A1 (en) * 2004-01-02 2005-07-07 Microsoft Corporation System and method for implicit configurable message-queue-based user interface automation synchronization
US20060212286A1 (en) * 2004-03-01 2006-09-21 Microsoft Corporation Message data management
US20110185281A1 (en) * 2004-03-01 2011-07-28 Microsoft Corporation Message data management
US8230032B2 (en) * 2004-03-01 2012-07-24 Microsoft Corporation Message data management
US8161125B2 (en) * 2004-03-01 2012-04-17 Microsoft Corporation Message data management
US20110185027A1 (en) * 2004-03-01 2011-07-28 Microsoft Corporation Message data management
US7941492B2 (en) * 2004-03-01 2011-05-10 Microsoft Corporation Message data management
US20070038462A1 (en) * 2005-08-10 2007-02-15 International Business Machines Corporation Overriding default speech processing behavior using a default focus receiver
US7848928B2 (en) * 2005-08-10 2010-12-07 Nuance Communications, Inc. Overriding default speech processing behavior using a default focus receiver
US9342847B2 (en) 2006-07-18 2016-05-17 At&T Intellectual Property I, L.P. Methods, systems, and products for ordering items
US11455673B2 (en) 2006-07-18 2022-09-27 Shopify, Inc. Methods, systems, and products for ordering items
US11068956B2 (en) 2006-07-18 2021-07-20 Shopify Inc. Methods, systems, and products for ordering items
US7575163B2 (en) 2006-07-18 2009-08-18 At&T Intellectual Property I, L.P. Interactive management of storefront purchases
US10664886B2 (en) 2006-07-18 2020-05-26 Shopify Inc. Methods, systems, and products for ordering items
US8794519B2 (en) 2006-07-18 2014-08-05 At&T Intellectual Property I, L.P. Methods, systems, and products for ordering items
US10269053B2 (en) 2006-07-18 2019-04-23 At&T Intellectual Property I, L.P. Methods, systems, and products for ordering items
US9619791B2 (en) 2006-07-18 2017-04-11 At&T Intellectual Property I, L.P. Methods, systems, and products for ordering items
US20080163270A1 (en) * 2006-12-29 2008-07-03 Mitrov Vesselin P Injection Library
US8060858B2 (en) * 2006-12-29 2011-11-15 Sap Ag Injection library
US20100269122A1 (en) * 2009-04-16 2010-10-21 Benchmark Technology Group, Inc. System and Method of Heuristic Event Detection
US8949781B1 (en) 2011-08-10 2015-02-03 Zynga Inc. Injecting features into an application
WO2013023143A1 (en) * 2011-08-10 2013-02-14 Zynga Inc. Injecting features into an application
US20150186114A1 (en) * 2013-12-27 2015-07-02 Symantec Corporation Systems and methods for injecting code into an application
US9817638B2 (en) * 2013-12-27 2017-11-14 Symantec Corporation Systems and methods for injecting code into an application

Also Published As

Publication number Publication date
US6611878B2 (en) 2003-08-26
US20030110307A1 (en) 2003-06-12

Similar Documents

Publication Publication Date Title
US6611878B2 (en) Method and apparatus for software technology injection for operating systems which assign separate process address spaces
US6285363B1 (en) Method and system for sharing applications between computer systems
US5745759A (en) Window kernel
US5261043A (en) Input and output data constraints on iconic devices in an iconic programming system
US6397262B1 (en) Window kernel
US7827552B2 (en) System and method for performing context checks
US5774720A (en) Personality neutral graphics subsystem
US6968538B2 (en) System and methods for integration of custom classes into pre-existing objects models
US6061059A (en) Providing a preview capability to a graphical user interface dialog
US5767849A (en) Personality neutral window management subsystem
US5437006A (en) Spreadsheet command/function capability from a dynamic-link library
US5497484A (en) File menu support for encapsulated applications
US5293476A (en) System for entering and modifying variable names for terminals of icons in an iconic programming system
EP0529844A2 (en) Method and apparatus for deriving object type and obtaining object type attribute values
US20020099868A1 (en) Method and system for associating parameters of containers and contained objects
US5701485A (en) Object oriented dispatch and supercall process and arrangement
US5729745A (en) Methods and apparatus for creating a base class for manipulating external data connections in a computer generated document
EP0602845A2 (en) Message dispatching in an event driven architecture
US5664190A (en) System and method for enabling an event driven interface to a procedural program
US6501488B2 (en) System and method for managing a plurality of associated windows for an application
WO1999005671A1 (en) Universal voice operated command and control engine
US20050108650A1 (en) Server visualization and control
US5495595A (en) Method for employing and external object handler program with another computer application program
US20010045453A1 (en) Man-machine interface for a smart card reader
JP2000056954A (en) System and method having reinforced function

Legal Events

Date Code Title Description
STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION