summaryrefslogtreecommitdiffhomepage
path: root/compat/shm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'compat/shm.cpp')
-rw-r--r--compat/shm.cpp118
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))