Existe-il une limite à la taille des données que l'on peut charger de façon
asynchrone en utilisant ReadFileEx (sous Windows 2000 et XP) ?
Et si oui, est-ce documenté quelque part ?
Parce que la j'ai un gros problème, la fonction me retourne un code d'erreur
1450 (ERROR_NO_SYSTEM_RESOURCES), si j'essaye de charger plus de 64 megs
d'un seul coup.
Le CreateFile à été appellé avec pour paramètres:
=====================
lpFileName => nom du fichier à ouvrir
dwDesiredAccess => GENERIC_READ
dwShareMode => 0
lpSecurityAttributes => 0
dwCreationDisposition => OPEN_EXISTING
dwFlagsAndAttributes =>
FILE_FLAG_RANDOM_ACCESS|FILE_FLAG_OVERLAPPED|FILE_FLAG_NO_BUFFERING
hTemplateFile => 0
=====================
(que je mette RANDOM_ACCESS ou pas, le résultat est le même)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
AG
Mickael Pointier wrote:
As-tu vérifié que :
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING:
File access must begin at byte offsets within the file that are integer multiples of the volume's sector size. To determine a volume's sector size, call the GetDiskFreeSpace function.
File access must be for numbers of bytes that are integer multiples of the volume's sector size. For example, if the sector size is 512 bytes, an application can request reads and writes of 512, 1024, or 2048 bytes, but not of 335, 981, or 7171 bytes.
Buffer addresses for read and write operations must be sector aligned (aligned on addresses in memory that are integer multiples of the volume's sector size). One way to sector align buffers is to use the VirtualAlloc function to allocate the buffers. This function allocates memory that is aligned on addresses that are integer multiples of the system's page size. Because both page and volume sector sizes are powers of 2, memory aligned by multiples of the system's page size is also aligned by multiples of the volume's sector size.
Mickael Pointier wrote:
As-tu vérifié que :
An application must meet certain requirements when working with files
opened with FILE_FLAG_NO_BUFFERING:
File access must begin at byte offsets within the file that are integer
multiples of the volume's sector size. To determine a volume's sector
size, call the GetDiskFreeSpace function.
File access must be for numbers of bytes that are integer multiples of
the volume's sector size. For example, if the sector size is 512 bytes,
an application can request reads and writes of 512, 1024, or 2048 bytes,
but not of 335, 981, or 7171 bytes.
Buffer addresses for read and write operations must be sector aligned
(aligned on addresses in memory that are integer multiples of the
volume's sector size). One way to sector align buffers is to use the
VirtualAlloc function to allocate the buffers. This function allocates
memory that is aligned on addresses that are integer multiples of the
system's page size. Because both page and volume sector sizes are powers
of 2, memory aligned by multiples of the system's page size is also
aligned by multiples of the volume's sector size.
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING:
File access must begin at byte offsets within the file that are integer multiples of the volume's sector size. To determine a volume's sector size, call the GetDiskFreeSpace function.
File access must be for numbers of bytes that are integer multiples of the volume's sector size. For example, if the sector size is 512 bytes, an application can request reads and writes of 512, 1024, or 2048 bytes, but not of 335, 981, or 7171 bytes.
Buffer addresses for read and write operations must be sector aligned (aligned on addresses in memory that are integer multiples of the volume's sector size). One way to sector align buffers is to use the VirtualAlloc function to allocate the buffers. This function allocates memory that is aligned on addresses that are integer multiples of the system's page size. Because both page and volume sector sizes are powers of 2, memory aligned by multiples of the system's page size is also aligned by multiples of the volume's sector size.
Mickael Pointier
> Mickael Pointier wrote:
As-tu vérifié que :
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING: [...] of 2, memory aligned by multiples of the system's page size is also aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de 64 megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Mike
> Mickael Pointier wrote:
As-tu vérifié que :
An application must meet certain requirements when working with files
opened with FILE_FLAG_NO_BUFFERING:
[...]
of 2, memory aligned by multiples of the system's page size is also
aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de 64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers
de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu
microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING: [...] of 2, memory aligned by multiples of the system's page size is also aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de 64 megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Mike
Mickael Pointier
> > As-tu vérifié que : > > An application must meet certain requirements when working with files > opened with FILE_FLAG_NO_BUFFERING: > [...] > of 2, memory aligned by multiples of the system's page size is also > aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de
64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Bon, ca fait la même chose sous Windows 2000.
Si je fait plusieurs appels à ReadFileEx, en saucissonant par blocs de 16, 20, 32 ou 63 megs, ca marche niquel. Dès que je dépasse 64 megs en une seule fois ca foire.
J'ai googlé, rien trouvé :(
Mike
> > As-tu vérifié que :
>
> An application must meet certain requirements when working with files
> opened with FILE_FLAG_NO_BUFFERING:
> [...]
> of 2, memory aligned by multiples of the system's page size is also
> aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de
64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers
de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu
microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Bon, ca fait la même chose sous Windows 2000.
Si je fait plusieurs appels à ReadFileEx, en saucissonant par blocs de 16,
20, 32 ou 63 megs, ca marche niquel. Dès que je dépasse 64 megs en une seule
fois ca foire.
> > As-tu vérifié que : > > An application must meet certain requirements when working with files > opened with FILE_FLAG_NO_BUFFERING: > [...] > of 2, memory aligned by multiples of the system's page size is also > aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de
64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Bon, ca fait la même chose sous Windows 2000.
Si je fait plusieurs appels à ReadFileEx, en saucissonant par blocs de 16, 20, 32 ou 63 megs, ca marche niquel. Dès que je dépasse 64 megs en une seule fois ca foire.
J'ai googlé, rien trouvé :(
Mike
AG
Mickael Pointier wrote:
As-tu vérifié que :
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING: [...] of 2, memory aligned by multiples of the system's page size is also aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de
64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Bon, ca fait la même chose sous Windows 2000.
Si je fait plusieurs appels à ReadFileEx, en saucissonant par blocs de 16, 20, 32 ou 63 megs, ca marche niquel. Dès que je dépasse 64 megs en une seule fois ca foire.
J'ai googlé, rien trouvé :(
Mike
Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of the volume's sector size
Mickael Pointier wrote:
As-tu vérifié que :
An application must meet certain requirements when working with files
opened with FILE_FLAG_NO_BUFFERING:
[...]
of 2, memory aligned by multiples of the system's page size is also
aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de
64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers
de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu
microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Bon, ca fait la même chose sous Windows 2000.
Si je fait plusieurs appels à ReadFileEx, en saucissonant par blocs de 16,
20, 32 ou 63 megs, ca marche niquel. Dès que je dépasse 64 megs en une seule
fois ca foire.
J'ai googlé, rien trouvé :(
Mike
Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu
vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of
the volume's sector size
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING: [...] of 2, memory aligned by multiples of the system's page size is also aligned by multiples of the volume's sector size.
Oui, tout est bien alligné correctement.
Et de toute façon ca n'expliquerait pas pourquoi les fichiers de moins de
64
megs ne sont pas affectés.
D'ailleur le même example fonctionne sans aucun problème avec des fichiers de 74, 92 et 145 megs sur mon kit de développement d'une console de jeu microsoft tournant aussi sous environnement win32...
Je vais essayer de voir si le problème se produit aussi sous Windows 2000.
Bon, ca fait la même chose sous Windows 2000.
Si je fait plusieurs appels à ReadFileEx, en saucissonant par blocs de 16, 20, 32 ou 63 megs, ca marche niquel. Dès que je dépasse 64 megs en une seule fois ca foire.
J'ai googlé, rien trouvé :(
Mike
Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of the volume's sector size
Mickael Pointier
> Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of the volume's sector size
Vivi, déja vérifié, mais comme je le disait dans un message précédent, ca ne m'explique pas pourquoi ca marcherait pour les fichiers de moins de 64 megs :(
Mike
> Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu
vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of
the volume's sector size
Vivi, déja vérifié, mais comme je le disait dans un message précédent, ca ne
m'explique pas pourquoi ca marcherait pour les fichiers de moins de 64 megs
:(
> Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of the volume's sector size
Vivi, déja vérifié, mais comme je le disait dans un message précédent, ca ne m'explique pas pourquoi ca marcherait pour les fichiers de moins de 64 megs :(
Mike
AG
Mickael Pointier wrote:
Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of the volume's sector size
Vivi, déja vérifié, mais comme je le disait dans un message précédent, ca ne m'explique pas pourquoi ca marcherait pour les fichiers de moins de 64 megs :(
Mike
Dans les exemples de fichiers de moins de 64megs, tu aurais pu tomber sur des tailles de fichier multiples, alors que pour 64 megs ça ne serait justement pas multiple. Vu que je ne connait pas la taille de ton "volume's sector", je ne peux pouvait pas t'en dire plus sur la validité des autres tailles de fichier que tu as essayé (qu'elles soient plus petites ou non).
D'ailleurs, tu devrais essayer une taille plus grande que 64 mega, pour voir si c'est un problème de capacité ou simplement d'ajustement de la taille.
Alexandre.
Mickael Pointier wrote:
Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu
vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of
the volume's sector size
Vivi, déja vérifié, mais comme je le disait dans un message précédent, ca ne
m'explique pas pourquoi ca marcherait pour les fichiers de moins de 64 megs
:(
Mike
Dans les exemples de fichiers de moins de 64megs, tu aurais pu tomber
sur des tailles de fichier multiples, alors que pour 64 megs ça ne
serait justement pas multiple. Vu que je ne connait pas la taille de ton
"volume's sector", je ne peux pouvait pas t'en dire plus sur la validité
des autres tailles de fichier que tu as essayé (qu'elles soient plus
petites ou non).
D'ailleurs, tu devrais essayer une taille plus grande que 64 mega, pour
voir si c'est un problème de capacité ou simplement d'ajustement de la
taille.
Je ne sais pas quelle est la taille de ton "volume's sector" mais as-tu vérifié ça aussi :
File access must be for numbers of bytes that are integer multiples of the volume's sector size
Vivi, déja vérifié, mais comme je le disait dans un message précédent, ca ne m'explique pas pourquoi ca marcherait pour les fichiers de moins de 64 megs :(
Mike
Dans les exemples de fichiers de moins de 64megs, tu aurais pu tomber sur des tailles de fichier multiples, alors que pour 64 megs ça ne serait justement pas multiple. Vu que je ne connait pas la taille de ton "volume's sector", je ne peux pouvait pas t'en dire plus sur la validité des autres tailles de fichier que tu as essayé (qu'elles soient plus petites ou non).
D'ailleurs, tu devrais essayer une taille plus grande que 64 mega, pour voir si c'est un problème de capacité ou simplement d'ajustement de la taille.