2010-08-08 2 views
0

Étant donné que vous avez trouvé un processus auquel vous souhaitez exécuter un appel de fonction, il est possible d'appeler une fonction et d'obtenir une valeur de retour de ce processus. Par exemple, supposons que le processus qui m'intéressait était toujours le premier processus retourné (je sais que ce ne sera pas le cas), je voudrais faire quelque chose comme ceci:Utilisation de la réflexion pour exécuter une fonction dans un System.Diagnostics.Process

Process[] myProcesses = Process.GetProcesses(); 
int UserID = myProcesses[0].*GetUserID*(); 

GetUserID() est une fonction publique statique avec cet ensemble de processus.

Tout le code est le code managé

+0

Je devrais demander pourquoi vous voudriez même faire cela ...? –

Répondre

2

Non sans une certaine forme de communication interprocessus. Le processus "cible" devrait avoir un serveur ou un écouteur en cours d'exécution (WCF, Named Pipes, socket, etc). Vous pouvez envoyer des messages Windows à un autre processus, mais même dans ce cas, l'autre application devrait les écouter et savoir comment exécuter une action basée sur eux.

mécanismes Même que généralement associés à des attaques (telles que des débordements de pile, sql injection, et d'autres) nécessitent généralement l'application d'écouter ou d'agir en tant que serveur de quelque sorte et l'attaque profite de ce système d'écoute

1

sorte de, mais vous ne pouvez pas le faire de la façon que vous décrivez.

Appelée communication inter-processus, elle requiert que le processus contenant la méthode GetUserID() expose cette méthode via un mécanisme de communication inter-processus - par exemple .Net Remoting ou WCF.

La façon dont vous pourriez ensuite appeler cette méthode exposée serait également très différente selon la façon dont cette méthode a été exposée.

Il y a un tutoriel de base ici sur la façon d'y parvenir en utilisant WCF:

Questions connexes