code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING
Le code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING désactive la mise en cache en mémoire côté client local des données lors de la lecture ou de l’écriture de données dans un fichier distant. Il s’agit d’un code de contrôle défini en interne qui n’est pas disponible dans un en-tête public.
Pour effectuer cette opération, appelez la fonction DeviceIoControl avec les paramètres suivants.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device
IOCTL_LMR_DISABLE_LOCAL_BUFFERING, // dwIoControlCode
(LPVOID) NULL, // lpInBuffer
(DWORD) 0, // nInBufferSize
(LPVOID) NULL, // lpOutBuffer
(DWORD) 0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
Paramètres
-
hDevice [in]
-
Handle du fichier distant. Pour obtenir ce handle, appelez la fonction CreateFile .
-
dwIoControlCode [in]
-
Code de contrôle de l’opération. Utilisez la valeur 0x140390 pour cette opération.
-
lpInBuffer
-
Non utilisé, doit avoir la valeur NULL.
-
nInBufferSize [in]
-
Taille de la mémoire tampon d’entrée, en octets. Doit être zéro.
-
lpOutBuffer [out]
-
Non utilisé, doit avoir la valeur NULL.
-
nOutBufferSize [in]
-
Taille de la mémoire tampon de sortie en octets. Doit être zéro.
-
lpBytesReturned [out]
-
Pointeur vers une variable qui reçoit la taille des données stockées dans la mémoire tampon de sortie, en octets.
Si la mémoire tampon de sortie est trop petite, l’appel échoue, la fonction GetLastError retourne ERROR_INSUFFICIENT_BUFFER et lpBytesReturned est égal à zéro.
Si le paramètre lpOverlapped a la valeur NULL, lpBytesReturned ne peut pas être NULL. Même lorsqu’une opération ne retourne aucune donnée de sortie et que le paramètre lpOutBuffer a la valeur NULL, DeviceIoControl utilise lpBytesReturned. Après une telle opération, la valeur de lpBytesReturned est vide de sens.
Si lpOverlapped n’a pas la valeur NULL, lpBytesReturned peut avoir la valeur NULL. Si lpOverlapped n’a pas la valeur NULL et que l’opération retourne des données, lpBytesReturned n’a pas de sens tant que l’opération qui se chevauche n’est pas terminée. Pour récupérer le nombre d’octets retournés, appelez la fonction GetOverlappedResult . Si le paramètre hDevice est associé à un port d’achèvement d’E/S, vous pouvez récupérer le nombre d’octets retournés en appelant la fonction GetQueuedCompletionStatus .
-
lpOverlapped [in]
-
Pointeur vers une structure CHEVAUCHEMENT .
Si le paramètre hDevice a été ouvert sans spécifier FILE_FLAG_OVERLAPPED, lpOverlapped est ignoré.
Si hDevice a été ouvert avec l’indicateur FILE_FLAG_OVERLAPPED , l’opération est effectuée en tant qu’opération superposée (asynchrone). Dans ce cas, lpOverlapped doit pointer vers une structure CHEVAUCHEMENT VALIDE qui contient un handle vers un objet d’événement. Sinon, la fonction échoue de manière imprévisible.
Pour les opérations qui se chevauchent, DeviceIoControl retourne immédiatement et l’objet d’événement est signalé une fois l’opération terminée. Sinon, la fonction ne retourne pas tant que l’opération n’est pas terminée ou qu’une erreur ne se produit pas.
Valeur retournée
Si l’opération se termine correctement, DeviceIoControl retourne une valeur différente de zéro.
Si l’opération échoue ou est en attente, DeviceIoControl retourne zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Le code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING est défini en interne par le système comme 0x140390 et non dans un fichier d’en-tête public. Il est utilisé par des applications à usage spécial pour désactiver la mise en cache en mémoire côté client local des données lors de la lecture de données à partir d’un fichier distant ou de l’écriture de données dans un fichier distant. Une fois la mise en mémoire tampon locale désactivée, le paramètre reste en vigueur jusqu’à ce que tous les handles ouverts du fichier soient fermés et que le redirecteur nettoie ses structures de données internes.
Les applications à usage général ne doivent pas utiliser IOCTL_LMR_DISABLE_LOCAL_BUFFERING, car cela peut entraîner un trafic réseau excessif et des pertes de performances associées. Le code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING doit être utilisé uniquement dans les applications spécialisées qui déplacent de grandes quantités de données sur le réseau tout en tentant d’optimiser l’utilisation de la bande passante réseau. Par exemple, les fonctions CopyFile et CopyFileEx utilisent IOCTL_LMR_DISABLE_LOCAL_BUFFERING pour améliorer les performances de copie de fichiers volumineux.
IOCTL_LMR_DISABLE_LOCAL_BUFFERING n’est pas implémenté par les systèmes de fichiers locaux et échoue avec l’erreur ERROR_INVALID_FUNCTION. L’émission du code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING sur les handles de répertoire distant échoue avec l’erreur ERROR_NOT_SUPPORTED.
Voir aussi