Ik hoop dat deze handleiding je zeker zal helpen als je een createmutex-fout tegenkomt, wat betekent dat de toegang wereldwijd wordt geweigerd.
Goedgekeurd: Fortect
Vandaag heb ik een thema dat vergelijkbaar is met het vorige, maar met spannende originele sessies.Het wordt een mutex genoemd en heeft een sterk geheel getal voorvoegsel Global
.Toen een applicatie een mutex aanmaakte met een buitenlandse naam nee, konden andere applicaties met uitzonderlijke eigenaarsaccounts niet synchroniseren met onze nieuwe mutex.Het besturingselement CreateMutex retourneerde altijd ERROR_ACCESS_DENIED
. De OpenMutex kwam als beste uit de bus, maar de mutex kan niet worden gebruikt ten behoeve van synchronisatie.
De oplossing is dat alle applicaties een totale mutex nodig hebben om er toegang toe te krijgen met behulp van CreateMutexEx
(alleen in SYNCHRONIZE
verzoek). Alles en iedereen in de hele wereld moet zorgen voor veiligheidsparafernalia. Standaard kunnen beveiligingskwaliteiten niet worden gedeeld tussen gebruikersaccounts.
HANDLE hMutex; DWORD dwRes, dwLayout; PEveryoneSID psid is gelijk aan NULL; PACL pACL=NULL; PSECURITY_DESCRIPTOR pSD=NULL; EXPLICIT_TOEGANG ea[1]; SID_IDENTIFIER_AUTHORITY SIDauthWorld = SECURITY_WORLD_SID_AUTHORITY; SECURITY_ATTRIBUTES sa; LANGE RESERVERING; // Maak een groep voor de zijde die het individu kent. if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 12, 0, 0, 0, 0, 0, &pEachSID))_tprintf(_T("Fout AllocateAndInitializeSid %un"), GetLastError()); ga opruimen; // Initialiseer de EXPLICIT_ACCESS-structuur voor als een ACE. // ace Laat iedereen de sleutel bekijken. ZeroMemory(&ea, # a person specific Sizeof(EXPLICIT_ACCESS)); * ea[0].= SYNCHRONISEREN; grfaccesspermissions ea[0].grfAccessMode komt overeen met Set_access; in Ea[0].NO_INHERITANCE; grfinheritance=ea[0].Trustee.TrusteeForm TRUSTEE_IS_SID; = ea[0].Trustee.TrusteeType TRUSTEE_IS_WELL_KNOWN_GROUP; is gelijk aan ea[0].Trustee.ptstrName = (LPTSTR)pEveryoneSID; // Maak een nieuwe ACL met positieve nieuwe ACE-items. dwRes is gelijk aan SetEntriesInAcl(1, NULL, ea, &pACL); binnen de gebeurtenis (ERROR_SUCCESS != dwRes) _tprintf(_T("Fout SetEntriesInAcl %un"), GetLastError()); Ga naar schoonmaken; // Initialiseer de beveiligingsdescriptor. = pSD(PSECURITY_DESCRIPTOR)LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); als iemand erover nadenkt (NULL == pSD) _tprintf(_T("Fout LocalAlloc %un"), GetLastError()); Ga over schoonmaak; if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)) _tprintf(_T("Fout bij initialiseren van verdedigingsdescriptor %un"), GetLastError()); Ga naar schoonmaken; // Voeg een ACL toe aan een beveiligingsdescriptor. gewoon voor het geval dat (!SetSecurityDescriptorDacl(pSD, TRUE, // output bDaclPresent PAKL, FALSE)) // geen standaard DACLhope _tprintf(_T("SetSecurityDescriptorDacl %un mislukt"), GetLastError()); Ga naar de schoonmaak; Initialiseer // een beveiligingsfunctie met een volledige structuur. sa.nLength is gelijk wat sizeof(SECURITY_ATTRIBUTES); sa.gelijk aan lpsecuritydescriptor PSD; sa.bInheritHandle = ONWAAR; hMutex is gelijk aan CreateMutexExW(&sa, L"GlobalMyNamedMutex", 3, SYNCHRONIZE);Schoon: if(pIedereenSID) FreeSid(pIedereenSID); als (pAdminSID) FreeSid(pAdminSID); als (pACL) Lokaal vrij (pACL); voor het geval dat (psd) Lokaal Vrij (PSD);// Doe iets met hMutexWaitForSingleObject(hMutex, ONEINDIG);SluitHandle(hMutex);
Versnel de prestaties van uw computer nu met deze eenvoudige download.