Fonction ZwFsControlFile (ntifs.h)
La routine ZwFsControlFile envoie un code de contrôle directement à un système de fichiers ou un pilote de filtre de système de fichiers spécifié, ce qui entraîne l’exécution de l’action spécifiée par le pilote correspondant.
Syntaxe
NTSYSAPI NTSTATUS ZwFsControlFile(
[in] HANDLE FileHandle,
[in, optional] HANDLE Event,
[in, optional] PIO_APC_ROUTINE ApcRoutine,
[in, optional] PVOID ApcContext,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG FsControlCode,
[in, optional] PVOID InputBuffer,
[in] ULONG InputBufferLength,
[out, optional] PVOID OutputBuffer,
[in] ULONG OutputBufferLength
);
Paramètres
[in] FileHandle
Handle retourné par ZwCreateFile ou ZwOpenFile pour l’objet de fichier représentant le fichier ou le répertoire sur lequel l’action spécifiée doit être effectuée. L’objet file doit avoir été ouvert pour les E/S asynchrones si l’appelant spécifie un event, ApcRoutine et un contexte APC (dans ApcContext) ou un contexte d’achèvement (dans ApcContext).
[in, optional] Event
Handle pour un événement créé par l’appelant. Si ce paramètre est fourni, l’appelant est placé dans un état d’attente jusqu’à ce que l’opération demandée soit terminée et que l’événement donné soit défini sur l’état Signaled. Ce paramètre est facultatif et peut être NULL. Elle doit être NULL si l’appelant attend que fileHandle soit défini sur l’état Signaled.
[in, optional] ApcRoutine
Adresse d’une routine APC fournie par l’appelant à appeler une fois l’opération demandée terminée. Ce paramètre est facultatif et peut être NULL. Il doit être NULL s’il existe un objet d’achèvement d’E/S associé à l’objet fichier.
[in, optional] ApcContext
Pointeur vers une zone de contexte déterminée par l’appelant. Cette valeur de paramètre est utilisée comme contexte APC si l’appelant fournit un APC, ou est utilisée comme contexte d’achèvement si un objet d’achèvement d’E/S a été associé à l’objet fichier. Une fois l’opération terminée, soit le contexte APC est passé à l’APC, le cas échéant, soit le contexte d’achèvement est inclus dans le message d’achèvement que le Gestionnaire d’E/S publie sur l’objet d’achèvement d’E/S associé.
Ce paramètre est facultatif et peut être NULL. Elle doit être NULL si ApcRoutine a la valeur NULL et qu’aucun objet d’achèvement d’E/S n’est associé à l’objet fichier.
[out] IoStatusBlock
Pointeur vers une structure de IO_STATUS_BLOCK qui reçoit le status d’achèvement final et des informations sur l’opération. Pour les appels réussis qui retournent des données, le nombre d’octets écrits dans OutputBuffer est retourné dans le membre Information de cette structure.
[in] FsControlCode
FSCTL_ codeXXX qui indique l’opération de contrôle du système de fichiers à effectuer. La valeur de ce paramètre détermine les formats et les longueurs requises pour InputBuffer et OutputBuffer, ainsi que les paires de paramètres suivantes qui sont requises. Pour plus d’informations sur les codes FSCTL_XXX définis par le système, consultez la section « Remarques » de l’entrée de référence pour DeviceIoControl dans la documentation Microsoft Windows SDK.
[in, optional] InputBuffer
Pointeur vers une mémoire tampon d’entrée allouée à l’appelant qui contient des informations spécifiques à l’appareil à donner au pilote cible. Si FsControlCode spécifie une opération qui ne nécessite pas de données d’entrée, ce pointeur est facultatif et peut être NULL.
[in] InputBufferLength
Taille, en octets, de la mémoire tampon sur InputBuffer. Cette valeur est ignorée si InputBuffer a la valeur NULL.
[out, optional] OutputBuffer
Pointeur vers une mémoire tampon de sortie allouée à l’appelant dans laquelle les informations sont retournées à partir du pilote cible. Si FsControlCode spécifie une opération qui ne produit pas de données de sortie, ce pointeur est facultatif et peut avoir la valeur NULL.
[in] OutputBufferLength
Taille, en octets, de la mémoire tampon dans OutputBuffer. Cette valeur est ignorée si OutputBuffer a la valeur NULL.
Valeur retournée
ZwFsControlFile retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, par exemple :
Remarques
ZwFsControlFile fournit une vue cohérente des données d’entrée et de sortie pour le système et les pilotes en mode noyau, tout en fournissant aux applications et aux pilotes sous-jacents une méthode dépendante du pilote pour spécifier une interface de communication.
Si l’appelant a ouvert le fichier pour les E/S asynchrones (sans FILE_SYNCHRONOUS_XXX create/open option set), l’événement spécifié, le cas échéant, est défini à l’état signalé une fois l’opération de contrôle de l’appareil terminée. Sinon, l’objet de fichier spécifié par FileHandle sera défini à l’état signalé. Si un ApcRoutine a été spécifié, il est appelé avec les pointeurs ApcContext et IoStatusBlock .
Les codes FSCTL suivants sont actuellement documentés pour les pilotes en mode noyau :
FSCTL_OPBATCH_ACK_CLOSE_PENDING
FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
Pour plus d’informations sur les codes FSCTL_XXX définis par le système, consultez la section « Remarques » de l’entrée de référence pour DeviceIoControl dans la documentation Microsoft Windows SDK.
Pour plus d’informations sur les codes IOCTL_XXX définis par le système et sur la définition de valeurs IOCTL_XXX ou FSCTL_XXX spécifiques au pilote, consultez Utilisation de codes de contrôle d’E/S dans le Guide de l’architecture du mode noyau et Codes de contrôle d’entrée et de sortie des appareils dans la documentation du Kit de développement logiciel (SDK) Windows.
Les minifiltres doivent utiliser FltFsControlFile au lieu de ZwFsControlFile.
Les appelants de ZwFsControlFile doivent être en cours d’exécution à IRQL = PASSIVE_LEVEL et avec des API de noyau spéciales activées.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000. |
Plateforme cible | Universal |
En-tête | ntifs.h (inclure Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (voir la section Remarques) |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport),PowerIrpDDis(wdm) |
Voir aussi
Utilisation de codes de contrôle d’E/S
Utilisation des versions Nt et Zw des routines natives des services système natifs