Est-il possible d'ouvrir ou d'interroger un mutex nommé, en utilisant OpenMutex, par sa qualification de chemin complet? Par exemple:Ouverture d'un mutex nommé par un chemin entièrement qualifié
HANDLE hHandleMutex = OpenMutex(READ_CONTROL, FALSE,
"\\Sessions\\1\\BaseNamedObjects\\SmartScreen_AppRepSettings_Mutex");
Cependant, la fonction retourne la valeur NULL et échoue avec l'erreur 161 (ERROR_BAD_PATHNAME
: Le chemin spécifié est incorrect). Oui, la documentation indique bien les préfixes \\Global
et \\Local
et n'indique rien sur ces noms d'objets complets. Toutefois, MSDN n'indique pas tout!
Je suis conscient que nous pouvons interroger la même chose en utilisant NtQuerySystemInformation
, NtQueryObject
API non documentées. Mais cela implique un processus d'ouverture, la duplication du jeton, etc. Je peux très bien utiliser ces API, mais je voulais une solution simple.
Supposons que le processus s'exécute en tant que compte SYSTEM, l'erreur 5 (accès refusé) ne posera donc aucun problème. Si c'est le problème, je peux le gérer.
vous avez besoin ou utilisez 'session \\ 1 \\ SmartScreen_AppRepSettings_Mutex' sans conduire \\ ou si vous voulez le chemin complet -' 'ZwOpenMutant' – RbMm
le OpenMutex' regardé dans' \ Sessions \ \ BaseNamedObjects' ou '\ BaseNamedObjects' seulement . dans les deux répertoires existent des liens symboliques '\ BaseNamedObjects \ Session' et' \ Sessions \ 1 \ BaseNamedObjects \ Session' qui pointent vers '\ Sessions \ BNOLINKS' où sont placés d'autres liens symboliques vers les répertoires' BaseNamedObjects' par session. parce que cette '' session \\ "' préfixe et travaillé. ou d'une autre manière utilisez l'API native 'ZwOpenMutant' - dans ce cas, vous utilisez un chemin libre –
RbMm
En résumé: OpenMutex traite le chemin qui lui est attribué d'une manière qui invalide un chemin brut (vu par le noyau). Donc non, vous ne pouvez pas faire cela, vous devez utiliser un chemin significatif pour OpenMutex. –