Commit 83537916 authored by Matthew Metnetsky's avatar Matthew Metnetsky

Fix issue 335

By assigning a SECURITY_DESCRIPTOR to the event we gain the ability to
share it between service and console programs. We also added
EVENT_MODIFY_STATE as a requirement to OpenEvent so we can SetEvent later
in the method.
parent 9be0c7e4
...@@ -233,6 +233,14 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) ...@@ -233,6 +233,14 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_)
return 0; return 0;
#elif defined ZMQ_HAVE_WINDOWS #elif defined ZMQ_HAVE_WINDOWS
SECURITY_DESCRIPTOR sd = {0};
SECURITY_ATTRIBUTES sa = {0};
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, 0, FALSE);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = &sd;
// This function has to be in a system-wide critical section so that // This function has to be in a system-wide critical section so that
// two instances of the library don't accidentally create signaler // two instances of the library don't accidentally create signaler
...@@ -241,9 +249,9 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) ...@@ -241,9 +249,9 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_)
// Note that if the event object already exists, the CreateEvent requests // Note that if the event object already exists, the CreateEvent requests
// EVENT_ALL_ACCESS access right. If this fails, we try to open // EVENT_ALL_ACCESS access right. If this fails, we try to open
// the event object asking for SYNCHRONIZE access only. // the event object asking for SYNCHRONIZE access only.
HANDLE sync = CreateEvent (NULL, FALSE, TRUE, TEXT ("zmq-signaler-port-sync")); HANDLE sync = CreateEvent (&sa, FALSE, TRUE, TEXT ("zmq-signaler-port-sync"));
if (sync == NULL && GetLastError () == ERROR_ACCESS_DENIED) if (sync == NULL && GetLastError () == ERROR_ACCESS_DENIED)
sync = OpenEvent (SYNCHRONIZE, FALSE, TEXT ("zmq-signaler-port-sync")); sync = OpenEvent (SYNCHRONIZE | EVENT_MODIFY_STATE, FALSE, TEXT ("zmq-signaler-port-sync"));
win_assert (sync != NULL); win_assert (sync != NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment