diff --git a/src/libipc/platform/win/get_sa.h b/src/libipc/platform/win/get_sa.h index 30295db..a81eed2 100644 --- a/src/libipc/platform/win/get_sa.h +++ b/src/libipc/platform/win/get_sa.h @@ -5,32 +5,31 @@ namespace ipc { namespace detail { +struct sa_initiator { + SECURITY_DESCRIPTOR sd_; + SECURITY_ATTRIBUTES sa_; + bool succ_ = false; + + template + sa_initiator(Logger const &log) { + if (!::InitializeSecurityDescriptor(&sd_, SECURITY_DESCRIPTOR_REVISION)) { + log.error("fail InitializeSecurityDescriptor[", static_cast(::GetLastError()), "]"); + return; + } + if (!::SetSecurityDescriptorDacl(&sd_, TRUE, NULL, FALSE)) { + log.error("fail SetSecurityDescriptorDacl[", static_cast(::GetLastError()), "]"); + return; + } + sa_.nLength = sizeof(SECURITY_ATTRIBUTES); + sa_.bInheritHandle = FALSE; + sa_.lpSecurityDescriptor = &sd_; + succ_ = true; + } +}; + inline LPSECURITY_ATTRIBUTES get_sa() { LIBIPC_LOG(); - - struct initiator { - SECURITY_DESCRIPTOR sd_; - SECURITY_ATTRIBUTES sa_; - bool succ_ = false; - - template - initiator(Logger const &log) { - if (!::InitializeSecurityDescriptor(&sd_, SECURITY_DESCRIPTOR_REVISION)) { - log.error("fail InitializeSecurityDescriptor[", static_cast(::GetLastError()), "]"); - return; - } - if (!::SetSecurityDescriptorDacl(&sd_, TRUE, NULL, FALSE)) { - log.error("fail SetSecurityDescriptorDacl[", static_cast(::GetLastError()), "]"); - return; - } - sa_.nLength = sizeof(SECURITY_ATTRIBUTES); - sa_.bInheritHandle = FALSE; - sa_.lpSecurityDescriptor = &sd_; - succ_ = true; - } - }; - - static initiator handle(log); + static sa_initiator handle(log); return handle.succ_ ? &handle.sa_ : nullptr; }