Windows 在 C++ 中为每个用户锁定 USB 端口
Windows lock usb port per user in c++
我的软件受 USB 硬件令牌保护,我想实现以下目标:
- 用户应该能够启动任意数量的软件实例
- 如果第一个用户已经 运行 软件,则同一台机器上的第二个用户应该无法启动该应用程序。
所以基本上,如果第一个用户启动软件,我想锁定 USB 端口,这样只有这个用户才能访问它。该软件是用 C++ 编写的,在 Windows >7 或 Windows 服务器 >2008
上 运行
有什么想法吗?
正如 Jonathon 所建议的,您可以使用全局名称对象。检查全局共享内存的示例:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx
进程启动时,应
- 获得 GetUserName (maybe also GetCurrentProcessId).
- 打开命名共享内存,如"Global\MyAppRunningInstances"
- 解析每一行的值,例如:用户名、ProcessId、心跳时间戳...
- 如果它发现另一个具有不同用户名的进程,检查心跳时间戳,也许它早就崩溃了:)(如果那个进程不是唯一的,共享内存映射不会被破坏)
- 如果时间戳指示 "alien" 进程是 运行,您可以退出当前进程并显示一条消息,表明存在另一个用户会话 运行
- 如果未检测到 "alien" 个进程,则当前用户 add/edit 条目。
- 使用时间戳进行定期心跳更新
我的软件受 USB 硬件令牌保护,我想实现以下目标:
- 用户应该能够启动任意数量的软件实例
- 如果第一个用户已经 运行 软件,则同一台机器上的第二个用户应该无法启动该应用程序。
所以基本上,如果第一个用户启动软件,我想锁定 USB 端口,这样只有这个用户才能访问它。该软件是用 C++ 编写的,在 Windows >7 或 Windows 服务器 >2008
上 运行有什么想法吗?
正如 Jonathon 所建议的,您可以使用全局名称对象。检查全局共享内存的示例:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx
进程启动时,应
- 获得 GetUserName (maybe also GetCurrentProcessId).
- 打开命名共享内存,如"Global\MyAppRunningInstances"
- 解析每一行的值,例如:用户名、ProcessId、心跳时间戳...
- 如果它发现另一个具有不同用户名的进程,检查心跳时间戳,也许它早就崩溃了:)(如果那个进程不是唯一的,共享内存映射不会被破坏)
- 如果时间戳指示 "alien" 进程是 运行,您可以退出当前进程并显示一条消息,表明存在另一个用户会话 运行
- 如果未检测到 "alien" 个进程,则当前用户 add/edit 条目。
- 使用时间戳进行定期心跳更新