IP Library Granted Patent US 12,657,349
Granted Patent B2
US 12,657,349 · App. 18/467,831 · Granted Jun 16, 2026

Protecting keystrokes in multi-session-enabled systems

Inventors: Xiaoyu Kong (Beijing, CN); YiQun Yun (Beijing, CN); ZhangLin Zhou (Beijing, CN); Yang Yu (Beijing, CN)
Assignee: Omnissa, LLC
G06F21/83G06F21/602
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,657,349
App. No.
18/467,831
Granted
Jun 16, 2026
Kind
B2
Abstract

Encrypting keystroke data in a multi-session-enabled computing device includes receiving a first control message requesting enabling of keystroke encryption for a protected application executing in a first desktop session. The first control message includes application identification information of the protected application. Keystroke encryption is enabled for keystrokes targeting the first desktop session based on receipt of the first control message. Keystroke data sent to the protected application is encrypted while the protected application maintains keyboard focus in the first desktop session. Unencrypted keystroke data is transmitted to another application of a second desktop session while keystroke encryption is enabled for the protected application in the first desktop session.

Claims (43)

1 . A computer-implemented method of encrypting keystroke data in a multi-session-enabled computing device, the method comprising:

maintaining, by a keyboard device driver executing in a kernel global space on the multi-session-enabled computing device, a keyboard-to-session mapping that maps a first keyboard device of a first computer to a first desktop session and a second keyboard device of a second computer to a second desktop session;

receiving a first control message requesting enabling of keystroke encryption for a protected application executing in the first desktop session, the first control message including application identification information of the protected application;

enabling the keystroke encryption for keystrokes targeting the first desktop session based on receipt of the first control message by storing, in a state database residing in the kernel global space, a state record associated with the first desktop session and identifying the protected application;

receiving keystroke data at a keyboard device driver from the first keyboard device and the second keyboard device;

determining, based on the keyboard-to-session mapping that the keystroke data is directed to the first or the second desktop session;

in response to determining that (i) the state record for the first desktop session is present in the state database and that (ii) the protected application identified in the state database has current keyboard focus in the first desktop session at the time of receiving the keystroke data, encrypting the keystroke data sent to the protected application in the first desktop session while the protected application maintains the keyboard focus in the first desktop session; and

transmitting the keystroke data sent to another application of the second desktop session in an unencrypted form while the keystroke encryption is enabled for the protected application in the first desktop session.

2 . The computer-implemented method of claim 1 , wherein the first control message was generated by the protected application based on acquisition of the keyboard focus by the protected application within the first desktop session.

3 . The computer-implemented method of claim 1 , further comprising:

receiving a second control message requesting disabling of the keystroke encryption for the protected application executing in the first desktop session; and

disabling the keystroke encryption for keystrokes targeting the first desktop session based on receipt of the second control message.

4 . The computer-implemented method of claim 1 , wherein the application identification information includes a session identifier, a process identifier, and a thread identifier.

5 . The computer-implemented method of claim 1 , wherein determining that the protected application has current keyboard focus in the first desktop session comprises querying, by a kernel driver associated with the first desktop session, a focus pointer that identifies a thread currently designated to receive keyboard input within the first desktop session, and matching the thread to the application identification information stored in the state record.

6 . A computer system comprising:

a processor; and

a non-transitory computer readable medium having stored thereon program code executable by the processor, the program code causing the processor to:

maintain, by a keyboard device driver executing in a kernel global space on a multi-session-enabled computing device, a keyboard-to-session mapping that maps a first keyboard device of a first computer to a first desktop session and a second keyboard device of a second computer to a second desktop session;

receive, from a protected application executing in the first desktop session, a first control message requesting enabling of keystroke encryption, the first control message including application identification information of the protected application;

enable the keystroke encryption for keystrokes directed to the first desktop session based on receipt of the first control message by storing, in a state database residing in the kernel global space, a state record associated with the first desktop session and identifying the protected application;

receive keystroke data at a keyboard device driver from the first keyboard device and the second keyboard device;

determine, based on the keyboard-to-session mapping that the keystroke data is directed to the first or the second desktop session;

in response to determining that (i) the state record for the first desktop session is present in the state database and that (ii) the protected application identified in the state database has current keyboard focus in the first desktop session at the time of receiving the keystroke data, encrypt the keystroke data sent to the first desktop session while the keystroke encryption is enabled for the first desktop session; and

transmit the keystroke data sent to another application of the second desktop session in an unencrypted form while the keystroke encryption is enabled for the protected application in the first desktop session.

7 . The computer system of claim 6 , wherein the first control message was generated by the protected application based on acquisition of the keyboard focus by the protected application within the first desktop session.

8 . The computer system of claim 6 , wherein the program code further causes the processor to:

receive a second control message requesting disabling of the keystroke encryption for the protected application executing in the first desktop session; and

disable the keystroke encryption for keystrokes targeting the first desktop session based on receipt of the second control message.

9 . The computer system of claim 6 , wherein the application identification information includes a session identifier, a process identifier, and a thread identifier.

10 . The computer system of claim 6 , wherein determining that the protected application has current keyboard focus in the first desktop session comprises querying, by a kernel driver associated with the first desktop session, a focus pointer that identifies a thread currently designated to receive keyboard input within the first desktop session, and matching the thread to the application identification information stored in the state record.

11 . A non-transitory computer-readable storage medium having stored thereon program code executable by a processor, the program code embodying a method comprising:

maintaining, by a keyboard device driver executing in a kernel global space on a multi-session-enabled computing device, a keyboard-to-session mapping that maps a first keyboard device of a first computer to a first desktop session and a second keyboard device of a second computer to a second desktop session;

receiving a first control message requesting enabling of keystroke encryption for a protected application executing in the first desktop session, the first control message including application identification information of the protected application;

enabling the keystroke encryption for keystrokes targeting the first desktop session based on receipt of the first control message by storing, in a state database residing in the kernel global space, a state record associated with the first desktop session and identifying the protected application;

receiving keystroke data at a keyboard device driver from the first keyboard device and the second keyboard device;

determining, based on the keyboard-to-session mapping that the keystroke data is directed to the first or the second desktop session;

in response to determining that (i) the state record for the first desktop session is present in the state database and that (ii) the protected application identified in the state database has current keyboard focus in the first desktop session at the time of receiving the keystroke data, encrypting the keystroke data sent to the protected application in the first desktop session while the protected application maintains the keyboard focus in the first desktop session; and

transmitting the keystroke data sent to another application of the second desktop session in an unencrypted form while the keystroke encryption is enabled for the protected application in the first desktop session.

12 . The non-transitory computer-readable storage medium of claim 11 , wherein the first control message was generated by the protected application based on acquisition of the keyboard focus by the protected application within the first desktop session.

13 . The non-transitory computer-readable storage medium of claim 11 , wherein the method further comprises:

receiving a second control message requesting disabling of the keystroke encryption for the protected application executing in the first desktop session; and

disabling the keystroke encryption for keystrokes targeting the first desktop session based on receipt of the second control message.

14 . The non-transitory computer-readable storage medium of claim 11 , wherein determining that the protected application has current keyboard focus in the first desktop session comprises querying, by a kernel driver associated with the first desktop session, a focus pointer that identifies a thread currently designated to receive keyboard input within the first desktop session, and matching the thread to the application identification information stored in the state record.

Assignments (4)
PATENT ASSIGNMENT Recorded Aug 5, 2024
From: VMWARE LLC
To: OMNISSA, LLC
Reel/Frame 068327/0365 →
SECURITY INTEREST Recorded Jul 3, 2024
From: OMNISSA, LLC
To: UBS AG, STAMFORD BRANCH
Reel/Frame 068118/0004 →
CHANGE OF NAME Recorded Apr 25, 2024
From: VMWARE, INC.
To: VMWARE LLC
Reel/Frame 067239/0402 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 15, 2023
From: KONG, XIAOYU; YUN, YIQUN; ZHOU, ZHANGLIN; YU, YANG
To: VMWARE, INC.
Reel/Frame 064916/0407 →
Priority Claims (1)
WO PCT/CN2023/107426 · Jul 14, 2023 · international
Continuity (1)
Related Publication 20250021703A1 · Jan 16, 2025
References Cited (70)
US 6677933B1 · Yogaratnam · 2004 [cited by examiner]
US 7774595B2 · Chung Geon · 2010 [cited by examiner]
US 11550922B2 · Soman et al. · 2023 [cited by applicant]
US 12032726B1 · Tas · 2024 [cited by examiner]
US 20070013673A1 · Minari · 2007 [cited by examiner]
US 20070182714A1 · Pemmaraju · 2007 [cited by examiner]
US 20080028441A1 · Novoa · 2008 [cited by examiner]
US 20090125646A1 · Rosenan · 2009 [cited by examiner]
US 20090296928A1 · Matsumoto et al. · 2009 [cited by applicant]
US 20100195825A1 · Cini · 2010 [cited by applicant]
US 20120079282A1 · Lowenstein · 2012 [cited by applicant]
US 20150135200A1 · Pajuelo · 2015 [cited by examiner]
US 20160371472A1 · Walsh · 2016 [cited by applicant]
US 20170104597A1 · Negi et al. · 2017 [cited by applicant]
US 20170286141A1 · Adler et al. · 2017 [cited by applicant]
US 20180026947A1 · Haworth et al. · 2018 [cited by applicant]
US 20190370013A1 · Katchapalayam · 2019 [cited by applicant]
US 20200042749A1 · Richardson · 2020 [cited by examiner]
US 20200104538A1 · Summers et al. · 2020 [cited by applicant]
US 20210216644A1 · Soman et al. · 2021 [cited by applicant]
US 20220092221A1 · Scillieri · 2022 [cited by examiner]
US 20220140995A1 · Gehtman · 2022 [cited by examiner]
US 20220245287A1 · Fernandez · 2022 [cited by examiner]
US 20230013844A1 · Gardiner · 2023 [cited by examiner]
US 20240249033A1 · Cook · 2024 [cited by examiner]
KR 20020048313A · 2002 [cited by applicant]
KR 20040009575A · 2004 [cited by applicant]
WO 2018078212A1 · 2018 [cited by applicant]
Unknown, “Keyboard Input Overview”, Microsoft, Apr. 3, 2023, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input, 21 pages. [cited by applicant]
Oglesby, Ron, “A look at the VMware Horizon key logger blocker—Ron's Cool Feature of the Week”, VMware, Jan. 27, 2022, retrieved Sep. 15, 2023, https://blogs.vmware.com/euc/2022/01/a-look-at-the-vmware-horizon-key-logge… [cited by applicant]
Lohr et al., “Windows Enterprise multi-session FAQ”, Microsoft, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/azure/virtual-desktop/windows-multisession-faq, 7 pages. [cited by applicant]
Walker et al., “Fast User Switching Article”, Microsoft, Jan. 7, 2021, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/windows/win32/shell/fast-user-switching, 2 pages. [cited by applicant]
Marcho, Craig, “Application Compatibility—Session 0 Isolation”, First published on TECHNET, Apr. 27, 2007, retrieved Sep. 15, 2023, https://techcommunity.microsoft.com/t5/ask-the-performance-team/application-compatibili… [cited by applicant]
Montoya et al., “Welcome to Remote Desktop Services Article”, Microsoft Dec. 2, 2021, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/welcome-to-rds, 2 pages. [cited by applicant]
Lohr et al., “Remote Desktop Services roles”, Microsoft, Sep. 20, 2021, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/rds-roles, 5 pages. [cited by applicant]
Viviano et al., “I/O request packets”, Microsoft, Dec. 14, 2021, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/i-o-request-packets, 2 pages. [cited by applicant]
Russinovich et al., “Windows Internals Part 1”, Microsoft, 6th Edition, copyright 2012, retrieved Sep. 15, 2023, https://repo.zenk-security.com/Linux%20et%20systemes%20d.exploitations/Windows%20Internals%20Part%201_6th%… [cited by applicant]
Unknown, “Machine code”, Wikipedia, retrieved Sep. 15, 2023, https://en.wikipedia.org/wiki/Machine_code, 8 pages. [cited by applicant]
Unknown, “x86 instruction listings”, Wikipedia, retrieved Sep. 15, 2023, https://en.wikipedia.org/wiki/X86_instruction_listings, 74 pages. [cited by applicant]
Unknown, “X86 Opcode and Instruction Reference Home”, retrieved Sep. 15, 2023, http://ref.x86asm.net/coder32.html#xE8, 7 pages. [cited by applicant]
Unknown, “Function pointer”, Wikipedia, retrieved Sep. 15, 2023, https://en.wikipedia.org/wiki/Function_pointer, 7 pages. [cited by applicant]
Russinovich et al., “Windows Internals Part s”, Microsoft, 6th Edition, copyright 2012, retrieved Sep. 15, 2023, https://repo.zenk-security.com/Linux%20et%20systemes%20d.exploitations/Windows%20Internals%20Part% 202_6th… [cited by applicant]
Pietrek, Matt, “Inside Windows an In-Depth Look into the Win32 Portable Executable File Format, Part 2”, Microsoft Oct. 23, 2019, retrieved Sep. 15, 2023, https://learn.microsoft.com/en-us/archive/msdn-magazine/2002/mar… [cited by applicant]
Unknown, “Dynamic-link library”, Wikipedia, retrieved Sep. 15, 2023, https://en.wikipedia.org/wiki/Dynamic-link_library#Explicit_run-time_linking, 11 pages. [cited by applicant]
Unknown, “WM_SETFOCUS message”, https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-setfocus, May 30, 2018; retrieved on Feb. 9, 2023, 2 pages. [cited by applicant]
Unknown, “Virtual-Key Codes”, https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes, May 31, 2018; retrieved on Feb. 9, 2023, 19 pages. [cited by applicant]
Unknown, “Window Messages”, https://docs.microsoft.com/en-us/windows/desktop/leamwin32/window-messages, May 31, 2018; retrieved on Mar. 2, 2020, 5 pages. [cited by applicant]
Unknown, “WM_KEYDOWN message”, https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-keydown, May 30, 2018; retrieved on Feb. 9, 2023, 3 pages. [cited by applicant]
Unknown, “WM_KILLFOCUS message”, https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-killfocus, May 31, 2018; retrieved on Feb. 9, 2023, 2 pages. [cited by applicant]
Ogelsby, R., “A look at the VMware Horizon key logger blocker—Ron's Cool Feature of the Week ”, https://blogs.vmware.com/euc/2022/01/a-look-at-the-vmware-horizon-key-logger-blocker-rons-cool-feature-of-the-week.html, VM… [cited by applicant]
Hex-Rays, “IDA Pro”, https://hex-rays.com/ida-pro/, Hex-Rays, Copyright 2023, retrieved on Feb. 8, 2023, 12 pages. [cited by applicant]
Hex-Rays, “IDA Freeware”, https://hex-rays.com/ida-free/, Hex-Rays, Copyright 2023, retrieved on Feb. 8, 2023, 8 pages. [cited by applicant]
Hex-Rays, “Interactive Operation”, https://hex-rays.com/ida-free/, Hex-Rays, Copyright 2023, retrieved on Feb. 8, 2023, 9 pages. [cited by applicant]
Unknown, “CryptMT. The Cryptographic Mersenne Twister”, http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/CRYPTMT/index.html, Japan Society for the Promotion of Science, retrieved on Feb. 8, 2023, 2 pages. [cited by applicant]
Unknown, “CryptMT”, https://en.wikipedia.org/wiki/CryptMT, Wikipedia, retrieved on Feb. 8, 2023, 1 page. [cited by applicant]
Unknown, “Advanced Encryption Standard”, https://en.wikipedia.org/wiki/Advanced_Encryption_Standard, Wikipedia, retrieved on Feb. 8, 2023, 14 pages. [cited by applicant]
Unknown, “AES implementations”, https://en.wikipedia.org/wiki/AES_implementations, Wikipedia, retrieved on Feb. 8, 2023, 6 pages. [cited by applicant]
Unknown, “Keyboard_Input_Data structure (ntddkbd.h)”, https://learn.microsoft.com/en-us/windows/win32/api/ntddkbd/ns-ntddkbd-keyboard_input_data, Microsoft, Aug. 3, 2021, Retrieved on Feb. 9, 2023, 2 pages. [cited by applicant]
Unknown, “Block cipher mode of operation”, https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation, Wikipedia, retrieved on Feb. 9, 2023, 20 pages. [cited by applicant]
Unknown, “Stream Cipher”, https://en.wikipedia.org/wiki/Stream_cipher, Wikipedia, retrieved on Feb. 9, 2023, 7 pages. [cited by applicant]
Unknown, “Block cipher”, https://en.wikipedia.org/wiki/Block_cipher, Wikipedia, retrieved on Feb. 9, 2023, 16 pages. [cited by applicant]
Unknown, “GDES”, https://en.wikipedia.org/wiki/GDES, Wikipedia, retrieved on Feb. 9, 2023, 1 page. [cited by applicant]
Unknown, “Lucifer (cipher)”, https://en.wikipedia.org/wiki/Lucifer_(cipher), Wikipedia, retrieved on Feb. 9, 2023, 2 pages. [cited by applicant]
Unknown, “Madryga”, https://en.wikipedia.org/wiki/Madryga, Wikipedia, retrieved on Feb. 9, 2023, 2 pages. [cited by applicant]
Unknown, “Simon (cipher)”, https://en.wikipedia.org/wiki/Simon_(cipher), Wikipedia, retrieved on Feb. 9, 2023, 6 pages. [cited by applicant]
Unknown, “Speck (cipher)”, https://en.wikipedia.org/wiki/Speck_(cipher), Wikipedia, retrieved on Feb. 9, 2023, 7 pages. [cited by applicant]
Unknown, “Chosen-plaintext attack”, https://en.wikipedia.org/wiki/Chosen-plaintext_attack, Wikipedia, retrieved on Feb. 9, 2023, 4 pages. [cited by applicant]
Unknown, “Chosen-ciphertext attack”, https://en.wikipedia.org/wiki/Chosen-ciphertext_attack, Wikipedia, retrieved on Feb. 9, 2023, 3 pages. [cited by applicant]
Unknown, “Interactive Operation”, Hex-Rays, copyright 2023, retrieved Mar. 26, 2023, https://www.hex-rays.com/products/decompiler/manual/interactive.shtml, 8 pages. [cited by applicant]
Unknown, “Hash Function Prospector”, GitHub, Inc., copyright 2023, https://github.com/skeeto/hash-prospector, 10 pages. [cited by applicant]