2016-12-24 1 views
0

Je n'ai besoin de détecter que les activités d'E/S initiées par l'utilisateur. Quand je dis Utilisateur, je veux dire Utilisateur (double-cliquez pour ouvrir le fichier, entrez, etc).MiniFilter - Comment détecter uniquement les activités d'E/S initiées par l'utilisateur?

Data-> RequestorMode == 1, imprime uniquement le mode utilisateur et j'ai besoin des actions initiées par l'utilisateur. Donc, j'ai besoin de savoir comment imprimer uniquement les transactions effectuées par l'utilisateur lui-même. (Ouvrir le fichier, double-cliquer, entrer, etc ... comme dit avant)

Des suggestions?

Merci!

Répondre

0

Lorsque vous double-cliquez sur un fichier, vous demandez à l'Explorateur d'effectuer une action en votre nom. Explorer le fait en examinant l'extension du fichier, en recherchant l'application associée à cette extension et en la lançant avec des instructions pour ouvrir le fichier.

Le chargeur Windows est responsable du chargement de l'application en mémoire et de son fonctionnement. Pour ce faire, il doit ouvrir au moins l'exécutable et généralement une ou plusieurs DLL. Une fois l'application démarrée, elle peut également ouvrir certains fichiers de configuration avant d'ouvrir le fichier demandé par l'utilisateur.

Toutes ces opérations ouvertes sont effectuées dans le même contexte. Le noyau sait quel processus a ouvert le fichier, mais il n'a aucun moyen de savoir s'il a été ouvert par le chargeur Windows ou par l'application elle-même, ou de faire la distinction entre un fichier de configuration et le fichier sur lequel l'utilisateur double-clique. Vous ne pourrez donc pas détecter les opérations d'ouverture de fichier initiées par l'utilisateur à partir d'un pilote de filtre de système de fichiers.

Il peut être possible d'utiliser une extension Windows Explorer, bien que cela ne fonctionne que pour les fichiers ouverts à l'aide de l'explorateur ou de l'une des boîtes de dialogue standard, c'est-à-dire pour la plupart des applications.

0

Data-> RequestorMode == 1, imprime uniquement en mode utilisateur

si

if (Data->RequestorMode == UserMode) DbgPrint("%x\n", Data->RequestorMode);

imprimer uniquement UserMode

ou-je dire mieux - if UserMode print UserMode - print seulement UserMode ..

+0

Je vais donner un exemple pour mieux m'expliquer moi-même: Disons que j'ouvre un fichier abc.txt. Les appels en mode utilisateur seront: Ouvrez un tas de dll, ouvrez le bloc-notes, ouvrez abc.txt. Je veux filtrer ceci et attraper seulement le abc.txt (ou toute autre chose que l'utilisateur a ouvert). Comment attraper seulement ce que l'utilisateur (l'humain) ouvre? Comme double-cliquez et entrez) – user3449011

+0

@ user3449011: vous ne pouvez pas. Windows sait seulement qu'un programme ouvre un fichier, il n'a aucun moyen de savoir s'il ouvre un fichier parce que l'utilisateur l'a explicitement demandé ou pour une autre raison. –

+0

@HarryJohnston - vraiment essayer OP trouvé de l'utilisateur ou le mode noyau était demande. et il ne peut pas comprendre ce qui est - 'FLT_CALLBACK_DATA.RequestorMode' - commencer à http://stackoverflow.com/questions/41292697/minispy-driver-user-mode-call – RbMm