Method of dynamically mapping scanner names from client to agent

A scanner redirection method for a remote desktop system that includes a client computing device and a host server includes the steps of: receiving a name of a physical scanner from a scanner core; transmitting the received name of the physical scanner to the host server; and in response to a first user selection to acquire a scanned image and a second user selection of the name of the physical scanner, the first and second user selections being made on a user interface of the host server, receiving from an application running on the host server a request for the scanned image, transmitting to the scanner core a request to acquire the scanned image from the physical scanner, and upon receiving the scanned image from the scanner core, transmitting the scanned image to the application.

This application is based upon and claims the benefit of priority from International Patent Application No. PCT/CN2022/106195, filed on Jul. 18, 2022, the entire contents of which are incorporated herein by reference.

BACKGROUND

Many organizations rely on remote desktop services to provide lean, flexible computing environments. Remote desktop scanning is one important feature required by the end user of a remote desktop service. However, when the source of remote desktop scanning is a client-side scanner, processing of scan commands issued during remote sessions is inefficient and often results in crashes. A robust and efficient method to realize scanner redirection between a client computing device and a host server during a remote session is needed.

SUMMARY

Accordingly, one or more embodiments provide a scanner redirection method for a remote desktop system that includes a client computing device that has running therein remote desktop software including a scanner redirection module, and a host server, the scanner redirection module including a scanner core that is configured to communicate with a physical scanner. According to some embodiments, the scanner core is a “data source.” According to other embodiments, the scanner core is an “image capture core.” As used herein, “image capture core” is a service running in an operating system of the client computing device that exposes application programming interfaces (APIs) to communicate with one or more connected image capturing devices such as physical scanners, to discover properties of the image capturing devices and to instruct the image capturing devices to perform their native functions and acquire images from the image capturing devices.

The scanner redirection method according to one or more embodiments includes the steps of: transmitting a request to the scanner core for a name of the physical scanner; receiving the name of the physical scanner from the scanner core; transmitting the received name of the physical scanner to the host server, wherein an application running on the host server displays the name of the physical scanner in a remote desktop image generated at the host server and transmitted to the client computing device; and in response to a first user selection to acquire a scanned image and a second user selection of the name of the physical scanner, the first and second user selections being made on a user interface (UI) of the host server, receiving from the application a request for the scanned image, transmitting to the scanner core a request to acquire the scanned image from the physical scanner, and upon receiving the scanned image from the scanner core, transmitting the scanned image to the application.

Further embodiments include a non-transitory computer-readable storage medium comprising instructions that cause a remote desktop system to carry out the above method, as well as a remote desktop system configured to carry out the above method.

DETAILED DESCRIPTION

Techniques for realizing scanner redirection between a client computing device and a host server during a remote session are described. A guest operating system (OS) in a virtual machine (VM) of the host server executes an application that requires one or more images to be scanned by a physical scanner that is connected to the client computing device. Accordingly, the application in the VM of the host server requests the image(s) from a module of a remote desktop (RD) client application, referred to as a “scanner redirection module.” The scanner redirection module acquires the image(s) from the physical scanner and transmits the image(s) to the application in the VM of the host server.

According to a first embodiment, to realize the described scanner redirection, both the scanner redirection module of the RD client application and the application in the VM of the host server utilize a robust scanning protocol such as the TWAIN protocol. Pursuant to the scanning protocol, the scanner redirection module and the application in the VM of the host server each utilize a “data source manager” and a “data source.” For the application in the VM of the host server, the data source manager communicates with a “virtual” data source that requests scanned images from the scanner redirection module. For the scanner redirection module, the data source manager communicates with a data source that is configured to communicate with the physical scanner to acquire scanned images for transmitting to the application in the VM of the host server.

According to a second embodiment, the client computing device and host server run different OSs. As a result, to realize the described scanner redirection, the scanner redirection module and the application in the VM of the host server utilize robust but different scanning protocols such as the Image Capture (ICA) framework and the TWAIN protocol. Pursuant to its respective scanning protocol, the application in the VM of the host server utilizes a data source manager and a virtual data source. Like in the first embodiment, the data source manager communicates with the virtual data source, which requests scanned images from the scanner redirection module. Pursuant to the other scanning protocol, the scanner redirection module utilizes an “image capture core” that is configured to communicate with the physical scanner to acquire scanned images for transmitting to the application in the VM of the host server.

According to embodiments, when the user opens an RD session, the RD client application transmits the name of a default physical scanner to an RD agent application to be stored, e.g., in a registry in the VM of the host server. Later, when the user interacts with the application in the VM of the host server, the user selects to acquire a scanned image and is presented with a list of sources to acquire the scanned image from. To make this selection more intuitive, instead of presenting a generic name of the virtual data source of the application in the VM of the host server, the application in the VM of the host server retrieves the name of the physical scanner from the registry and presents the name of the physical scanner to the user, the name of the physical scanner being mapped to the virtual data source.

Accordingly, the user can select the same name via the application in the VM of the host server as the user would select via the RD client application, which is a name defined by the vendor of the physical scanner and is a more intuitive name than the name of the virtual data source. Furthermore, via the RD client application, the user can change the physical scanner from the default physical scanner. If the user changes the physical scanner, the RD client application transmits the name of the selected physical scanner to the RD agent application to be presented to the user by the application in the VM of the host server. These and further aspects of the invention are discussed below with respect to the drawings.

FIG.1is a block diagram of a virtualized desktop infrastructure (VDI) system100(also referred to as an RD computer system) in which scanner redirection according to embodiments may be implemented. VDI system100includes a client computing device110and a plurality of host servers160that are remote from client computing device110, e.g., in a remote data center. Client computing device110is constructed on a hardware platform132such as an x86 architecture platform. Hardware platform132includes conventional components (not shown) of a computing device, such as one or more central processing units (CPUs), memory such as random-access memory (RAM), local storage such as one or more magnetic drives or solid-state drives (SSDs), and one or more network interface cards (NICs). The CPU(s) are configured to execute instructions such as executable instructions that perform one or more operations described herein, which may be stored in the memory. The NIC(s) enable client computing device110to communicate with host servers160over a physical network150such as the Internet.

Client computing device110includes a software platform112on which an RD client software program114runs on an OS130, which is a commodity OS. The term “desktop” refers to the instance of an interactive operating environment provided by an OS and software applications, typically in the form of display and sound output and keyboard and mouse input. With RD client114, a user accesses an RD that is running in a remote data center, from any location. For example, RD client114may be VMware Horizon® client, available from VMware, Inc., or a special purpose thin client such as those available from Dell, HP, NEC, Sun Microsystems, and Wyse. One of host servers160transmits an image142of an RD to a mouse, keyboard, screen (MKS) process120of RD client114. RD client114then communicates with a display device140such as a monitor on which the user views RD image142.

When the user performs actions in the RD, such as clicking a mouse or typing on a keyboard, the user's actions are transmitted to MKS process120. MKS process120transmits the user's actions to host server160to update the user's RD accordingly. MKS process120also includes a scanner redirection module122that acquires scanned images from one or more physical scanners (not shown) connected to client computing device110. Scanner redirection module122transmits such scanned images to host server160. Scanner redirection module122is discussed further below in conjunction withFIGS.2and3.

RD client114includes a user interface (UI)116through which the user adjusts various settings for the RD session. UI116includes a client scanner module118that acquires a vendor-defined name of a default physical scanner from scanner redirection module122to transmit to host server160. Furthermore, to enable the user to select a different physical scanner, client scanner module118acquires the name of each physical scanner connected to client computing device110for presenting to the user. Client scanner module118then transmits an identification of a selected scanner to scanner redirection module122and transmits the name of the selected scanner to host server160, as discussed further below.

VDI system100includes a domain controller154such as Microsoft Active Directory® that manages user accounts156including the user's log-in information for the RD. VDI system100also includes a connection broker152that manages connections between RD client114and a host server running the user's RD. Connection broker152and domain controller154may run on separate servers or in separate VMs running on the same server or different servers.

In embodiments illustrated herein, RDs are running in VMs164. VMs164are instantiated on a plurality of host servers160, each of which includes a software platform162and a hardware platform180. Hardware platform180is, e.g., a server-grade x86 architecture platform including the conventional components of a computing device described above for hardware platform132. Software platform162includes a hypervisor176, which is a virtualization software layer that supports a VM execution space within which VMs164are concurrently instantiated and executed. One example of hypervisor176is a VMware ESX® hypervisor, available from VMware, Inc.

Each of host servers160is controlled by a virtualization manager190, and hardware platform180of each of host servers160is coupled to a shared persistent storage system192. Virtualization manager190logically groups host servers160into a cluster to perform cluster-level tasks such as provisioning and managing VMs164and migrating VMs164from one of host servers160to another. Virtualization manager190communicates with host servers160via a management network (not shown) provisioned from a physical network102such as a local area network (LAN) of a remote data center. Virtualization manager190may be, e.g., a physical server or one of VMs164. One example of virtualization manager190is VMware vCenter Server,® available from VMware, Inc.

VM164-1includes an RD agent software program166and an application170running on a guest OS174, which is a commodity OS. RD agent166communicates with RD client114to establish a session for the user's RD. RD image142is generated in VM164-1and transmitted by RD agent166to RD client114via MKS process120to be displayed on display device140. RD agent166includes an agent scanner module167that receives names of physical scanners from client scanner module118. Agent scanner module167temporarily stores a name of a physical scanner in a registry of the memory of host server160as scanner name168, to be displayed to the user later when the user interacts with application170. RD client114and RD agent166are also referred to individually and collectively herein as RD software.

Application170requires images to be scanned by the physical scanner(s) connected to client computing device110. Application170has been modified to handle scanner redirection with scanner redirection module122. In one example, application170is Adobe Photoshop, which the user is accessing through the RD session. Application170is discussed further below in conjunction withFIGS.2and3. A particular configuration of VDI system100is illustrated inFIG.1, but it should be recognized that one or more embodiments may be practiced with other computer system configurations.

FIG.2is a block diagram illustrating client computing device110and VM164-1of VDI system100according to a first embodiment in which scanner redirection module122and application170use the same scanning protocol. Client computing device110is connected to three physical scanners: a flatbed scanner260, a sheet-fed scanner262, and a camera264. Scanner redirection module122of client computing device110includes a client data source manager (DSM)210that communicates with scanner cores to acquire scanned images. According to the first embodiment, the scanner cores are client data sources (DSs)220,230, and240. Client DSs220230, and240are configured to communicate with flatbed scanner260, sheet-fed scanner262, and camera264, respectively. Although illustrated as communicating directly with the physical scanners, client DSs220,230, and240may also communicate with separate drivers in OS130to acquire scanned images from the physical scanners.

Communication between scanner redirection module122and the physical scanners is carried out via client DSM210and the client DSs. Specifically, scanner redirection module122calls a “client DSM entry” function212to transmit commands to client DSM210. Client DSM210calls “client DS entry” functions222,232, and242to transmit commands to client DSs220,230, and240, respectively. The client DSs also return results to client DSM210via return values of client DS entry calls. Similarly, client DSM210provides results via return values of client DSM entry212calls.

Client DSs220,230, and240have UIs224,234, and244for adjusting scanner properties of physical scanners and beginning the scanning of images. According to embodiments, UIs224,234, and244can be disabled to instead present a user a UI286of application170, as discussed further below. When one of the client DSs acquires a scanned image from a respective physical scanner, the client DS returns the scanned image to client DSM210to be further transmitted to an image transmitter250. Image transmitter250transmits the scanned image to application170of VM164-1via sockets252and254of scanner redirection module122and application170, respectively.

Application170includes an agent DSM270that communicates with a virtual DS280to request scanned images. Virtual DS280is configured to communicate with scanner redirection module122to acquire scanned images from the physical scanners. Application170calls an “agent DSM entry” function272to transmit commands to agent DSM270. Agent DSM270calls a “virtual DS entry” function282to transmit commands to virtual DS280. Virtual DS280also returns results to agent DSM270via return values of virtual DS entry282calls. Similarly, agent DSM270provides results via return values of agent DSM entry272calls. Virtual DS280has a UI286for allowing the user to adjust scanner properties of physical scanners and begin scanning images. Accordingly, the user can perform such actions via UI286while UIs224,234, and244are disabled.

As previously mentioned, application170receives scanned images from scanner redirection module122via sockets252and254. Specifically, the scanned images are received by an image processor284of virtual DS280that renders the scanned images, e.g., rotating upside-down images so that they face right-side-up. Image processor284returns scanned images to virtual DS280, which returns the scanned images to agent. DSM270to be further returned to application170.

FIG.3is a block diagram illustrating client computing device110and VM164-1of VDI system100according to a second embodiment in which scanner redirection module122and application170use different scanning protocols. Like the first embodiment, scanner redirection module122of client computing device110includes a scanner core that communicates with flatbed scanner260, sheet-fed scanner262, and camera264to acquire scanned images therefrom. However, according to the second embodiment, the scanner core is an “image capture core320.” Although illustrated as communicating directly with the physical scanners, image capture core320may also communicate with separate drivers in OS130to acquire scanned images from the physical scanners. After image capture core320acquires a scanned image from a physical scanner, scanner redirection module122transmits the scanned image to image transmitter250to be transmitted to application170of VM164-1via sockets252and254.

Because scanner redirection module122and application170use different scanning protocols, scanner redirection module122also includes a conversion module310that converts data between being described according to the different scanning protocols. For example, if virtual DS280requests to view properties of the physical scanners, upon image capture core320acquiring the properties, conversion module310converts the properties to be described according to the scanning protocol of application170before the properties are transmitted to virtual DS280. Similarly, for example, if virtual DS280requests to adjust a property of one of the physical scanners, conversion module310converts the desired adjustment to be described according to the scanning protocol of scanner redirection module122before the desired adjustment is transmitted to image capture core320. To perform the communication between scanner redirection module122and individual components thereof and between individual components thereof, calls are made via APIs defined by scanner redirection module122, conversion module310, image capture core320, and image transmitter250.

As with the first embodiment, application170includes agent DSM270, which communicates with virtual DS280to request scanned images, and virtual DS280is configured to communicate with scanner redirection module122to acquire scanned images from the physical scanners. When the user requests scanned images via UI286, scanned images are received by image processor284from scanner redirection module122to be returned to virtual DS280, which returns the scanned images to agent DSM270and finally to application170.

FIG.4Ais a block diagram illustrating an example of UI116for selecting a physical scanner via client scanner module118. In the example ofFIG.4A, the user is presented a list of three scanner devices (physical scanners), each of the physical scanners being identified by a vendor-defined name. The user can select one of the physical scanners by selecting the corresponding radio button. Whichever physical scanner the user selects indicates which physical scanner will be used by scanner redirection module122of MKS process120when requests are received from application170, e.g., to acquire scanned images. Here, the user has selected a physical scanner with the vendor-defined name “EPSON-DS570W.”

Additionally, UI116presents the user with the option to “[u]se vendor-defined name for scanner in remote desktop session.” Here, the user has not selected this option, as indicated by the box next to the option being empty. Accordingly, if the user interacts with application170and decides to scan an image, the user will be presented with a generic name of virtual DS280as a source instead of a vendor-defined name of a physical scanner.

FIG.4Bis a block diagram illustrating an example of a selection window of UI286for selecting a source for a scanned image via application170of VM164-1without using a vendor-defined name for a physical scanner. Here, via UI286, the user has selected to acquire a scanned image and is presented with a single source for the scanned image: “Horizon Virtual Scanner 2.4.” This name corresponds with virtual DS280, which is unintuitive to a user who would otherwise expect to be presented with a vendor-defined name of a physical scanner. However, if the user selects the data source and clicks the “Select” button, a request will be transmitted by application170to scanner redirection module122, which will acquire an image from the default physical scanner (or the scanner previously selected by the user via client scanner module118if applicable).

FIG.4Cis a block diagram illustrating an example of UI116for selecting a physical scanner via client scanner module118and selecting to use a vendor-defined name of the physical scanner on application170. As with the example ofFIG.4A, the user is presented a list of three physical scanners, and the user has selected the physical scanner with the vendor-defined name “EPSON-DS570W.” However, unlike with the example ofFIG.4A, the user has selected the option to “[u]se vendor-defined name for scanner in remote desktop session.” Accordingly, if the user interacts with application170and decides to scan an image, the user will be presented with a vendor-defined name like the user was presented with via UI116.

FIG.4Dis a block diagram illustrating an example of the selection window of UI286for selecting a source for a scanned image via application170of VM164-1using a vendor-defined name for a physical scanner. Here, via UI286, the user has selected to acquire a scanned image and is presented with a single source for the scanned image: “EPSON-DS570W.” This vendor-defined name, which is either the name of the default physical scanner or is a name the user selected via client scanner module118, is mapped to virtual DS280. As with the example ofFIG.4B, if the user selects the data source and clicks the “Select” button, a request will be transmitted by application170to scanner redirection module122, which will acquire an image from the physical scanner with the vendor-defined name “EPSON-DS570W.”

FIG.5is a flow diagram of steps performed by OS130and MKS process120of client computing device110to carry out a method500of acquiring the vendor-defined name of a default physical scanner connected to client computing device110, according to the first embodiment. At step502, OS130loads MKS process120from storage of hardware platform132into memory of hardware platform132. At step504, MKS process120transmits a request to OS130to load scanner redirection module122.

At step506, OS130loads scanner redirection module122from storage of hardware platform132into memory of hardware platform132, specifically into the memory space into which MKS process120was loaded at step502. At step508, scanner redirection module122transmits a request to OS130to load client DSM210. At step510, OS130loads a dynamic link library (DLL) of client DSM210from storage of hardware platform132into memory of hardware platform132, specifically into the memory space into which scanner redirection module122was loaded at step506. At step512, scanner redirection module122calls client DSM entry212to request client DSM210to open.

At step514, client DSM210initializes, at which point client DSM210is available to assist scanner redirection module122in opening client DSs. Client DSM210thus transmits a return value of client DSM entry212to scanner redirection module122, indicating that client DSM210is open. At step516, scanner redirection module122calls client DSM entry212to request client DSM210to load a client DS of the default physical scanner, e.g., flatbed scanner260. At step518, client DSM210transmits a request to OS130to load the client DS. At step520, OS130loads a DLL of the client DS from storage of hardware platform132into memory of hardware platform132, specifically into the memory space into which scanner redirection module122. was loaded at step506.

At step522, client DSM210calls the client DS entry of the client DS to transmit a request to the client DS for the name of the default physical scanner. The client DS acquires the name from the physical scanner and transmits the name to client DSM210as a return value of the client DS entry call. At step524, client DSM210receives the name of the default physical scanner from the client DS and returns the name to scanner redirection module122. At step526, scanner redirection module122transmits the name to client scanner module118. After step526, method500ends. After method500, client scanner module118transmits the name of the default physical scanner to agent scanner module167, and agent scanner module167stores the name in the registry of the memory of hardware platform180as scanner name168. The vendor-defined name of the default physical scanner is thus available to application170for displaying to the user via UI286.

FIG.6is a flow diagrams of steps performed by OS130and scanner redirection module122of client computing device110to carry out a method600of acquiring the vendor-defined names of all the physical scanners connected to client computing device110, according to the first embodiment. Method600is triggered by the user selecting to change physical scanners via UI116. At step602, scanner redirection module122receives a request from client scanner module118for names of all the physical scanners. At step604, scanner redirection module122calls client DSM entry212to request client DSM210to load a client DS, e.g., client DS220. At step606, client DSM210transmits a request to OS130to load the client DS. At step608, OS130loads a DLL of the client DS from storage of hardware platform132into memory of hardware platform132, specifically into the memory space into which scanner redirection module122was loaded at step506of method500ofFIG.5.

At step610, client DSM210calls the client DS entry of the client DS to transmit a request to the client DS for the name of the corresponding physical scanner. The client DS acquires the name from the physical scanner and transmits the name to client DSM210as a return value of the client DS entry call. At step612, client DSM210receives the name of the physical scanner from the client DS. At step614client DSM210transmits a request to OS130to free the client DS from the memory of hardware platform132. At step616, OS130frees the DLL of the client DS from the memory of hardware platform132.

At step618, if there is another physical scanner connected to client computing device110, method600returns to step604, and scanner redirection module112requests to load a different client DS that communicates with the other physical scanner, e.g., client DS230. Otherwise, if there are no more physical scanners connected to client computing device110to acquire names from, method600moves to step620. At step620, client DSM210returns any names of physical scanners acquired by client DSM210to scanner redirection module122. At step622, scanner redirection module122transmits the scanner name(s) to client scanner module118to be displayed in UI116, as discussed further below in conjunction withFIG.10. After step622, method600ends.

FIG.7is a flow diagram of steps performed by OS130and MKS process120of client computing device110to carry out a method700of acquiring the vendor-defined name of the default physical scanner, according to the second embodiment. At step702, OS130loads MKS process120from storage of hardware platform132into memory of hardware platform132. At step704, MKS process120transmits a request to OS130to load scanner redirection module122. At step706, OS130loads scanner redirection module122from storage of hardware platform132into memory of hardware platform132, specifically into the memory space into which MKS process120was loaded at step702. At step708, scanner redirection module122transmits a request to OS130to load image capture core320.

At step710, OS130loads image capture core320from storage of hardware platform132into memory of hardware platform132, specifically into the memory space into which scanner redirection module122was loaded at step706. At step712, scanner redirection module122makes an API call to image capture core320to request image capture core320for the name of the default physical scanner, e.g., flatbed scanner260. At step714, image capture core320acquires the scanner name from the physical scanner. At step716, image capture core320returns the name of the default physical scanner to scanner redirection module122. At step718, scanner redirection module122transmits the name to client scanner module118. After step718, method700ends. After method700, client scanner module118transmits the name of the default physical scanner to agent scanner module167, and agent scanner module167stores the name in the registry of the memory of hardware platform180as scanner name168. The vendor-defined name of the default physical scanner is thus available to application170for displaying to the user via UI286.

FIG.8is a flow diagrams of steps performed by scanner redirection module122of client computing device110to carry out a method800of acquiring the vender-defined names of all the physical scanners connected to client computing device110, according to the second embodiment. Method800is triggered by the user selecting to change physical scanners via UI116. At step802, scanner redirection module122receives a request from client scanner module118for names of all the physical scanners. At step804, scanner redirection module122makes an API call to image capture core320to request image capture core320to acquire the name of a physical scanner, e.g., of flatbed scanner260. At step806, image capture core320acquires the scanner name from the physical scanner.

At step808, if there is another physical scanner connected to client computing device110method800returns to step804, and scanner redirection module112makes another API call to image capture core320to request image capture320to acquire the name of the other physical scanner, e.g., of sheet-fed scanner262. Otherwise, if there are no more physical scanners connected to client computing device110to acquire names from, method800moves to step810. At step810, image capture core320returns any names of physical scanners acquired by image capture core320to scanner redirection module122. At step812, scanner redirection module122transmits the scanner name(s) to client scanner module118to be displayed in UI116, as discussed further below in conjunction withFIG.10. After step812, method800ends.

FIG.9is a flow diagram of steps performed by guest OS174and application170of VM164-1to carry out a method900of loading and opening agent DSM270and virtual DS280, according to embodiments. At step902, guest OS174loads application170from shared storage192into memory of hardware platform180. At step904, application170transmits a request to guest OS174to load agent DSM270. At step906, guest OS174loads a DLL of agent DSM270from shared storage192into memory of hardware platform180, specifically into the memory space into which application170was loaded at step902.

At step908, application170calls agent DSM entry272to request agent DSM270to open. At step910, agent DSM270initializes, at which point agent DSM270is available to assist application170in opening virtual DS280. Agent DSM270thus transmits a return value of agent DSM entry272to application170, indicating that agent DSM270is open. At step912, application170calls agent DSM entry272to request agent DSM270to load virtual DS280. At step914, agent DSM270transmits a request to guest OS174to load virtual DS280.

At step916, guest OS174loads a DLL of virtual DS280from shared storage192into memory of hardware platform180, specifically into the memory space into which application170was loaded at step902. At step918, application170calls agent DSM entry272to transmit a request to agent DSM270to open virtual DS280, At step920, agent DSM270opens virtual DS280, at which point virtual DS280is available to assist agent DSM270in transmitting commands to scanner redirection module122. After step920, method900ends.

FIG.10is a flow diagram of steps performed by client scanner module118and agent scanner module167to carry out a method1000of transmitting a name of a selected physical scanner from client computing device110to VM164-1to be stored therein, according to embodiments. At step1002, client scanner module118receives one more vendor-defined physical scanner names from scanner redirection module122. At step1004, client scanner module118generates a display for UI116, including the name(s) received at step1002, and display device140displays UI116to the user.

At step1006, client scanner module118detects a selection of a physical scanner, e.g., upon the user clicking a corresponding radio button with a mouse. At step1008, client scanner module118detects a selection to use the vendor-defined name for the selected physical scanner in the RD session, e.g., upon the user clicking a corresponding box with a mouse. At step1010, client scanner module118transmits the vendor-defined name of the physical scanner to agent scanner module167. At step1012, agent scanner module167stores the transmitted name in the registry of the memory of hardware platform180as scanner name168. After step1012, method1000ends, and the vendor-defined name of the selected physical scanner is available to application170for displaying to the user via UI286.

FIG.11is a flow diagram of steps performed by application170of VM164-1to carry out a method1100of acquiring one or more scanned images from scanner redirection module122of client computing device110, according to embodiments. Method1100is triggered by the user selecting to acquire a scanned image via UI286. At step1102, virtual DS280retrieves scanner name168and generates a selection window of UT286to display scanner name168to the user. Scanner name168may be the name of the default physical scanner received upon the user opening the RD session or the name of a physical scanner selected by the user via scanner module118. Display device140displays UI286in updated RD image142, which is transmitted by RD agent166to RD client114via MKS process120. At step1104, virtual DS280receives a selection of scanner name168via UI286, e.g., upon the user clicking scanner name168, which is a vendor-defined name, and clicking a “Select” button.

At step1106, virtual DS280transmits a message to agent DSM270indicating that scanning is ready. At step1108, agent DSM270reports to application170that scanning is ready. At step1110, application170calls agent DSM entry272to request a scanned image from agent DSM270. At step1112, agent DSM270calls virtual DS entry282to transmit a request to virtual DS280for the scanned image. At step1114, virtual DS280transmits a request for the scanned image to scanner redirection module122via sockets252and254. At step1116, virtual DS280receives the scanned image and a “count” value from scanner redirection module122via sockets252and254. Count is a variable indicating whether there are any pending scanned images yet to be retrieved from a physical scanner. A count value of zero indicates that there are no pending scanned images, while a nonzero count value indicates that there is at least one pending scanned image.

At step1118, virtual DS280transmits the scanned image to agent DSM270as a return value of the call to virtual DS entry282at step1112. Virtual DS280also stores the count value in memory of hardware platform180for later. At step1120, agent DSM270returns the scanned image as a return value of the call to agent DSM entry272at step1110. At step1122, application170calls agent DSM entry272to request agent DSM270for the count value. At step1124, agent DSM270calls virtual DS entry282to transmit a request to virtual DS280for the count value. At step1126, virtual DS280retrieves the count value from memory and transmits the count value to agent DSM270as a return value of the call to virtual DS entry282at step1124. At step1128, agent DSM270reports the count value as a return value of the call to agent DSM entry272at step1122.

At step1130, application170checks if the count value is zero. If the count value is nonzero, method1100returns to step1110, and application170calls agent DSM entry272to request another scanned image from agent DSM270. Otherwise, if the count value is zero, method1100moves to step1132. At step1132, application170calls agent DSM entry272to request agent DSM270to disable virtual DS280. At step1134, agent DSM270calls virtual DS entry282to transmit a request to virtual DS280to disable. At step1136, virtual DS280disables itself such that it is no longer available to assist agent DSM270in transmitting commands to scanner redirection module122via sockets252and254. After step1136, method1100ends.

FIG.12is a flow diagram of steps performed by scanner redirection module122of client computing device110to carry out a method1200of acquiring one or more scanned images from a physical scanner, according to the first embodiment. At step1202, scanner redirection module122receives a request for a scanned image from virtual DS280via sockets252and254. At step1204, scanner redirection module122calls client DSM entry212to request client DSM210to enable one of the client DSs of scanner redirection module122, which corresponds to either the default physical scanner or to a physical scanner the user previously designated via scanner module118, scanner redirection module122having then received an identification of the selected physical scanner from RD client114. For example, method1200will be discussed with reference to client DS230. It should be noted that client DS230must be loaded into memory of hardware platform132by OS130prior to enabling client DS230.

At step1206, client DSM210calls client DS entry232to transmit a request to client DS230to enable. At step1208, client DS230enables the transfer of data from sheet-fed scanner262. It should be noted that client DS230does not show UI234. The user has already selected to scan an image via UI286of virtual1)8280. At step1210, scanner redirection module122calls client DSM entry212to request client DSM210for the scanned image. At step1212, client DSM210calls client DS entry232to transmit a request to client DS230for the scanned image. At step1214, client DS230acquires the scanned image from sheet-fed scanner262.

At step1216, client DS230transmits the scanned image to client DSM210as a return value of the call to client DS entry232at step1212. At step1218, client DSM210reports the scanned image as a return value of the call to client DSM entry212at step1210. At step1220, scanner redirection module122calls client DSM entry212to request client DSM210for a count value. At step1222, client DSM210calls client DS entry232to transmit a request to client DS230for the count value. At step1224, client DS230acquires the count value from sheet-fed scanner262. At step1226, client DS230transmits the count value to client DSM210as a return value of the call to client DS entry232at step1222. At step1228, client DSM210reports the count value as a return value of the call to client DSM entry212at step1220.

At step1230, scanner redirection module122transmits the scanned image and count value to virtual DS280via sockets252and254. At step1232, if the count value is nonzero, which indicates the availability of at least one more scanned image from sheet-fed scanner262, method1200ends. Otherwise, if the count value equals zero, which indicates that there are no more scanned images available from sheet-fed scanner262, method1200moves to step1234. At step1234, scanner redirection module122calls client DSM entry212to request client DSM210to disable client DS230. At step1236, client DSM210calls client DS entry232to transmit a request to client DS230to disable. At step1238, client DS230disables the transfer of data from sheet-fed scanner262. After step1238, method1200ends.

FIG.13is a flow diagram of steps performed by scanner redirection module122of client computing device110to carry out a method1300of acquiring one or more scanned images from a physical scanner, according to the second embodiment. For example, method1300will be discussed with respect to sheet-fed scanner262. At step1302, scanner redirection module122receives a request for a scanned image from virtual DS280via sockets252and254. At step1304, scanner redirection module122makes an API call to image capture core320to request image capture core320for the scanned image. It should be noted that image capture core320must open a scanner session with sheet-fed scanner262before acquiring scanned images therefrom.

At step1306, image capture core320acquires the scanned image from sheet-fed scanner262, which is either the default physical scanner or is a physical scanner the user previously designated via scanner module118, scanner redirection nodule122having then received an identification of sheet-fed scanner262from RD client114. At step1308, image capture core320returns the scanned image to scanner redirection module122. At step1310, scanner redirection module122makes an API call to image capture core320to request image capture core320for a count value. At step1312, image capture core320acquires the count value from sheet-fed scanner262. At step1314, image capture core320returns the count value to scanner redirection module122. At step1316, scanner redirection module122transmits the scanned image and count value to virtual DS280via sockets252and254. After step1316, method1300ends. It should be noted that image capture core320acquires images from sheet-fed scanner262asynchronously. Accordingly, if sheet-fed scanner262scans multiple images, image capture core320performs steps1306and1308to acquire and return multiple scanned images asynchronously.

The embodiments described herein may employ various computer-implemented operations involving data stored in computer systems. For example, these operations may require physical manipulation of physical quantities. Usually, though not necessarily, these quantities are electrical or magnetic signals that can be stored, transferred, combined, compared, or otherwise manipulated. Such manipulations are often referred to in terms such as producing, identifying, determining, or comparing. Any operations described herein that form part of one or more embodiments may be useful machine operations.

One or more embodiments of the invention also relate to a device or an apparatus for performing these operations. The apparatus may be specially constructed for required purposes, or the apparatus may be a general-purpose computer selectively activated or configured by a computer program stored in the computer. Various general-purpose machines may be used with computer programs written in accordance with the teachings herein, or it may be more convenient to construct a more specialized apparatus to perform the required operations. The embodiments described herein may also be practiced with computer system configurations including hand-held devices, microprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, etc.

One or more embodiments of the present invention may be implemented as one or more computer programs or as one or more computer program modules embodied in computer-readable media. The term computer-readable medium refers to any data storage device that can store data that can thereafter be input into a computer system. Computer-readable media may be based on any existing or subsequently developed technology that embodies computer programs in a manner that enables a computer to read the programs. Examples of computer-readable media are hard disk drives (HDDs), SSDs, network-attached storage (NAS) systems, read-only memory (ROM), RAM, compact disks (CDs), digital versatile disks (DVDs), magnetic tapes, and other optical and non-optical data storage devices. A computer-readable medium can also be distributed over a network-coupled computer system so that computer-readable code is stored and executed in a distributed fashion.

Virtualized systems in accordance with the various embodiments may be implemented as hosted embodiments, non-hosted embodiments, or as embodiments that blur distinctions between the two. Furthermore, various virtualization operations may be wholly or partially implemented in hardware. For example, a hardware implementation may employ a look-up table for modification of storage access requests to secure non-disk data. Many variations, additions, and improvements are possible, regardless of the degree of virtualization. The virtualization software can therefore include components of a host, console, or guest OS that perform virtualization functions.

Boundaries between components, operations, and data stores are somewhat arbitrary, and particular operations are illustrated in the context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within the scope of the invention. In general, structures and functionalities presented as separate components in exemplary configurations may be implemented as a combined component. Similarly, structures and functionalities presented as a single component may be implemented as separate components. These and other variations, additions, and improvements may fall within the scope of the appended claims.