2015-07-23 2 views
0

J'ai un service C# le serveur de socket Web. Quand une connexion de socket Web est reçue, je reçois l'ID de processus de l'application de connexion (Chrome) à partir de la socket, puis je reçois l'ID de session de ce processus. L'obtention de l'ID de processus et de l'ID de session est effectuée dans une DLL C++ chargée par le service C#.ProcessIdToSessionId renvoie un ID de session incorrect

Regarder l'onglet Processus dans le Gestionnaire des tâches que je vois une entrée pour chrome.exe avec un PID de 5640 et un ID de session 45.

dans le dll C++ J'utilise GetExtendedTcpTable() pour trouver le processus ID du port. Cela semble fonctionner correctement lorsque je récupère l'ID de processus correct (dans mon exemple, PID est 5640). Toutefois, lorsque j'utilise cet ID de processus dans ProcessIdToSessionId(), l'ID de session renvoyé est 44!

Pourquoi ProcessIdToSessionId() renvoie l'ID de session incorrect?

OS est Windows 7 32 bits.

Répondre

0

Juste découvert le problème! J'ai utilisé une fonction wrapper pour appeler ProcessIdToSessionId(). Cette fonction a été écrite pour une application qui a été démarrée dans une session afin qu'elle soit optimisée pour obtenir l'ID de session une seule fois et l'enregistrer en interne. L'idée derrière cela était qu'il ne serait pas nécessaire de re-interroger l'ID de session du processus en cours car l'ID de session ne changerait jamais. Ainsi, lorsque la fonction a été appelée par la suite, elle n'a plus appelé ProcessIdToSessionId() mais a renvoyé la valeur stockée.

Bien sûr, la réutilisation de cette fonction dans un service qui a été appelé à partir de différentes sessions a reçu l'ID de session correct lors de son premier appel, mais les appels suivants ont reçu le mauvais ID de session. La modification de la fonction wrapper pour forcer l'interrogation de l'ID de session a résolu le problème.