ZwCreateObject

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 19 oct. 2006 à 18:36
chevalboiteux Messages postés 12 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 18 mai 2009 - 17 nov. 2008 à 10:31
Bonsoir,
J'ai fais un petit driver afin de hooker ZwCreateFile. Il fonctionne sans problème.
J'essais à présent de récupérer le nom du fichier ouvert avec ZwQueryObject mais l'api me retourne STATUS_INVALID_HANDLE à chaque fois. C'est surement une erreur de débutant mais un petit coup de pouce ne serait pas de trop.

Quelqu'un a-t-il un oeil d'expert et me dire ce qui ne va pas ?
Merci.

Voici la partie de mon code:

#define MAX_PATH 256

......
NTSTATUS MyZwCreateFile(PHANDLE FileHandle,ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK IoStatusBlock,PLARGE_INTEGER AllocationSize,ULONG FileAttributes,ULONG ShareAccess,ULONG CreateDisposition,ULONG CreateOptions,PVOID EaBuffer,ULONG EaLength)
{
   ..........

   NTSTATUS rv;
   DWORD32 buf;

   buf=MAX_PATH*
sizeof(WCHAR);
   rv=ZwQueryObject(*FileHandle,1,&buf,MAX_PATH,NULL);

   switch(rv)
   {   

   case STATUS_SUCCESS:
      ZwWriteFile(hfl,0,0,0,&iosb,
"STATUS_SUCCESS\r\n",40,0,0);

      break;

   case STATUS_INVALID_HANDLE:
      ZwWriteFile(hfl,0,0,0,&iosb,
"STATUS_INVALID_HANDLE\r\n",40,0,0);

      break;

   case STATUS_INVALID_INFO_CLASS:
      ZwWriteFile(hfl,0,0,0,&iosb,
"STATUS_INVALID_INFO_CLASS\r\n",40,0,0);

      break;

   case STATUS_INFO_LENGTH_MISMATCH:
      ZwWriteFile(hfl,0,0,0,&iosb,
"STATUS_INFO_LENGTH_MISMATCH\r\n",40,0,0);

      break;
   };   ZwClose(hfl);

}

5 réponses

clempar55 Messages postés 59 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 4 avril 2007
19 oct. 2006 à 19:22
buf=MAX_PATH*

sizeof
(WCHAR);

si tu essaye d'allouer

MAX_PATH octets de mémoire essaye plutôt


buf=malloc(

MAX_PATH*

sizeof
(WCHAR));

ainsi buf contiendra un pointeur sur une zone de memoire de

MAX_PATH octets.
0
clempar55 Messages postés 59 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 4 avril 2007
19 oct. 2006 à 19:39
j'allais oublier remplace aussi
rv= ZwQueryObject(*FileHandle,1, &buf ,MAX_PATH,NULL);

par

rv =ZwQueryObject(*FileHandle,1,buf,MAX_PATH,NULL);

car buf contient déja une adresse
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
19 oct. 2006 à 21:17
Merci de tes réponses mais il me semble qu'en étant en kernel mode le malloc et compagnie ne sont acceptés.


Je vais essayer malgrès tout. Merci
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
19 oct. 2006 à 22:01
Arf j'ai du mieux mais les seuls fois ou j'ai un STATUS_SUCCESS c'est sur le fichier de log que j'écris dans ma méthode MyZwCreateFile cité plus haut.

........
OBJECT_NAME_INFORMATION *oni;
NTSTATUS rv;
DWORD32 buff;
HANDLE hfl;





.......
buff=MAX_PATH*
sizeof
(WCHAR);
oni=(OBJECT_NAME_INFORMATION *)ExAllocatePool(NonPagedPool,buff);

rv=ZwQueryObject(*FileHandle,1,oni,buff,&buff);




if
(rv==STATUS_SUCCESS)
   ZwWriteFile(hfl,0,0,0,&iosb,oni[0].Name.Buffer,(ULONG)buff,0,0);




ExFreePool(oni);
.....

ZwClose(hfl);
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 nov. 2008 à 10:31
Willi,

au final, as-tu réussi à retrouver le nom du fichier qui est appelé, car je suis dans le même cas que toi.

Merci d'avance
0
Rejoignez-nous