Described herein are one or more implementations facilitating the extensibility of a tool for configuration and management of server-functionality role(s) of a network server. One or more implementations, described herein, provide an extensibility model that allows additional server-functionality roles to be included in the list of user-selectable server-functionality roles available on a server. When selected by user, the model enables management and configuration of the additional server-functionality roles.
|
8. One or more computer-readable storage media having computer-executable instructions thereon that, when executed by a network server, perform a method comprising the acts of:
discovering what, if any, extension server-functionality roles of a set of extension roles are available on the network server by examining one or more registries stored in a computer storage, wherein the extension server-functionality roles are to be performed by the network server;
loading dynamic link library files associated with the discovered extension server-functionality roles;
producing a user-interface (UI) which is local to the network server and lists members of both the set of built-in server-functionality roles and the discovered extension server-functionality roles;
in response to a user selection of one of the discovered extension server-functionality roles, signaling one or more program modules associated with the selected extension role to perform a procedure for configuration or management of the selected extension role.
1. In a network server having a set of built-in server-functionality roles available for configuration or management, a method comprising the following acts performed locally by the network server:
discovering what, if any, extension server-functionality roles of a set of extension roles are available on the network server by examining one or more registries stored in a computer storage, wherein the extension server-functionality roles are to be performed by the network server;
loading dynamic link library files associated with the discovered extension server-functionality roles;
producing a user-interface (UI) which is local to the network server and lists members of both the set of built-in server-functionality roles and the discovered extension server-functionality roles;
in response to a user selection of one of the discovered extension server-functionality roles, signaling one or more program modules associated with the selected extension role to perform a procedure for configuration or management of the selected extension role.
2. A method as recited in
3. A method as recited in
4. A method as recited in
5. A method as recited in
6. A method as recited in
7. A method as recited in
9. One or more media as recited in
10. One or more media as recited in
11. One or more media as recited in
12. One or more media as recited in
|
This invention generally relates to a technology offering defined network server-functionality roles.
A network server is a computer or device on a computer network that manages network resources. A network server (or simply “server”) may run a server-specific multipurpose operating system capable of handling a diverse set of server-functionality roles (such as Microsoft® Windows® Server 2003™ server-specific multipurpose operating system).
A network server may fulfill one or more server-functionality roles. The following are examples of these server-functionality roles (provided by way of example and not limitation):
Until recently, configuring a server to perform one of these server-functionality roles was a technical procedure requiring a knowledgeable and skillful network administrator (“net-admin”). In order to perform a specific server-functionality role (or combination of roles), a net-admin must know and install the correct, specific requisite functional components. Functional components include, for example, program modules, drivers, application program interfaces (APIs), and the like.
Furthermore, the net-admin must know exactly what configuration data that must be adjusted, added, or removed in order to enable the desired server-functionality role(s) in the server. Then, of course, the net-admin must make those adjustments to the existing configuration data, add the new and necessary configuration data, and remove the unnecessary and old configuration data.
Numerous network administration tomes have been published to instruct the net-admin as to which functional components, amongst a group of seemingly unrelated components, are required for each role (and combinations of roles). In addition, these tomes teach how to configure the server for each role (and combinations or roles). These net-admins have spent countless hours in training sessions in hopes of gaining the requisite knowledge, and honing the essential skills for configuring a server to perform the roles most desired by each industry, and then managing that server once it is performing the desired roles.
However, network servers employing more recent and modern network server operating systems (such as Microsoft® Windows® Server 2003™ server operating system) provide a server-functionality role configuration and management tool. With this tool, a net-admin configures and manages desired server-functionality roles by selecting the desired roles from a list of such roles.
For this example, assume that the net-admin selects the “print server” option in the UI 100. In response to that selection, the tool automatically installs the specific requisite functional components for the print server role, and the tool adjusts the configuration accordingly.
For some roles, the tool asks for user input for some role-specific settings. For some of these settings, default values can be provided by the tool and the user can simply accept the default values as they tend to be the most appropriate ones for typical deployment.
Rather than relying on the skill and knowledge of the net-admins to properly add, remove and manage the desired server-functionality role(s), by picking and choosing from a seemingly unrelated list of functional components and configuration data, the customer may now rely on this tool to install and configure a server to perform desired role(s). The net-admin merely selects the desired role(s) from amongst a list of roles (and maybe answers a few customization questions). The tool does the rest.
Moreover, once the role is installed and configured, the tool may inform the user about that and provide a list of common management tasks along with links to user education material so that the net-admin can learn more about the selected roles.
Described herein are one or more implementations facilitating the extensibility of a tool for configuration and management of server-functionality role(s) of a network server. One or more implementations, described herein, provide an extensibility model that allows additional server-functionality roles to be included in the list of user-selectable server-functionality roles available on a server. When selected by user, the model enables management and configuration of the additional server-functionality roles.
The same numbers are used throughout the drawings to reference like elements and features.
Some network-server operating systems supply a software tool for configuration and management of server-functionality roles of a network server. Conventionally, that tool has a finite number of pre-defined and built-in server-functionality roles. The following description sets forth techniques facilitating extensibility to the tool so that the tool may offer additional server-functionality roles.
Exemplary Tool for Configuration and Management Server-Functionality Role
The server 210 may be running a server-specific multipurpose operating system (“server OS”) capable of handling a diverse set of server-functionality roles (such as Microsoft® Windows® Server 2003™ server-specific multipurpose operating system). The tool 200 may be an integrated portion of the server OS or a separate but cooperative program module.
As depicted in
The UI 230 is an example of just one UI generated by the tool 200 during the configuration and management of server-functionality roles of the server 210 (or another server). This UI displays a list 240 of the server-functionality roles available for configuration and/or management.
For this example, assume that the net-admin selects the “print server” option from the list 240 in the UI 230. In response to that selection, the tool 200 automatically installs the specific requisite functional components for the server 210 to now operate as a print server, and the tool adjusts the server's configuration accordingly.
The list 240 in the UI 230 lists the following examples of server-functionality roles (provided by way of example and not limitation) that may be configured and/or managed by the tool 200:
Although not shown in
While the net-admin sees a continuous list of available server-functionality roles, the list 240 of the UI 230 is bifurcated for illustration purposes. Sub-list 242 includes the finite number of server-functionality roles that are pre-defined in and built into the tool 200. The contents of the sub-list 242 correspond to the contents offered by the conventional approach shown in list 120 of the UI 100 of
Conventionally, the programming for each listed server-functionality role is “hard-coded” (i.e., built into the software in a way, which is not easily modified) into a server-functionality role configuration and management tool. Therefore, according to convention, adding new roles in the tool required changes to the tool's “core binaries.” This is an expensive task for development and test teams. Furthermore, the development and test teams of the tools are typically not the best suited and trained to understand how best to implement a particular server-functionality role on a server.
The server-functionality role configuration and management tool 200 introduces an extensibility model that allows the inclusion of additional (i.e., “non-built-in” or “extension”) roles offered by the tool. While sub-list 242 of the UI 240 includes the available built-in roles, sub-list 244 (shown in a dashed-line box) includes additional roles available to the net-admin for selection. When an additional server-functionality role is selected by the net-admin, the tool 200 facilitates the management and configuration of the selected additional role.
Instead of having all the roles hard-coded in the binaries of the tool 200, the tool exposes additional roles dynamically. The tool employs an extension model that allows roles to be defined in stand-alone binaries (e.g., DLLs). Once the tool is aware of the extension binary of a new role (registered, for example, to the server OS), the tool automatically exposes the new role.
At 320, the UI 300 displays the already-installed and configured server-functionality roles on the server. At 330, the UI 300 displays related information associated with already-installed and configured server-functionality roles on the server. That information may include links to more detailed information or other functionality.
Exemplary Server-Functionality Role Configuration and Management Tool
As shown in
Both the built-in server-role configurer 410 and the built-in server-role manager 420 analyze the existing built-in server-functionality roles and determine which ones are already installed. To do that, the built-in configurer 410 examines the built-in server-functionality roles portion 460 of the tool 200. This portion 460 may have been loaded when the tool was loaded, or it may be stored at a known and accessible storage location. This portion includes information about each built-in role and the configuration and management functionality associated with each built-in role.
The built-in server-role configurer 410 handles the initial configuration (e.g., installation) of each built-in role. Once a built-in role is installed, the built-in server-role manager 420 handles management of the built-in role. That management may include customization of the role or un-installation of the role.
The extension server-role configurer 430 discovers what extension server-functionality roles exist by, for example, examining the registry 474 (which are configuration files that are typically stored on a computer storage 470). The extension server-role configurer 430 loads files (e.g., extension role files 472) associated with each registered extension server-functionality role from, for example, the computer storage 470. If an available extension role is not already loaded, the extension server-role manager 440 loads files associated with each already-installed extension server-functionality role from, for example, the extension role files 472 of the computer storage 470.
In addition, the extension server-role configurer 430 acquires descriptive data for each extension server-functionality role by, for example, querying role-associated files and/or extracting from the registry. That data may include, for example, a role's name and description.
The extension server-role manager 440 discovers what extension server-functionality roles are already installed. The extension server-role manager does not need to have any role-specific logic for discovering what roles are installed. The extension server-role manager may, for example, call into an appropriate function in the extension role files 472 to ask the role if it is installed. In this way, the role manager may be independent of the specific logic used to determine if a role is installed or not.
In addition, the extension server-role manager 440 acquires role-management information for each extension server-functionality role by, for example, querying role-associated files and/or extracting from the registry. That information may include links to other functionality or links to other information.
The UI generator 450 displays a merged list containing both the built-in roles and the extension roles. The server-role management tool 200 may enforce a policy to determine or allow individual roles to request/specify what order the roles should be listed in, in the merged list. If so, the generated UI will display the roles in the requested/specified order.
The generated UI may indicate whether a role is installed. During configuration of a server, the UI generator 450 displays a configuration UI, like UI 240 of
If a user initiates a configuration of a particular extension server-functionality role, the extension server-role configurer 430 initiates extension server-role configuration, during which the files associated with the selected server-role presumably install and configure the selected role. The extension server-role configurer 430 acts as an interface between the tool 200 and the associated-files.
When a user initiates a configuration of a particular extension server-functionality role, the extension server-role configurer 430 initiates extension server-role configuration, during which the files associated with the selected server-role presumably install and configure the selected role. The extension server-role configurer 430 acts as an interface between the tool 200 and the associated-files of the role being configured.
When a user initiates a management of a particular extension server-functionality role, the extension server-role manager 440 initiates extension server-role management, during which the files associated with the selected server-role presumably facilitate management of the selected role. The extension server-role manager 440 acts as an interface between the tool 200 and the associated-files of the role being managed.
Methodological Implementations
This configuration method 500 may be performed in software, hardware, or a combination thereof. For ease of understanding, the method is delineated as separate steps represented as independent blocks in
As part of the initial installation and configuration, the server-role management tool 200 performs general initial checks of the network-server OS of a newly installed server (e.g., server 210).
At 502 of
At 504, the tool 200 discovers what additional server-functionality roles (i.e., “extension server-functionality roles”) exist to extend the list of roles available for configuration and/or management. The tool examines one or more configuration files (e.g., the so-called “registry” of an operating system) in which additional server-functionality roles are defined in a manner that the tool can read and interpret. When properly listed in these configuration files, each extension server-functionality role is considered to be “registered.”
At 506, the tool 200 loads the files (e.g., DLL files) associated with each registered extension server-functionality role. In addition, the tool acquires descriptive-data for each registered extension server-functionality role. The tool may do this by querying the associated files and/or by extracting the data from the configuration files.
The acquired descriptive-data for each registered extension server-functionality role may include the following (provided by way of example and not limitation): name of role, a short text description, and a placement-defining ordinal (which may be used to determine where the role appears in the list); a link to a help topic that will inform the user about that specific role, what it does, what the pre-requisites to install the role are, what to do after the installation; and installation status of role. Some editions of the network-server OS may automatically install one or more of the registered extension roles, and the UI may indicate the installation status of the registered server-functionality extension roles.
At 508, the tool merges the list of the pre-defined and built-in server-functionality roles and the list-registered extension roles into one common list, which lists all of the roles available for configuration or management and management on the server. List 240 of
At 510, the tool 200 generates and displays UI (e.g., UI 230 of
If the net-admin selects a built-in role, then the tool performs the pre-defined and built-in configuration and/or management for the selected built-in role. Since the configuration and/or management functionality for the registered extension roles are not built-in the tool, this functionality is derived from role-associated files (which were loaded at block 506).
In response to a net-admin selecting one of the registered server-functionality extension roles from the merged common list, the tool 200 initiates, at 512, extension-role configuration and/or management procedure. The tool queries the extension-role associated file(s) for UI, and the tool displays that UI.
At 514, the tool 200 signals the extension-role associated file(s) to perform the configuration and/management procedure for that registered server-functionality extension role. While waiting for the extended configuration and/management procedure to complete, the tool receives progress information and displays such information on the UI.
At 516, the tool 200 receives the result of the extended configuration and/management procedure. The tool also receives a suggested next step for the net-admin to take to complete configuration and/or management of the registered server-functionality extension role. The tool displays the results and suggestions via a UI.
This management method 600 may be performed in software, hardware, or a combination thereof. For ease of understanding, the method is delineated as separate steps, represented as independent blocks in
At 602 of
The tool perform the functions of blocks 604-608 periodically (e.g., every fifteen seconds) or in response to a trigger (e.g., user input). Using the results of those functions, the tool updates the content of the server-functionality role management UI as necessary.
At 604, the tool 200 examines the list of a finite number of pre-defined and built-in server-functionality roles and determines which ones are currently installed.
At 606, the tool 200 discovers the registered extension server-functionality roles. If not already loaded, the tool loads the associated file(s) of the discovered extension roles and determines its installation status.
At 608, the tool acquires role-management information from each discovered extension role and displays that information on the UI associated with its role. The tool may acquire this information from a role by querying its associated file(s).
Exemplary Computing System and Environment
The exemplary computing environment 700 is only one example of a computing environment and is not intended to suggest any limitation as to the scope of use or functionality of the computer and network architectures. Neither should the computing environment 700 be interpreted as having any dependency or requirement relating to any one or combination of components illustrated in the exemplary computing environment 700.
The exemplary server-role configuration and management tool may be implemented with numerous other general purpose or special purpose computing system environments or configurations. Examples of well known computing systems, environments, and/or configurations that may be suitable for use include, but are not limited to, personal computers, server computers, thin clients, thick clients, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, personal digital assistants (PDA), appliances, special-purpose electronics (e.g., a DVD player), programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
The exemplary server-role configuration and management tool may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The exemplary server-role configuration and management tool may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a data-communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices.
The computing environment 700 includes a general-purpose computing device in the form of a computer 702. The components of computer 702 may include, but are not limited to, one or more processors or processing units 704, a system memory 706, and a system bus 708 that couples various system components, including the processor 704, to the system memory 706.
The system bus 708 represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. By way of example, such architectures can include a CardBus, Personal Computer Memory Card International Association (PCMCIA), Accelerated Graphics Port (AGP), Small Computer System Interface (SCSI), Universal Serial Bus (USB), IEEE 1394, a Video Electronics Standards Association (VESA) local bus, and a Peripheral Component Interconnects (PCI) bus, also known as a Mezzanine bus.
Computer 702 typically includes a variety of computer-readable media. Such media may be any available media that is accessible by computer 702 and includes both volatile and non-volatile media, removable and non-removable media.
The system memory 706 includes computer-readable media in the form of volatile memory, such as random access memory (RAM) 710, and/or non-volatile memory, such as read only memory (ROM) 712. A basic input/output system (BIOS) 714, containing the basic routines that help to transfer information between elements within computer 702, such as during start-up, is stored in ROM 712. RAM 710 typically contains data and/or program modules that are immediately accessible to and/or presently operated on by the processing unit 704.
Computer 702 may also include other removable/non-removable, volatile/non-volatile computer storage media. By way of example,
The disk drives and their associated computer-readable media provide non-volatile storage of computer readable instructions, data structures, program modules, and other data for computer 702. Although the example illustrates a hard disk 716, a removable magnetic disk 720, and a removable optical disk 724, it is to be appreciated that other types of computer-readable media, which may store data that is accessible by a computer, such as magnetic cassettes or other magnetic storage devices, flash memory cards, CD-ROM, digital versatile disks (DVD) or other optical storage, random access memories (RAM), read only memories (ROM), electrically erasable programmable read-only memory (EEPROM), and the like, may also be utilized to implement the exemplary computing system and environment.
Any number of program modules may be stored on the hard disk 716, magnetic disk 720, optical disk 724, ROM 712, and/or RAM 710, including, by way of example, an operating system 726, one or more application programs 728, other program modules 730, and program data 732.
A user may enter commands and information into computer 702 via input devices, such as a keyboard 734 and a pointing device 736 (e.g., a “mouse”). Other input devices 738 (not shown specifically) may include a microphone, joystick, game pad, satellite dish, serial port, scanner, and/or the like. These and other input devices are connected to the processing unit 704 via input/output interfaces 740 that are coupled to the system bus 708, but may be connected by other interface and bus structures, such as a parallel port, game port, or a universal serial bus (USB).
A monitor 742 or other type of display device may also be connected to the system bus 708 via an interface, such as a video adapter 744. In addition to the monitor 742, other output peripheral devices may include components, such as speakers (not shown) and a printer 746, which may be connected to computer 702 via the input/output interfaces 740.
Computer 702 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computing device 748. By way of example, the remote computing device 748 may be a personal computer, a portable computer, a server, a router, a network computer, a peer device or other common network node, and the like. The remote computing device 748 is illustrated as a portable computer that may include many or all of the elements and features described herein, relative to computer 702.
Logical connections between computer 702 and the remote computer 748 are depicted as a local area network (LAN) 750 and a general wide area network (WAN) 752. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets, and the Internet. Such networking environments may be wired or wireless.
When implemented in a LAN networking environment, the computer 702 is connected to a local network 750 via a network interface or adapter 754. When implemented in a WAN networking environment, the computer 702 typically includes a modem 756 or other means for establishing communications over the wide network 752. The modem 756, which may be internal or external to computer 702, may be connected to the system bus 708 via the input/output interfaces 740 or other appropriate mechanisms. It is to be appreciated that the illustrated network connections are exemplary and that other means of establishing communication link(s) between the computers 702 and 748 may be employed.
In a networked environment, such as that illustrated with computing environment 700, program modules depicted, relative to the computer 702 or portions thereof, may be stored in a remote memory storage device. By way of example, remote application programs 758 reside on a memory device of remote computer 748. For purposes of illustration, application programs and other executable program components, such as the operating system, are illustrated herein as discrete blocks, although it is recognized that such programs and components reside, at various times, in different storage components of the computing device 702, and are executed by the data processor(s) of the computer.
Computer-Executable Instructions
An implementation of an exemplary server-role configuration and management tool may be described in the general context of computer-executable instructions, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Typically, the functionality of the program modules may be combined or distributed as desired in various embodiments.
Exemplary Operating Environment
The operating environment is only an example of a suitable operating environment and is not intended to suggest any limitation as to the scope or use of functionality of the exemplary server-role configuration and management tool(s) described herein. Other well known computing systems, environments, and/or configurations that are suitable for use include, but are not limited to, personal computers (PCs), server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, programmable consumer electronics, wireless phones and equipment, general and special-purpose appliances, application-specific integrated circuits (ASICs), network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
Computer-Readable Media
An implementation of an exemplary server-role configuration and management tool may be stored on, or transmitted across, some form of computer-readable media. Computer-readable media may be any available media that may be accessed by a computer. By way of example, computer-readable media may comprise, but is not limited to, “computer storage media” and “communications media.”
“Computer storage media” include volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which may be used to store the desired information and which may be accessed by a computer.
“Communication media” typically embodies computer-readable instructions, data structures, program modules, or other data in a modulated data signal, such as carrier wave or other transport mechanism. Communication media also includes any information delivery media.
The techniques, described herein, may be implemented in many ways, including (but not limited to) program modules, general- and special-purpose computing systems, network servers and equipment, dedicated electronics and hardware, and as part of one or more computer networks. The techniques may, for example, be implemented on a computer system depicted in
Although the one or more above-described implementations have been described in language specific to structural features and/or methodological steps, it is to be understood that other implementations may be practiced without the specific features or steps described. Rather, the specific features and steps are disclosed as preferred forms of one or more implementations.
Melo, Eduardo D., French, Edward T., Hasan, Saif R., Walton, Bryan K, Evans, Cheryl A., Sager, Frank M.
Patent | Priority | Assignee | Title |
8209758, | Dec 21 2011 | Kaspersky Lab Zao | System and method for classifying users of antivirus software based on their level of expertise in the field of computer security |
8214904, | Dec 21 2011 | Kaspersky Lab Zao | System and method for detecting computer security threats based on verdicts of computer users |
8214905, | Dec 21 2011 | Kaspersky Lab Zao | System and method for dynamically allocating computing resources for processing security information |
8879091, | Jun 14 2007 | Emerge Print Management, LLC | Apparatus and method for metering, monitoring and providing real time enterprise printing information |
9092380, | Oct 11 2007 | System and method of communications with supervised interaction |
Patent | Priority | Assignee | Title |
20010054106, | |||
20020112038, | |||
20040123153, | |||
20050066157, | |||
20050114692, | |||
20060106866, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Feb 08 2005 | MELO, EDUARDO D | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015914 | /0248 | |
Feb 08 2005 | HASAN, SAIF R | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015914 | /0248 | |
Feb 09 2005 | FRENCH, EDWARD T | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015914 | /0248 | |
Feb 10 2005 | WALTON, BRYAN K | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015914 | /0248 | |
Feb 11 2005 | Microsoft Corporation | (assignment on the face of the patent) | / | |||
Feb 11 2005 | EVANS, CHERYL A | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015914 | /0248 | |
Feb 11 2005 | SAGER, FRANK M | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015914 | /0248 | |
Oct 14 2014 | Microsoft Corporation | Microsoft Technology Licensing, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 034543 | /0001 |
Date | Maintenance Fee Events |
Sep 29 2009 | ASPN: Payor Number Assigned. |
Oct 04 2012 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Nov 03 2016 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Jan 04 2021 | REM: Maintenance Fee Reminder Mailed. |
Jun 21 2021 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
May 19 2012 | 4 years fee payment window open |
Nov 19 2012 | 6 months grace period start (w surcharge) |
May 19 2013 | patent expiry (for year 4) |
May 19 2015 | 2 years to revive unintentionally abandoned end. (for year 4) |
May 19 2016 | 8 years fee payment window open |
Nov 19 2016 | 6 months grace period start (w surcharge) |
May 19 2017 | patent expiry (for year 8) |
May 19 2019 | 2 years to revive unintentionally abandoned end. (for year 8) |
May 19 2020 | 12 years fee payment window open |
Nov 19 2020 | 6 months grace period start (w surcharge) |
May 19 2021 | patent expiry (for year 12) |
May 19 2023 | 2 years to revive unintentionally abandoned end. (for year 12) |