Comment utiliser la réservation de bande passante de fichier (fichier IO planifié) dans Windows

Je dois implémenter une application qui diffuse des données à partir du disque. Il est important que le débit des données soit relativement constant et ne soit interrompu par aucune autre activité sur le disque.

À partir de Windows Vista, les fonctions GetFileBandwidthReservation () et SetFileBandwidthReservation () ont été introduites spécifiquement à cet effet. Cependant, je ne peux pas faire fonctionner cela. J’ai cherché sur Internet mais je ne trouve pas beaucoup d’informations à ce sujet (et aucun exemple de code de travail ne semble exister en ligne).

Code à reproduire:

HANDLE h = ::CreateFile(L"D:\\testfile", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN, NULL); DWORD periodMilliseconds, bytesPerPeriod, transferSize, numOutstandingRequests; BOOL discardable; BOOL result = ::GetFileBandwidthReservation(h, &periodMilliseconds, &bytesPerPeriod, &discardable, &transferSize, &numOutstandingRequests); if (result == FALSE) // result is always false! { DWORD reason = ::GetLastError(); // reason is always 1! std::cout << "Error: " << reason << std::endl; } result = ::CloseHandle(h); 

L’appel à GetFileBandwidthReservation renvoie toujours FALSE, ce qui indique un échec. GetLastError renvoie 1, ce qui n’est pas très utile. Si une tentative d’invoquer * Set * FileBandwithReservation, j’obtiens le même résultat.

Je teste cela sur un PC avec Windows Server 2008 SP2 (32 bits).

Est-ce que quelqu’un a une idée de ce que je fais mal? Toute aide est la bienvenue.

Cela nécessite la prise en charge du pilote de périphérique de disque. Le type de pilote que vous trouvez dans un serveur haut de gamme, pas dans une machine de niveau consommateur. Posez d’autres questions à ce sujet sur serverfault.com