Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction WriteFile bloquante

1 réponse
Avatar
Mathieu
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 de
user-mode n'est pas terminé.


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 quand je met la fonction Writefile dans un thread ca ne bloque pas.

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


Q
Pouvez-vous m'aider ?

Merci

1 réponse

Avatar
Michael Doubez
On 3 nov, 01:21, Mathieu wrote:

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


[snip]
Pouvez-vous m'aider ?



Non, pas plus que dans les 200 autres groupes et forums de discussion
où tu as posé la même question.

--
Michael