Within the field of computing, many scenarios involve the installation on a computer of a device that is controlled by a driver, such as a software interface configured to provide access to the device. For example, the driver may be configured to initiate the device upon installation; to provide a description of the device to other processes; to receive data from the device and provide it upon request to other processes; to send commands to the device; to configure the device to interact with another device; and to configure the device for safe removal or uninstallation. Additionally, various applications may interact with the device; e.g., many types of applications may format output of a document for rendering on a printer.
Many operating environments may be configured to interact with many types of devices, and to receive and invoke many types of drivers therefore. As a first example, the operating environment may, upon detecting a new device, query the user to specify the location of a driver. As a second example, the operating environment may download a driver from the internet, such as from a driver library. As a third example, the operating environment may receive a driver provided by the device (e.g., as part of a “plug and play” environment). As a fourth example, the operating environment may store a default driver set comprising a set of default drivers for various devices, and upon receiving a description of the device, may install a default driver that is suitable for basic and/or standardized operation of the device (e.g., upon detecting a printer, the operating environment may select a default printer driver that is capable of rendering text on many printers, but may be incapable of printing high-resolution documents or images until a driver that is specific to the printer is located and installed). In such ways, the operating environment may select a suitable driver for the device.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key factors or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
While the installation of a driver for a device may be performed in many ways, various configurations of the operating environment in choosing a driver may provide different advantages. For example, some contemporary operating environments may, upon first detecting a connection of a device, endeavor to find a driver for a device (e.g., by examining the local filesystem, querying the manufacturer or a driver library, and/or querying the user to specify the location of a driver). If a suitable driver is not identified during this initial connection, the operating environment may seek to identify a default driver for the device that may provide basic interactivity, or may simply fail to install a suitable driver and may present an error message to the user. However, operating environment may conclude this installation process and may not initiate further attempts to identify a more suitable driver for the device, such as a more specific driver that provides access to enhanced features of the device and/or an updated version of the driver provided by the manufacturer. While the user may seek a new driver and initiate a request for a replacement of the current driver with the new driver, the operating environment may provide little or no automated support for identifying and installing a new or updated driver.
Presented herein are techniques for installing a driver for a device that may improve the automatic initiation, performance, and/or completion of this process. According to these techniques, the operating environment may initially select and install a default driver that may provide rapid access to the device. The operating environment may then seek an accessible driver library that may comprise a specific driver for the device. If the driver library is accessible, the operating environment may promptly replace the default driver with the specific driver. However, if the driver library is not accessible, the operating environment may continue to query for the driver library (e.g., periodically, or upon detecting a connection to a network, an operating environment reboot, or an idle moment within the operating environment). Upon eventually achieving accessibility to the driver library, the operating environment may then retrieve a specific driver for the device, and may replace the default driver with the specific driver. Moreover, after installing the specific driver, the operating environment may continue to seek updated drivers for the device, and may successively replace a current driver with an updated driver. In this manner, the operating environment may automatically initiate the retrieval and updating of drivers for the device while economizing the attention of the user.
To the accomplishment of the foregoing and related ends, the following description and annexed drawings set forth certain illustrative aspects and implementations. These are indicative of but a few of the various ways in which one or more aspects may be employed. Other aspects, advantages, and novel features of the disclosure will become apparent from the following detailed description when considered in conjunction with the annexed drawings.
The claimed subject matter is now described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the claimed subject matter. It may be evident, however, that the claimed subject matter may be practiced without these specific details. In other instances, structures and devices are shown in block diagram form in order to facilitate describing the claimed subject matter.
Within the field of computing, many scenarios involve a device (e.g., a keyboard, mouse, display device, microphone, speakers, display adapter, sound adapter, storage device, network adapter, or printer) attached to a computer through various types of wired and/or wireless connections. In order to provide access to the capabilities of the device, a piece of software known as a driver is often installed on the computer as an interface with which applications and the operating environment may interact to operate the device. For example, the software may accept input to the device (e.g., the invocation of capabilities or the transmission of data) requested by an application or the operating environment and may relay that data to the device; may accept output from the device (e.g., status reports, user input received from a user input device, or video captured by a camera) to be exposed or provided to various applications and the operating environment; may configure the device to interoperate with other devices; and may mediate the installation of the device in the operating environment and/or the uninstallation of the device from the operating environment.
The driver may be installed on the computer system in various ways. As a first example, a user may provide a driver while installing a device, e.g., by providing removable media packaged with the device that contains an installation package for the driver. As a second example, the operating environment may request a driver for the device from a driver library that is accessible over a network such as the internet or a local area network (LAN), may receive the driver over the network, and may install the driver within the operating environment. As a third example, the operating environment may receive the driver directly from the device, which may store its driver and may be capable of providing the driver to the operating environment during installation while no such driver is currently installed (e.g., a “plug and play” protocol). As a fourth example, the operating environment may have been pre-loaded with a driver for the device. As a fifth option, the operating environment may include a default driver set, comprising default drivers for general classes of device, and the operating environment may select a default driver for the general class of devices that includes the device and that, while unable to interface specifically with the device and provide access to the entire range of capabilities that the specific driver for the device may access, may provide access to basic capabilities that are shared among the devices of the device class. As a first such example, a mouse may include many device-specific features through a specific driver for the device, such as adjusting the sensitivity and customizing the functionality of input buttons, but may also interface with a basic mouse driver in order to deliver user input comprising mouse movement signals and button presses. As a second such example, a display adapter may include many specialized features that may be accessed through the specific driver for the device, such as video acceleration, color correction, and three-dimensional acceleration, but may also be accessible through a default video driver in order to receive a command to set the video mode to particular dimensions and to receive standard video output from the computer.
In view of the range of available drivers for a device (including a default driver), an operating environment may be configured to manage the installation of a driver for the device in many ways. As a first example, when a device is first connected to the computer, the operating environment may perform a sequence of searches and choices in order to identify a driver to be installed, including selecting a driver from a set of suitable drivers. As a second example, the operating environment may apply various types of security restrictions to the driver (e.g., in order to reduce the vulnerability of the operating environment to the installation of malicious software that is provided as a driver by a device that is connected to the computer). As a third example, the operating environment may or may not be configured to check for updates to the driver after installation, and/or to replace a current driver with an updated driver. As a fourth example, when the device is disconnected from the computer, the operating environment may choose to allow the driver to continue running, may place the driver in a suspended state until the device is reconnected, or may remove the driver. Many such choices and processes may be initiated by the computing environment in order to manage the driver for the device.
While the exemplary scenario 10 illustrated in
A second exemplary problem that may be appreciated with respect to the exemplary scenario 10 of
A third exemplary problem that may be appreciated with respect to the exemplary scenario 10 of
Presented herein are techniques for installing a driver 20 for a device 14 on a computer 16 that may address some or several of the disadvantages apparent in the exemplary scenario 10 of
Still another embodiment involves a computer-readable medium comprising processor-executable instructions configured to apply the techniques presented herein. Such computer-readable media may include, e.g., computer-readable storage media involving a tangible device, such as a memory semiconductor (e.g., a semiconductor utilizing static random access memory (SRAM), dynamic random access memory (DRAM), and/or synchronous dynamic random access memory (SDRAM) technologies), a platter of a hard disk drive, a flash memory device, or a magnetic or optical disc (such as a CD-R, DVD-R, or floppy disc), encoding a set of computer-readable instructions that, when executed by a processor of a device, cause the device to implement the techniques presented herein. Such computer-readable media may also include (as a class of technologies that are distinct from computer-readable storage media) various types of communications media, such as a signal that may be propagated through various physical phenomena (e.g., an electromagnetic signal, a sound wave signal, or an optical signal) and in various wired scenarios (e.g., via an Ethernet or fiber optic cable) and/or wireless scenarios (e.g., a wireless local area network (WLAN) such as WiFi, a personal area network (PAN) such as Bluetooth, or a cellular or radio network), and which encodes a set of computer-readable instructions that, when executed by a processor of a device, cause the device to implement the techniques presented herein.
An exemplary computer-readable medium that may be devised in these ways is illustrated in
The techniques discussed herein may be devised with variations in many aspects, and some variations may present additional advantages and/or reduce disadvantages with respect to other variations of these and other techniques. Moreover, some variations may be implemented in combination, and some combinations may feature additional advantages and/or reduced disadvantages through synergistic cooperation. The variations may be incorporated in various embodiments (e.g., the exemplary method 50 of
A first aspect that may vary among embodiments of these techniques involves the scenarios wherein such techniques may be implemented. As a first example of this first aspect, these techniques may be utilized to install drivers 20 for many types of devices 14, such as display adapters; network adapters; input devices such as mice, keyboards, cameras, and microphones; output devices such as speakers and printers; and storage devices such as hard disk drives, solid-state storage components, magnetic or optical disc drives, and tape drives. Moreover, these components may be connected to the computer 16 through various wired protocols (e.g., Ethernet, universal serial bus (USB), IEEE 1394, serial ATA, or RS-232 and/or wireless protocols (e.g., 802.11, infrared, or optical wireless protocols). As a second example of this first aspect, many types of driver libraries 32 may be involved in these techniques, such as a web service provided by the manufacturer 18 of the device 14 and/or the computer 16 (including the operating environment of the computer 16), or an enterprise administrator who may compile a set of drivers 20 for various devices 14 in use throughout the enterprise and may provide access to such drivers 20 over a network.
As a third example of this first aspect, these techniques may be implemented as many types of processes on a computer 16, including a portion of the operating environment, such as a daemon or background process that loads upon starting the computer 16 and remains available to install drivers 20 for devices 14, or as an application that may be invoked by the operating environment or the user 12 in order to manage the installation of drivers 20 for devices 14. Additionally, the architecture of such processes may take many forms. As a first such example, the techniques may be performed by a process that simply performs the elements of the exemplary method 50 of
A task-based architecture of the type illustrated in
A second aspect that may vary among embodiments of these techniques relates to the contents of a driver 20 (including a default driver 22) for a particular device 14. As a first example, the driver 20 may include various libraries comprising sets of functions that may be invoked to send particular commands or provide data to the device 14, and/or to configure the operating environment of the computer 16 to receive data from the device 14 (e.g., an allocation of a memory buffer to store data streamed from the device 14, and/or the installation of a process to receive and store such data). As a second example, the driver 20 for a device 14 may include a metadata package that describes the device 14, such as product information (e.g., a picture of the device 14, a purchase, activation, license, or warranty date relating to the device 14, or a model number, product number, or serial number identifying the device), a list of capabilities of the device 14, a list of functions that may be invoked by a user or an application with respect to the device 14, or product documentation. This metadata package may be included with the driver 20 (or may be associated with the driver 20), and in one such embodiment, this metadata package may be received and installed with the driver 20 for the device 14.
As a third example of this second aspect, the driver 20 for a device 14 (including a default driver 22 for all devices 14 within a general device class) may include one or more applications that interface with the device 14. For example, a device 14 comprising a camera may include one or more applications for playing, editing, performing format conversion, or creating a library of captured audio and video clips, as well as applications for managing the device 14, such as an interface to the memory of the camera. These applications may be included with the driver 20 (or may be associated with the driver 20), and may be received with the driver 20. This installation may be prefaced on the consent of the user 12; e.g., the computer 16 may present to the user 12 an offer to install the application, and may install the application upon receiving from the user 12 an acceptance of the offer. Additionally, the computer 16 may be configured to invoke the application interfacing with the device 14 after installation (e.g., an “autoplay” feature that invokes a user interface for the device 14 upon connecting and/or installing the device 14). This invocation may also be prefaced on the consent of the user 12; e.g., after installing an application as part of a driver 20, the computer 16 may present to the user 12 an offer to invoke the application, and may do so upon receiving an acceptance of the offer from the user 12. Those of ordinary skill in the art may choose many types of additional components that may be included with a driver 20 (including a default driver 22) to be installed and/or utilized according to the techniques presented herein.
A third aspect that may vary among embodiments of these techniques relates to the manner of selecting a default driver 22 for the device 14 from the default driver set 100. As a first example, the default driver set 100 may include default drivers 22 that each support devices 14 having a particular set of capabilities, such as a data storage capability, a data streaming capability, an image capturing capability, a video capturing capability, and a video displaying capability. In order to select a default driver 22 for a device 14, an embodiment of these techniques may identify at least one capability of the device 14, and may select a default driver 22 from the default driver set 100 that supports at least one capability of the device 14. In some scenarios, more than one default driver 22 may be installed to support one or more capabilities of the device 14.
As a second example of this third aspect, in some scenarios, the installation of a default driver 22 for the device 14 may fail (e.g., the capabilities 122 of the device 14 may be unusual and/or new, and a default driver 22 may not be found that supports such capabilities 122), and an embodiment of these techniques may notify the user 12 of the failure to install a default driver 22 for the device 14. Those of ordinary skill in the art may devise many variations in the installation of the default driver 22 for the device 14 in accordance with the techniques presented herein.
A fourth aspect that may vary among embodiments of these techniques relates to the manner of installing the driver 20 from the driver library 32. As a first example, the detection of the availability of the driver library 32 may be performed in many iterative ways, such as upon detecting an availability event (e.g., an event indicating a change in the computer 18 that may suggest the availability of the driver library 32). An exemplary availability event set may comprise a periodic event (e.g., an elapsing of a period of time that prompts a new attempt to access the driver library 32); a computer restart event (e.g., a rebooting of the computer 16 and/or restarting of the operating environment); a device detection event (e.g., a reconnection of the device 14 to the computer 16); a device access event (e.g., an attempt by the user 12 or a process to access the device 14); a device request event (e.g., a request initiated by the device 14 to contact the driver library 32 to obtain the driver 20); a network availability event (e.g., a detected restoration of network availability or expansion of network capacity); and a user request event (e.g., a request received from the user 12 to access the driver library 32).
As a second example of this fourth aspect, an embodiment of these techniques may be configured to, upon receiving a driver 20 from the driver library 32 for the device 14, await a safe driver update point before updating the driver 20. Because the installation of the driver 20 involves the removal of the default driver 22 for the device 14, this removal may cause problems with the device 14 in some scenarios (e.g., when the user 12 or a process is accessing the device 14). Therefore, it may be advantageous for the embodiment to wait until reaching a safe driver update point (e.g., a moment when the device 14 is not in use, and when the removal of the default driver 22 may not cause problems) before implementing the replacement. As one such example, the embodiment may simply ask the user 12 to identify a safe driver update point (e.g., an offer to install the driver 20), and may proceed with the removal of the default driver 22 and the installation of the driver 20 for the device 14 upon receiving an acknowledgment from the user 12. Those of ordinary skill in the art may devise many ways of installing the driver 20 for the device 14 in accordance with the techniques presented herein.
A fifth aspect that may vary among embodiments of these techniques relates to additional features that may be included in various embodiments. As a first such example, before installing the default driver 22, an embodiment of these techniques may first query the computer 16 to identify a driver 20 for the device 14 that may already be installed; and upon identifying such a driver 20 stored on the computer 18, may install the driver 20 for the device 14 instead of the default driver 22. For example, the device 14 may have previously been connected and disconnected, thereby leaving behind a driver 20 for the device 14 that may be installed instead of the default driver 22. As another such example, another instance of the device 14 may already be installed on the computer 16, and the driver 20 installed for the other instance may be suitable for the current instance as well. As a third such example, the operating environment of the computer 16 may be pre-equipped with installed drivers 20 for devices 14 that are frequently installed in computers 16 (e.g., a pre-installed driver for a flash drive), and may simply invoke the already installed driver 20 for the device 22 instead of installing the default driver 22 and retrieving the driver 20 from the driver library 32.
As a second example of this fifth aspect, instead of being received from a driver 20 (including a default driver 22) may be received from the device 14 (e.g., in a computer 16 supporting a “plug-and-play” feature). Alternatively, the driver 20 (including a default driver 22) may be specified by the user 12; e.g., the user 12 may specify a location of the driver 20 and/or default driver 22 within the file system of the computer 16.
As a third example of this fifth aspect, after installing the driver 20 for the device 14, these techniques may continue to be utilized in order to achieve an updating of the driver 20 for the device 14. For example, after installing a first driver for the device 14, an embodiment of these techniques may continue detecting an accessibility of the driver library 32 (e.g., a periodic check for access to the driver library 32), and upon detecting the accessibility of the driver library 32, may request an updated driver for the device 14 from the driver library 32; and upon receiving the updated driver for the device 14, the embodiment may uninstall the first driver for the device 14 and install the updated driver for the device 14. This variation may be achieved, e.g., in the exemplary method 50 of
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
As used in this application, the terms “component,” “module,” “system”, “interface”, and the like are generally intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a controller and the controller can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.
Furthermore, the claimed subject matter may be implemented as a method, apparatus, or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof to control a computer to implement the disclosed subject matter. The term “article of manufacture” as used herein is intended to encompass a computer program accessible from any computer-readable device, carrier, or media. Of course, those skilled in the art will recognize many modifications may be made to this configuration without departing from the scope or spirit of the claimed subject matter.
Although not required, embodiments are described in the general context of “computer readable instructions” being executed by one or more computing devices. Computer readable instructions may be distributed via computer readable media (discussed below). Computer readable instructions may be implemented as program modules, such as functions, objects, Application Programming Interfaces (APIs), data structures, and the like, that perform particular tasks or implement particular abstract data types. Typically, the functionality of the computer readable instructions may be combined or distributed as desired in various environments.
In other embodiments, device 132 may include additional features and/or functionality. For example, device 132 may also include additional storage (e.g., removable and/or non-removable) including, but not limited to, magnetic storage, optical storage, and the like. Such additional storage is illustrated in
The term “computer readable media” as used herein includes computer storage media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions or other data. Memory 138 and storage 140 are examples of computer storage media. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, Digital Versatile Disks (DVDs) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by device 132. Any such computer storage media may be part of device 132.
Device 132 may also include communication connection(s) 146 that allows device 132 to communicate with other devices. Communication connection(s) 146 may include, but is not limited to, a modem, a Network Interface Card (NIC), an integrated network interface, a radio frequency transmitter/receiver, an infrared port, a USB connection, or other interfaces for connecting computing device 132 to other computing devices. Communication connection(s) 146 may include a wired connection or a wireless connection. Communication connection(s) 146 may transmit and/or receive communication media.
The term “computer readable media” may include communication media. Communication media typically embodies computer readable instructions or other data in a “modulated data signal” such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” may include a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal.
Device 132 may include input device(s) 144 such as keyboard, mouse, pen, voice input device, touch input device, infrared cameras, video input devices, and/or any other input device. Output device(s) 142 such as one or more displays, speakers, printers, and/or any other output device may also be included in device 132. Input device(s) 144 and output device(s) 142 may be connected to device 132 via a wired connection, wireless connection, or any combination thereof. In one embodiment, an input device or an output device from another computing device may be used as input device(s) 144 or output device(s) 142 for computing device 132.
Components of computing device 132 may be connected by various interconnects, such as a bus. Such interconnects may include a Peripheral Component Interconnect (PCI), such as PCI Express, a Universal Serial Bus (USB), firewire (IEEE 1394), an optical bus structure, and the like. In another embodiment, components of computing device 132 may be interconnected by a network. For example, memory 138 may be comprised of multiple physical memory units located in different physical locations interconnected by a network.
Those skilled in the art will realize that storage devices utilized to store computer readable instructions may be distributed across a network. For example, a computing device 150 accessible via network 148 may store computer readable instructions to implement one or more embodiments provided herein. Computing device 132 may access computing device 150 and download a part or all of the computer readable instructions for execution. Alternatively, computing device 132 may download pieces of the computer readable instructions, as needed, or some instructions may be executed at computing device 132 and some at computing device 150.
Various operations of embodiments are provided herein. In one embodiment, one or more of the operations described may constitute computer readable instructions stored on one or more computer readable media, which if executed by a computing device, will cause the computing device to perform the operations described. The order in which some or all of the operations are described should not be construed as to imply that these operations are necessarily order dependent. Alternative ordering will be appreciated by one skilled in the art having the benefit of this description. Further, it will be understood that not all operations are necessarily present in each embodiment provided herein.
Moreover, the word “exemplary” is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “exemplary” is not necessarily to be construed as advantageous over other aspects or designs. Rather, use of the word exemplary is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or”. That is, unless specified otherwise, or clear from context, “X employs A or B” is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B; or X employs both A and B, then “X employs A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims may generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form.
Also, although the disclosure has been shown and described with respect to one or more implementations, equivalent alterations and modifications will occur to others skilled in the art based upon a reading and understanding of this specification and the annexed drawings. The disclosure includes all such modifications and alterations and is limited only by the scope of the following claims. In particular regard to the various functions performed by the above described components (e.g., elements, resources, etc.), the terms used to describe such components are intended to correspond, unless otherwise indicated, to any component which performs the specified function of the described component (e.g., that is functionally equivalent), even though not structurally equivalent to the disclosed structure which performs the function in the herein illustrated exemplary implementations of the disclosure. In addition, while a particular feature of the disclosure may have been disclosed with respect to only one of several implementations, such feature may be combined with one or more other features of the other implementations as may be desired and advantageous for any given or particular application. Furthermore, to the extent that the terms “includes”, “having”, “has”, “with”, or variants thereof are used in either the detailed description or the claims, such terms are intended to be inclusive in a manner similar to the term “comprising.”