diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2018-05-27 22:03:20 +0200 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-05-27 22:03:51 +0200 | 
| commit | fc01322c7df2cf13e1b0aef2b72fa69121bdcf20 (patch) | |
| tree | 02327c22a3958da205c8408024daa85314eb1df5 /compat | |
| parent | 2df8cbfe6e1d86254f8c6a663a3216077364b767 (diff) | |
compat/shm: get rid of secattr
It shouldn't be necessary even with UAC.
Also clean up #ifdef __WINE__ across the file.
Diffstat (limited to 'compat')
| -rw-r--r-- | compat/shm.cpp | 118 | 
1 files changed, 9 insertions, 109 deletions
| diff --git a/compat/shm.cpp b/compat/shm.cpp index 4bd89d35..d30f6346 100644 --- a/compat/shm.cpp +++ b/compat/shm.cpp @@ -17,123 +17,29 @@  #if !defined __WINE__  #   include <QDebug> +#   define warn(...) (qDebug() << __VA_ARGS__) +#else +#   define warn(...)  #endif -struct secattr final -{ -    bool success; -    SECURITY_DESCRIPTOR* pSD; -    SECURITY_ATTRIBUTES attrs; -    PSID pEveryoneSID; -    PACL pACL; - -    void cleanup(); -    secattr(DWORD perms); -    ~secattr(); -}; - -void secattr::cleanup() -{ -    if (pEveryoneSID) -        FreeSid(pEveryoneSID); -    if (pACL) -        LocalFree(pACL); -    if (pSD) -        LocalFree(pSD); -    success = false; -    pSD = nullptr; -    pEveryoneSID = nullptr; -    pACL = nullptr; -} - -secattr::secattr(DWORD perms) : success(true), pSD(nullptr), pEveryoneSID(nullptr), pACL(nullptr) -{ -    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; -    EXPLICIT_ACCESS ea; - -    if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, -                                 SECURITY_WORLD_RID, -                                 0, 0, 0, 0, 0, 0, 0, -                                 &pEveryoneSID)) -    { -        fprintf(stderr, "AllocateAndInitializeSid: %d\n", (int) GetLastError()); -        goto cleanup; -    } - -    memset(&ea, 0, sizeof(ea)); - -    ea.grfAccessPermissions = perms; -    ea.grfAccessMode = SET_ACCESS; -    ea.grfInheritance = NO_INHERITANCE; -    ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; -    ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; -    ea.Trustee.ptstrName  = (LPTSTR) pEveryoneSID; - -    if (SetEntriesInAcl(1, &ea, NULL, &pACL) != ERROR_SUCCESS) -    { -        fprintf(stderr, "SetEntriesInAcl: %d\n", (int) GetLastError()); -        goto cleanup; -    } - -    pSD = (SECURITY_DESCRIPTOR*) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); -    if (pSD == nullptr) -    { -        fprintf(stderr, "LocalAlloc: %d\n", (int) GetLastError()); -        goto cleanup; -    } - -    if (!InitializeSecurityDescriptor(pSD, -                                      SECURITY_DESCRIPTOR_REVISION)) -    { -        fprintf(stderr, "InitializeSecurityDescriptor: %d\n", (int) GetLastError()); -        goto cleanup; -    } - -    if (!SetSecurityDescriptorDacl(pSD, -                                   TRUE, -                                   pACL, -                                   FALSE)) -    { -        fprintf(stderr, "SetSecurityDescriptorDacl: %d\n", (int) GetLastError()); -        goto cleanup; -    } - -    attrs.bInheritHandle = false; -    attrs.lpSecurityDescriptor = pSD; -    attrs.nLength = sizeof(SECURITY_ATTRIBUTES); - -    return; -cleanup: -    cleanup(); -} - -secattr::~secattr() -{ -    cleanup(); -} -  shm_wrapper::shm_wrapper(const char* shm_name, const char* mutex_name, int map_size)  { -    secattr sa(GENERIC_ALL|SYNCHRONIZE); -      if (mutex_name == nullptr)          mutex = nullptr;      else      { -        mutex = CreateMutexA(sa.success ? &sa.attrs : nullptr, false, mutex_name); +        mutex = CreateMutexA(nullptr, false, mutex_name);          if (!mutex)          { -    #if !defined __WINE__ -            qDebug() << "CreateMutexA:" << (int) GetLastError(); -    #endif +            warn("CreateMutexA:" << (int) GetLastError());              return;          }      }      mapped_file = CreateFileMappingA(                   INVALID_HANDLE_VALUE, -                 sa.success ? &sa.attrs : nullptr, +                 nullptr,                   PAGE_READWRITE,                   0,                   map_size, @@ -141,9 +47,7 @@ shm_wrapper::shm_wrapper(const char* shm_name, const char* mutex_name, int map_s      if (!mapped_file)      { -#if !defined __WINE__ -        qDebug() << "CreateFileMappingA:", (int) GetLastError(); -#endif +        warn("CreateFileMappingA:" << (int) GetLastError());          return;      } @@ -155,16 +59,12 @@ shm_wrapper::shm_wrapper(const char* shm_name, const char* mutex_name, int map_s                          map_size);      if (!mem) -    { -#if !defined __WINE__ -        qDebug() << "MapViewOfFile:" << (int) GetLastError(); -#endif -    } +        warn("MapViewOfFile:" << (int) GetLastError());  }  shm_wrapper::~shm_wrapper()  { -    if(!UnmapViewOfFile(mem)) +    if(mem && !UnmapViewOfFile(mem))          goto fail;      if (!CloseHandle(mapped_file)) | 
