#include "profile.h"\r
#include "../xkeymacsdll/xkeymacsdll.h"\r
#include "../xkeymacsdll/Utils.h"\r
+#include <Sddl.h>\r
+#include <AclAPI.h>\r
\r
#ifdef _DEBUG\r
#define new DEBUG_NEW\r
\r
DWORD WINAPI CMainFrame::PollMessage(LPVOID)\r
{\r
- HANDLE pipe = CreateNamedPipe(PipeName(PIPENAME_IPC32).GetName(), PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, 1,\r
- sizeof(DWORD), sizeof(IPC32Message), 0, NULL);\r
- if (pipe == INVALID_HANDLE_VALUE) {\r
-#ifdef DEBUG_IPC\r
- CUtils::Log(_T("PollMessage: CreateNamedPipe failed. (%d)"), GetLastError());\r
-#endif\r
+ HANDLE pipe = CreateNamedPipeWithLowIntegrityAccess();\r
+ if (pipe == INVALID_HANDLE_VALUE)\r
return 1;\r
- }\r
for (; ;) {\r
if (ConnectNamedPipe(pipe, NULL) ? FALSE : (GetLastError() != ERROR_PIPE_CONNECTED)) {\r
#ifdef DEBUG_IPC\r
return 0;\r
}\r
\r
+HANDLE CMainFrame::CreateNamedPipeWithLowIntegrityAccess()\r
+{\r
+ LPCTSTR LOW_INTEGRITY_SDDL_SACL = _T("S:(ML;;NW;;;LW)");\r
+ PSECURITY_DESCRIPTOR sd;\r
+ if (!ConvertStringSecurityDescriptorToSecurityDescriptor(LOW_INTEGRITY_SDDL_SACL, SDDL_REVISION_1, &sd, nullptr)) {\r
+#ifdef DEBUG_IPC\r
+ CUtils::Log(_T("ConvertStringSecurityDescriptorToSecurityDescriptor failed. (%d)"), GetLastError());\r
+#endif\r
+ return INVALID_HANDLE_VALUE;\r
+ }\r
+ SECURITY_ATTRIBUTES sa;\r
+ sa.nLength = sizeof(SECURITY_ATTRIBUTES);\r
+ sa.lpSecurityDescriptor = sd;\r
+ sa.bInheritHandle = false;\r
+ HANDLE pipe = CreateNamedPipe(PipeName(PIPENAME_IPC32).GetName(), PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, 1,\r
+ sizeof(DWORD), sizeof(IPC32Message), 0, &sa);\r
+ if (pipe == INVALID_HANDLE_VALUE) {\r
+#ifdef DEBUG_IPC\r
+ CUtils::Log(_T("CreateNamedPipeWithLowIntegrityAccess failed. (%d)"), GetLastError());\r
+#endif\r
+ }\r
+ LocalFree(sd);\r
+ return pipe;\r
+}\r
+\r
void CMainFrame::SetIconData(ICON_TYPE icon, int tip, int on, int off, int reg)\r
{\r
m_hIcon[icon][ON_ICON] = AfxGetApp()->LoadIcon(on);\r