docs: private HANDLE lockMutex() throws IOException {
      PointerByReference securityDescriptor = new PointerByReference();
      Advapi32.INSTANCE
          .ConvertStringSecurityDescriptorToSecurityDescriptor(EVERYONE_SYNCHRONIZE_SDDL, 1,
              securityDescriptor, null);
      Advapi32.SECURITY_ATTRIBUTES sa = new Advapi32.SECURITY_ATTRIBUTES();
      sa.nLength = sa.size();
      sa.lpSecurityDescriptor = securityDescriptor.getValue();
      sa.bInheritHandle = false;
      HANDLE mutex = Kernel32.INSTANCE.CreateMutex(sa, false, memoryName + "_CONNECT_MUTEX");
      Kernel32.INSTANCE.LocalFree(securityDescriptor.getValue());
      if (Kernel32.INSTANCE.WaitForSingleObject(mutex, timeout) == -1) {
        Kernel32.INSTANCE.CloseHandle(mutex);
        throw new IOException(
            "wait failed (timeout, last error =  " + Kernel32.INSTANCE.GetLastError());
      }
      return mutex;
    }