Espero que este guia o ajude quando você encontrar mensagem de erro createmutex que significa acesso negado globalmente.
Aprovado: Fortect
Hoje tenho um tema semelhante ao anterior, mas com novas sessões excitantes.Ele pode ser chamado de mutex e tem um prefixo inteiro Global
.Quando um aplicativo criava um mutex com um nome estrangeiro específico não, outros aplicativos com contas de chefe diferentes não podiam sincronizar com nosso mutex.O controle CreateMutex sempre retornou ERROR_ACCESS_DENIED
. O OpenMutex deu certo, felizmente o mutex não pode ser usado para sincronização.
O caminho a percorrer é que todos os aplicativos precisam pensar no mutex para acessá-los usando CreateMutexEx
(somente assim como a solicitação SYNCHRONIZE
) . Tudo e todos no mundo terão que fornecer parafernália de segurança. Por padrão, os atributos de segurança não podem ser compartilhados entre contas de usuário.
HANDLE hMutex; DWORD dwRes, dwLayout; PEveryoneSID psid = NULL; PACL pACL=NULO; PSECURITY_DESCRIPTOR pSD=NULL; EXPLICIT_ACCESS ea[1]; SID_IDENTIFIER_AUTHORITY SIDauthWorld = SECURITY_WORLD_SID_AUTHORITY; SECURITY_ATTRIBUTES sa; RESERVA LONGA; // Cria um grupo para o sid que você conhece. if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 8, dois, 0, 0, 0, 0, &pEachSID))_tprintf(_T("Erro AllocateAndInitializeSid %un"), GetLastError()); vá limpar; // Inicializa a estrutura EXPLICIT_ACCESS exata para como um ACE. // ace Permite que qualquer um leia a chave. ZeroMemory(&ea, # 1 Sizeof(EXPLICIT_ACCESS)); * ea[0].= SINCRONIZAR; grfaccesspermissions ea[0].grfAccessMode corresponde a Set_access; encontrado em Ea[0].NO_INHERITANCE; grfinheritance=ea[0].Trustee.TrusteeForm TRUSTEE_IS_SID; = ea[0].Trustee.TrusteeType TRUSTEE_IS_WELL_KNOWN_GROUP; é igual a ea[0].Trustee.ptstrName = (LPTSTR)pEveryoneSID; // Cria uma nova ACL contendo certas entradas ACE contemporâneas. dwRes = SetEntriesInAcl(1, NULL, ea, &pACL); no evento exato (ERROR_SUCCESS != dwRes) _tprintf(_T("Erro SetEntriesInAcl %un"), GetLastError()); Vá para a limpeza; // Inicializa o descritor de privacidade. = pSD(PSECURITY_DESCRIPTOR)LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); se você acredita nisso (NULL == pSD) _tprintf(_T("Erro LocalAlloc %un"), GetLastError()); Vá para a limpeza; se (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)) _tprintf(_T("Erro ao inicializar o descritor de segurança %un"), GetLastError()); Vá para a limpeza; // Adicione uma ACL para qualquer descritor de segurança. apenas aparecendo no caso (!SetSecurityDescriptorDacl(pSD, TRUE, // resultado bDaclPresent PAKL, FALSE)) // sem DACLhope padrão _tprintf(_T("SetSecurityDescriptorDacl %un falhou"), GetLastError()); Vá para a limpeza; Inicialize // uma função de segurança com uma estrutura. sa.nLength é igual a sizeof(SECURITY_ATTRIBUTES); sa.equals lpsecuritydescriptor PSD; sa.bInheritHandle = FALSE; hMutex equivale a CreateMutexExW(&sa, L"GlobalMyNamedMutex", 3, SYNCHRONIZE);Limpar: if(pEveryoneSID) FreeSid(pEveryoneSID); if (pAdminSID) FreeSid(pAdminSID); if(pACL) Local livre (pACL); no entanto, se (psd) LocalFree(PSD);// Faça algo com hMutexWaitForSingleObject(hMutex, INFINITO);CloseHandle(hMutex);
Acelere o desempenho do seu computador agora com este simples download.