Bonjour,

Je viens de developper un processus permettant de mapper un lecteur logique
en user-mode sur un fichier image (ex : e:\td.raw) par l'intermediaire d'un driver propre à moi.

Quand l'évenement de demande d'écriture sur l'unité est appelé j'utilise
la fonction WriteFile de l'api Windows.

Le probléme : c'est que le WriteFile sur un fichier image et non pas sur le lecteur logique mappé , eh bien à moment donnée il bloque pendant par exemple la copie des fichiers vers le lecteur logique mappé en user-mode.
Je suis obliger de redemarrer Windows car tout se bloque.

Bizarre : Quand je mets le WriteFile dans un autre thread et que j'attend que son execution soit terminé , WriteFile ne bloque plus.

Encore plus bizarrre :
J'ai essayer de mettre dans le thread qui écrit dans le fichier image , la fonction fprintf qui lui inscrit sur un autre fichier (ex c:\debugsecteur.txt) les numéros de secteur. Eh bien là il y a bloquage soit dans la fonction fprintf ou WriteFile.

Je ne comprend pas.

Expliquation du probléme en interne :
Lors de l'appelle de WriteFile sur un fichier image (ex e:\td.raw) , eh bien le systéme veux inscrire des données sur le lecteur logique mappé en user-mode , du coup le driver retourne STATUS_PENDING sur IRP_MJ_WRITE car l'appelle de l'événement de demande d'écriture n'est pas terminé.

J'ai essayer de supprimer le temps d'attente du thread d'écriture du fichier image , c'est à dire le thread est créer , l'évenement de demande d'écriture retourne OK à mon driver et la fonction WriteFile du thread se débloquant à moment donnée , mais quand je reutilise mon fichier image , le lecteur logique m'affiche non formaté ou illisible ! Je vais retester !

Déjà est-ce les paramétre de CreateFile convient :
{
char nameraw[]="e:\\td.raw";
hraw=CreateFile(nameraw, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|FILE_ATTRIBUTE_NORMAL,NULL);
}

Pouvez-vous m'aider car d'aprés le debuggage des logs de mon drivers c'est windows en faute !

Conclusion : Le noyaux de windows veux inscrire des données dans le lecteur logique mappé en user-mode pendant la fonction WriteFile et tant que les données inscrites ne sont pas OK , le noyaux décide de bloquer.

Pourquoi ?

Pourquoi dans un thread ca ne bloque pas.

Dans l'événement d'accés écriture j'appelle la fonction DeviceIoControl !


Quant à l'événement de demande de lecture : pas de probléme !

Pouvez-vous m'aider ?

Merci