Partager via


CreateDirectory2A, fonction (fileapi.h)

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 CreateDirectory2A(
  LPCSTR                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
0
0x00000000
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_READ
0x00000001
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_WRITE
0x00000002
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_DELETE
0x00000004
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_REDIRECTS
0x00000001
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 INVALID_HANDLE_VALUE. 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.
ERROR_PATH_REDIRECTED lpNewDirectory a été redirigé par des points d’analyse et/ou des liens symboliques.

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

Voir aussi

CreateFile3

DeleteFile2

RemoveDirectory2