Fonction ClfsCreateLogFile (wdm.h)
La routine ClfsCreateLogFile crée ou ouvre un flux CLFS. Si nécessaire, ClfsCreateLogFile crée également le journal physique sous-jacent qui contient les enregistrements du flux.
Syntaxe
CLFSUSER_API NTSTATUS ClfsCreateLogFile(
[out] PPLOG_FILE_OBJECT pplfoLog,
[in] PUNICODE_STRING puszLogFileName,
[in] ACCESS_MASK fDesiredAccess,
[in] ULONG dwShareMode,
[in, optional] PSECURITY_DESCRIPTOR psdLogFile,
[in] ULONG fCreateDisposition,
[in] ULONG fCreateOptions,
[in] ULONG fFlagsAndAttributes,
[in] ULONG fLogOptionFlag,
[in, optional] PVOID pvContext,
[in] ULONG cbContext
);
Paramètres
[out] pplfoLog
Pointeur vers une variable qui reçoit un pointeur vers une structure LOG_FILE_OBJECT qui représente une instance ouverte du flux.
[in] puszLogFileName
Pointeur vers une structure UNICODE_STRING qui fournit le nom du flux ou le journal physique sous-jacent.
Si le flux existe déjà et qu’il s’agit du seul flux d’un journal dédié, le nom a la forme log :nom du journal physique, où nom du journal physique est le nom du chemin d’accès, sur le système de fichiers sous-jacent, du journal physique existant qui contient les enregistrements du flux.
Si le flux n’existe pas déjà et doit devenir le seul flux d’un journal dédié (qui n’existe pas encore), le nom a la forme log :nom du journal physique, où nom du journal physique est le nom du chemin d’accès, sur le système de fichiers sous-jacent, du journal physique qui sera créé pour contenir les enregistrements du flux.
Si le flux est (ou doit devenir) l’un des flux d’un journal multiplexé, le nom a la forme log :physical log name ::stream, où nom du journal physique est le nom du chemin d’accès, sur le système de fichiers sous-jacent, du journal physique qui contient les enregistrements du flux, et le nom du flux est le nom d’un flux qui partage (ou partagera) ce journal physique.
Si vous souhaitez créer un journal multiplexé qui n’a pas de flux pour le moment, utilisez un nom au format log :physical log name ::, où nom du journal physique est le nom du chemin d’accès, sur le système de fichiers sous-jacent, du journal physique à créer.
La liste suivante fournit quelques exemples de noms valides.
- « Log :c :\myLog » crée ou ouvre un journal dédié et son flux unique.
- « Log :c :\myCommonLog :: » crée un journal multiplexé qui n’a pas encore de flux.
- « Log :c :\myCommonLog ::Stream1 » crée ou ouvre l’un des flux (Stream1) d’un journal multiplexé.
[in] fDesiredAccess
Une ACCESS_MASK qui fournit le type d’accès du client (à l’aide du pointeur retourné dans pplfoLog) au flux. Si ce paramètre est égal à zéro, les clients peuvent interroger le flux pour ses attributs, mais ne peuvent pas lire ou écrire dans le flux. Ce paramètre peut être zéro ou n’importe quelle combinaison des indicateurs suivants :
Indicateur | Signification |
---|---|
GENERIC_READ | Le client dispose d’un accès en lecture au flux. |
GENERIC_WRITE | Le client dispose d’un accès en écriture au flux. |
Suppression | Le client peut marquer le flux pour suppression. |
[in] dwShareMode
Mode de partage du flux, qui peut être zéro (non partagé) ou toute combinaison des indicateurs suivants :
Indicateur | Signification |
---|---|
FILE_SHARE_DELETE | Les demandes suivantes d’ouverture du flux avec accès de suppression réussissent. |
FILE_SHARE_READ | Les demandes suivantes d’ouverture du flux avec accès en lecture réussissent. |
FILE_SHARE_WRITE | Les demandes suivantes d’ouverture du flux avec accès en écriture réussissent. |
[in, optional] psdLogFile
Pointeur vers une structure SECURITY_DESCRIPTOR qui fournit des attributs de sécurité pour le flux. Ce paramètre peut être NULL.
[in] fCreateDisposition
L’action à effectuer dépend de l’existence ou non du flux. Ce paramètre doit être défini sur l’une des valeurs suivantes :
Valeur | Signification |
---|---|
CREATE_NEW | Créez un flux si le flux ne se ferme pas déjà. Échec si le flux existe déjà. |
OPEN_EXISTING | Ouvrez un flux existant. Échec si le flux n’existe pas déjà. |
OPEN_ALWAYS | Ouvrez un flux existant. Créez le flux s’il n’existe pas déjà. |
[in] fCreateOptions
Ensemble d’indicateurs qui spécifient des options à appliquer lors de la création ou de l’ouverture du flux. Ce paramètre peut être égal à zéro ou à une combinaison compatible des indicateurs suivants :
Indicateur | Signification |
---|---|
FILE_NO_INTERMEDIATE_BUFFERING | Les enregistrements du flux ne peuvent pas être mis en cache dans les mémoires tampons internes d’un pilote. |
FILE_SYNCHRONOUS_IO_ALERT | Toutes les opérations sur le flux sont effectuées de manière synchrone. Toute attente de la part de l’appelant est sujette à l’arrêt prématuré des alertes. Si cet indicateur est défini, l’indicateur FILE_SYNCHRONOUS_IO_NONALERT doit être effacé. |
FILE_SYNCHRONOUS_IO_NONALERT | Toutes les opérations sur le flux sont effectuées de manière synchrone. Les attentes dans le système qui synchronisent la file d’attente d’E/S et l’achèvement ne font pas l’objet d’alertes. Si cet indicateur est défini, l’indicateur FILE_SYNCHRONOUS_IO_ALERT doit être effacé. |
[in] fFlagsAndAttributes
Valeur qui spécifie si le flux est ouvert pour un accès normal ou en lecture seule. Ce paramètre doit être défini sur
FILE_ATTRIBUTE_NORMAL ou FILE_ATTRIBUTE_READONLY.
[in] fLogOptionFlag
Indicateur de la relation entre CLFS et le composant qui crée ou ouvre le flux. Ce paramètre doit être défini sur l’une des valeurs suivantes :
Valeur | Signification |
---|---|
CLFS_FLAG_NO_FLAGS | CLFS et le composant de création ont la relation standard et normale. Les composants en mode noyau utilisent cette valeur, sauf s’ils appartiennent à l’une des trois autres catégories répertoriées dans ce tableau. Si pvContext n’a pas la valeur NULL, CLFS vérifie que cbContext est supérieur à zéro. Sinon, pvContext et cbContext sont ignorés. |
CLFS_FLAG_REENTRANT_FILE_SYSTEM | Le composant de création est le système de fichiers qui fournit le stockage sous-jacent pour CLFS. CLFS utilise le système de fichiers pour l’allocation des conteneurs, et le système de fichiers utilise des flux CLFS. Dans ce cas, il est possible pour le système de fichiers d’appeler CLFS et pour CLFS d’effectuer des appels dans le système de fichiers sur le même thread ou des threads différents. Si pvContext n’a pas la valeur NULL, CLFS vérifie que cbContext est supérieur à zéro. Sinon, pvContext et cbContext sont ignorés. |
CLFS_FLAG_NON_REENTRANT_FILTER | Le composant de création est un pilote de filtre de système de fichiers qui envoie toutes ses E/S CLFS à un niveau spécifié sous lui-même sur la pile de filtres. Cette option permet à un pilote de filtre de créer un journal CLFS sans voir ses propres E/S de journalisation. L’appelant transmet l’objet d’appareil cible non NULL dans le paramètre pvContext avec cbContext défini sur la taille appropriée. CLFS utilise la routine IoCreateFileSpecifyDeviceObjectHint pour créer des conteneurs à un niveau ciblé dans la pile de filtres d’E/S spécifiée par l’objet d’appareil. |
CLFS_FLAG_REENTRANT_FILTER | Le composant de création est un pilote de filtre de système de fichiers qui envoie toutes ses E/S CLFS en haut de la pile de filtres. Le filtre a une relation récursive avec CLFS, car il filtre ses propres E/S de journalisation lorsque CLFS effectue une opération de système de fichiers sur ses conteneurs. Le paramètre pvContext permet aux filtres d’associer un contexte reconnaissable à ses conteneurs CLFS à mesure que les E/S du journal descendent de la pile de filtres. Le paramètre cbContext spécifie la taille du contexte opaque en octets. |
CLFS_FLAG_MINIFILTER_LEVEL | Le composant de création est un pilote de minifiltre de système de fichiers qui envoie toutes ses E/S CLFS à un niveau spécifié sous lui-même sur la pile de filtres. Cette option permet à un minifiltre de créer un journal CLFS sans voir ses propres E/S de journalisation. L’appelant transmet l’objet de contexte minifilter non NULL dans le paramètre pvContext avec cbContext défini sur la taille appropriée. CLFS utilise la routine IoCreateFileSpecifyDeviceObjectHint pour créer des conteneurs à une altitude (spécifiée dans le contexte de minifiltre) dans la pile de minifiltres du gestionnaire de filtres. |
[in, optional] pvContext
Pointeur vers un contexte. La façon dont le contexte est interprété dépend de la valeur passée à fLogOptionsFlag.
[in] cbContext
Taille, en octets, du contexte pointé par pvContext. Si pvContext n’a pas la valeur NULL, ce paramètre doit être supérieur à zéro.
Valeur retournée
ClfsCreateLogFile retourne STATUS_SUCCESS si elle réussit ; sinon, elle retourne l’un des codes d’erreur définis dans Ntstatus.h.
Remarques
Lorsque vous créez un flux CLFS, il est soutenu par un journal CLFS physique sous-jacent. Le journal sous-jacent peut être dédié (ne sauvegarde qu’un seul flux) ou multiplexé (sauvegarde de plusieurs flux). Un journal dédié ne peut pas être converti en journal multiplexé et un journal multiplexé ne peut pas être converti en journal dédié.
Un nom de journal CLFS physique n’inclut pas l’extension .blf.
Pour obtenir une explication des concepts et de la terminologie CLFS, consultez Common Log File System.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows Server 2003 R2, Windows Vista et versions ultérieures de Windows. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (include Wdm.h) |
Bibliothèque | Clfs.lib |
DLL | Clfs.sys |
IRQL | <= APC_LEVEL |