Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING désactive la mise en cache en mémoire locale côté client 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 non disponible dans un en-tête public.
Malgré la convention d’affectation de noms, ce code de contrôle est défini avec un type d’appareil de FILE_DEVICE_NETWORK_FILE_SYSTEM, ce qui en fait un code de contrôle de système de fichiers (FSCTL) plutôt qu’un code de contrôle d’E/S d’appareil (IOCTL). Vous devez l’envoyer à l’aide de NtFsControlFile plutôt que deviceIoControl. Le code de contrôle et les paramètres sont documentés ci-dessous à l’aide de la convention DeviceIoControl pour référence.
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
);
Parameters
-
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 être NULL.
-
nInBufferSize [in]
-
Taille de la mémoire tampon d’entrée, en octets. Doit être zéro.
-
lpOutBuffer [out]
-
Non utilisé, doit être 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 est NULL, DeviceIoControl utilise lpBytesReturned. Après une telle opération, la valeur de lpBytesReturned est sans signification.
Si lpOverlapped n’est pas NULL, lpBytesReturned peut être NULL. Si lpOverlapped n’est pas NULL et que l’opération retourne des données, lpBytesReturned n’a pas de signification jusqu’à ce que l’opération se chevauche. 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 QUI SE CHEVAUCHE .
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 SE CHEVAUCHER valide qui contient un handle vers un objet événement. Sinon, la fonction échoue de manière imprévisible.
Pour les opérations superposées, 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 se produit.
Valeur renvoyée
L’appel de DeviceIoControl avec ce code de contrôle retourne toujours un échec, car il s’agit d’un FSCTL, et non d’un IOCTL. Utilisez plutôt NtFsControlFile . NtFsControlFile retourne une valeur NTSTATUS ; STATUS_SUCCESS indique que l’opération s’est terminée correctement.
Remarks
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 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 elles peuvent entraîner un trafic réseau excessif et une perte de performances associée. 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 essayant 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 volumineuses.
IOCTL_LMR_DISABLE_LOCAL_BUFFERING n’est pas implémentée par les systèmes de fichiers locaux et échoue avec la ERROR_INVALID_FUNCTION d’erreur. L’émission du code de contrôle IOCTL_LMR_DISABLE_LOCAL_BUFFERING sur les handles d’annuaire distant échoue avec l’erreur ERROR_NOT_SUPPORTED.
Voir aussi