indiaai-hackathon
/
datalab
/web
/node_modules
/node-pty
/deps
/winpty
/src
/shared
/WindowsSecurity.h
| // Copyright (c) 2016 Ryan Prichard | |
| // | |
| // Permission is hereby granted, free of charge, to any person obtaining a copy | |
| // of this software and associated documentation files (the "Software"), to | |
| // deal in the Software without restriction, including without limitation the | |
| // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | |
| // sell copies of the Software, and to permit persons to whom the Software is | |
| // furnished to do so, subject to the following conditions: | |
| // | |
| // The above copyright notice and this permission notice shall be included in | |
| // all copies or substantial portions of the Software. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
| // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
| // IN THE SOFTWARE. | |
| // PSID and PSECURITY_DESCRIPTOR are both pointers to void, but we want | |
| // Sid and SecurityDescriptor to be different types. | |
| 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); | |