2017-06-13 1 views
0

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.

+1

vous avez besoin ou utilisez 'session \\ 1 \\ SmartScreen_AppRepSettings_Mutex' sans conduire \\ ou si vous voulez le chemin complet -' 'ZwOpenMutant' – RbMm

+0

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

+0

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. –

Répondre

3

Vous utilisez le mauvais chemin. Il devrait être:

"Session\\1\\SmartScreen_AppRepSettings_Mutex" 

Le documentation dit que le préfixe Session\ est utilisé « réservé système ». Caveat emptor.

+0

J'ai peur, mais ce n'est pas correct David. J'ai essayé '' \\ Sessions \\ 1 BaseNamedObjects \\ SessionImmersiveColorMutex "' et '" Sessions \\ 1 \ BaseNamedObjects \\ SessionImmersiveColorMutex "' que Process Explorer affiche pour Explorer.EXE. Les deux échouent avec la même erreur: 161. – Ajay

+2

C'est correct. Fonctionne bien ici. Je me demande si vous avez lu la réponse attentivement. Essayez de coller le chemin de ma réponse. C'est différent de ce que vous dites dans votre commentaire. Nous l'avons fait à votre question précédente aussi. –

+0

Oui, c'est le cas pour "Session \ 1" mais pas pour "Sessions \ 1" ou autre chose. En bref, cela ne fonctionne pas pour le chemin complet comme indiqué par Process Explorer. Probablement OS fait de la cartographie pour "Session \ 1". – Ajay