Existe-t-il un moyen de remplacer l'API de fichier Win32, telle que CreateFile()? Je souhaite que mon application affiche un fichier virtuel uniquement pour mon application. Toutefois, le fichier virtuel n'existe pas réellement.Implémentation d'un fichier virtuel en remplaçant l'API de fichier Win32
Répondre
Il existe deux approches - avec un pilote en mode noyau (documenté) et sans un tel pilote (une manière hacky). Avec un pilote en mode noyau, vous avez deux possibilités: (1) créer un pilote de système de fichiers virtuel (ou en prendre un existant) et (2) créer un pilote de filtre de système de fichiers (ou en prendre un existant). Le développement du pilote = un an ou deux de travail à faire correctement et complètement. Le développement du pilote est entièrement documenté dans MSDN.
Sans un pilote en mode noyau, vous devez utiliser l'accrochage API. Les bibliothèques telles que Detours, MadCodeHook et Boxedapp SDK le font (et vous permettent de le faire aussi bien).
Accrocher un sujet d'API est assez large pour le décrire ici complètement, mais il y a un bon CodeProject article sur ce sujet.
À l'échelle du système? Mauvaise idée. Si ce n'est que votre application, n'utilisez pas les API standard et mettez-les en œuvre vous-même. Mais si les données doivent persister entre les sessions, vous devrez stocker les données quelque part (fichier, registre, etc.).
Pas système large, mais uniquement pour mon application. J'ai déjà une bibliothèque de fichiers virtuelle, cependant, elle ne peut pas être utilisée par une autre bibliothèque qui ne peut pas accéder à ma bibliothèque de fichiers virtuelle. –
http://www.codeproject.com/KB/system/Paladin.aspx –
Avez-vous besoin de manipuler le fichier virtuel avec les API Win32 standard? Je créerais mes propres objets et fonctions de système de fichiers si ce n'est pas une exigence, ce qui signifie que vous pouvez le faire se comporter comme vous le souhaitez. –
J'ai déjà mon propre API dont les API ne sont pas standard. Je veux que mon application qui utilise une autre bibliothèque qui ne peut pas utiliser ma bibliothèque de fichiers virtuelle puisse utiliser ma bibliothèque de fichiers virtuelle. C'est pourquoi je veux remplacer l'API du fichier Win32. –
Jusqu'où êtes-vous arrivé? Partagez s'il vous plait! Je semble que l'injection de DLL peut être fait dans certains cas. – menjaraz