winss
windows_interface.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2016-2017 Morgan Stanley
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef LIB_WINSS_WINDOWS_INTERFACE_HPP_
18 #define LIB_WINSS_WINDOWS_INTERFACE_HPP_
19 
20 #include <windows.h>
21 #include <wincrypt.h>
22 #include <rpc.h>
23 #include <memory>
24 
25 #define WINDOWS winss::WindowsInterface::GetInstance()
26 
27 namespace winss {
33  protected:
37  static std::shared_ptr<WindowsInterface> instance;
38 
39  public:
44  WindowsInterface(const WindowsInterface&) = delete;
50  virtual bool CreateProcess(const char* application_name,
51  char* command_line, SECURITY_ATTRIBUTES* proc_attr,
52  SECURITY_ATTRIBUTES* thread_atttr, bool inherit_handles,
53  DWORD creation_flags, void* env, const char* current_dir,
54  STARTUPINFO* startup_info, PROCESS_INFORMATION* proc_info) const;
55 
59  virtual HANDLE CreateEvent(SECURITY_ATTRIBUTES* event_attributes,
60  bool manual_reset, bool initial_state, char* name) const;
61 
65  virtual bool CreatePipe(PHANDLE read_pipe, PHANDLE write_pipe,
66  LPSECURITY_ATTRIBUTES pipe_attr, DWORD size) const;
67 
71  virtual HANDLE CreateNamedPipe(char* name, DWORD open_mode,
72  DWORD pipe_mode, DWORD max_instances, DWORD out_buffer_size,
73  DWORD in_buffer_size, DWORD default_time_out,
74  LPSECURITY_ATTRIBUTES security_attributes) const;
75 
79  virtual HANDLE CreateFile(char* file_name, DWORD desired_access,
80  DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes,
81  DWORD creation_disposition, DWORD flags_and_attributes,
82  HANDLE template_file) const;
83 
87  virtual HANDLE CreateMutex(LPSECURITY_ATTRIBUTES attributes,
88  bool initial_owner, LPCTSTR name) const;
89 
93  virtual HANDLE OpenMutex(DWORD desired_access, bool inherit,
94  LPCTSTR name) const;
95 
99  virtual bool SetEvent(HANDLE handle) const;
100 
104  virtual bool ResetEvent(HANDLE handle) const;
105 
109  virtual bool ConnectNamedPipe(HANDLE handle,
110  LPOVERLAPPED overlapped) const;
111 
115  virtual bool DisconnectNamedPipe(HANDLE handle) const;
116 
120  virtual bool GetOverlappedResult(HANDLE handle, LPOVERLAPPED overlapped,
121  LPDWORD bytes, BOOL wait) const;
122 
126  virtual bool ReadFile(HANDLE handle, LPVOID buffer, DWORD to_read,
127  LPDWORD read, LPOVERLAPPED overlapped) const;
128 
132  virtual bool WriteFile(HANDLE handle, LPCVOID buffer, DWORD to_write,
133  LPDWORD written, LPOVERLAPPED overlapped) const;
134 
138  virtual DWORD WaitForSingleObject(HANDLE handle, DWORD timeout) const;
139 
143  virtual DWORD WaitForMultipleObjects(DWORD handles_count,
144  const HANDLE* handles, bool wait_all, DWORD timeout) const;
145 
149  virtual bool DuplicateHandle(HANDLE source_process_handle,
150  HANDLE source_handle, HANDLE target_process_handle,
151  LPHANDLE target_handle, DWORD desired_access,
152  bool inherit_handle,
153  DWORD options) const;
154 
158  virtual bool SetHandleInformation(HANDLE object, DWORD mask,
159  DWORD flags) const;
160 
164  virtual HANDLE GetStdHandle(DWORD std_handle) const;
165 
169  virtual bool ReleaseMutex(HANDLE mutex) const;
170 
174  virtual bool CloseHandle(HANDLE handle) const;
175 
179  virtual bool GenerateConsoleCtrlEvent(DWORD ctrl_event,
180  DWORD proc_group_id) const;
181 
185  virtual bool GetExitCodeProcess(HANDLE handle, DWORD* exit_code) const;
186 
190  virtual HANDLE GetCurrentProcess() const;
191 
195  virtual bool TerminateProcess(HANDLE process, UINT exit_code) const;
196 
200  virtual DWORD GetLastError() const;
201 
205  virtual bool SetEnvironmentVariable(LPCTSTR name, LPCTSTR value) const;
206 
210  virtual DWORD GetEnvironmentVariable(LPCTSTR name, LPTSTR buffer,
211  DWORD size) const;
212 
216  virtual DWORD ExpandEnvironmentStrings(LPCTSTR src, LPTSTR dst,
217  DWORD size) const;
218 
222  virtual LPTCH GetEnvironmentStrings() const;
223 
227  virtual bool FreeEnvironmentStrings(LPTCH lpszEnvironmentBlock) const;
228 
232  virtual bool SetConsoleCtrlHandler(PHANDLER_ROUTINE handler,
233  bool add) const;
234 
238  virtual RPC_STATUS UuidCreateSequential(GUID* uuid) const;
239 
243  virtual RPC_STATUS UuidCreateNil(GUID* uuid) const;
244 
248  virtual RPC_STATUS UuidCompare(GUID* uuid1, GUID* uuid2,
249  RPC_STATUS* status) const;
250 
254  virtual RPC_STATUS UuidToString(const GUID* uuid,
255  unsigned char** string_uuid) const;
256 
260  virtual RPC_STATUS UuidFromString(unsigned char* string_uuid,
261  GUID* uuid) const;
262 
266  virtual RPC_STATUS RpcStringFree(unsigned char** rpc_string) const;
267 
271  virtual bool CryptAcquireContext(HCRYPTPROV* csp, LPCTSTR container,
272  LPCTSTR provider, DWORD type, DWORD flags) const;
273 
277  virtual bool CryptCreateHash(HCRYPTPROV csp, ALG_ID algorithm,
278  HCRYPTKEY key, DWORD flags, HCRYPTHASH* hash) const;
279 
283  virtual bool CryptHashData(HCRYPTHASH hash, unsigned char* data,
284  DWORD length, DWORD flags) const;
285 
289  virtual bool CryptGetHashParam(HCRYPTHASH hash, DWORD param,
290  unsigned char* data, DWORD* length, DWORD flags) const;
291 
295  virtual bool CryptDestroyHash(HCRYPTHASH hash) const;
296 
300  virtual bool CryptReleaseContext(HCRYPTPROV csp, DWORD flags) const;
301 
307  static const WindowsInterface& GetInstance();
308 
310  WindowsInterface& operator=(const WindowsInterface&) = delete;
313 };
314 } // namespace winss
315 
316 #endif // LIB_WINSS_WINDOWS_INTERFACE_HPP_
virtual RPC_STATUS UuidCompare(GUID *uuid1, GUID *uuid2, RPC_STATUS *status) const
UuidCompare
Definition: windows_interface.cpp:204
virtual DWORD GetEnvironmentVariable(LPCTSTR name, LPTSTR buffer, DWORD size) const
GetEnvironmentVariable
Definition: windows_interface.cpp:172
virtual bool CryptGetHashParam(HCRYPTHASH hash, DWORD param, unsigned char *data, DWORD *length, DWORD flags) const
CryptGetHashParam
Definition: windows_interface.cpp:239
virtual bool CryptReleaseContext(HCRYPTPROV csp, DWORD flags) const
CryptReleaseContext
Definition: windows_interface.cpp:248
virtual HANDLE OpenMutex(DWORD desired_access, bool inherit, LPCTSTR name) const
OpenMutex
Definition: windows_interface.cpp:72
virtual bool CreatePipe(PHANDLE read_pipe, PHANDLE write_pipe, LPSECURITY_ATTRIBUTES pipe_attr, DWORD size) const
CreatePipe
Definition: windows_interface.cpp:43
virtual HANDLE CreateFile(char *file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file) const
CreateFile
Definition: windows_interface.cpp:57
virtual HANDLE CreateEvent(SECURITY_ATTRIBUTES *event_attributes, bool manual_reset, bool initial_state, char *name) const
CreateEvent
Definition: windows_interface.cpp:36
virtual DWORD WaitForSingleObject(HANDLE handle, DWORD timeout) const
WaitForSingleObject
Definition: windows_interface.cpp:109
virtual HANDLE GetCurrentProcess() const
GetCurrentProcess
Definition: windows_interface.cpp:154
virtual bool SetEvent(HANDLE handle) const
SetEvent
Definition: windows_interface.cpp:77
virtual RPC_STATUS UuidToString(const GUID *uuid, unsigned char **string_uuid) const
UuidToString
Definition: windows_interface.cpp:209
virtual HANDLE CreateNamedPipe(char *name, DWORD open_mode, DWORD pipe_mode, DWORD max_instances, DWORD out_buffer_size, DWORD in_buffer_size, DWORD default_time_out, LPSECURITY_ATTRIBUTES security_attributes) const
CreateNamedPipe
Definition: windows_interface.cpp:48
virtual bool FreeEnvironmentStrings(LPTCH lpszEnvironmentBlock) const
FreeEnvironmentStrings
Definition: windows_interface.cpp:186
virtual bool CreateProcess(const char *application_name, char *command_line, SECURITY_ATTRIBUTES *proc_attr, SECURITY_ATTRIBUTES *thread_atttr, bool inherit_handles, DWORD creation_flags, void *env, const char *current_dir, STARTUPINFO *startup_info, PROCESS_INFORMATION *proc_info) const
CreateProcess
Definition: windows_interface.cpp:26
virtual bool SetConsoleCtrlHandler(PHANDLER_ROUTINE handler, bool add) const
SetConsoleCtrlHandler
Definition: windows_interface.cpp:191
virtual RPC_STATUS RpcStringFree(unsigned char **rpc_string) const
RpcStringFree
Definition: windows_interface.cpp:219
virtual bool DuplicateHandle(HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, LPHANDLE target_handle, DWORD desired_access, bool inherit_handle, DWORD options) const
DuplicateHandle
Definition: windows_interface.cpp:119
Definition: case_ignore.hpp:23
virtual RPC_STATUS UuidCreateNil(GUID *uuid) const
UuidCreateNil
Definition: windows_interface.cpp:200
virtual bool SetEnvironmentVariable(LPCTSTR name, LPCTSTR value) const
SetEnvironmentVariable
Definition: windows_interface.cpp:167
Wraps the windows functions as an interface so that they can be easily mocked and tested...
Definition: windows_interface.hpp:32
WindowsInterface & operator=(const WindowsInterface &)=delete
No copy.
virtual bool CloseHandle(HANDLE handle) const
CloseHandle
Definition: windows_interface.cpp:140
virtual bool ReleaseMutex(HANDLE mutex) const
ReleaseMutex
Definition: windows_interface.cpp:136
WindowsInterface()
Create a new Windows interface.
Definition: windows_interface.hpp:43
virtual bool GetExitCodeProcess(HANDLE handle, DWORD *exit_code) const
GetExitCodeProcess
Definition: windows_interface.cpp:149
virtual DWORD GetLastError() const
GetLastError
Definition: windows_interface.cpp:163
virtual RPC_STATUS UuidFromString(unsigned char *string_uuid, GUID *uuid) const
UuidFromString
Definition: windows_interface.cpp:214
virtual bool ReadFile(HANDLE handle, LPVOID buffer, DWORD to_read, LPDWORD read, LPOVERLAPPED overlapped) const
ReadFile
Definition: windows_interface.cpp:99
virtual LPTCH GetEnvironmentStrings() const
GetEnvironmentStrings
Definition: windows_interface.cpp:182
virtual bool GenerateConsoleCtrlEvent(DWORD ctrl_event, DWORD proc_group_id) const
GenerateConsoleCtrlEvent
Definition: windows_interface.cpp:144
virtual DWORD WaitForMultipleObjects(DWORD handles_count, const HANDLE *handles, bool wait_all, DWORD timeout) const
WaitForMultipleObjects
Definition: windows_interface.cpp:114
virtual HANDLE CreateMutex(LPSECURITY_ATTRIBUTES attributes, bool initial_owner, LPCTSTR name) const
CreateMutex
Definition: windows_interface.cpp:67
virtual RPC_STATUS UuidCreateSequential(GUID *uuid) const
UuidCreateSequential
Definition: windows_interface.cpp:196
static const WindowsInterface & GetInstance()
Gets the Wdinows interface instance.
Definition: windows_interface.cpp:253
virtual bool DisconnectNamedPipe(HANDLE handle) const
ConnectNamedPipe
Definition: windows_interface.cpp:90
virtual bool ConnectNamedPipe(HANDLE handle, LPOVERLAPPED overlapped) const
ConnectNamedPipe
Definition: windows_interface.cpp:85
virtual bool CryptHashData(HCRYPTHASH hash, unsigned char *data, DWORD length, DWORD flags) const
CryptHashData
Definition: windows_interface.cpp:234
virtual bool TerminateProcess(HANDLE process, UINT exit_code) const
TerminateProcess
Definition: windows_interface.cpp:158
virtual bool CryptCreateHash(HCRYPTPROV csp, ALG_ID algorithm, HCRYPTKEY key, DWORD flags, HCRYPTHASH *hash) const
CryptCreateHash
Definition: windows_interface.cpp:229
virtual bool WriteFile(HANDLE handle, LPCVOID buffer, DWORD to_write, LPDWORD written, LPOVERLAPPED overlapped) const
WriteFile
Definition: windows_interface.cpp:104
virtual DWORD ExpandEnvironmentStrings(LPCTSTR src, LPTSTR dst, DWORD size) const
ExpandEnvironmentStrings
Definition: windows_interface.cpp:177
virtual bool ResetEvent(HANDLE handle) const
ResetEvent
Definition: windows_interface.cpp:81
virtual bool SetHandleInformation(HANDLE object, DWORD mask, DWORD flags) const
SetHandleInformation
Definition: windows_interface.cpp:127
virtual bool CryptAcquireContext(HCRYPTPROV *csp, LPCTSTR container, LPCTSTR provider, DWORD type, DWORD flags) const
CryptAcquireContext
Definition: windows_interface.cpp:224
static std::shared_ptr< WindowsInterface > instance
A singleton Windows instance.
Definition: windows_interface.hpp:37
virtual bool GetOverlappedResult(HANDLE handle, LPOVERLAPPED overlapped, LPDWORD bytes, BOOL wait) const
GetOverlappedResult
Definition: windows_interface.cpp:94
virtual bool CryptDestroyHash(HCRYPTHASH hash) const
CryptDestroyHash
Definition: windows_interface.cpp:244
virtual HANDLE GetStdHandle(DWORD std_handle) const
GetStdHandle
Definition: windows_interface.cpp:132