A directory is a hierarchical collection of directories and files. The only constraint on the number of files that can be contained in a single directory is the physical size of the disk on which the directory is located. A directory that contains one or more directories is the parent of the contained directory or directories, and each contained directory is a child of the parent directory. The hierarchical structure of directories is referred to as a directory tree. The NTFS file system implements the logical link between a directory and the files it contains as a directory entry table. When a file is moved into a directory, an entry is created in the table for the moved file and the name of the file is placed in the entry. When a file contained in a directory is deleted, the name and entry corresponding to the deleted file is also deleted from the table. More than one entry for a single file can exist in a directory entry table. If an additional entry is created in the table for a file, that entry is referred to as a hard link to that file. There is no limit to the number of hard links that can be created for a single file. Directories can also contain junctions and reparse points.
Creating and Deleting Directories
An application can programmatically create and delete directories. To create a new directory, use the CreateDirectory(), CreateDirectoryEx(), or CreateDirectoryTransacted() function. A directory is given the name specified when it is created. The conventions for naming a directory follow the conventions for naming a file. To delete an existing directory, use the RemoveDirectory() or RemoveDirectoryTransacted() function. Before removing a directory, you must ensure that the directory is empty and that you have the delete access privilege for the directory. To do the latter, call the GetSecurityInfo() function.
Whenever a process creates or opens a directory object, it receives a handle to the object. To obtain a handle to an existing directory, call the CreateFile() function with the FILE_FLAG_BACKUP_SEMANTICS flag. You can pass a directory handle to the following functions: