Stopper hook ZwCreateFile

Résolu
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009 - 15 déc. 2008 à 15:16
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009 - 22 déc. 2008 à 09:06
Bonjour à tous,

Je vous expose mon problème :

J'ai créer un driver pour hooker la fonction ZwCreateFile, cela marche presque bien, je fais le traitement que je veux lors de l'ouverture d'un fichier. Le problème, c'est que j'aimerais que le fichier ne s'ouvre pas ensuite.

J'aimerais qu'à la fin de la fonction hookZwCreateFile, il ne se passe plus rien, car en ce moment, lorsque je hook ZwCreateFile, mon driver effectue le traitement sur l'ouverture du fichier et ensuite ouvre le fichier. Moi, j'aimerais qu'il n'ouvre pas le fichier.

J'ai essayé en passant des retours bidon, mais cela m'indique que le handle est invalide.

Merci d'avance pour vos réponses.

7 réponses

cs_yex Messages postés 28 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mai 2010
20 déc. 2008 à 12:57
Si ton but est de filtrer des fichiers, un hook sur ZwCreateFile n'est pas forcement la methode la plus judicieuse.
On peut définir sous windows des driver de filtres voir le document "Filter Driver Development Guide".
Je me suis toujours dit qu'il fallait que j'en fasse un un jour et je n'ai toujours pas eu le temps de m'y mettre :(
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="ProgId" content="Word.Document" /><meta name="Generator" content="Microsoft Word 10" /><meta name="Originator" content="Microsoft Word 10" /><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CRANTAN%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:536871559 0 0 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-name:"Normal\,APPLY ANOTHER STYLE";
mso-style-parent:"";
margin-top:3.0pt;
margin-right:0cm;
margin-bottom:3.0pt;
margin-left:0cm;
line-height:11.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
font-size:8.0pt;
mso-bidi-font-size:10.0pt;
font-family:Verdana;
mso-fareast-font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";
color:fuchsia;
mso-ansi-language:EN-US;
mso-fareast-language:EN-US;
font-weight:bold;
mso-bidi-font-weight:normal;}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
--></style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
</o:shapelayout></xml><![endif]-->
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
15 déc. 2008 à 19:35
Salut,
Généralement les fonctions de hook des fonctions du kernel interceptent l'appel, traitent les paramètres et finissent par appeler la fonction originale pour ne pas perturber le fonctionnement du système. Si dans certains cas on souhaite bloquer l'accès à la fonction originale, il suffit de ne pas appeler cette dernière dans la fonction de hook et retourner une valeur d'erreur immédiatement.
0
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009
15 déc. 2008 à 20:21
Bonne idée !! mais j'y avais déjà pensé et j'ai essayé. Mais même en retournant une valeur d'erreur, il continue à essayer d'ouvrir le fichier et c'est là qu'il me dit que le handle est incorrect.

LA valeur de retour est de type NTSTATUS, si tu connais la valeur de retour qu'il faut donner, merci de me l'indiquer.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 déc. 2008 à 03:08
Je n'ai pas bien compris ce que tu veux faire exactement. Normalement, c'est l'application en User-Mode qui décidera de l'action à entreprendre en cas d'échec de CreateFile(). Cette dernière appelle NTCreateFile() qui à son tour appelle zwCreateFile(). Si ta fonction zwCreateFile() retourne une valeur d'erreur, celle-ci sera reconduite vers l'application appelante (User-Mode) qui attend une valeur de retour et affichera un message d'erreur ou agira autrement. Mais dans tous les cas le fichier ne sera pas ouvert (ou créé). Il y'a beaucoup de valeurs de retour NTSTATUS que tu peux utiliser. Exemples:
STATUS_OBJECT_NAME_NOT_FOUND
STATUS_OBJECT_NAME_INVALID
STATUS_OBJECT_PATH_NOT_FOUND
STATUS_OBJECT_PATH_INVALID
Tu peux même retourner STATUS_SUCCESS et mettre le handle du fichier à INVALID_HANDLE_VALUE qui correspond à -1 ou 0xFFFFFFFF:
*pHandle=(HANDLE)-1;
return STATUS_SUCCESS;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009
17 déc. 2008 à 08:09
Je susi d'accord avec toi sur le raisonnement, mais le problème c'est que par exemple, si je double-clique sur un fichier.txt, le notepad de Windows s'ouvre et me renvoie le message d'erreur "Le handle est invalide".

Donc je ne vois pas comment faire pour que l'application par defaut ne s'ouvre pas.
0
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009
17 déc. 2008 à 08:10
Sinon, je vais essayer avec les codes d'erreurs que tu m'as donné.
0
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009
22 déc. 2008 à 09:06
@ yes : Connais-tu de bons tutoriels pour faire des Filter Driver ?
0
Rejoignez-nous