LibLogicalAccess  2.5.0
An Open Source RFID Library
Loading...
Searching...
No Matches
keyboardreaderprovider.hpp
Go to the documentation of this file.
1
7#ifndef LOGICALACCESS_READERKEYBOARD_PROVIDER_HPP
8#define LOGICALACCESS_READERKEYBOARD_PROVIDER_HPP
9
12
13#include <string>
14#include <vector>
15#include <map>
16
18#include <logicalaccess/plugins/readers/keyboard/lla_readers_private_keyboard_api.hpp>
19
20namespace logicalaccess
21{
22#define READER_KEYBOARD "Keyboard"
23
24#ifdef _WINDOWS
25#define SessionHookMap std::map<DWORD, DWORD>
26
27DWORD WINAPI WatchThread(LPVOID lpThreadParameter);
28#endif
29
33class LLA_READERS_PRIVATE_KEYBOARD_API KeyboardReaderProvider : public ReaderProvider
34{
35 protected:
40
41 public:
46
50 void release() override;
51
56 static std::shared_ptr<KeyboardReaderProvider> getSingletonInstance();
57
62 std::string getRPType() const override
63 {
64 return READER_KEYBOARD;
65 }
66
71 std::string getRPName() const override
72 {
73 return "Keyboard";
74 }
75
80 bool refreshReaderList() override;
81
86 const ReaderList &getReaderList() override
87 {
88 return d_readers;
89 }
90
95 std::shared_ptr<ReaderUnit> createReaderUnit() override;
96
97#ifdef _WINDOWS
98 DWORD launchHook(HANDLE hUserTokenDup = nullptr) const;
99
100 DWORD launchHookIntoDifferentSession(DWORD destSessionId) const;
101
102 protected:
103 void generateSharedGuid();
104
105 long createKbdFileMapping();
106
107 void freeKbdFileMapping();
108
109 static void fillSecurityDescriptor(LPSECURITY_ATTRIBUTES sa, PACL pACL);
110
111 long createKbdEvent();
112
113 void freeKbdEvent();
114
115 void startAndWatchOnActiveConsole();
116
117 void stopWatchingActiveConsole();
118
119 static HANDLE
120 retrieveWinlogonUserToken(const DWORD destSessionId,
121 const SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
122 const TOKEN_TYPE TokenType);
123
124 static std::string getHookPath();
125
126 std::string getHookArguments() const;
127
128 static bool is64BitWindows();
129
130 static bool terminateProcess(DWORD dwProcessId, UINT uExitCode);
131#endif
132 protected:
137
138#ifdef _WINDOWS
139 HANDLE shKeyboard;
140
141 HANDLE hWatchThrd;
142
143 std::string sharedGuid;
144
145 public:
147
148 HANDLE hKbdEvent;
149
150 HANDLE hKbdEventProcessed;
151
152 HANDLE hHostEvent;
153
154 HANDLE hStillAliveEvent;
155
156 SessionHookMap processHookedSessions;
157
158 bool watchSessions;
159#endif
160};
161}
162
163#endif /* LOGICALACCESS_READERKEYBOARD_PROVIDER_HPP */
Keyboard Reader Provider class.
Definition: keyboardreaderprovider.hpp:34
std::string getRPName() const override
Get the reader provider name.
Definition: keyboardreaderprovider.hpp:71
const ReaderList & getReaderList() override
Get reader list for this reader provider.
Definition: keyboardreaderprovider.hpp:86
ReaderList d_readers
The reader list.
Definition: keyboardreaderprovider.hpp:136
std::string getRPType() const override
Get the reader provider type.
Definition: keyboardreaderprovider.hpp:62
A Reader Provider base class. It provide a available list of specific reader kind.
Definition: readerprovider.hpp:28
logicalaccess::KeyboardSharedStruct * sKeyboard
Definition: islogkbdhook.cpp:32
HANDLE hKbdEventProcessed
Definition: islogkbdhook.cpp:34
HANDLE hStillAliveEvent
Definition: islogkbdhook.cpp:36
HANDLE shKeyboard
Definition: islogkbdhook.cpp:31
HANDLE hKbdEvent
Definition: islogkbdhook.cpp:33
HANDLE hHostEvent
Definition: islogkbdhook.cpp:35
#define READER_KEYBOARD
Definition: keyboardreaderprovider.hpp:22
Keyboard Reader unit.
Logging header.
Definition: asn1.hpp:9
std::vector< std::shared_ptr< ReaderUnit > > ReaderList
A reader unit list.
Definition: readerprovider.hpp:18
Reader provider.
Definition: keyboardsharedstruct.hpp:33