| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef WINPTY_WINDOWS_SECURITY_H |
| | #define WINPTY_WINDOWS_SECURITY_H |
| |
|
| | #include <windows.h> |
| | #include <aclapi.h> |
| |
|
| | #include <memory> |
| | #include <string> |
| | #include <tuple> |
| | #include <utility> |
| |
|
| | |
| | |
| | struct SidTag { typedef PSID type; }; |
| | struct AclTag { typedef PACL type; }; |
| | struct SecurityDescriptorTag { typedef PSECURITY_DESCRIPTOR type; }; |
| |
|
| | template <typename T> |
| | class SecurityItem { |
| | public: |
| | struct Impl { |
| | virtual ~Impl() {} |
| | }; |
| |
|
| | private: |
| | typedef typename T::type P; |
| | P m_v; |
| | std::unique_ptr<Impl> m_pimpl; |
| |
|
| | public: |
| | P get() const { return m_v; } |
| | operator bool() const { return m_v != nullptr; } |
| |
|
| | SecurityItem() : m_v(nullptr) {} |
| | SecurityItem(P v, std::unique_ptr<Impl> &&pimpl) : |
| | m_v(v), m_pimpl(std::move(pimpl)) {} |
| | SecurityItem(SecurityItem &&other) : |
| | m_v(other.m_v), m_pimpl(std::move(other.m_pimpl)) { |
| | other.m_v = nullptr; |
| | } |
| | SecurityItem &operator=(SecurityItem &&other) { |
| | m_v = other.m_v; |
| | other.m_v = nullptr; |
| | m_pimpl = std::move(other.m_pimpl); |
| | return *this; |
| | } |
| | }; |
| |
|
| | typedef SecurityItem<SidTag> Sid; |
| | typedef SecurityItem<AclTag> Acl; |
| | typedef SecurityItem<SecurityDescriptorTag> SecurityDescriptor; |
| |
|
| | Sid getOwnerSid(); |
| | Sid wellKnownSid( |
| | const wchar_t *debuggingName, |
| | SID_IDENTIFIER_AUTHORITY authority, |
| | BYTE authorityCount, |
| | DWORD subAuthority0=0, |
| | DWORD subAuthority1=0); |
| | Sid builtinAdminsSid(); |
| | Sid localSystemSid(); |
| | Sid everyoneSid(); |
| |
|
| | SecurityDescriptor createPipeSecurityDescriptorOwnerFullControl(); |
| | SecurityDescriptor createPipeSecurityDescriptorOwnerFullControlEveryoneWrite(); |
| | SecurityDescriptor getObjectSecurityDescriptor(HANDLE handle); |
| |
|
| | std::wstring sidToString(PSID sid); |
| | Sid stringToSid(const std::wstring &str); |
| | SecurityDescriptor stringToSd(const std::wstring &str); |
| | std::wstring sdToString(PSECURITY_DESCRIPTOR sd); |
| |
|
| | DWORD rejectRemoteClientsPipeFlag(); |
| |
|
| | enum class GetNamedPipeClientProcessId_Result { |
| | Success, |
| | Failure, |
| | UnsupportedOs, |
| | }; |
| |
|
| | std::tuple<GetNamedPipeClientProcessId_Result, DWORD, DWORD> |
| | getNamedPipeClientProcessId(HANDLE serverPipe); |
| |
|
| | #endif |
| |
|