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.
Crée un répertoire. Si le système de fichiers sous-jacent prend en charge la sécurité sur les fichiers et les répertoires, la fonction applique un descripteur de sécurité spécifié au nouveau répertoire.
Pour spécifier un répertoire de modèle, utilisez la fonction CreateDirectoryEx .
Pour effectuer cette opération en tant qu’opération transactionnelle, utilisez la fonction CreateDirectoryTransacted .
Syntaxe
HANDLE CreateDirectory2W(
LPCWSTR lpPathName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DIRECTORY_FLAGS DirectoryFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
Paramètres
lpPathName
Chemin d’accès du répertoire à créer.
Par défaut, le nom est limité à MAX_PATH caractères. Pour étendre cette limite à 32 767 caractères larges, ajoutez « \\ ?\ » au chemin d’accès. Pour plus d’informations, consultez Nommage des fichiers, des chemins et des espaces de noms.
Conseil / Astuce
Vous pouvez choisir de supprimer la limitation MAX_PATH sans précéder « \\ ?\ ». Pour plus d’informations, consultez la section « Limite maximale de longueur du chemin d’accès » des fichiers, des chemins d’accès et des espaces de noms .
dwDesiredAccess
Valeur ACCESS_MASK qui exprime le type d’accès requis par l’appelant au répertoire. L’ensemble d’indicateurs dwDesiredAccess définis par le système détermine les objets de fichier de fichiers de répertoire de droits d’accès spécifiques suivants :
| Valeur | Sens |
|---|---|
| FILE_LIST_DIRECTORY | Les fichiers du répertoire peuvent être répertoriés. |
| FILE_TRAVERSE | Le répertoire peut être parcouru : autrement dit, il peut faire partie du chemin d’accès d’un fichier. |
| SYNCHRONISER | Le handle retourné peut être attendu pour se synchroniser avec l’achèvement d’une opération d’E/S. Si le handle n’a pas été ouvert pour les E/S synchrones, cette valeur est ignorée. |
dwShareMode
Type d’accès de partage que l’appelant souhaite utiliser dans le fichier, comme zéro, ou comme une ou une combinaison des valeurs suivantes :
| Valeur | Sens |
|---|---|
00x00000000 |
Empêche d’autres processus d’ouvrir un fichier ou un appareil s’ils demandent l’accès en suppression, en lecture ou en écriture. |
FILE_SHARE_READ0x00000001 |
Active les opérations d’ouverture suivantes sur un fichier ou un appareil pour demander l’accès en lecture. Sinon, d’autres processus ne peuvent pas ouvrir le fichier ou l’appareil s’ils demandent l’accès en lecture. Si cet indicateur n’est pas spécifié, mais que le fichier ou l’appareil a été ouvert pour l’accès en lecture, la fonction échoue. |
FILE_SHARE_WRITE0x00000002 |
Active les opérations d’ouverture suivantes sur un fichier ou un appareil pour demander l’accès en écriture. Sinon, d’autres processus ne peuvent pas ouvrir le fichier ou l’appareil s’ils demandent l’accès en écriture. Si cet indicateur n’est pas spécifié, mais que le fichier ou l’appareil a été ouvert pour l’accès en écriture ou a un mappage de fichiers avec accès en écriture, la fonction échoue. |
FILE_SHARE_DELETE0x00000004 |
Active les opérations d’ouverture suivantes sur un fichier ou un appareil pour demander l’accès à la suppression. Sinon, d’autres processus ne peuvent pas ouvrir le fichier ou l’appareil s’ils demandent l’accès à la suppression. Si cet indicateur n’est pas spécifié, mais que le fichier ou l’appareil a été ouvert pour supprimer l’accès, la fonction échoue. Note: L’accès à la suppression autorise les opérations de suppression et de renommage. |
DirectoryFlags
Ce paramètre peut contenir des combinaisons de DIRECTORY_FLAGS.
| Valeur | Sens |
|---|---|
DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS0x00000001 |
Empêchez lpPathName d’être redirigé par des points d’analyse ou des liens symboliques. |
lpSecurityAttributes
Pointeur vers une structure SECURITY_ATTRIBUTES . Le membre lpSecurityDescriptor de la structure spécifie un descripteur de sécurité pour le nouveau répertoire. Si lpSecurityAttributes est NULL, le répertoire obtient un descripteur de sécurité par défaut. Les listes de contrôle d’accès dans le descripteur de sécurité par défaut d’un répertoire sont héritées de son répertoire parent.
Le système de fichiers cible doit prendre en charge la sécurité sur les fichiers et les répertoires pour que ce paramètre ait un effet. (Cela est indiqué lorsque GetVolumeInformation retourne FS_PERSISTENT_ACLS.)
Valeur de retour
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.
Les erreurs possibles sont les suivantes :
| Code de retour | Descriptif |
|---|---|
| ERROR_ALREADY_EXISTS | Le répertoire spécifié existe déjà. |
| ERROR_PATH_NOT_FOUND | Un ou plusieurs répertoires intermédiaires n’existent pas ; cette fonction crée uniquement le répertoire final dans le chemin d’accès. |
Remarques
Certains systèmes de fichiers, tels que le système de fichiers NTFS, prennent en charge la compression ou le chiffrement des fichiers et répertoires individuels. Sur les volumes mis en forme pour un tel système de fichiers, un nouveau répertoire hérite des attributs de compression et de chiffrement de son répertoire parent.
Une application peut obtenir un handle dans un répertoire en appelant CreateFile avec l’indicateur FILE_FLAG_BACKUP_SEMANTICS défini. Pour obtenir un exemple de code, consultez CreateFile.
Pour prendre en charge les fonctions d’héritage qui interrogent le descripteur de sécurité de cet objet peuvent heuristiquement déterminer et signaler que l’héritage est en vigueur. Pour plus d’informations, consultez Propagation automatique des AE héritantes .
Cette fonction est prise en charge par les technologies suivantes :
| Technologie | Soutenu |
|---|---|
| Protocole SMB (Server Message Block) 3.0 | Oui |
| Basculement transparent SMB 3.0 (TFO) | Oui |
| SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) | Oui |
| Système de fichiers de volume partagé de cluster (CsvFS) | Oui |
| Système de fichiers résilient (ReFS) | Oui |
Remarque
L’en-tête fileapi.h définit CreateDirectory2 comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Exemples
L’exemple suivant crée un répertoire avec la fonction CreateDirectory2 . Le nouveau répertoire est créé avec les droits d’accès FILE_LIST_DIRECTORY et SYNCHRONIZE . Le nouveau répertoire est également créé avec le mode de partage FILE_SHARE_READ , ce qui permet à d’autres processus d’ouvrir le répertoire pour l’accès en lecture.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) Microsoft. All rights reserved
#include <Windows.h>
#include <stdio.h>
#include <strsafe.h>
int main(int argc, wchar_t* argv[])
{
WCHAR filePath[MAX_PATH] = { 0 };
// Create a directory to put a file into, that can't be deleted
// and redirected before this handle is closed.
HANDLE hDirectory = CreateDirectory2(argv[1],
FILE_LIST_DIRECTORY | SYNCHRONIZE,
FILE_SHARE_READ,
DIRECTORY_FLAGS_NONE,
NULL,
NULL);
if (hDirectory == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf("CreateDirectory2 failed (%d)\n", GetLastError());
return (1);
}
StringCchPrintf(filePath,
ARRAYSIZE(filePath),
L"%ws\\example.test",
argv[1]);
HANDLE hFile = CreateFile3(filePath,
GENERIC_ALL,
FILE_SHARE_READ,
CREATE_ALWAYS,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// Handle the error.
CloseHandle(hDirectory);
printf("CreateFile3 failed (%d)\n", GetLastError());
return (1);
}
CloseHandle(hFile);
CloseHandle(hDirectory);
return (0);
}
Pour obtenir des exemples supplémentaires, consultez Récupération et modification des attributs de fichier.
Spécifications
| Besoin | Valeur |
|---|---|
| client minimum pris en charge | Windows 11 24H2 [applications de bureau | Applications UWP] |
| serveur minimum pris en charge | Windows Server 2025 [applications de bureau | Applications UWP] |
| En-tête | fileapi.h (inclut Windows.h) |
| Bibliothèque | Kernel32.lib |
| DLL | Kernel32.dll |