Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Cria um novo diretório. Se o sistema de arquivos subjacente der suporte à segurança em arquivos e diretórios, a função aplicará um descritor de segurança especificado ao novo diretório.
Para especificar um diretório de modelo, use a função CreateDirectoryEx .
Para executar essa operação como uma operação transacionada, use a função CreateDirectoryTransacted .
Sintaxe
HANDLE CreateDirectory2A(
LPCSTR lpPathName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DIRECTORY_FLAGS DirectoryFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
Parâmetros
lpPathName
O caminho do diretório a ser criado.
Por padrão, o nome é limitado a MAX_PATH caracteres. Para estender esse limite para 32.767 caracteres de largura, acrescente "\\?\" ao caminho. Para obter mais informações, veja Naming Files, Paths, and Namespaces (Nomenclatura de Ficheiros, Caminhos e Espaços de Nomes).
Dica
Você pode aceitar para remover a limitação de MAX_PATH sem acrescentar "\\?\". Consulte a seção "Limitação máxima do comprimento do caminho" de Arquivos de Nomenclatura, Caminhos e Namespaces para obter detalhes.
dwDesiredAccess
O valor ACCESS_MASK que expressa o tipo de acesso que o chamador requer para o diretório. O conjunto de sinalizadores dwDesiredAccess definidos pelo sistema determina os seguintes objetos de arquivo de diretório de direitos de acesso específicos:
| Valor | Significado |
|---|---|
| FILE_LIST_DIRECTORY | Os arquivos no diretório podem ser listados. |
| FILE_TRAVERSE | O diretório pode ser percorrido: ou seja, pode fazer parte do nome do caminho de um arquivo. |
| SINCRONIZAR | O identificador retornado pode ser aguardado para sincronizar com a conclusão de uma operação de E/S. Se o identificador não tiver sido aberto para E/S síncrona, esse valor será ignorado. |
dwShareMode
O tipo de acesso de compartilhamento que o chamador gostaria de usar no arquivo, como zero, ou como um ou uma combinação dos seguintes valores:
| Valor | Significado |
|---|---|
00x00000000 |
Impede que outros processos abram um arquivo ou dispositivo se solicitarem acesso de exclusão, leitura ou gravação. |
FILE_SHARE_READ0x00000001 |
Permite que as operações abertas subsequentes em um arquivo ou dispositivo solicitem acesso de leitura. Caso contrário, outros processos não poderão abrir o arquivo ou o dispositivo se solicitarem acesso de leitura. Se esse sinalizador não for especificado, mas o arquivo ou dispositivo tiver sido aberto para acesso de leitura, a função falhará. |
FILE_SHARE_WRITE0x00000002 |
Habilita operações abertas subsequentes em um arquivo ou dispositivo para solicitar acesso de gravação. Caso contrário, outros processos não poderão abrir o arquivo ou o dispositivo se solicitarem acesso de gravação. Se esse sinalizador não for especificado, mas o arquivo ou dispositivo tiver sido aberto para acesso de gravação ou tiver um mapeamento de arquivo com acesso de gravação, a função falhará. |
FILE_SHARE_DELETE0x00000004 |
Habilita operações abertas subsequentes em um arquivo ou dispositivo para solicitar acesso de exclusão. Caso contrário, outros processos não poderão abrir o arquivo ou o dispositivo se solicitarem o acesso de exclusão. Se esse sinalizador não for especificado, mas o arquivo ou dispositivo tiver sido aberto para exclusão de acesso, a função falhará. Nota: Excluir o acesso permite operações de exclusão e renomeação. |
DirectoryFlags
Esse parâmetro pode conter combinações de DIRECTORY_FLAGS.
| Valor | Significado |
|---|---|
DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS0x00000001 |
Impedir que lpPathName seja redirecionado por pontos de nova análise ou links simbólicos. |
lpSecurityAttributes
Um ponteiro para uma estrutura SECURITY_ATTRIBUTES . O membro lpSecurityDescriptor da estrutura especifica um descritor de segurança para o novo diretório. Se lpSecurityAttributes for NULL, o diretório obterá um descritor de segurança padrão. As ACLs no descritor de segurança padrão para um diretório são herdadas de seu diretório pai.
O sistema de arquivos de destino deve dar suporte à segurança em arquivos e diretórios para que esse parâmetro tenha um efeito. (Isso é indicado quando GetVolumeInformation retorna FS_PERSISTENT_ACLS.)
Valor de retorno
Se a função for bem-sucedida, o valor retornado não será zero.
Se a função falhar, o valor retornado será INVALID_HANDLE_VALUE. Para obter informações de erro estendidas, chame GetLastError.
Os possíveis erros incluem o seguinte:
| Código de retorno | Descrição |
|---|---|
| ERROR_ALREADY_EXISTS | O diretório especificado já existe. |
| ERROR_PATH_NOT_FOUND | Um ou mais diretórios intermediários não existem; essa função criará apenas o diretório final no caminho. |
| ERROR_PATH_REDIRECTED | LpNewDirectory foi redirecionado por pontos de nova análise e/ou links simbólicos. |
Observações
Alguns sistemas de arquivos, como o sistema de arquivos NTFS, dão suporte à compactação ou criptografia para arquivos e diretórios individuais. Em volumes formatados para esse sistema de arquivos, um novo diretório herda os atributos de compactação e criptografia de seu diretório pai.
Um aplicativo pode obter um identificador para um diretório chamando CreateFile com o sinalizador FILE_FLAG_BACKUP_SEMANTICS definido. Para obter um exemplo de código, consulte CreateFile.
Para dar suporte a funções de herança que consultam o descritor de segurança desse objeto pode determinar heuristicamente e relatar que a herança está em vigor. Consulte Propagação Automática de ACEs Herdáveis para obter mais informações.
Essa função é compatível com as seguintes tecnologias:
| Tecnologia | Suportado |
|---|---|
| Protocolo SMB (Bloco de Mensagens do Servidor) 3.0 | Sim |
| TFO (Failover Transparente) do SMB 3.0 | Sim |
| SMB 3.0 com Compartilhamentos de Arquivos de Expansão (SO) | Sim |
| Sistema de Arquivos de Volume Compartilhado de Cluster (CsvFS) | Sim |
| ReFS (Sistema de Arquivos Resiliente) | Sim |
Observação
O fileapi.h cabeçalho define CreateDirectory2 como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.
Exemplos
O exemplo a seguir cria um novo diretório com a função CreateDirectory2 . O novo diretório é criado com os direitos de acesso FILE_LIST_DIRECTORY e SYNCHRONIZE . O novo diretório também é criado com o modo de compartilhamento FILE_SHARE_READ , que permite que outros processos abram o diretório para acesso de leitura.
// 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);
}
Para obter exemplos adicionais, consulte Recuperar e alterar atributos de arquivo.
Requisitos
| Requisito | Valor |
|---|---|
| de cliente com suporte mínimo | Windows 11 24H2 [aplicativos da área de trabalho | Aplicativos UWP] |
| servidor com suporte mínimo | Windows Server 2025 [aplicativos da área de trabalho | Aplicativos UWP] |
| cabeçalho | fileapi.h (inclua Windows.h) |
| Biblioteca | Kernel32.lib |
| de DLL | Kernel32.dll |