chevalboiteux
Messages postés12Date d'inscriptionjeudi 6 décembre 2007StatutMembreDernière intervention18 mai 2009
-
15 déc. 2008 à 15:16
chevalboiteux
Messages postés12Date d'inscriptionjeudi 6 décembre 2007StatutMembreDernière intervention18 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.
cs_yex
Messages postés28Date d'inscriptionjeudi 3 octobre 2002StatutMembreDernière intervention31 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]-->
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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.
chevalboiteux
Messages postés12Date d'inscriptionjeudi 6 décembre 2007StatutMembreDernière intervention18 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.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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;
Vous n’avez pas trouvé la réponse que vous recherchez ?
chevalboiteux
Messages postés12Date d'inscriptionjeudi 6 décembre 2007StatutMembreDernière intervention18 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.